FastGPT 知识库问答答不准,先查文档分段和召回条数

文章导读
知识库问答答不准,通常不是模型变笨,而是检索阶段没能把正确的段落交给它。排查顺序建议是先看文档分段、再看召回条数:分段决定切出来的片段本身是否完整,召回条数决定有多少片段被塞进上下文。两者都能在页面里改完立刻用同一个问题复测,所以先查这两项,比去调温度、换模型更有可能找到原因。
📋 目录
  1. 在知识库文档列表里确认分段方式与分段长度
  2. 用同一问题对比不同召回条数下的返回引用
  3. 发一条最小查询请求并记录命中的文档片段
  4. 调整分段重叠与清洗规则后复测
  5. 把有效参数固化为知识库配置备注
A A

知识库问答答不准,通常不是模型变笨,而是检索阶段没能把正确的段落交给它。排查顺序建议是先看文档分段、再看召回条数:分段决定切出来的片段本身是否完整,召回条数决定有多少片段被塞进上下文。两者都能在页面里改完立刻用同一个问题复测,所以先查这两项,比去调温度、换模型更有可能找到原因。

上传文档后答案漏关键段落或引入无关内容,先别改提示词。按“看分段—调召回—看原始命中—回调重叠”的顺序排查,每一步只改一个参数,用同一个问题复测。分段把关键条件切碎时,单纯提高召回条数只会带回更多无关片段;只有检索层确实返回了正确片段而答案仍漏点,才需要回到生成侧。分段长度、召回条数等取值以你当前部署版本的页面和接口返回为准。

在知识库文档列表里确认分段方式与分段长度

先进入知识库的文档列表,确认每份文档的处理状态是“已完成”还是仍在排队、失败或需要重新分段。状态没走完的文档,检索命中会明显偏低,这时候调任何参数都看不出效果。状态正常后,逐个点开文档查看分段结果,直接浏览切出来的每一段文本,看关键信息是否被切断。

分段长度设置入口一般在新建或编辑知识库时的分段设置里,例如分段模式(按段落、按句子、自定义长度)、分段长度上限、分段重叠长度;部分部署版本会把自定义分段参数放在文档导入环节。修改后需要重新处理文档,旧的分段不会自动更新。

记录异常分段示例,建议至少留意这几种情况:

  • 条件句与结论被切成两段,例如“仅当 A 满足时才启用 B”,前半句只保留了条件;
  • 表格或参数列表被逐行切开,单独一段看不出对应关系;
  • 标题与正文分离,正文片段里没有任何所属章节的信息;
  • 单段过长,一段里混进多个主题,相似度被平均后哪个都召不准;
  • 文档里的页眉、页脚、目录被当成正文切进去,成了高频噪声片段。

把这些片段原文和所属文档名记下来,它们是你后面判断“该改分段还是改召回”的直接证据。

FastGPT 知识库问答答不准,先查文档分段和召回条数

用同一问题对比不同召回条数下的返回引用

召回条数的设置位置通常在知识库的搜索配置里,也可能在应用编排中知识库搜索节点的参数面板,常见叫法是“最大召回数量”“相似度 top k”或“引用上限”。测试时保持分段不变,固定同一个问题,只改这一个数字,观察返回的引用片段条数和答案完整度。

测试问题要具体,最好是你已经知道答案在哪一段、答案分几处的那种,例如“某功能支持哪些配置项”“某项限制的触发条件是什么”。这样你能直接判断关键片段有没有进上下文,而不是只看答案读起来顺不顺。

召回条数返回引用条数关键片段是否命中是否引入无关内容备注
3待填待填待填基线
5待填待填待填只改这一项
10待填待填待填观察噪声是否变多

常见的结果有:调大召回后关键片段出现了,答案补全,说明原来卡在召回条数上;调大后关键片段还是没出现,只是多了几段无关内容,说明问题在分段或相似度匹配,继续加条数通常只会让答案更杂。

FastGPT 知识库问答答不准,先查文档分段和召回条数

发一条最小查询请求并记录命中的文档片段

页面里的引用展示未必完整,想确认检索层到底返回了什么,可以直接发一条最小查询请求。下面是通用骨架,路径、鉴权头和字段名请按你部署版本的接口文档替换,不要照抄不确定的路径。

POST {你的服务地址}/api/v1/chat/completions
Authorization: Bearer {你的密钥}
Content-Type: application/json

{
  "chatId": "debug-recall-001",
  "stream": false,
  "detail": true,
  "messages": [
    { "role": "user", "content": "你写的那个测试问题" }
  ]
}

说明几点:chatId 用固定值便于对比同一会话下的返回;stream 设为 false 方便直接看完整 JSON;是否返回引用列表通常依赖类似 detail 的开关,具体字段名以实际响应为准。如果不确定,先把整段响应打印出来再从中取值。

响应中通常会有数组形式的引用片段集合,每一项包含命中的片段文本、所属文档或数据集的标识、相似度分值等信息。要确认的是:片段文本里有没有你预期的关键句、它排在第几位、分值和其他片段差多少。如果排在前面的全是页眉、目录或重复模板文字,那要处理的是文档清洗,而不是召回条数。

调整分段重叠与清洗规则后复测

如果异常分段的原因是句子被切断,优先调分段重叠:在分段设置里把重叠长度调大一点,让相邻片段共享一部分上下文。重叠过小补不回被切断的句子,重叠过大则会让相邻片段高度相似,挤占有限的召回名额,需要结合文档的句子长度试出合适值。清洗规则入口一般在文档导入或数据集设置里,用于去掉多余空行、页眉页脚、目录与 Markdown 符号。

FastGPT 知识库问答答不准,先查文档分段和召回条数

改完之后,用前面记录的那几个测试问题原样复测,最好换一个新的 chatId 或新开会话,避免旧上下文干扰。对比时看三件事:之前丢失的关键片段这次是否出现;同一问题的答案是否补上了缺失的条件或步骤;无关内容的占比有没有变高。如果重叠调大后答案反而更碎,说明该回到分段长度本身,而不是继续加重叠。

把有效参数固化为知识库配置备注

调出效果之后,把参数写进知识库的说明或备注里,避免下次换人接手再从头试一遍。记录内容建议包含:

  • 分段模式、分段长度上限、分段重叠长度;
  • 生效的召回条数与相似度阈值(如果页面里有);
  • 清洗规则做了哪些处理;
  • 用于验证的测试问题原文,以及每个问题对应的命中片段位置和答案表现;
  • 哪些文档需要单独调整分段,哪些按默认即可。

这份备注不用写得很正式,能让人一眼看出“这套参数是在什么文档、什么问题下验证过的”就够了。文档后续有更新时,也建议顺手复测备注里的一两个问题,确认分段和召回没有因为内容变化而失效。