AI幻觉治理实战:从“凭空捏造”到“合规拦截”

用户问“这只股票估值怎么样”,AI回答得头头是道,但数据全是编的。这就是AI幻觉——大模型最让人头疼的问题,尤其是在金融场景下,幻觉=合规风险。

背景

灵析AI投顾助手有一个“追问助手”功能,用户可以在诊断报告底部追问任何问题。上线后测试发现,当用户问到模型没有覆盖的股票或指标时,LLM会“一本正经地胡说八道”——编造PE/PB数据、虚构历史走势。

坑:AI幻觉——凭空捏造估值

表象: 用户追问“XX股票的PE是多少”,模型返回了一个不存在的数值,看起来还挺合理。

根本原因: LLM不知道自己的知识边界在哪里。它被训练成“必须回答用户的问题”,当没有真实数据时,它会基于训练数据“编”一个看起来合理的答案。

解决方案:规则引擎前置拦截

核心思路:不让LLM有机会回答它不知道的问题。

第一步:建立禁止词库

python
FORBIDDEN_PATTERNS = [
    r'(什么|哪个)股票',      # 询问具体股票
    r'(多少|什么)价格',      # 询问具体价格
    r'预测.*涨跌',          # 预测走势
    r'推荐.*买',           # 推荐买入
    r'PE.*多少',           # 询问具体PE值
    r'估值.*多少',          # 询问具体估值
]

第二步:前置拦截逻辑

python
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返回后,再跑一遍规则引擎,检查输出是否包含违规内容:

python
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本身不会主动说“我不知道”,所以产品层必须帮它补上这个能力。

posted @ 2026-06-26 16:40  竹雨禅月  阅读(18)  评论(0)    收藏  举报