有效的信息不一定是需要的信息。
你有1000条通过校验的信息
假设机械校验已经完成。
格式正确, 必填字段存在, 标识符有效, 类型合适, 引用完整性成立——剩下1000条陈述。
所有这些都是有效信息。 它们符合规范。没有理由拒绝它们。
但上下文窗口只能容纳300条。
放哪300条进去?
这就是过滤的问题。
校验和过滤提出不同的问题
校验问的是:“这条信息有效吗?” 过滤问的是:“这条信息现在需要吗?”
校验看的是信息本身的属性。 格式正确吗?字段存在吗?引用有效吗? 它不关心信息说的是什么,或者它将用于什么目的。
过滤看的是信息与情境之间的关系。 它与当前这次推理相关吗? 这条信息可信吗? 它是否足够新?
校验不需要上下文就能完成。你只需要规范。 过滤没有上下文就不可能完成。你需要知道"现在需要什么"。
校验是确定性的。有效或无效。 过滤是判断。相关性有程度,可信度有阈值,时效性有情境。
校验是廉价的。 过滤相对昂贵。
这就是为什么校验先行、过滤在后。 如果校验先过滤,那么过滤只需判断更小的集合。 昂贵判断的成本就降低了。
过滤判断三件事
过滤主要看三件事。
相关性:这条信息对本次推理是否需要?
用户问的是"三星电子2024年第三季度营业利润"。
通过校验的有效陈述中:
- 三星电子2024年第三季度营业利润为9.18万亿韩元。
- 三星电子2024年第三季度营收为79万亿韩元。
- 三星电子2023年第三季度营业利润为2.43万亿韩元。
- 三星电子半导体资本支出计划截至2025年为53万亿韩元。
- 三星电子总部位于水原。
全部有效。全部关于三星电子。 你把它们全部放进上下文吗?
总部位置无关。 资本支出计划相关性低。 2023年的营业利润可能对比较有用。 营收与营业利润密切相关。
在自然语言RAG中,这个判断被委托给嵌入相似度。 按与"三星电子营业利润"的向量距离排序。 但正如已经讨论过的,相似不等于相关。
在结构化表示中,相关性判断有不同的输入。 这条陈述指向哪个实体?三星电子。 什么属性?营业利润。 什么时间?2024年第三季度。
如果实体、属性和时间作为字段存在, 你可以精确找到"同一实体、同一属性、同一时间"。 而且你可以有意地包含或排除"同一实体、同一属性、不同时间"。 字段匹配,而不是向量距离。
相关性仍然是一种判断。不是确定性的。 但判断的输入是向量距离还是结构化字段,对准确性有影响。
可信度:这条信息可信吗?
关于同一内容存在两条陈述。
- 来源:三星电子IR公告。可信度:1.0。“2024年第三季度营业利润:9.18万亿韩元。”
- 来源:匿名博客。可信度:0.3。“2024年第三季度营业利润:约10万亿韩元。”
哪一条进入上下文?
显然是前者。
但这个判断要"显然", 来源和可信度必须以可读的形式存在。
在自然语言块中,来源埋在文本的某处或根本不存在。 可信度从未被表达过。 要比较两个块并判断哪个更可信, LLM必须阅读和推理。
在结构化表示中,来源和可信度是字段。 “排除可信度低于0.5的"是一个比较操作。 “只包含第一手来源"是字段匹配。
可信度过滤的成本从LLM推理转移到了字段比较。
时效性:这条信息是否足够新?
“三星电子的CEO是谁?”
- 时间:2024年3月。“三星电子CEO:庆桂显。”
- 时间:2022年12月。“三星电子联合CEO:韩钟熙、庆桂显。”
两者都有效。格式正确,来源存在。 但需要的是最新的那条。
在自然语言中,时间可能在文本中被提及,也可能没有。 如果写的是"去年”,你还得计算"去年"是什么时候。
在结构化表示中,时间是一个字段。 一个ISO 8601日期。 “只包含最新的陈述"是一个排序操作。
更重要的是,时效性的标准取决于情境。 如果有人问CEO,需要最新的条目。 如果有人问所有历任CEO,需要每条记录。 如果有人问营收趋势,需要最近8个季度。
如果时间作为字段存在,这些条件可以表达为查询。 如果时间埋在自然语言中,每次都必须提取。
为什么过滤不是机械校验
这里有一个重要的区分。
过滤的三个标准中——相关性、可信度、时效性—— 可信度和时效性在结构化表示中大部分可以被机械处理。 字段比较、值排序、范围过滤。
那为什么叫"过滤"而不是"校验”?
校验只看信息本身的属性。 “这条陈述有时间字段吗?“存在或不存在。不需要上下文。
过滤看的是信息与情境之间的关系。 “这条陈述的时间对这个问题来说合适吗?“你必须知道问题是什么才能回答。
两者检查的是同一个时间字段, 但校验检查的是"存在性”, 过滤判断的是"适当性”。
存在性不需要上下文。 适当性需要上下文。
这个区别就是管道将两个阶段分开的原因。
过滤的成本结构
过滤比校验更昂贵。但多昂贵取决于表示方式。
自然语言管道中的过滤: 相关性判断——LLM推理或嵌入相似度计算。 可信度判断——LLM从文本中提取来源信息并评估。 时效性判断——LLM从文本中提取时间信息并比较。 全部是推理。全部昂贵。
结构化表示中的过滤: 相关性判断——实体/属性字段匹配 + 基于上下文的判断。 可信度判断——可信度字段比较。来源字段匹配。 时效性判断——时间字段排序。范围比较。 可信度和时效性是字段操作。只有相关性需要判断。
也就是说,结构化将过滤的三个标准中的两个转换为机械操作。 剩下的只有相关性。 即便是相关性,也从"这段文本和问题相似吗"缩小到"这个实体的这个属性与问题相关吗”,使判断更加清晰。
过滤的总成本显著下降。
不过滤会怎样
如果你校验了但不过滤就把一切放进上下文。
全部1000条有效信息进入。 其中只有30条是现在需要的。
LLM阅读全部1000条。 阅读需要成本。 970条不必要的信息分散注意力。 研究表明,上下文中不相关信息越多,产生幻觉的可能性越高。 对真正重要的30条信息的推理质量下降。
窗口也被浪费。 1000条占据的空间中,970条的份额是浪费。 那些空间本可以容纳其他更相关的信息。
过滤是对有限窗口的有限管理。 如果校验确认的是"它是否有资格进入”, 过滤判断的是"它是否有理由进入”。
资格是格式问题。理由是情境问题。 两者都是必要的。
过滤是策略
还有一个重要的点。
过滤的标准不是固定的。 它们随情境而变。
医疗咨询Agent的过滤: 可信度阈值高。排除可信度低于0.9的。 时效性标准严格。排除超过3年的医疗信息。 排除非同行评审期刊的来源。
日常对话Agent的过滤: 可信度阈值低。近似信息可以接受。 时效性标准灵活。根据情境可以包含较旧的信息。 来源约束宽松。
同样的信息在一个Agent中通过,在另一个Agent中被拒绝。 信息没有变。策略不同。
这意味着过滤不仅仅是技术问题, 而是设计问题。 “什么进入上下文"这个问题等同于 “我们希望这个Agent按什么标准运作”。
在结构化表示中,这个策略被声明式地表达。 “confidence >= 0.9, time >= 2022, source_type = peer-reviewed.” 一行查询。
在自然语言中,这个策略被作为自然语言写在提示词中。 “请只参考可信的近期信息。” LLM是否始终遵循,是一个概率问题。
总结
不是所有通过校验的信息都是需要的。 有限的上下文窗口应该只包含当前推理所需的内容。
过滤判断三件事。 相关性——这条信息对当前问题是否需要? 可信度——这条信息可信吗? 时效性——这条信息是否足够新?
校验和过滤提出不同的问题。 校验问"它有效吗?";过滤问"它需要吗?” 校验不需要上下文就能完成;过滤需要上下文。 校验先行;过滤在后。
在结构化表示中,过滤的三个标准中的两个——可信度和时效性——被转换为字段操作。剩下的只有相关性,而相关性也因结构化字段匹配而变得更加清晰。
过滤是策略。 同样的信息根据情境被包含或被排除。 在结构化表示中,这个策略被声明为查询。 在自然语言中,这个策略被写在提示词中,作为一种期望。