知识库问答答非所问,十有八九不是模型突然变笨了,而是检索链路前面就把材料喂歪了。最常见的三处问题就是切块太碎或太乱、召回结果没找准、拼进上下文的内容顺序和边界不对。模型最后只是照着你给它的材料作答,所以答案偏,不一定是生成层的问题。
先看切块是不是把语义切断了
很多知识库一上来就把文档按固定字数硬切,这样最容易把标题、定义、表格说明和结论拆开。结果是模型拿到一段“半截话”,自然会答偏。遇到制度文档、产品说明、FAQ 或合同类资料时,优先按自然段、标题层级、问答单元去切,通常比单纯按字数切更稳。
再看召回有没有把“像相关”当成“真相关”
- 如果用户问的是一个很具体的条件、版本、部门或限制,召回却总拿泛介绍段落回来,说明检索粒度不够细。
- 如果前几条召回结果都来自同一份不太相关的文档,说明排序信号压过了真正的业务关键词。
- 如果用户明明问的是 A 场景,系统却总拉来 B 场景的材料,往往是 embedding 相似,但业务边界没加过滤。
这时候别只调模型,先补 metadata 过滤、关键词重排,或者至少把文档类型、时间、产品线这些条件带进检索。
最后看上下文是不是“拼进去了,但没拼对”
有些系统把召回片段一股脑塞进 prompt,看起来材料很多,实际上模型很难判断哪段才是主证据。更稳的做法是先把最相关片段放前面,保留标题和来源,再明确告诉模型“只能依据以下内容回答;找不到就直说”。如果上下文里同时混进旧版本和新版本、解释段和广告段,模型再强也会摇摆。
一个简单的排查顺序是:先查切块,再看召回,再看拼接,最后才去怀疑模型本身。大多数知识库答非所问的问题,前面三步改对了,准确率就会明显回来。