知识库检索明明命中了片段,模型回答却答非所问。多数问题不在模型,而在切分:块切得太大,噪声盖过关键信息;切得太小,上下文被拦腰截断。
先看命中片段本身是否可用
把检索到的原文打印出来,如果能看懂但答不上问题,说明检索偏了;如果片段本身就是半句话,说明切分有问题。
中文文档的实用参数
- 块大小 300 到 500 个汉字,按段落或标题切,不要按固定字数硬切
- 相邻块保留 10% 到 20% 重叠,避免句子被切断
- 检索先取 5 条再重排,只把最相关的 2 到 3 条塞进提示
chunks = split_by_heading(text, max_len=400, overlap=60)
表格和代码块要单独处理,切成小段会彻底失去意义,最好整块保留并附上所在章节标题。
用固定问题集验证
准备二十个真实问题,记录每个问题应该命中的段落编号,改参数后重跑一遍命中率。凭感觉调 chunk 大小,往往越调越乱。
切分时给每块补一行来源标题,检索和生成都能受益,模型看到标题就知道这段在讲什么。