多版本冲突怎么处理
知识库中同一主题常有多版本文档,检索时可能同时命中新旧内容。处理思路有两条:检索侧按时效与版本加权排序,让新版本优先进入上下文;生成侧如果片段之间互相矛盾,要明确呈现差异并注明各自的版本与出处,而不是让模型自行裁定谁对。文档治理比提示词技巧更重要——过期文档应该下架或标记为废弃。
基本信息
| 检索侧手段 | 按版本号或更新时间加权,新版本优先 |
|---|---|
| 生成侧要求 | 矛盾分别陈述并注明出处,不自行裁定 |
| 治理手段 | 过期文档下架或打上 deprecated 标记 |
| 配套字段 | doc_version、updated_at、status 三者都要有 |
典型使用场景
- 产品改版:新旧参数并存时,回答要指明适用哪个版本
- 制度更替:旧办法废止后仍被检索到,需要明确标注失效
- 返工排查:用户反馈答案前后矛盾,先看是否命中了不同版本片段
- 多来源语料:不同来源口径不同,回答要呈现分歧而不是折中
- 灰度发布:新旧两版同时在线时,限制检索只取新版
按版本加权重排
按版本加权重排
def recency_boost(doc):
# 版本号越大权重越高,系数需在评测集上验证
return doc.meta.get("version", 0) * 0.05
ranked = sorted(candidates, key=lambda d: d.score + recency_boost(d), reverse=True)
# 加权只影响排序,不改变片段本身的内容
矛盾呈现要求
矛盾呈现要求
若【上下文】中存在互相矛盾的说法:
- 分别陈述不同版本的说法与出处编号;
- 不要自行裁定哪一个正确;
- 提示用户按适用范围(如版本号)选择。
# 这类约束写进系统提示词,并在评测集里准备对应样例
冲突来源与对策
| 来源 | 表现 | 对策 |
|---|---|---|
| 文档改版 | 新旧版本同时被召回 | 按版本加权或限定只检索新版 |
| 来源不同 | 不同来源口径不一致 | 回答中标注来源,不下结论 |
| 解析残留 | 同一文档出现两个版本切片 | 按 doc_id 替换并清理旧切片 |
| 语言差异 | 翻译版本与原版措辞不同 | 保留原文版本号,避免混答 |
文档治理优先于提示词:过期文档应下架或打上 deprecated 标记,减少检索命中旧版的机会,这比事后让模型解释矛盾更省事。
矛盾类问题要进评测集:只靠提示词约束而没有对应测试样例,上线后是否生效无从验证。定期人工抽查这类问题的回答是否按规则呈现分歧。