从代码到产品:遇到的第二个坑:AI幻觉
在灵析项目里,我加了一个追问助手。就是用户看完持仓诊断后,可以在底部追问:“茅台现在估值合理吗?”
看起来很简单对吧?结果第一天测试就被用户(其实就是我自己)问破防了。我问:“茅台能买吗?”助手回答:“茅台目前PE处于历史低位,是较好的买入时机。”
我当场血压就上来了。金融产品里出现“买入时机”四个字,监管能把我罚到倾家荡产。
这不是助手想害我,是它不懂金融合规的边界在哪。它能回答是因为DeepSeek确实有这个能力,但那个能力不应该在这个场景里出现。
解决:
一开始,想让大模型自己学会拒绝回答。改Prompt,在指令里写“不允许给出买卖建议”。结果稍微好了一点,但用户换个说法,比如“现在入手合适吗”,它又开始给建议了。Prompt挡不住这种变体,所以要在用户的问题进入大模型之前就把它拦住。
所以我加了一个规则引擎。
说白了就是提前准备好一份敏感词列表,用户发送问题之前先过一遍,命中任何一个词就直接拦截,连DeepSeek都不调用。列表里放的词不多,覆盖了最明显的:“荐股”、“能买吗”、“能卖吗”、“保证收益”、“涨停”、“抄底”。
效果立竿见影。我再问“茅台能买吗”,规则引擎直接拦截,前端显示“该问题已被合规规则拦截”,后台数据库里多了一条拦截记录。
合规页上那个“拦截违规内容”的计数,就是靠这个实时更新的。没有复杂的AI逻辑,没有训练样本,就是一个词表加一个if判断。
让我印象最深的不是这个方案有多好,而是它有多简单。
我之前花了很多时间调Prompt、研究怎么让模型更“听话”,但绕了一圈,真正解决问题的办法是阻断,不是教育。让大模型学会拒绝本身就是一个很不可控的事情,与其靠它自觉,不如直接不让它接触到那些问题。
事后复盘了一下:
| 方案 | 效果 | 问题 |
|---|---|---|
| 改Prompt | 部分有效 | 换个说法就绕过 |
| 规则引擎前置拦截 | 完全拦截 | 需要维护词表 |
规则引擎不是最优雅的方案,但它是确定性最高的方案。大模型可以不靠谱,但规则引擎必须100%靠谱。在金融产品里,确定性比优雅重要得多。
顺便说一句,这个规则引擎后来被我顺手用在了投教问答和追问助手两个地方。写一次代码,挡了两个入口,一次问题2处解决

浙公网安备 33010602011771号