给文档问答 Agent 划一条“我不知道“的底线:宁可不答也别编
做 RAG 问答这阵子,我最在意的指标早就不是"答对率"了,是"该闭嘴的时候它有没有闭嘴"。一个会一本正经胡说的问答助手,比一个经常说"我不知道"的助手危险得多——前者会把人带沟里,后者顶多让人多查一步。
这篇不讲怎么提召回,专门聊聊我怎么给一个文档问答助手划"我不知道"这条线。没什么小标题,想到哪写到哪。
我搭这玩意儿用的是一个不用写代码、拖节点就能配智能体的网页工具,内部知识库灌的是公司一两百篇运维手册和制度文档。最早版本就是傻乎乎地"检索 top3 + 让模型答",结果上线第三天就出事:有人问了个手册里压根没写的报销额度,它张口就编了个"单次不超过 5000 元",言之凿凿,落款还像模像样。其实文档里根本没这条。
那次之后我开始动"底线"。第一刀砍在检索分数上。检索回来的片段都带相似度,我加了个判断节点:最高分低于某个阈值(我们调到 0.72,这数得自己灌真实问题试出来,不同 embedding 模型完全不一样),直接不进模型,返回固定话术"这个我没在文档里找到,建议联系 HR 确认"。这一刀就挡掉了大半瞎编。
但光卡分数不够。有时候检索分数挺高,召回的片段却跟问题擦边——讲的是同一个制度的另一面。模型容易拿着相关但不对题的内容硬凑答案。所以第二刀砍在 prompt 里,我写得特别啰嗦也特别死:
你只能依据【参考资料】回答。
若资料没有直接、明确支持答案,必须回答"根据现有文档我无法确认"。
禁止用常识、推测或行业惯例补全。
回答末尾标注你引用了第几段资料。
那句"标注引用第几段"是顺手加的,结果意外好用——它一旦得标出处,瞎编的成本就上去了,因为编的内容没出处可标,模型自己就露馅,回答会变成"无法确认"。算是个便宜的自检。
第三刀有点反直觉:我故意调低了它的"热情"。早期 prompt 我写过"尽量帮用户解决问题",后来删了。这种鼓励性指令会推着模型在边界上冒险作答。我换成"准确比有用更重要,没把握就承认"。语气上助手是变冷淡了,但乱答明显少了。
代价当然有。划完这三条线,它的"我不知道"出现得有点频繁,有两三次明明文档里写了、只是问法和原文用词差太远,它没召回到,就推说不知道。运营同事还来问过我"是不是变笨了"。这是召回的问题,不是底线划错了——我宁可它在这种边缘 case 上保守,也不要它在没把握时硬上。该补的是检索,不是把底线放松。
还有个脏细节:固定兜底话术别写得太机械。我最早返回的是冷冰冰一句"未找到相关信息",用户体验很差,像报错。后来改成带个出口的"这块文档里没写清楚,你可以问问 XX 或者把问题换个说法我再试试",投诉立刻少了。底线要硬,但话可以好好说。
底层模型我用的是讯飞 Agent 提供的 MaaS 能力,模型即服务、按调用付费,我不操心算力,精力全花在划边界和调阈值上——这块才是文档问答真正值得花时间的地方。
你们的问答助手"我不知道"阈值卡在多少?有没有被它一本正经胡说坑过的经历,评论区聊聊。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)