普通 RAG 让大模型「参考」知识库作答。听起来稳,实际常跑偏:模型顺手用自带知识补了个窟窿,答着答着就冒出资料里根本没有的细节——一条「通常来说」、一个不存在的链接、一个想当然的数字。v0.5.0 给这件事上了把锁:严格问答模式。开启后,AI 的回答只能来自检索到的知识库内容,知识库没收录就直说,从流程上把编造和幻觉摁死。

它到底锁住了什么

一句话:把「参考」升级成「只能依据」。

开启后一条消息的旅程

为了「只能依据」,链路做了三件事:

  1. 强制检索:对任何消息都做向量检索,跳过意图门控与短消息过滤,用独立的 rag_strict_min_similarity / rag_strict_max_results 召回门槛。
  2. 命中 → 贴硬约束:把「资料 + 仅依据资料作答」的约束块贴在用户消息之前的近因位(利用近因效应压住模型「自作主张」的冲动),同时禁用技能激活、只保留 kb_search 这一个工具(联网搜索 / 发消息 / 审批等一律剔除)、不注入公共记忆、跳过三级递进兜底。
  3. 未命中 → 直接回固定文案:不调大模型、不追问、不兜底。

谁该打开它

答案是对出处要求极高的场景:公司制度问答、产品资料问答、合规话术、内部 SOP 之类——这些场合「编得再顺」也比不上「句句有出处」。闲聊、天气、问候这类知识库本就覆盖不到的话题,开启后会收到「未收录」回复,属预期行为;要兼顾日常对话,保持关闭即可。

建议开启前先把对应资料导入知识库、抽查几次召回效果,再按需调 rag_strict_min_similarity:过高易漏召回,过低易混入弱相关片段。

一句话切换,热重载即时生效

两种方式都能开:配置文件 llm.advanced.rag_strict_mode,或 Web 控制台「设置 → 模型与参数 → RAG 严格问答模式」开关。保存即生效,无需重启服务。Web 顶栏常驻模式徽章、设置页状态条,以及模拟面板的「对比两种模式」一键并排,都能让你一眼看清当前模式、两种模式回答差在哪。

升级注意

无破坏性变更。新增配置项 rag_strict_mode / rag_strict_min_similarity / rag_strict_max_results / rag_strict_no_hit_reply(未命中文案可自定义)。默认关闭,不影响原有行为。

完整变更见 CHANGELOG,代码在 GitHub。