给多跳路径排个序,学生模型就能替代在线大模型了吗?先别急着训练。教师分数从哪里来、路径引用了哪份文档、训练与测试是否共享同一事故,往往比换一个损失函数更早决定结果是否可信。
10 月 23 日,LangChain 发布的检索工程文章把低效搜索、上下文过量、陈旧或无关信息分开讨论。对 GraphRAG 路径蒸馏也一样:减少输入并不等于留下的路径就是正确证据。原文
注意力颜色不是因果标签
模型关注一个节点,可能因为它的名字经常出现,也可能因为它确实承载答案。不能把一个 attention heatmap 直接叫作根因标签。若教师输出一个路径相关性分数,应同时保留问题、候选路径、来源快照、引用范围与判分规则。
我会先构造一小批人工复核样本,让同名不同实体、缺失中间边和过期依赖进入负例。训练、验证、测试按源文档组或图快照拆开;如果同一条事故在不同日期的近重复切片跨集合,学生可能只是记住了表述。
训练入口先守住标签契约
下面验证教师给出的引用 ID 必须来自候选路径的证据集合。它没有生成模型分数,没有实施蒸馏,也没有声称引用存在就说明推理正确;它先排除最基础的“分数对一条路径,理由却引了另一条路径”。
内图把教师输出、人工审计与学生评测分开。引用存在性只是机器检查的一部分,引用是否真正支持结论仍需内容判断。
def validate_label(example): if not 0 <= example["score"] <= 1: raise ValueError("score out of range") allowed = set(example["path_evidence"]) cited = set(example["teacher_citations"]) if not cited or not cited <= allowed: raise ValueError("citations outside candidate evidence") return True def split_guard(train, test): a = {e["source_group"] for e in train} b = {e["source_group"] for e in test} if a & b: raise ValueError("source group leakage") sample = {"score": 0.8, "path_evidence": ["docA:10-20", "docB:4-8"], "teacher_citations": ["docA:10-20"], "source_group": "incident-A"} assert validate_label(sample) try: validate_label({**sample, "teacher_citations": ["unrelated:1-9"]}) except ValueError: pass else: raise AssertionError("foreign citation accepted") split_guard([sample], [{**sample, "source_group": "incident-B"}]) print("teacher citation contract checked; cross-group split accepted")例子跑通以后,还要验证什么
这段代码已在本地 macOS、CPython 3.9.6 下运行,实际输出为teacher citation contract checked; cross-group split accepted。它验证的是例子中的数据约束与分支,不包含线上服务的吞吐或延迟测量。
未调用教师或学生模型,没有 attention 导出、训练与蒸馏压测。真实实验还要比较候选生成本身的召回上限、教师标签一致性、学生在未见图快照上的表现,以及新增实体的冷启动回退。不能从一份小型标签校验通过推导毫秒级推理或成本下降。
延伸阅读
- Context Engineering Starts with Retrieval:2026 年 10 月 23 日,区分检索效率与输入质量的工程讨论。
- GraphRAG Outputs:路径所依赖实体、关系与文本单元的回溯标识。