检索与上下文
本文总结找到相关的只是第一步,还得看证据覆盖到哪、有没有重复、漏没漏掉反面的条款。
在 Agent 里,检索要回答的不止“哪段文本最像”。它至少要管四件事:按什么单位找;找回来的东西能不能支持结论;有没有重复、有没有漏掉反面证据;找不到的时候,结论要收窄到什么程度。面试向的完整链路(切分、混合召回、重排、评估)见 RAG(面试);它在整个系统里的位置见 主线第 3 站。
检索对象:文档、段落、实体,还是关系?
检索单位决定了你能回答什么问题:
| 单位 | 能回答 | 典型问题 | 风险 |
|---|---|---|---|
| 文档 | "哪份文件讲了这件事" | 找到《差旅费管理办法》 | 太粗,需要再定位 |
| 段落 / 条款 | "具体怎么规定" | 市内交通费超标怎么处理 | 脱离上下文后缺主语、缺条件 |
| 实体 | "某个对象的属性" | 某城市属于哪一档标准 | 依赖实体抽取和消歧质量 |
| 关系 | "谁和谁有什么联系" | 超标审批归哪一级负责人 | 关系抽错会被当成事实使用 |
常见做法是几种单位配合着用:用段落召回,命中后扩展到它所在的章节(父子块),需要多跳时再沿关系走一步。比如召回了第 4.2 条里“超标部分需经审批”这一句,单看这句不知道说的是哪类费用,扩到父块,拿到章节标题“市内交通”,条件才完整;再问“谁来审批”,就沿着组织关系查这位员工的部门负责人。图谱能提供关系导航,但它替代不了向量检索,见 图谱。
相关,不等于支持
检索分数衡量的是“像不像”,回答需要的是“能不能推出来”。一段讲“住宿费超标需审批”的文字,和“打车超标能不能报”在字面上非常像,可它对打车说不出任何结论。所以要区分三种状态:
- 支持:片段能直接推出结论,适用条件(时间、范围、对象)也对得上。第 4.2 条讲市内交通,2026 版现行,适用于全体员工,它支持“打车超标可以报但要审批”。
- 相关但不支持:话题相同,结论或适用条件不同。住宿费那一条就属于这种。
- 矛盾:片段和结论相反,或者两个片段互相冲突。比如 2024 版写标准 60 元,2026 版写 80 元(示意)。
这也是 证据优先 的基本要求:每个主张都要能指回一条“支持”状态的证据,光“相关”不够。
重复、反证与覆盖缺口
上下文窗口就那么大,重复内容是看不见的浪费。overlap、父子块、多 query 召回都可能让同一段内容出现好几次,把本该进来的其他证据挤出去。比如前 5 条结果里有 3 条都是第 4.2 条(一次原文、一次父块、一次另一个 query 召回的同一段),真正讲审批流程的第 6.1 条就被挤到了第 6 名。
去重也要小心,近似重复不等于意思相同。同一条款的两个版本可能只差一个数字,去重时删掉一个,冲突就正好被藏起来了。
反证更容易漏。检索默认按“和问题像不像”排序,而问题本身常带着倾向(“还能报吧?”),排在前面的多是支持性的材料,“但书”“除外情形”这类限制条款可能排得很靠后。可以专门针对限制条件再检索一次(“不予报销的情形”“例外”),或者在评估集里专门放几道“有限制条款”的题。
覆盖缺口是说问题有好几个要素,证据只覆盖了一部分。比如员工问“能不能报,要谁审批”,证据只说了能报,没说审批人。这时回答只对覆盖到的部分下结论,对没覆盖的部分直说“制度里没找到”,别顺手编一个“由部门经理审批”。
没有全文时,怎么限制结论范围?
很多时候手上只有片段、摘要,或者搜索结果里的一句摘要,拿不到原文全文。这时:
- 结论带上依据范围。写“根据检索到的第 4.2 条……”,不写“公司规定……”。
- 不对片段以外的内容做推断,尤其是数字、条件和例外。片段里只出现了“标准 80 元”,就别推断“夜间可以上浮 20%”。
- 标出缺口,给出下一步:去读全文、换一个数据源,或者转人工确认。
- 高风险结论(会触发后续动作的)在证据不完整时不放行,交给 人工确认。
三种检索方式的适用场景
| 方式 | 擅长 | 不擅长 | 适合的对象 |
|---|---|---|---|
| 词法(BM25、grep) | 编号、专有名词、错误码、精确短语 | 同义改写、口语提问 | 条款号、代码、日志 |
| 向量 | 语义相近、问法与原文用语不同 | 精确数字和编号 | 自然语言段落 |
| 关系(图谱、结构化查询) | 多跳关联、属性查询、汇总 | 开放式文本问答;构建和维护成本高 | 实体、组织架构、审批关系 |
两个例子对照着看:员工直接搜“第 4.2 条”,BM25 一下就能对上,向量检索反而可能把“第 4.3 条”排在前面,因为两段的语义几乎一样;员工问“打车太贵了能不能多报点”,原文里根本没有“太贵”“多报”这些词,这时向量检索更容易找到讲超标处理的条款。
生产系统通常把词法和向量并行召回,再融合排序。有现成结构化数据时,关系类问题优先直接查数据库,没必要从文本里重新抽。哪种组合更好,只能在具体任务的 评测 上比,指标口径见 RAG 实验室:把检索质量算清楚。
和记忆、上下文的边界
检索知识库拿到的是领域知识,读 记忆 拿到的是和这个用户、这个任务有关的信息,两者最后都会拼进这一轮的上下文。报销案里,第 4.2 条来自知识库,“这位员工默认成本中心是 B”来自记忆。底层也许都用向量检索,但写入方、生命周期和权限隔离都不一样,不要混在一个库里存。
仍待补充
在同一组报销制度问题上,实际比较词法、向量、混合、“混合 + 重排”四种设置的召回和回答正确率,并记录无答案题的拒答表现。目前这里只写了方法和判断依据,还没有自己的比较结果。