图已经找到“双人下午茶 → 招牌蛋糕 → 草莓酱 → 新鲜草莓”。但模型不能只接收一句我们总结的话,还需要看原文。学生也应该能拿着出处逐条核对。
{{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 回答,给三个关系分别圈出出处。如果答案增加“通知小陈”,再检查是否真的取回了分工表;如果没有这份资料,就不能认为“猜对了人”也是正确的证据问答。
下一节合并图证据与相关文字候选,看看怎样统一排名,并在有限上下文内保留完整关系。