5.8.md 2.7 KB

5.8 从图路径回到原文证据

图已经找到“双人下午茶 → 招牌蛋糕 → 草莓酱 → 新鲜草莓”。但模型不能只接收一句我们总结的话,还需要看原文。学生也应该能拿着出处逐条核对。

{{figure:08-bundle|图 5-11 把完整路径和各段原文放在一起;问题再问通知谁时,补上分工表。}}

一、先准备这道题必需的三份资料

配套 q03 问“草莓缺货,为什么双人下午茶也会受影响?”需要:

事实 原文文本块
双人下午茶包含一份招牌蛋糕 menu-tea:v1:c01
制作招牌蛋糕需要草莓酱 recipe-cake:v1:c01
制作草莓酱需要新鲜草莓 recipe-sauce:v1:c01

缺少中间的蛋糕配方,就不能凭空把套餐与果酱直接连起来。问题如果再问“通知谁”,另取 owner-tea:v1:c01,它说明套餐上架由小陈负责、到收银台通知。

二、把这一组东西叫作“证据包”

证据包包括:关系路径、支撑原文、文档标题与版本。一个包可以含多份原文,因为它们共同支持一个解释。先看数据结构:

{{snippet:evidence-bundle}}

text 给重排序器阅读;evidence 保存原文;paths 保存关系;channels 记录来自哪种查找方法。向量候选也使用同样结构,但通常没有关系路径,于是上层可以统一处理。

三、路径上的原文必须找齐

{{snippet:graph-evidence}}

先收集每条事实的 chunk_id,再按知识域取回对应原文。引用缺失时,不把这个包伪装成完整证据。取齐后,将关系说明与原文一起送给排序器。

事实编号与文本块编号不是一回事:一份套餐组成表可以同时说明“包含蛋糕”和“包含饼干”,也就是同一原文支持多个事实。展示出处时应按原文去重,避免把同一份资料重复列好几遍。

四、先编号,再让模型引用

{{snippet:build-context}}

程序对真正入选的原文分配 [E1]、[E2] 等引用编号,并附上标题和版本。模型使用本次提供的编号,不能自行发明 [E99]。

编号合法只说明“有这份资料”。还要进一步判断:这份资料真的支持当前句子吗?例如套餐组成表支持“包含蛋糕”,却不能单独证明“采购员忘记订草莓”。

五、把答案逐句连回资料

练习时先读 q03 回答,给三个关系分别圈出出处。如果答案增加“通知小陈”,再检查是否真的取回了分工表;如果没有这份资料,就不能认为“猜对了人”也是正确的证据问答。

下一节合并图证据与相关文字候选,看看怎样统一排名,并在有限上下文内保留完整关系。