AI幻觉治理实战:从“凭空捏造”到“合规拦截”
用户问“这只股票估值怎么样”,AI回答得头头是道,但数据全是编的。这就是AI幻觉——大模型最让人头疼的问题,尤其是在金融场景下,幻觉=合规风险。
背景
灵析AI投顾助手有一个“追问助手”功能,用户可以在诊断报告底部追问任何问题。上线后测试发现,当用户问到模型没有覆盖的股票或指标时,LLM会“一本正经地胡说八道”——编造PE/PB数据、虚构历史走势。
坑:AI幻觉——凭空捏造估值
表象: 用户追问“XX股票的PE是多少”,模型返回了一个不存在的数值,看起来还挺合理。
根本原因: LLM不知道自己的知识边界在哪里。它被训练成“必须回答用户的问题”,当没有真实数据时,它会基于训练数据“编”一个看起来合理的答案。
解决方案:规则引擎前置拦截
核心思路:不让LLM有机会回答它不知道的问题。
第一步:建立禁止词库
FORBIDDEN_PATTERNS = [
r'(什么|哪个)股票', # 询问具体股票
r'(多少|什么)价格', # 询问具体价格
r'预测.*涨跌', # 预测走势
r'推荐.*买', # 推荐买入
r'PE.*多少', # 询问具体PE值
r'估值.*多少', # 询问具体估值
]
第二步:前置拦截逻辑
def chat_with_guardrails(user_question):
# 1. 先过规则引擎
for pattern in FORBIDDEN_PATTERNS:
if re.search(pattern, user_question):
return {
"answer": "💡 您好,我目前只支持基于您已诊断持仓的追问,暂不支持查询具体股票数据。您可以在诊断报告中查看已有分析结果。",
"blocked": True
}
# 2. 合规拦截通过,才调LLM
response = call_llm(user_question)
return {"answer": response, "blocked": False}
第三步:AI输出二次校验
LLM返回后,再跑一遍规则引擎,检查输出是否包含违规内容:
def validate_llm_output(response_text):
for pattern in FORBIDDEN_PATTERNS:
if re.search(pattern, response_text):
# 发现违规输出,用兜底回复替换
return "💡 抱歉,我无法提供具体的投资建议。建议您参考诊断报告中的详细分析数据。"
return response_text
效果
-
违规问询拦截率100%(命中禁止词直接拦截,不调LLM)
-
AI幻觉输出归零(LLM根本没有机会编造数据)
-
用户满意度提升(用户收到的都是可控、合规的回复)
踩坑总结
治理AI幻觉的核心不是“让模型更准”,而是“不让模型回答它不知道的问题”。在金融场景下,知识边界管理比模型能力提升更重要。LLM本身不会主动说“我不知道”,所以产品层必须帮它补上这个能力。

浙公网安备 33010602011771号