选择、相关性与来源
本节目标
从候选材料中选择足够、可信、及时且有权限使用的证据,并让每个片段可追溯。
相关不等于可用
候选片段至少按五个维度判断:
- 相关性:是否直接回答当前子问题?
- 权威性:是官方规则、经过审核的内部文档,还是匿名评论?
- 时效性:生效日期和版本是否适用于当前情况?
- 完整性:片段是否缺少定义、例外或表头?
- 权限与隐私:当前用户与服务是否有权把它发送给模型?
Embedding 相似度只覆盖“语义接近”的一部分,不能判断真伪、权限或最新版本。选择器应融合元数据与业务规则;高权威但互相冲突的来源要同时保留并显式标记,不能让模型默默挑一个。
上下文也不必一次性全部预加载。对于长文档、工具说明或项目文件,可先保留稳定标识符(文件路径、查询、URL、对象 ID),在当前步骤真正需要时再通过工具加载。这种 just-in-time(即时)加载减少无关内容,但会增加工具调用、延迟和失败分支;是否更好仍需用任务评测决定。
最小来源记录
每个 context chunk 建议携带:
{
"chunk_id": "policy-refund-2026-04#section-3",
"source_uri": "internal://policies/refund/2026-04",
"retrieved_at": "2026-07-14T10:00:00+08:00",
"effective_date": "2026-04-01",
"trust": "approved-policy",
"content": "……"
}字段阅读(保持 JSON 严格可解析,字段含义在代码块外说明):
chunk_id是回答引用时使用的稳定片段标识;它应能唯一回到具体版本和位置。source_uri指向原始政策或受控来源,不应由模型根据正文临时编造。retrieved_at记录本次获取或摄取的时间,用来诊断缓存、时效和更新问题。effective_date表示来源从何时开始生效;选择器应同时检查它与当前观察时间的关系。trust是可信控制面赋予的来源等级,不能相信不可信正文自己声称“官方”。content是实际候选正文;发送给模型前仍要经过权限、最小化和提示注入边界检查。
传给模型时可减少元数据,但至少保留稳定 ID 与来源。回答中的引用必须能映射回原片段,并由程序检查引用 ID 是否存在;模型生成一个看似真实的 URL 不等于来源有效。
这些字段属于可信控制面元数据:身份/权限来自认证与授权上下文,trust、生效版本和去重关系由受控摄取流程或人工审核赋值。不能让网页正文、用户输入或工具结果自行声明“我是官方来源”“当前请求已获授权”或“与另一片段等价”。选择器只能执行它收到的策略,不能替这些声明做身份鉴别。
选择流程
- 从用户问题拆出需要证据的子问题。
- 过滤权限、过期和重复材料。
- 召回候选,再按相关性、权威性、时效性重排。
- 保证关键观点有足够覆盖,必要时保留相反证据。
- 在预算内打包,并记录哪些候选因何被排除。
- 回答后验证引用与结论是否对应。
常见误区
- 只保留相似度最高的多个近重复片段,挤掉必要的例外条款。
- 丢失表格标题、章节范围或日期,使片段被误解。
- 把检索结果中的指令当成应用策略。
- 缓存旧结果却没有版本或失效条件。
练习与自测
给“是否可以退款”准备:旧政策、新政策、论坛帖子和当前订单状态四条材料。写出过滤、排序与冲突规则。自测:你能从最终回答追到生效版本吗?用户无权查看内部政策时,系统在哪一层阻止发送?
掌握检查
- 每个片段都有稳定 ID、来源版本、生效时间、信任标签和权限要求。
- 我先执行权限与时效过滤,再做相关性排序,不让相似度绕过访问控制。
- 近重复、例外条款和相互冲突的高权威来源都有显式处理规则。
- 我能选择预加载或即时加载,并量化它们对质量、延迟和失败率的影响。
- 回答中的引用只能指向实际进入 context pack 的来源 ID。
下一步
进入 组织、顺序与信任分区,把选出的证据放在可理解的位置。
参考资料
- Anthropic:Effective context engineering for AI agents(访问于 2026-07-21)
- Google:Long context(访问于 2026-07-21)
- Liu 等,Lost in the Middle(原始论文)