答非所问先别急着改提示词。把一次错误回答拆开看,无非是三种情况:检索阶段根本没召回相关片段、召回了但模型没用上、片段用上了但提示词没约束住模型自由发挥。这三类对应的动作完全不同——召回为空时改提示词基本无效,召回正确而回答跑偏时才轮到提示词。建议先拿一个固定问题走一遍全流程,把改了什么和结果变没变对上号,再决定往哪个方向调。
判断顺序通常是:先看召回片段是否为空、是否与问题相关,再看提示词有没有约束引用与拒答。适用场景是反复改提示词仍答偏、说不清是检索还是生成的智能体。操作动作是固定一个问题,每次只改一个变量,记录回答差异。验证方式是召回日志和引用来源逐条对照。边界在于切片、索引、召回条数会互相影响,单次结论只对当前配置成立,换文档或重新切分后需要重跑同一批问题。
把错误回答分成没检索到、检索到没用、用错三种
先定性再动手。三类现象在页面上的表现通常能区分开:
- 没检索到:回答笼统、像通用常识,没有引用角标或来源卡片;调试面板里召回片段为空,或相似度分数普遍偏低被阈值挡掉。
- 检索到没用:召回了片段,但回答里看不到引用,或引用的片段跟结论对不上;模型用自己的话复述了一遍,事实点却来自别处。
- 用错:引用了片段,但只截了半句、把限定条件丢掉,或者答的是另一个近义问题,属于切片和语义匹配的问题。
对应的优先检查项:没检索到时先查文档是否已同步进知识库、问题和文档用词差距是否过大、切分是否把关键句切成了碎片;检索到没用时先查提示词里有没有“必须标注来源”的约束、召回条数是否太多导致有效片段被淹没;用错时先查命中片段本身是否完整、是否混了多个主题,再看召回排序是否把弱相关片段排在前面。
固定问题,每次只改一个变量做对照
挑一个能稳定复现答偏的问题,原文不要改写,每次只动一个地方,其余配置保持不动。下面这张表可以直接拿来记录:
问题ID:
固定问题(原文):
本轮唯一改动:
提示词:未改 / 改动点是____
切片粒度:未改 / 由____改为____
召回条数:未改 / 由____改为____
观察结果:
是否出现引用片段:是 / 否
引用片段与问题是否相关:相关 / 部分相关 / 无关
回答是否答到问题上:是 / 部分 / 否
是否出现编造内容:是 / 否,出现在哪一句
本轮结论:改动是否影响了结果
备注:同一轮里还有哪些配置被动过
要控制的是“同一轮只动一项”。如果同一轮既调了切片又调了召回条数,回答变好也说不清是哪一项起的作用,下一轮回退时就没有依据。
确认目标片段到底有没有被搜到
先把召回的片段拿出来看,而不是只看最终回答。多数智能体平台在调试面板或单次运行的详情里能看到本轮检索结果,包括命中片段的文本、来源文档和相似度分数;如果没有这个入口,可以用回答里的引用角标反查来源;再不行,就绕过生成模型,用同一个问句直接对知识库做一次检索测试,看返回什么。
chunk_id | 片段摘要 | 分数 | 与问题是否相关 | 能否支撑答案
---------|----------|------|----------------|----------------
| | | 相关/部分/无关 | 能/不能/需补充
逐条标注时看三件事:片段里有没有问题所要的那个事实点;这个事实点是完整句子还是被切断的半句;时间、版本、适用范围这类限定条件有没有在切分时丢掉。如果标完发现没有任何一条片段能支撑答案,那问题在检索或切分,不在模型。
用提示词模板约束引用和拒答
当召回片段是对的、回答仍然自行补全时,用提示词把引用和拒答写死。骨架可以这样,{{chunks}} 和 {{query}} 换成平台实际注入的变量:
你是基于知识库回答的助手,只输出最终答案,不要解释你的推理过程。
必须遵守:
1. 答案只能依据【检索片段】中的内容,每个关键结论后用 [片段编号] 标注来源。
2. 如果检索片段中没有能支撑答案的内容,直接回答“知识库中没有找到相关内容”,并说明还缺少哪一类信息。
3. 不得根据常识、猜测或训练记忆补全片段中没有的事实、数字、时间、人名。
【检索片段】
{{chunks}}
【用户问题】
{{query}}
三条约束里最容易被省掉的是第 2 条。没有明确的“没有就说没有”,模型在资料不足时倾向于顺着问题编一个像样的答案,这类错误在页面上看起来最像“理解错了”,实际是提示词没给退路。改完后仍用同一个问题复测,观察是否出现拒答,以及拒答是否出现在确实没有资料的问法上。
调切片粒度与召回条数后跑同一批问题
单个问题的对照只能说明方向,确认改动是否真的有用,要换回同一批问题重跑一遍。对比表建议保留这些字段:
问题ID | 期望答案要点 | 调整前:是否命中 | 调整前:引用是否正确 | 调整前:答案完整度
| | | |
改动项:切片粒度____ / 召回条数____
调整后:是否命中 | 调整后:引用是否正确 | 调整后:答案完整度 | 是否引入新错误 | 保留或回退
判断该不该回到切分,看两个信号:一是召回片段本身就答不了这个问题,无论提示词怎么写都不可能答对;二是同一段文档被多个不相关的问题命中,或关键句在片段边界处被切断。出现这两类情况,继续调提示词和召回条数只是在掩盖切分问题,应该回到文档切分,把同一主题的内容放在一起、保留完整句和限定条件,再重跑这批问题。