导读:把公司文档接入大模型做知识库问答,上线后最常见的反馈是"答案不对"。多数人的第一反应是换更强的模型,其实大多数问题出在检索链路。这篇文章给你一张可直接用的分步排查清单:先把"答错"分成三类,再沿文档解析→切分→向量化→检索→重排→提示词逐环节定位,每环节给出现象、常见原因与自检方法,最后附引用溯源做法。纯通用工程实践,不绑定任何平台。
知识库问答答得不对,原因几乎总落在三个环节:没检索到相关资料(检索不到)、检索到了但排序不对(检索不准)、资料对了但模型生成跑偏(生成问题)。三种问题的解法完全不同,第一步是分清属于哪种。
判断方法很简单:让模型在回答里带上引用来源。如果引用里根本没有相关文档,是"检索不到";引用里有相关文档但排在很后面,是"检索不准";引用来源正确但答案仍然错,才是"生成问题"。先分好类,再往下查,能省掉大量无效调参。
常见现象:同一份 PDF 里的表格被读成一串乱码;扫描件整段是空白;网页正文混进了导航和广告。
常见原因:PDF 文字版与扫描版走了同一条解析管线;表格、页眉页脚、多栏排版没有被专门处理;HTML 抓取没有做正文抽取。
自检方法:把解析结果导出成纯文本,肉眼抽查 5~10 页,重点看表格、公式、代码块是否完好。必要时按文档类型分流:扫描件先 OCR,文字版走文本解析,表格优先转成 Markdown 表格再入库。
常见现象:问"合同里违约金条款是什么",答案引用了整份合同却找不到具体条款;问一个跨章节的连续逻辑,答案被切散。
常见原因:固定长度切分(比如每 512 字一刀)把语义完整的段落拦腰切断;没有按 Markdown 标题、段落边界做结构感知切分;切分粒度与后续检索的查询粒度不匹配。
自检方法:把切分结果打印出来看断点是否落在段落边界。推荐"结构优先":优先按标题、列表、表格块切,再对超长块做二次细分,并保留相邻块之间的重叠区(overlap),避免关键词刚好落在切口上。
常见现象:换个说法问就查不到,比如文档写"退款政策",用户问"钱怎么退";热门关键词能查到,长尾问法全落空。
常见原因:只用了向量检索,而向量对"字面完全不同、语义相近"的表述敏感度不稳定;索引里混入了大量低质量分块,稀释了相关性;topK 取太少,有效资料根本进不了候选。
自检方法:建立一组"改写测试集",每个真实问题配 3~5 种问法,逐一验证能否召回同一份文档。生产推荐混合检索:向量召回 + 关键词(BM25)召回取并集,再做统一排序,能同时照顾语义与字面两类需求。
// 混合检索:向量 + 关键词取并集后统一打分
async function hybridSearch(query, topK) {
const [vecHits, bm25Hits] = await Promise.all([
vectorSearch(query, topK * 2),
bm25Search(query, topK * 2),
]);
const merged = mergeAndScore(vecHits, bm25Hits); // 去重 + 加权合并
return merged.slice(0, topK);
}常见现象:检索召回的内容看似都相关,但最关键的证据排在后面,模型被次要内容带偏。
常见原因:没有重排,直接按向量相似度截断;重排后没有做阈值过滤,把不相关片段也塞进了上下文;提示词里没有明确"只能依据给定资料回答、资料不足要明说"。
自检方法:看模型实际收到的上下文里,正确答案排在第几位。生产建议在检索后加一道重排,把最相关的 3~5 段送入生成,并显式声明引用规则,让模型在资料不足时直接回答"资料中没有",而不是编造。
给每个分块保留文档 ID、章节号、原文片段。生成时要求模型按"引用编号"标注来源,前端渲染成可点击的出处链接。这一步既是质量兜底,也是排查工具:任何一次答错,都能顺着引用快速定位到具体环节。
落地建议三步走:第一,先补齐可观测性——把解析、切分、召回、重排每个环节的中间结果都留一份,能回答"这条回答的引用从哪来";第二,建改写测试集,把它作为每次改动前后的回归基准;第三,检索质量稳定后,再投入精力优化生成环节。开源向量库、自研切分脚本、通用重排服务都可以按团队情况取舍,核心是把链路打明、可度量、可回归。知识库规模不大时,先用数据库自带全文索引做关键词检索兜底,往往就能解决一大半问题。
排查思路适用于任何自建知识库;若希望直接使用现成的知识库问答能力,可参考乔拓云企业网站产品。
结语:知识库问答的质量,七分在检索、三分在生成。先把链路每一环的中间结果打开看,绝大多数"答不对"都能在一个小时内定位到根因。本文与《AI Agent 会话一长就失忆?上下文管理 4 种策略的取舍与落地对照》同属 AI 工程落地系列,可对照阅读。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。