1. 摘要
本书从 RAG 的证据消费问题出发,定义一套异构资源建模方法。该方法让人或模型把原始资料转写为 ADOC 源表面,再从源表面投影出可查询、可校验、可渲染、可回源的资源证据图。
该方法以消费者动作为准入条件,把可独立消费的对象组织为资源节点,把可查询和可验证的平面事实组织为字段,把对象之间的可解释连接组织为关系,把复杂定位和原始载荷组织为 payload,并通过 source coordinate 让查询、校验和审查结果回到源表面。
文本、图片、音频、视频、外部文档、代码、日志、模型输出和人工标注,可以在这套方法中进入同一资源图。读者可以用本书设计自己的知识库、RAG 索引、异构资源图或企业资料图谱,并为这些模型建立查询、验证、展示和审查规则。
前言
本书面向五类读者。架构师阅读第一部和第六部,判断资源图边界、完成条件和审查标准。资源建模者阅读第二部、第三部、第四部和第七部,推导 role、rel、字段、payload schema 与 locator。开发者阅读第四部和第五部,把表达表面连接到 SPARQL、RAG、工具调用和资源渲染。QA 与 reviewer 阅读第六部和第七部,把模型承诺转成验收项和审查项。知识维护者阅读第三部和第七部,判断新增资源、字段、关系和 payload 是否取得资格。
本书的第一部先建立问题世界。读者先看到 RAG 链路需要什么证据资源,普通检索、图增强检索和传统知识图谱分别承担什么算子,以及原始资料如何被转写为 ADOC 源表面。之后各部再展开资源节点、字段、关系、payload、locator、查询、展示、校验和回源维护。
本书使用公共标准和公开知识作为参考坐标,但正文不以资料综述为目标。RDF 1.2、SPARQL、SHACL、Web Annotation、AsciiDoc 和 RAG 等坐标只在它们帮助读者完成建模动作时出现。书中的重点始终是:读者如何从自己的问题世界和消费者动作出发,把原始资料转写为可查询、可验证、可渲染、可回源的资源图模型。
Part I: 从证据消费到资源图
本部建立本书的推导起点。RAG 链路需要取得可读、可定位、可审查、可回源的证据资源;原始资料需要先被人或模型整理为可维护的结构化源表面;资源图、检索、查询、渲染和报告都从这个源表面派生。
2. RAG 的证据消费问题
RAG 链路把用户问题连接到外部材料,再把材料组织成回答。回答系统取得的材料必须能被阅读、引用、定位、展开、审查,并在错误出现时回到来源位置修正。这个材料单位在本书中称为可消费证据资源。
原始资料以多种形态出现。PDF、网页、Word 文档、图片、视频、音频、日志、代码文件、聊天记录、模型输出和人工标注拥有不同的文件格式、内部结构、定位方式和维护方式。文本可以按标题、段落和 quote 阅读;图片需要文件路径、区域坐标或 mask;视频需要时间片、轨道和帧范围;音频需要时间范围、说话人和转写线索;PDF 证据需要页码、文字 quote、位置 selector 或页面区域。它们可以进入同一条证据链,但进入之前必须先获得可查询身份、可读说明、定位数据和回源坐标。
检索先解决入口问题。关键词、BM25、向量相似度和混合检索可以从用户问题找到可能相关的材料片段。这个阶段处理的是候选发现:哪些材料可能与问题相关。候选发现本身不说明材料之间的依赖、证据、对应、组成、引用、来源责任或媒体局部位置。
RAG 知识库还需要结构问题的答案。一个回答可能需要沿事件找到图片区域,沿图片区域找到对应视频片段,沿规则找到所有证据,沿 PDF quote 找到源文件位置,沿视频片段找到声音 cue 和字幕 cue。此类动作要求资源之间存在可查询关系,并要求查询结果保留可展示和可维护的定位事实。
可消费证据资源同时承担四个职责。它向读者和回答系统提供可读内容,向查询器提供结构入口,向展示面提供渲染数据,向维护者提供回源位置。一个标题文本切片、一张图片的局部区域、一段视频时间片、一段音频 cue、一个 PDF quote、一个代码行区间,都可以在取得这些职责后成为资源。
RAG 的证据消费问题可以表述为:把异构原始资料整理成一组可命名、可查询、可渲染、可审查、可回源维护的资源,并让回答系统在回答时取得这些资源及其关系链。
3. 现有检索算子与成本
知识库工程中的算子必须对应问题形状。一个算子能减少当前状态和期望状态之间的差距,才有进入系统的理由。RAG 生态已经提供多类算子;本章只记录它们在本书问题链中的位置。
普通 RAG 使用 chunk、embedding 和检索器连接用户问题与资料片段。它把文档材料切成文本块,把文本块写入向量索引或混合索引,在查询时返回相似片段。该算子解决模型上下文有限和用户问题模糊的问题。关系路径、反向查询、跨模态局部、源位置修复和结构化验收需要其它结构继续承担。[rag]
父子块、层级块和自动合并检索处理另一个差距。较小块适合匹配,较大父块适合回答时保留上下文。此类算子说明检索命中单位和回答消费单位可以不同。图片区域、视频时间片、音频 cue、PDF selector 和关系谓词还需要公共建模表面。[dify-parent-child][haystack-hierarchical]
抽取式 GraphRAG 引入图结构增强检索。以 Microsoft GraphRAG 的默认流程为例,系统从 text units 中抽取 entities 和 relationships,并可选抽取 claims/covariates,再生成社区结构与社区报告,用这些结构支持局部搜索、全局搜索和上下文组织。该算子解决纯相似度检索缺少结构的问题。它的成本来自抽取、实体合并、别名处理、关系错误、图增长、摘要维护和更新时的重建或同步。[microsoft-graphrag]
LightRAG 等轻量图增强方案降低抽取式 GraphRAG 的部分成本。它们通过更轻的知识图谱结构、向量表示、双层检索和增量更新改善效率。该路线仍围绕从 chunks 中抽取 entities 和 relationships 组织检索;它优化的是抽取式图增强 RAG 的工程成本。[lightrag]
传统知识图谱和 OWL 本体适合事实查询、分类、规则推导和一致性检查。此类图的节点和边可以直接成为被消费的事实。RAG 场景中,回答系统经常需要读取证据材料;证据材料需要原文、上下文、媒体 locator 和回源坐标。
不同算子服务不同状态差。从海量非结构化文本中自动发现实体网络时,抽取式 GraphRAG 是合理算子。需要严格符号推理、分类和一致性检查时,领域本体是合理算子。需要把异构资料组织成可读、可查、可渲染、可回源的证据资源时,系统需要一个把整理结果落入可维护源表面的算子。
本书选择 ADOC 源表面作为该算子的承载面。人或模型阅读原始资料后,把可消费资源、字段、关系和 locator 写入结构化文档;图、索引、报告和展示面从该文档派生。
4. ADOC 作为结构化源表面
ADOC 源表面是人或模型阅读原始资料以后写出的结构化文档。转写过程同时完成材料选择、资源命名、边界划分、字段整理、关系声明和定位载荷记录。
一份原始 PDF 可以被转写为 document asset、evidence chunk、rule、claim 或 quote 节点。一张图片可以被转写为 image asset,也可以在某个局部需要独立消费时转写为 image region。一段视频可以被转写为 video asset,也可以按事件、镜头、声音或证据动作转写为 video segment。一段音频可以被转写为 audio asset、audio segment、transcript cue 或 sound event。原始材料提供素材;消费者动作决定哪些素材边界获得资源身份。
ADOC 的公共语法提供结构承载面。等号标题创建可寻址区域;标题前的 ID 和 role 提供地址标签与身份字段;描述列表保存普通可读字段;xref 声明资源之间的引用或关系;xref named attributes 保存边字段;source block 保存 JSON、YAML 或其它格式的复杂 payload;block anchor 和 local target ID 可以参与局部寻址。
这些表面既服务阅读,也服务投影。读者看到的是标题、正文、字段和交叉引用;投影器读取的是同一份源文件中的标题节点、地址标签、字段、关系、payload 和 source coordinate。文档承担图的事实来源职责。
模型参与维护时,模型写的对象仍然是 ADOC。抽取结果进入可读文档,维护者直接审查标题、正文、xref、字段和 payload;修改提交到源表面;下一次构建重新生成图、索引、报告和展示数据。
ADOC 源表面的作用可以表述为:把原始资料的整理结果放入人和机器共享的书写表面,使同一份材料同时承担阅读、版本管理、结构投影、查询和回源维护职责。
[#image-ladder-region.image-region]
== 登月舱梯子区域
captionZh:: 图中左下侧的登月舱梯子区域。
visualDescription:: 梯子从登月舱侧面向下延伸,靠近宇航员踏下的位置。
该区域 xref:event-first-step[阿姆斯特朗踏上月面, rel=evidence-for]。
[.image-locator, for=image-ladder-region]
[source,json]
----
{
"asset": "image-as11-40-5903",
"selector": "xywh",
"bbox": [310, 165, 250, 170],
"unit": "pixel"
}
----
这个源片段同时写出可读说明、关系声明和 locator。投影后,查询器可以按 image-region 查询该节点,沿 evidence-for 找到事件,前端可以读取 image-locator 高亮原图,维护者可以回到标题和 payload 源行修正说明或坐标。
5. 资源图的目标状态
资源图的目标状态是一组可消费资源及其关系。源表面保留事实维护职责;资源图把源表面中的资源身份、字段、关系、payload 和 source coordinate 转成可查询事实。
目标状态包含四类资源能力。
第一,资源可以被找到。资源拥有机械投影身份和可查询地址表面。标题文本、显式 ID、生成地址、local target alias 和外部 sourceId 都可以成为查询入口;投影图中的资源 IRI 或等价身份承担资源本体。
第二,资源可以被理解。资源拥有 headline、role、summary、caption、visualDescription、audioDescription、quote 或正文切片。回答系统和读者取得资源后,会得到可读证据。
第三,资源可以被展开。资源之间通过关系谓词连接。evidence-for 聚合证据,features 表达对象出现,mentions 表达文本或声音提及,corresponds-to 表达跨模态对齐,part-of 表达组成关系。关系改变查询路径。
第四,资源可以被操作。图片区域拥有 bbox、polygon 或 mask locator;视频片段拥有 start、end 和 tracks;音频 cue 拥有时间范围和声道;PDF quote 拥有 page、bbox 或 TextQuoteSelector。展示面据此打开原始材料并定位局部。
资源图还必须支持回源。节点查询结果指向标题行,关系查询结果指向 xref occurrence,payload 校验结果指向 source block。维护者在源表面修复节点、关系和 payload。
该目标状态使 RAG 链路发生变化。模糊检索返回候选资源入口;SPARQL 查询沿关系展开证据链;模型读取资源证据;前端渲染局部材料;报告把错误带回源表面。资源图在这条链路中承担精确索引职责。
6. 从原始资料到可消费资源图
本书的方法从原始资料开始,到源表面维护结束。每个阶段都有明确输入、动作和输出。
6.1. 1. 收集原始资料
输入是未统一的材料集合。材料可以是文本、图片、音频、视频、外部文档、代码、日志、配置、模型输出或人工标注。此阶段只确认材料存在和来源,不急于创建节点。
6.2. 2. 写消费者动作
建模从消费者动作开始。读者要读什么,模型要回答什么,查询器要查什么,前端要渲染什么,QA 要校验什么,reviewer 要审查什么,维护者要回到哪里修改。动作决定后续资源边界。
6.3. 3. 判断资源候选
候选对象可以是标题段落、规则、事件、主张、整张图片、图片局部、整段视频、视频片段、音频片段、transcript cue、PDF quote、网页局部或代码片段。候选对象只有在承担独立引用、查询、渲染、校验、回源或维护动作时成为资源节点。
6.4. 4. 转写 ADOC 源表面
人或模型把获得资格的对象写成 ADOC。标题承载资源节点;正文承载可读证据;标题 attrlist 和描述列表承载字段;xref 承载引用和关系;source block 承载 payload 和 locator。此阶段生成主事实源。
6.5. 5. 投影资源图
投影器从 ADOC 中生成 RDF 或其它图表面。图表面保留资源、字段、关系、payload 引用、xref evidence、source coordinate 和文档顺序。源表面承担维护入口,图表面承担查询入口。
6.6. 6. 建立检索入口
标题 chunk、摘要、正文切片、caption 和字段可以进入向量、关键词或混合检索。地址标签、role、field 和关系进入符号查询表面。检索入口服务候选资源发现。
6.7. 7. 执行两阶段查询
第一阶段用模糊检索找到候选资源入口。第二阶段用 SPARQL 或等价图查询读取字段、父子结构、入边、出边、证据资源、locator 和 source coordinate。第一阶段回答“可能相关”,第二阶段回答“如何相关”。
6.8. 8. 组织答案和资源块
回答系统读取查询结果中的资源证据,生成回答。回答中的 resource block 或 address label link 让前端打开资源卡、图片高亮、视频播放器、音频播放器或文本证据卡。
6.9. 9. 生成报告并回源维护
校验和审查结果进入 source-aware report。节点问题回到标题行,关系问题回到 xref occurrence,payload 问题回到 source block。维护者修改 ADOC 后重新投影,查询和展示结果随源表面更新。
这条流程把抽取、写作、投影、检索、查询、渲染和维护连接为一个闭合系统。后续章节分别展开该流程中的对象、算子和验收条件。
Part II: 资源图建模的对象
本部定义异构资源图的对象边界。读者先获得共同讨论空间:资源图由哪些表面组成,消费者动作如何决定建模准入,完成声明需要哪些可观察结果。
7. 异构资源图的对象
异构资源图是一组围绕资源节点建立的可查询结构。资源节点承载可独立消费的对象;字段承载节点或边上的可观察事实;关系连接节点;payload 保存复杂定位或原始载荷;source coordinate 把查询、校验和报告结果带回源表面。
在本书的方法中,资源图从 ADOC 源表面投影而来。ADOC 源表面保存人或模型对原始资料的转写结果;资源图把这些转写结果变成可查询事实。维护入口是源表面,图表面承担查询、校验、转换和下游消费职责。
异构资源包括文本、图片、音频、视频、外部文档、代码、日志、配置、模型输出和人工标注。它们的文件格式、内部结构和打开方式各不相同。进入同一资源图时,它们共享同一组建模表面:节点身份、字段、关系、locator、payload、查询和回源坐标。
资源图的统一点是消费契约。读者、程序、查询器、校验器、LLM tool 和 reviewer 都围绕相同的资源节点行动。文本标题可以成为 chunk;图片局部可以成为 image region;视频时间片可以成为 video segment;PDF quote 可以成为 evidence chunk。它们的定位方式不同,但进入图后的身份、关系和查询规则可以保持一致。资源图返回可消费证据资源及其关系链。
资源图可以生成多种输出表面。下游工具可以生成 SPARQL 查询结果、source-aware report、前端资源卡、图片区域高亮、视频片段播放器、QA 校验报告和 reviewer 审查清单。输出表面的差异来自消费者动作;源模型仍然围绕同一组节点、字段、关系和 payload 维护。
本书讨论的对象是这套建模方法。具体工具、前端、素材夹具和领域数据只作为表达方法的承载面。读者带走的是推导资源图模型的判断规则,并把这些规则用于自己的业务材料、知识库和下游工具链。
8. 消费者动作
消费者动作是建模准入的根条件。一个对象进入资源图之前,必须说明它服务哪个阅读、查询、验证、回源、维护、渲染、审计或下游工具动作。没有动作的结构只增加维护面。
消费者动作来自资源图的使用链路。回答系统需要读取证据,查询器需要找到资源,前端需要渲染局部,reviewer 需要审查关系,维护者需要回到源表面修改。资源节点、字段、关系和 payload 都从这些动作反推。
| 动作 | 需要的建模表面 | 可观察结果 |
|---|---|---|
引用 |
稳定身份、可寻址 label、关系端点 |
正文、查询结果或工具回答能指向该资源 |
查询 |
role、字段、关系、locator、索引 |
SPARQL 或其它查询能返回该资源 |
校验 |
字段约束、关系端点约束、payload schema |
shape、schema 或报告能指出缺失和错误 |
回源 |
relative path、heading line、payload line、xref occurrence |
报告能带维护者回到源表面 |
渲染 |
媒体路径、locator、caption、资源类型 |
前端能展示图片、区域、视频片段或文本证据 |
审计 |
来源字段、边证据、raw、时间、责任字段 |
reviewer 能检查事实从何处进入模型 |
消费者动作决定建模精度。整张图片只需要作为素材列表出现时,image asset 节点足够;图片中的旗帜区域需要被独立引用、查询和高亮时,该区域获得独立节点资格。整段视频只用于播放时,video asset 节点足够;视频中的某段声音和画面共同支撑一个事件时,该时间片获得 video segment 节点资格。粒度判断不来自对象在原始资料中显得多重要,而来自它是否改变后续消费动作。
同一个事实也由消费者动作决定落位。图片的中文说明服务阅读和展示,适合成为字段;图片中的 bbox 服务定位和渲染,适合进入 locator payload;图片区域与某个事件之间的证据关系服务查询和审查,适合成为 relation edge。
建模讨论应先列消费者动作,再决定资源边界。字段表、role 表和关系表都从这些动作反推。动作不存在时,结构不进入公共模型。
9. 建模表面
异构资源图至少有四个表面:源表面、图表面、报告表面和展示表面。它们服务不同消费者,承担不同动作。
| 表面 | 消费者 | 承担动作 |
|---|---|---|
源表面 |
作者、维护者、code agent |
书写、修改、版本管理、审查 |
图表面 |
SPARQL、校验器、RAG 检索器、下游程序 |
查询、关系扩展、验证、数据转换 |
报告表面 |
QA、reviewer、维护者、agent |
展示缺失、错误、查询结果和回源位置 |
展示表面 |
读者、演示者、业务使用者 |
查看资源卡、媒体片段、图片区域、证据链 |
源表面是事实维护入口。它可以是结构化书稿、领域索引文件、资源清单或其它可审查文本。源表面保存人能维护的标题、字段、关系声明和 payload。
图表面是查询入口。源表面投影为 RDF 1.2 图或其它图结构后,消费者可以按节点身份、字段、关系和定位查询资源。事实来源仍然保留在源表面,图表面承担查询形态。
报告表面把查询和校验结果转成任务视图。报告需要保留资源 label、headline、role、字段、关系、payload 摘要、relative path 和 line。报告的职责是让人或 agent 回到源表面修正模型。
展示表面面向最终体验。图片 asset 渲染为图片卡,image region 渲染为原图加高亮区域,video segment 渲染为带 start/end 的播放器,document chunk 渲染为文本证据卡。展示表面消费报告或 registry,不直接取代源表面。
表面分层让同一模型被不同角色使用。维护者编辑源表面;查询器读取图表面;QA 阅读报告表面;演示者使用展示表面。一个健康模型应让这些表面互相指向,并保持各自职责。
10. 完成契约
完成声明必须落到可观察表面。资源图模型完成时,节点、字段、关系、payload、查询、校验、报告和展示都应形成闭合链路。
| 对象 | 完成条件 | 观察方式 |
|---|---|---|
资源节点 |
拥有稳定身份、角色、标题或名称、回源坐标 |
按 label 或 role 能查询到节点 |
字段 |
服务查询、展示、校验、排序、过滤或报告动作 |
查询结果和报告能读取字段 |
关系 |
拥有明确 source、target、谓词和消费动作 |
SPARQL 能沿关系返回目标资源 |
payload |
拥有字段谓词、format、raw、schema 或解释器、回源坐标 |
报告能解析摘要并指回 payload 源行 |
locator |
能打开或定位原始材料内部位置 |
前端能高亮图片区域或 seek 视频片段 |
查询 |
输入、输出变量和证明能力明确 |
查询案例能返回预期资源集合 |
校验 |
缺失字段、错误关系和非法 payload 能被报告 |
shape、schema 或脚本输出 source-aware report |
运行成功只证明某个实现物出现过。资源图完成需要证明消费者动作成立:查询者能查到,展示面能打开,QA 能校验,reviewer 能审查,维护者能回源。
完成契约也限制新增内容。新增 role 必须改变查询、校验、渲染或审查动作;新增字段必须进入查询、展示、校验、排序、过滤或报告;新增 payload 必须承载平面字段无法健康表达的复杂结构;新增关系必须改变图上的可查询路径。
Part III: 节点、字段与关系的推导
本部给出建模算子。读者从消费者动作反推资源节点、字段、关系谓词、payload 和 source coordinate,使每个结构都有进入公共模型的理由。
11. 节点资格推导
资源节点是被系统独立命名、查询、引用、验证、回源或维护的对象。节点资格来自动作,不来自对象在自然语言中显得重要。
候选对象进入节点判断时,先回答五个问题:
| 问题 | 成立时的节点资格 | 不成立时的落位 |
|---|---|---|
它是否需要被独立引用 |
需要稳定 ID 或标题地址 |
留在父节点正文、字段或 payload 中 |
它是否需要被独立查询 |
需要 role、字段和可查询关系 |
作为父节点字段或 raw 结果 |
它是否需要被独立校验 |
需要 shape、schema 或质量规则 |
并入父节点校验 |
它是否需要回到源表面 |
需要 source coordinate |
只保留外部文件位置或正文说明 |
它是否需要单独维护 |
需要独立标题、字段和变更记录 |
随父节点一起维护 |
文本中的标题天然适合成为资源节点。一个标题可以同时承担阅读单位、RAG chunk、SPARQL 查询单位和回源单位。若段落中的某个句子需要被多处引用、单独校验或作为证据端点,该句子所在区域应提升为更小标题或可寻址片段。
图片整体通常可以成为 image asset 节点。图片内部区域只有在承担独立动作时成为 image region 节点。头盔反射、标牌文字、缺陷区域、医学影像病灶、地图上的路径段,都可能因为查询、证据或渲染动作获得节点资格。
视频整体可以成为 video asset 节点。视频内部时间片在承担事件证据、声音描述、画面描述、字幕 cue 或播放定位动作时成为 video segment 节点。固定时间切割只提供粗粒度候选;节点资格仍由消费动作确认。
音频整体可以成为 audio asset 节点。说话人轮次、语义段、声音事件和 transcript cue 在需要单独查询、引用、校验或播放定位时成为资源节点。标注来源由字段表达;人或模型不改变资源节点本身的类型。
节点资格的输出是一组明确承诺:该节点可以被引用,可以被查询,可以携带字段,可以作为关系端点,可以被报告带回源表面。不能承担这些承诺的候选对象保留为正文、字段、payload 或外部原始材料。
12. 字段资格推导
字段是进入公共模型的可观察事实。字段资格来自查询、展示、校验、排序、过滤、报告或下游工具消费。不能服务这些动作的文字保持为正文说明。
字段推导从消费者动作开始:
| 动作 | 字段例子 | 作用 |
|---|---|---|
查询 |
|
让查询器找到特定资源集合 |
展示 |
|
让前端或报告生成可读说明 |
校验 |
|
让 shape 或 schema 检查完整性 |
排序 |
|
让结果保持稳定顺序 |
过滤 |
|
让消费者缩小结果范围 |
审计 |
|
让 reviewer 判断事实来源和责任 |
字段主体决定落位。描述资源节点的字段写在节点表面;描述关系声明的字段写在边表面;描述复杂定位或嵌套结构的字段指向 payload。
普通可读字段优先使用描述列表。中文摘要、画面说明、声音说明、对象列表、颜色、构图、说话人、语言、来源编号,适合以平面字段进入公共表面。读者能直接读,查询器能直接取值,报告能直接展示。
标题 attrlist 只承载少量短表面。address label、role、状态、短 owner、短 sourceId 可以写在标题附近。字段数量较多、字段值较长或字段需要中文说明时,描述列表更适合维护。
边字段描述一次关系声明。confidence、weight、condition、basis、reviewState 等字段若服务关系本身,应写在 xref 的 named attributes 或对应的 edge payload 中。边字段不描述 source 节点,也不描述 target 节点。
字段进入模型后成为维护承诺。新增字段必须说明消费动作、取值范围、落位方式、查询用途和校验方式。只服务作者临时记忆的内容不进入字段表。
13. 关系谓词资格推导
关系谓词连接两个资源节点,并改变图上的查询路径。关系谓词资格来自明确的 source role、target role、关系含义、查询用途和验证条件。
普通参见关系只表达阅读导航。明确业务关系表达可查询语义。一个关系谓词进入词表前,先回答以下问题:
| 问题 | 要求 |
|---|---|
source 是什么 |
声明关系起点允许哪些 role |
target 是什么 |
声明关系终点允许哪些 role |
关系改变什么查询 |
至少有一个查询案例依赖该谓词 |
是否需要边字段 |
需要时定义字段名、取值和校验规则 |
如何验证 |
通过 SHACL、schema、查询结果或 reviewer checklist 检查 |
evidence-for 服务证据聚合。source 可以是 document chunk、image region、video segment、audio cue 或外部证据片段;target 可以是 event 或 claim。查询者按事件查证据时沿该关系返回不同模态的资源。
features 服务对象出现查询。source 可以是 image region、video segment 或文本片段;target 可以是 person、object、location。查询者查“哪些图片局部出现登月舱”时沿该关系得到 image region。
mentions 服务文本或声音提及索引。source 可以是 transcript cue、document chunk 或 video segment;target 可以是 person、object、event 或 concept。它适合回答“哪里提到了某个对象”。
corresponds-to 服务跨模态对齐。source 和 target 通常是不同模态的资源节点,例如一张图片、一段视频、一个 transcript cue 指向同一事件片段。该关系让查询器把同一事实的多种证据合并。
part-of 服务组成关系。source 是组成部分,target 是整体。标题层级可以在特定 hierarchy policy 下生成组成关系,但结构层级本身不自动等于业务组成。
关系谓词词表应保持小而稳定。新增谓词时,先证明现有谓词无法表达该查询路径,再定义端点、边字段和验证方式。关系谓词没有查询用途时,普通参见已经足够。
14. Payload 资格推导
Payload 承载平面字段无法健康表达的复杂结构。它适合保存 locator、嵌套配置、原始模型输出、外部 selector、复杂边证据和下游 adapter 输入。
Payload 资格由数据形状和消费动作共同决定。若信息可以稳定地用短字段或描述列表表达,并且人需要直接阅读,该信息应保持为普通字段。若信息需要内部结构、数组、坐标、嵌套对象或原始格式保真,该信息进入 payload。
| 对象 | payload 内容 | 消费动作 |
|---|---|---|
图片区域 |
bbox、polygon、maskRef、coordinate unit |
高亮原图局部、生成区域报告 |
视频片段 |
start、end、frameStart、frameEnd、tracks |
seek 播放器、截取片段、对齐字幕 |
音频片段 |
start、end、channel、speaker span |
播放定位、声道过滤、转写对齐 |
PDF 证据 |
page、bbox、TextQuoteSelector、TextPositionSelector |
打开原文并高亮证据 |
模型输出 |
原始 observation、OCR、caption、confidence 数组 |
复核、抽取、升级为节点 |
边证据 |
来源、条件、风险、解释、复核记录 |
审计某一次关系声明 |
Payload 需要字段谓词、format、raw 和解释规则。字段谓词说明 payload 描述什么;format 说明如何解析 raw;schema 说明 raw 内部结构如何被接受;source coordinate 说明维护者如何回到源表面修改 payload。
Payload 不替代字段。图片 caption、视频画面说明、声音说明、对象名称、中文摘要、来源编号、语言等普通事实,应保留为字段。把这些内容塞进 JSON 会降低读者可读性,也会让简单查询变复杂。
Payload 也不自动生成资源节点。模型输出中的候选观察列表可以作为 raw observation payload 保存;其中某个区域经过确认,并承担独立引用、查询、渲染或审查动作时,再成为 image region 或 evidence 资源,并用 locator 指回原始区域。
14.1. 复杂结构提升为资源节点
复杂结构有两种落位方式。第一种是 payload:复杂结构作为某个资源节点或某条关系声明的值保存。第二种是资源节点:复杂结构本身获得独立身份,再通过关系挂到主资源上。
资源节点适合复杂结构本身需要独立消费的场景。一个 locator 若要被多个区域复用,或需要被单独审查和修订,可以成为 locator 节点。一个模型观察若已经被人工或规则确认,并要作为证据参与查询,可以成为 observation、image-region 或 evidence 节点。一个配置若是可独立维护的策略对象,可以成为 config 或 policy 节点。
Payload 适合复杂结构只是节点或边的值的场景。图片区域的 bbox 只服务高亮渲染时,作为 image-locator payload 足够。视频片段的 start、end 和 tracks 只服务播放器定位时,作为 video-locator payload 足够。模型输出的一组候选检测结果只用于复核和筛选时,作为 detection payload 更合适。
| 复杂结构 | 适合落位 | 理由 |
|---|---|---|
图片区域的 bbox |
payload |
它通常只是 image region 的定位值。 |
可被多个资源复用的定位对象 |
资源节点 |
它需要独立身份、关系和维护入口。 |
完整模型 observation list |
payload |
它需要保留数组、置信度和原始输出结构。 |
被确认并作为证据使用的观察结果 |
资源节点 |
它需要被引用、查询、渲染或审查。 |
视频片段的 start/end |
payload |
它通常只是 video segment 的播放坐标。 |
可独立引用的字幕或语音线索 |
资源节点 |
它需要作为 transcript cue 进入证据链。 |
xref 的复杂条件证据 |
edge payload |
它描述的是一次关系声明。 |
可独立审查的证据说明 |
资源节点 |
它本身承担证据对象身份。 |
选择顺序是先判断对象资格,再判断字段资格,最后判断 payload 资格。复杂结构若拥有独立引用、查询、校验、回源、维护或复用动作,就进入资源节点;若只是主节点或关系声明的复杂值,就保留为 payload;若只是普通可读事实,就使用描述列表字段。
15. Source Coordinate 与回源资格
Source coordinate 是资源图回到源表面的定位事实。它让查询结果、校验结果、报告和 agent 操作指向可修改位置。
资源图至少需要三类回源坐标:
| 节点坐标 |
节点标题所在文件、标题行、节点切片起止行。 |
| 关系坐标 |
xref occurrence 所在文件、行列、raw 表面、target selector。 |
| payload 坐标 |
source block 所在文件、起止行、正文起止行、format。 |
节点坐标服务资源维护。查询命中某个 image region、video segment、event 或 claim 后,报告应能展示其 source path 和 heading line。维护者点击后回到源文件对应标题。
关系坐标服务边维护。查询或审查发现某条 evidence-for、features 或 corresponds-to 有端点错误、边字段缺失或 selector 未绑定时,报告应指向 xref 出现点,并同时保留 source heading 作为上下文。
Payload 坐标服务复杂值维护。图片 bbox 错误、视频 start/end 错误、PDF selector 失效、模型 raw 不符合 schema 时,报告应指向 payload block 的源行。
Source coordinate 让资源图保持可维护。没有回源坐标的查询结果只是一张只读表;有回源坐标的结果可以成为任务、审查、修复和 agent 编辑入口。
回源资格也限制模型设计。进入公共图的节点、关系和 payload 都应能回答“维护者从哪里修改它”。无法回源的派生事实需要说明它的生成规则和上游事实来源。
Part IV: 异构模态的进入方式
本部把前一部的推导算子应用到不同模态。每章都围绕同一组问题展开:哪些对象成为资源节点,哪些事实成为字段,哪些定位进入 payload,哪些关系进入图查询。
16. 文本与标题 Chunk
文本资源的基本节点可以由标题承载。标题节点同时是阅读入口、RAG chunk、SPARQL 查询单位和回源单位。标题下的正文、列表、表格、代码块和说明构成该节点的文本切片。
标题边界来自源表面转写。人或模型阅读原始资料后,把需要作为证据资源消费的内容写成标题区域。这个标题区域随后被复用为阅读结构、检索 chunk、图查询资源和回源坐标。标题是建模阶段写入源表面的资源边界。
文本 chunk 的粒度由阅读和检索动作决定。一个章节能够独立回答问题时,该章节适合作为 chunk。段落内部的主张需要被多处引用、校验或作为证据端点时,该区域应提升为更小标题或稳定锚点。
文本节点常用字段包括:
| summary |
该节点内容的短摘要。 |
| role |
节点身份,例如 claim、event、rule、source-text。 |
| sourceId |
外部文档或编号体系中的稳定编号。 |
| language |
文本语言。 |
| quote |
必须精确保存的短证据文本。 |
文本节点常用关系包括:
| supports |
当前节点支持某个主张。 |
| mentions |
当前节点提及某个人、对象、地点或事件。 |
| defines |
当前节点定义某个术语或对象。 |
| evidence-for |
当前节点作为某事件或主张的证据。 |
标题 chunk 适合进入向量、关键词或混合索引。模糊召回返回候选标题后,图查询可以读取该标题的父子结构、出边、入边、字段和回源坐标。检索结果由相似文本入口进入资源图中的上下文和证据链。
文本节点的回源坐标必须保留文件路径和标题行。查询命中文本节点后,维护者可以打开源表面,修改标题、字段、正文或关系。
17. 图片与图片区域
图片资源至少有两个建模层位:整图和区域。整图作为 image asset 承载文件路径、来源编号、中文说明、主题对象、颜色、构图和关联事件。区域作为 image region 承载图片内部可独立消费的位置。
image asset 适合表达整张图片的身份。常用字段包括:
| mediaType |
|
| sourceId |
来源系统中的图片编号。 |
| localPath |
本地图片路径。 |
| captionZh |
中文说明。 |
| objects |
画面中可被查询的对象。 |
| dominantColors |
主色或颜色组。 |
| composition |
构图说明。 |
image region 适合表达图片内部被独立引用、查询、校验或渲染的位置。常用字段包括 regionOf、captionZh、objects 和 visualDescription。区域定位使用 payload 保存 bbox、polygon、maskRef 或其它坐标结构。
{
"asset": "image-as11-40-5903",
"selector": "xywh",
"bbox": [310, 165, 250, 170],
"unit": "pixel"
}
图片区域的关系通常连接对象、人物、地点、事件或主张。features 连接区域中出现的对象;evidence-for 连接区域支持的事件或 claim;corresponds-to 连接与该区域对应的视频片段或文本证据。
图片建模的质量边界是可渲染性和可查询性。image region 被查询返回时,前端应能打开原图并高亮对应区域。若区域无法定位到原图,区域节点的证据能力不完整。
18. 音频与声音片段
音频资源可以按整段资产、时间片、说话人轮次、声音事件和 transcript cue 建模。每种节点的资格来自独立播放、查询、引用、校验或证据动作。
audio asset 承载整段音频的身份。常用字段包括 mediaType、localPath、duration、language、speakers、captionZh。它适合服务音频目录、素材清单和整段播放。
audio segment 承载音频内部的时间范围。常用字段包括 start、end、audioDescription、speaker、transcriptCue。时间定位进入 audio locator payload。
{
"asset": "audio-interview-001",
"start": "PT1M20S",
"end": "PT1M38S",
"tracks": ["audio"]
}
transcript cue 是声音内容的文本化资源。它可以保存 speaker、原文短句、中文释义、sourceUrl、relatedSegment。cue 适合成为事件证据、人物提及索引或语音问答依据。
声音事件可以表达非语言内容,例如掌声、警报、脚步、爆炸声、门铃、雨声。声音事件进入节点前,同样需要独立消费动作。只作为模型临时观察结果的声音事件可以保留在 payload 中。
标注来源以字段表达。annotator、method、model、reviewState、confidence 可以记录人或模型如何产生该标注。来源字段不改变 audio segment、utterance 或 sound event 的节点身份。
19. 视频与视听时间片
视频资源同时包含视觉轨和声音轨。video asset 承载整段视频身份;video segment 承载可独立消费的时间片;必要时,视频片段还可以连接 transcript cue、frame region 或外部事件节点。
video asset 常用字段包括 mediaType、localPath、duration、captionZh、sourceId、thumbnailPath。它服务视频目录、整段播放和素材检索。
video segment 的字段必须同时考虑画面和声音。visualDescription 描述画面内容;audioDescription 描述声音内容;start 和 end 描述时间边界;transcriptCue 连接语音文本;event 或 relation 连接事件节点。
{
"asset": "video-one-small-step",
"start": "PT0M34S",
"end": "PT0M58S",
"tracks": ["visual", "audio"]
}
视频时间片的边界来自事件、镜头、语义动作、声音内容或证据引用。固定秒数可以生成候选切片,但可维护节点需要说明它服务的消费动作。
视频片段常用关系包括:
| evidence-for |
片段为事件或 claim 提供证据。 |
| features |
片段画面中出现人物、地点或对象。 |
| mentions |
片段声音或字幕提及人物、地点或对象。 |
| corresponds-to |
片段与图片、文本 cue 或其它模态资源对齐。 |
视频资源的展示面应支持定位播放。查询返回 video segment 时,前端应能定位到 start time,并展示 start、end、画面描述、声音描述和关联资源。
20. 外部文档与 Selector
外部文档资源包括 PDF、网页、Word、电子表格、代码文件和日志文件。它们可以保持在原始系统中;资源图保存可查询节点、证据关系和打开原文位置所需的 selector。
外部文档整体可以成为 document asset。字段包括 sourceUrl、localPath、title、publisher、language、retrievedAt、sourceId。这些字段服务来源追踪、过滤和打开原文。
外部文档内部片段可以成为 evidence chunk。片段字段包括 captionZh、quote、page、section、sourceFile、language。复杂定位进入 locator payload。
{
"pdf": {
"page": 12,
"bbox": [120, 300, 450, 80]
},
"textQuote": {
"exact": "温度记录完整后方可放行",
"prefix": "审计结论:",
"suffix": "。"
}
}
网页片段可以使用 URL、CSS selector、XPath、TextQuoteSelector 或 TextPositionSelector。代码片段可以使用 file path、symbol name、line span 或 AST path。日志片段可以使用 file path、timestamp、line span 或 trace id。
Selector 的职责是定位原文。资源图保存打开位置和证据关系;原始材料仍由外部系统或文件保存。查询命中 evidence chunk 后,前端或 adapter 根据 selector 打开原文位置。
21. 跨模态事件聚合
跨模态事件是连接多种资源的汇合节点。一个事件可以由文本说明、图片区域、视频时间片、音频 cue、PDF 证据和外部网页共同支撑。
event 节点承载事件身份。常用字段包括 summary、time、location、participants、status。事件节点不替代证据资源;它提供证据聚合的中心。
证据资源通过 evidence-for 指向事件。图片区域通过 features 连接事件涉及的对象;视频片段通过 mentions 或 features 连接声音和画面内容;文本 cue 通过 corresponds-to 与视频片段对齐。
[#event-first-step.event]
== 阿姆斯特朗踏上月面
summary:: 阿姆斯特朗从登月舱梯子下降并踏上月面。
该事件由 xref:video-first-step[第一步视频片段, rel=evidence-for]、
xref:cue-first-step[第一步语音线索, rel=evidence-for] 和
xref:image-ladder-region[登月舱梯子区域, rel=evidence-for] 共同支撑。
跨模态聚合让查询从事件出发返回不同模态资源。一个查询可以同时得到文本证据、图片区域、视频片段和声音 cue;前端再根据各自 locator 渲染文本卡、图片高亮和视频播放器。
事件节点也服务审查。reviewer 可以检查某事件是否至少有一条证据入边,证据是否拥有回源坐标,跨模态对应是否有明确关系谓词。
Part V: 查询、RAG 与工具消费
本部说明资源图如何被查询和消费。模糊召回找到候选资源入口;SPARQL 查询沿字段、关系、locator 和 source coordinate 展开证据链;工具调用、资源块渲染和 source-aware report 让这条 RAG 链路保持可见。
22. SPARQL 查询面
SPARQL 查询面让资源节点、字段、关系和 payload 进入可检查的查询动作。查询模式围绕消费者问题设计,并把图中的三元组组织成可消费结果。
按 label space 查资源:
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
SELECT ?resource ?headline ?role ?path ?line WHERE {
VALUES ?label { "event-first-step" }
{
?resource aat:addressLabel ?label .
} UNION {
?resource aat:generatedAddressLabel ?label .
} UNION {
?resource aat:headline ?label .
}
?resource aat:headline ?headline ;
aat:relativePath ?path ;
aat:headingLine ?line .
OPTIONAL { ?resource aat:role ?role . }
}
按 role 查节点集合:
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
SELECT ?resource ?headline ?path ?line WHERE {
?resource aat:role "image-region" ;
aat:headline ?headline ;
aat:relativePath ?path ;
aat:headingLine ?line .
}
ORDER BY ?headline
按关系查事件证据:
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
PREFIX rel: <https://micheng.dev/ns/asciidoc-relation#>
SELECT ?evidence ?headline ?role WHERE {
?event aat:addressLabel "event-first-step" .
?evidence rel:evidence-for ?event ;
aat:headline ?headline ;
aat:role ?role .
}
ORDER BY ?role ?headline
按对象查图片区域:
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
PREFIX rel: <https://micheng.dev/ns/asciidoc-relation#>
SELECT ?region ?headline ?locator WHERE {
?object aat:addressLabel "object-lunar-module" .
?region aat:role "image-region" ;
rel:features ?object ;
aat:headline ?headline ;
aat:image-locator ?locator .
}
查询结果应保留资源 IRI、命中的 label、headline、role、source path、heading line 和可渲染 locator。这样同一查询结果可以进入表格、JSON、资源卡、媒体定位和源文件定位。label 是查询入口;资源 IRI 承担投影图中的资源身份。
23. 模糊召回与图查询
RAG 的检索面可以分成模糊召回和结构查询。模糊召回负责找到候选资源;结构查询负责沿字段、关系和定位扩展证据。
两阶段查询对应两个不同问题。第一阶段处理用户问题与资源入口之间的模糊匹配;第二阶段处理候选资源与证据链之间的符号关系。第一阶段返回候选,第二阶段返回可消费资源集合及其定位、来源和关系。
标题 chunk 适合进入向量、关键词或混合索引。每个 chunk 保存 address label、headline、role、raw text、source path 和 heading line。嵌入模型或文本索引把 chunk 转换为可召回入口,检索返回语义或词面相近的候选资源。
候选资源进入图查询。查询器按候选 address label 或资源 IRI 找到 heading node,再读取字段、父子结构、出边、入边、相关图片区域、视频片段、transcript cue 和 source coordinate。这个阶段把相似文本扩展为结构化证据链。
| 阶段 | 输入 | 输出 |
|---|---|---|
模糊召回 |
用户问题、chunk 向量索引 |
候选 address label、headline、score |
图查询 |
候选 address label 或资源 IRI、SPARQL 查询、资源图 |
字段、关系、证据、locator、source coordinate |
答案组织 |
查询结果、资源 registry、系统提示 |
文本回答、资源块、工具调用记录 |
模糊召回解决“可能相关”。图查询解决“如何相关、证据在哪里、还能连接到什么”。两层分工让 RAG 答案既能覆盖自然语言提问,又能保持可见证据链。图查询的结果应回到可读、可渲染、可回源的资源。
当候选节点是文本 chunk 时,图查询可以返回支持它的图片、视频和外部文档。候选节点是图片区域时,图查询可以返回它出现的对象、支撑的事件和对应的视频片段。候选节点是视频片段时,图查询可以返回声音 cue、画面对象和文本说明。
24. LLM 工具调用
回答系统在资源图上工作时,应通过显式工具调用访问查询面。工具调用把模型回答从口头断言连接到可见检索动作。
查询工具可以收敛为一个:sparql_query。该工具接收 SPARQL SELECT 查询字符串,在本地或服务端资源图上执行,返回变量、行集、资源摘要和错误信息。
{
"name": "sparql_query",
"input": {
"query": "SELECT ?resource ?headline WHERE { ?resource aat:role \"video-segment\" ; aat:headline ?headline . }"
}
}
工具结果应保留原始绑定和友好化资源摘要。资源摘要是回答系统组织证据的输入,也是前端和报告继续消费的入口:
{
"ok": true,
"rowCount": 2,
"variables": ["resource", "headline"],
"rows": [
{
"resource": "urn:resource:video-first-step",
"headline": "第一步视频片段"
}
],
"resources": [
{
"id": "video-first-step",
"role": "video-segment",
"headline": "第一步视频片段",
"sourcePath": "source/videos/one-small-step.adoc",
"headingLine": 17
}
]
}
工具调用记录应进入可展开展示面。展示面至少包含工具名、执行状态、耗时、SPARQL 查询语句、返回结果表格、JSON 和资源卡。查询记录让用户、QA 和 reviewer 看到回答系统如何从资源图取得证据。
工具只承担查询动作。修改源表面、写回字段、生成新节点和编辑 payload 属于维护流程,不属于普通问答工具的默认动作。
25. 资源块与媒体渲染
资源块把模型回答连接到可渲染资源。模型输出资源 address label,前端根据 resource registry 查到资源类型、字段、locator、媒体路径和源文件坐标。
一种可维护的资源块表面是 fenced block:
```sparrag-resource
id: video-first-step
mode: embed
caption: 第一脚踏上月面的关键视频片段
```
资源块字段保持少量稳定:
| id |
必填,资源 address label。长期公开引用通常使用作者维护的 stable ID 作为 address label。 |
| mode |
可选, |
| caption |
可选,覆盖默认显示标题。 |
前端解析资源块后,根据 role 渲染不同组件:
| role | 渲染方式 |
|---|---|
image-asset |
显示整张图片、caption、sourceId |
image-region |
显示原图并叠加 bbox 或 polygon 高亮 |
video-asset |
显示视频播放器 |
video-segment |
显示视频播放器,定位到 start,展示 start/end |
audio-segment |
显示音频播放器,定位到 start |
document、event、claim、transcript-cue |
显示文本证据卡和源文件定位 |
普通 Markdown 链接也可以作为增强表面,例如 sparrag:event-first-step。点击链接后,前端应打开资源详情,并定位到源文件树中的对应标题行。该地址首先在 resource registry 的 label space 中解析;解析结果再绑定到具体资源。
资源块让答案拥有可操作证据。读者不只看到模型说了什么,还能打开图片区域、视频片段、音频时间点或源文档标题。
26. Source-aware Report
Source-aware report 把查询和校验结果转换成可编辑任务视图。它保存资源身份、字段、关系、payload 摘要和回源坐标。
{
"id": "region-visor-reflection",
"headline": "头盔反射区域",
"role": "image-region",
"fields": {
"regionOf": ["image-as11-40-5903"],
"objects": ["Lunar Module", "Neil Armstrong"]
},
"locator": {
"kind": "image",
"asset": "image-as11-40-5903",
"bbox": [310, 165, 250, 170]
},
"source": {
"relativePath": "source/images/as11-40-5903.adoc",
"headingLine": 21
}
}
报告服务三类动作。QA 用报告检查模型是否满足约束;reviewer 用报告审查资源来源和关系;维护者或 agent 用报告回到源表面修改字段、关系或 payload。
报告从源表面和图表面派生,记录当前查询或校验的结果。修改发生在源表面;报告在下一次构建后更新。
source-aware report 应覆盖节点、关系和 payload。节点报告指向标题行;关系报告指向 xref occurrence;payload 报告指向 source block。这样缺失字段、错误关系和 locator 错误都能回到对应维护位置。
Part VI: 质量、验证与审查
本部把建模承诺转换为验收和审查表面。资源图的质量由查询、校验、展示、回源和 reviewer checklist 共同判断。
27. 完成声明
完成声明是可观察契约。一个模型完成时,读者、查询器、校验器、前端、QA 和 reviewer 都能从自己的表面观察到对应结果。
完成声明覆盖从源表面到消费表面的整条链路。原始资料被转写为 ADOC 源表面,源表面被投影为资源图,资源图支持查询,查询结果支持渲染和报告,报告能回到源表面修改。链路中的任一断点都会破坏完成声明。
| 承诺 | 观察动作 | 失败表现 |
|---|---|---|
资源节点可查询 |
按 address label、role 或字段查询 |
节点无法被查询返回 |
字段可消费 |
查询、渲染、校验或报告读取字段 |
字段只存在于正文叙述中 |
关系可遍历 |
SPARQL 沿 rel 返回目标资源 |
关系只有自然语言说明 |
payload 可解释 |
schema 或 adapter 读取 raw 与 format |
JSON/YAML 无字段谓词或 schema |
locator 可打开 |
前端定位图片区域、视频时间片或外部文档位置 |
查询结果无法打开原始材料 |
问题可回源 |
报告显示 relativePath、line、raw 或 payload span |
错误只能在生成物中看到 |
| 链路 | 观察动作 | 失败表现 |
|---|---|---|
源表面转写 |
ADOC 中存在标题、正文、字段、xref 或 payload |
抽取结果只存在于外部临时数据 |
图投影 |
资源、字段、关系、payload 和 source coordinate 出现在图表面 |
源表面与查询表面断开 |
证据消费 |
查询结果能被回答系统、前端或报告读取 |
查询返回中间事实但无法形成证据资源 |
回源维护 |
错误能定位到标题、xref occurrence 或 source block |
维护者只能修改派生结果 |
完成声明不能由“文件存在”替代。ADOC 源文件存在、Turtle 文件生成、前端页面能打开,只是实现物出现。模型完成需要证明消费者动作成立。
完成声明也不能由“内容丰富”替代。字段很多、关系很多、payload 很大,都不自动构成完成。每个结构都必须服务查询、渲染、校验、回源或审查。
完成报告应把每个黑盒承诺映射到观察面。没有观察面的承诺不能进入完成声明。
28. Schema 与 SHACL
Schema 和 SHACL 把建模规则转成可执行检查。它们不替代建模判断;它们让判断产生可观察结果。
字段约束检查节点是否具备必要事实。例如 image asset 需要 captionZh 和 sourceId;video segment 需要 start、end、visualDescription 和 audioDescription;query case 需要 queryFile 和 proves。
关系约束检查端点是否符合词表。features 的 source 应是能呈现对象出现的资源,target 应是 person、object、location 或 concept;evidence-for 的 target 应是 event 或 claim;corresponds-to 的端点应能解释跨模态对齐。
Payload schema 检查 raw 内部结构。image locator 需要 asset、selector、bbox 或 polygon;video locator 需要 asset、start、end 和 tracks;PDF locator 需要 source file、page、bbox 或 text quote。
@prefix aat: <https://micheng.dev/ns/asciidoc-abundant-tree#> .
@prefix sh: <http://www.w3.org/ns/shacl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
[] a sh:NodeShape ;
sh:targetClass aat:Heading ;
sh:property [
sh:path aat:headline ;
sh:minCount 1 ;
sh:datatype xsd:string ;
sh:message "resource node must expose a headline"
] ;
sh:property [
sh:path aat:relativePath ;
sh:minCount 1 ;
sh:message "resource node must expose source path"
] .
校验结果必须回源。violation 只给 focus node 不够;报告应读取该节点的 headline、role、relativePath 和 headingLine,帮助维护者回到源表面。
29. 查询验收
查询验收检查模型是否支持预期消费者问题。每个查询案例都应声明输入、输出变量、证明能力和结果消费面。
| 查询 | 输入 | 输出 | 证明能力 |
|---|---|---|---|
按事件查证据 |
event address label |
evidence resource、role、headline、source |
不同模态证据能聚合到同一事件 |
按对象查图片区域 |
object address label |
image region、locator、source |
图片局部能独立查询和渲染 |
查有声音描述的视频片段 |
role= |
segment、visualDescription、audioDescription |
视频片段承载视听双轨字段 |
查跨模态对应 |
resource address label |
corresponding resources |
图片、视频、文本 cue 能对齐 |
按资源查源文件 |
resource address label |
relativePath、headingLine |
查询结果能回源 |
查询验收检查查询结果是否能被后续表面消费。若查询返回资源 IRI,但无法得到 headline、role、source path 或 locator,该查询仍然缺少消费能力。
查询案例应进入书稿或模型目录。每个查询都有文件名、输入说明、输出变量、证明的建模能力和预期展示方式。这样 QA 可以复现,reviewer 可以审查,开发者可以接入 UI。
30. 展示验收
展示验收检查资源图是否能转成可感知结果。展示层证明 locator、resource registry、source coordinate 和媒体字段可被消费。
| 资源 | 展示要求 | 验收动作 |
|---|---|---|
image-asset |
显示图片、caption、sourceId |
打开资源卡,图片可见 |
image-region |
显示原图并高亮 bbox 或 polygon |
点击查询结果,高亮区域位置正确 |
video-asset |
显示播放器和视频说明 |
能播放整段视频 |
video-segment |
播放器定位到 start,显示 start/end |
点击资源块后从片段起点播放 |
audio-segment |
播放器定位到 start,显示声音说明 |
能从指定时间点播放 |
document chunk |
显示文本证据和源文件位置 |
点击链接定位到源标题 |
展示验收应同时检查源文件定位。资源卡中的标题或链接应能打开源路径并定位到 heading line。这样展示面才能证明 source-aware graph 的回源能力。
工具调用展示也属于验收对象。用户应能看到工具名、SPARQL 查询、返回表格、JSON 和友好资源卡。隐藏查询过程会削弱 RAG 的可审查性。
31. 审查清单
Reviewer 使用清单判断新增内容是否保持模型健康。
31.1. 节点审查
-
新节点是否服务独立引用、查询、校验、回源或维护动作。
-
新节点是否拥有稳定身份、headline、role 和 source coordinate。
-
新节点是否能作为关系端点或查询结果被消费。
31.2. 字段审查
-
新字段是否服务查询、展示、校验、排序、过滤、报告或审计。
-
字段是否放在合适表面:attrlist、描述列表、边字段或 payload。
-
字段取值是否需要 schema、枚举或格式约束。
31.3. 关系审查
-
新 rel 是否有 source role 和 target role。
-
新 rel 是否改变至少一个查询路径。
-
边字段是否描述关系声明本身。
-
普通参见是否被错误升级为业务关系。
31.4. Payload 审查
-
payload 是否承载复杂定位、嵌套结构、原始模型输出或边证据。
-
payload 是否有字段谓词、format、schema 或解释器。
-
payload 是否保留 source coordinate。
-
普通可读说明是否被误塞进 JSON 或 YAML。
31.5. 查询与展示审查
-
新资源是否能被至少一个查询案例覆盖。
-
查询结果是否带 headline、role、source path 和 locator。
-
前端或报告是否能渲染该资源。
-
错误是否能回到源表面修复。
32. 反模式
本章批判建模工作中的群体性坏习惯。这些坏习惯会让资源图变成字段堆、payload 垃圾桶或不可回源的查询幻象。
32.1. 字段堆积
字段堆积把能想到的信息都写成字段。字段数量增加后,查询、校验和维护负担同步增加。健康字段来自消费动作;没有消费动作的事实保持为正文说明。
32.2. Payload 垃圾桶
Payload 垃圾桶把普通说明、摘要、对象名和状态全部塞进 JSON。这样会破坏人读表面,也会让简单查询依赖 raw 解析。健康 payload 只承载复杂定位、嵌套结构、原始模型输出和边证据。
32.3. Role 膨胀
Role 膨胀为每个细微差异创建类型。role 过多会让查询、校验和渲染分支失控。健康 role 应对应不同字段、关系、查询、渲染或校验动作。
32.4. Rel 装饰化
Rel 装饰化把普通阅读参见写成业务关系。关系谓词进入图后会改变查询路径和质量约束。健康 rel 必须有端点、语义、边字段需求和查询用途。
32.5. 来源污染主线
来源污染主线把 sourceUrl、来源说明、下载记录和检索过程推到读者主体验中。来源字段服务校对、审计和回源;正文和展示主线应围绕读者要完成的查询、理解和证据定位动作。
32.6. 运行成功冒充完成
运行成功冒充完成把“脚本跑通”“页面打开”“文件生成”当成模型完成。健康完成声明需要节点、字段、关系、payload、查询、校验、展示和回源全部可观察。
Part VII: 决策树与模板
本部把全书方法压缩为决策树和模板。读者可以从自己的业务材料出发,逐步推导节点、字段、关系、payload、查询和审查条件。
33. 节点准入决策树
1. 当前候选对象是否需要被独立引用?
├─ 是:进入节点候选。
└─ 否:进入问题 2。
2. 当前候选对象是否需要被独立查询?
├─ 是:进入节点候选。
└─ 否:进入问题 3。
3. 当前候选对象是否需要被独立校验、回源、维护或渲染?
├─ 是:进入节点候选。
└─ 否:保留为正文、字段、payload 或原始材料。
4. 节点是否拥有可查询地址?
├─ 是:使用既有编号、标题文本、generated label 或 stable ID。
└─ 否:为长期引用节点声明 stable ID 作为 address label。
5. 节点是否需要 locator?
├─ 是:定义对应 locator payload。
└─ 否:保留 source coordinate 即可。
6. 节点是否需要 role?
├─ 是:从受控 role 词表选择。
└─ 否:补充 role 设计或收回节点承诺。
节点准入的输出应包括节点名称、address label、role、字段、可能关系、locator 和 source coordinate。没有这些输出,节点只是标题形态的正文片段。
34. 字段落位决策树
1. 该信息服务哪个动作?
├─ 查询、展示、校验、排序、过滤、报告、审计:进入问题 2。
└─ 无明确动作:保留为正文或删除结构字段。
2. 字段主体是什么?
├─ 资源节点:进入问题 3。
├─ 关系声明:写为边字段或 edge payload。
└─ 外部定位或复杂结构:进入 payload 决策树。
3. 字段是否短且数量少?
├─ 是:可写入标题 attrlist。
└─ 否:进入问题 4。
4. 字段是否为普通可读文本?
├─ 是:写入标题下描述列表。
└─ 否:进入问题 5。
5. 字段是否为嵌套结构、坐标、数组或 raw 输出?
├─ 是:写入 payload。
└─ 否:重新定义字段含义。
字段落位完成后,写作者应补充字段名、取值范围、消费者、查询用途和校验规则。
35. 关系谓词决策树
1. 当前连接是否只服务普通阅读参见?
├─ 是:使用普通 reference。
└─ 否:进入问题 2。
2. 当前连接是否改变查询路径?
├─ 是:进入 relation predicate 候选。
└─ 否:保留为正文说明。
3. source role 和 target role 是否明确?
├─ 是:进入问题 4。
└─ 否:先补 role 设计。
4. 是否存在已有 rel 能表达该路径?
├─ 是:复用已有 rel。
└─ 否:进入问题 5。
5. 新 rel 是否有查询案例和验证方式?
├─ 是:加入 rel 词表。
└─ 否:收回新 rel。
6. 该关系是否需要边字段?
├─ 是:定义边字段和校验规则。
└─ 否:保留纯关系边。
关系谓词设计完成后,应记录谓词名、定义、source role、target role、查询案例、边字段和 reviewer 检查项。
36. Payload 与 Locator 决策树
1. 当前信息是否为复杂结构?
├─ 是:进入 payload 候选。
└─ 否:优先使用普通字段。
2. 当前信息是否用于定位原始材料内部位置?
├─ 是:定义 locator payload。
└─ 否:进入问题 3。
3. 当前信息是否需要保留 raw、format 或嵌套层级?
├─ 是:定义 payload schema。
└─ 否:重新考虑字段落位。
4. payload 是否有消费者?
├─ 是:写明查询、渲染、校验或 adapter 动作。
└─ 否:不进入公共模型。
5. payload 是否能回源?
├─ 是:保留 source coordinate。
└─ 否:说明生成规则和上游事实来源。
locator 类型由原始材料决定。图片使用 bbox、polygon 或 mask;视频和音频使用 start/end、frame range、track;PDF 使用 page、bbox、text quote;网页使用 URL、text quote、position 或 selector。
37. RAG 查询路径决策树
1. 用户问题是否需要模糊召回?
├─ 是:先查向量索引,返回候选 address label。
└─ 否:直接进入图查询。
2. 候选资源是否需要结构扩展?
├─ 是:按 address label 或资源 IRI 查询字段、关系、父子结构和证据。
└─ 否:返回候选资源正文和 source coordinate。
3. 回答是否需要多模态证据?
├─ 是:查询 image-region、video-segment、audio-cue 或 external locator。
└─ 否:保留文本证据。
4. 答案是否需要可见资源?
├─ 是:输出 resource block 或 address label link。
└─ 否:输出文本摘要和引用。
5. 查询过程是否进入审查表面?
├─ 是:展示工具调用、SPARQL、表格、JSON 和资源卡。
└─ 否:至少保留可展开工具记录。
RAG 查询路径的输出应包括自然语言回答、使用过的查询、命中的资源、可见证据和源文件定位。
38. 词表新增审查表
新增 role、rel、field 或 payload schema 前,使用本表审查。
| 对象 | 必须回答 | 拒绝条件 |
|---|---|---|
role |
它改变哪些字段、关系、查询、渲染或校验 |
只表达命名偏好 |
rel |
source role、target role、查询路径和验证方式是什么 |
只是普通阅读参见 |
field |
服务哪个查询、展示、校验、排序、过滤或报告动作 |
只服务作者临时记忆 |
payload schema |
解释哪个复杂 raw,谁解析,如何校验 |
普通字段被塞进复杂载荷 |
locator |
能打开哪个原始材料内部位置 |
只保存无法使用的说明文本 |
新增词表项还必须更新相关文档:词表章节、查询案例、校验规则、报告字段、展示组件和 reviewer checklist。无法更新这些表面的新增项不进入公共模型。
39. 建模施工模板
读者可以用以下模板把一个业务领域转成资源图模型。
39.1. 1. 写消费者动作
消费者:
动作:
输入:
期望输出:
是否需要查询:
是否需要渲染:
是否需要校验:
是否需要回源:
39.2. 2. 列资源候选
候选对象:
独立引用:
独立查询:
独立校验:
独立回源:
独立维护:
节点结论:
39.3. 3. 推导字段
字段名:
字段主体:
消费者动作:
落位:
取值范围:
校验方式:
39.4. 4. 推导关系
关系谓词:
source role:
target role:
查询用途:
边字段:
验证方式:
39.5. 5. 推导 payload 与 locator
payload 字段谓词:
format:
raw 结构:
schema:
source coordinate:
渲染或 adapter 动作:
39.6. 6. 写查询案例
查询问题:
输入变量:
SPARQL 模式:
输出变量:
证明能力:
展示方式:
39.7. 7. 写验收项
需求:
观察动作:
输入:
预期结果:
失败表现:
回源位置:
施工模板的输出应进入项目的词表、查询、校验、报告和审查流程,并随模型演化持续更新。
Appendix A: 附录 A:表达表面速查
| 表面 | 用途 |
|---|---|
标题 |
创建可寻址资源节点。 |
stable ID |
作为作者维护的 address label,为长期引用、查询和资源块渲染提供公开地址。 |
role |
声明资源节点身份,服务查询、渲染和校验。 |
描述列表字段 |
保存普通可读字段,例如摘要、画面说明、声音说明、对象列表。 |
xref |
连接当前资源与目标资源。 |
xref |
声明明确关系谓词。 |
xref named attributes |
保存边字段,例如 confidence、condition、basis。 |
source block payload |
保存复杂定位、嵌套结构或原始模型输出。 |
source coordinate |
保存回到源文件、关系声明或 payload 的位置。 |
表达表面按消费者动作选择。短字段靠近标题,长字段放描述列表,复杂定位进入 payload,关系语义进入 xref。
Appendix B: 附录 B:查询模式速查
40. 按 label space 查询
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
SELECT ?resource ?headline ?role ?path ?line WHERE {
VALUES ?label { "resource-id" }
{
?resource aat:addressLabel ?label .
} UNION {
?resource aat:generatedAddressLabel ?label .
} UNION {
?resource aat:headline ?label .
}
?resource aat:headline ?headline ;
aat:relativePath ?path ;
aat:headingLine ?line .
OPTIONAL { ?resource aat:role ?role . }
}
41. 按角色查询
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
SELECT ?resource ?headline WHERE {
?resource aat:role "image-region" ;
aat:headline ?headline .
}
42. 按关系查询证据
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
PREFIX rel: <https://micheng.dev/ns/asciidoc-relation#>
SELECT ?evidence ?headline ?role WHERE {
?event aat:addressLabel "event-id" .
?evidence rel:evidence-for ?event ;
aat:headline ?headline ;
aat:role ?role .
}
43. 按对象查询图片区域
PREFIX aat: <https://micheng.dev/ns/asciidoc-abundant-tree#>
PREFIX rel: <https://micheng.dev/ns/asciidoc-relation#>
SELECT ?region ?headline ?locator WHERE {
?object aat:addressLabel "object-id" .
?region aat:role "image-region" ;
rel:features ?object ;
aat:headline ?headline ;
aat:image-locator ?locator .
}
查询模板需要结合项目的 role、rel 和字段词表使用。模板自身不替项目完成本体设计。
Appendix C: 附录 C:审查清单速查
44. 节点
-
节点是否服务独立动作。
-
节点是否有稳定身份。
-
节点是否有 role。
-
节点是否能查询和回源。
45. 字段
-
字段是否服务消费动作。
-
字段落位是否正确。
-
字段是否有取值规则。
-
字段是否能被查询或校验。
46. 关系
-
rel 是否有明确 source role 和 target role。
-
rel 是否改变查询路径。
-
边字段是否描述关系声明。
-
普通参见是否被错误升级。
47. Payload
-
payload 是否承载复杂结构。
-
payload 是否有 format 和 schema。
-
payload 是否能回源。
-
payload 是否被普通字段污染。
48. 查询与展示
-
查询结果是否带资源身份。
-
查询结果是否带 source coordinate。
-
展示面是否能打开资源。
-
错误是否能回到源表面。
术语表
- 原始资料
-
被建模前的资料来源,例如 PDF、网页、图片、音频、视频、日志、代码文件、模型输出和人工标注。
- ADOC 源表面
-
人或模型阅读原始资料后写出的结构化 AsciiDoc 文档表面。它同时承担阅读、版本管理、结构投影、查询和回源维护职责。
- 资源节点
-
被系统独立命名、查询、引用、验证、回源或维护的对象。
- 可消费证据资源
-
能被读者、模型、前端、QA 或 reviewer 使用的证据单位。它可以是标题文本切片、图片区域、视频片段、音频 cue、PDF quote 或外部 selector。
- 资源证据图
-
从源表面投影出的资源图。它服务 RAG 证据消费、关系查询、媒体定位和回源维护,不等同于以事实三元组为主要消费对象的领域知识图谱。
- 异构资源图
-
由不同模态和来源的资源节点、字段、关系、payload、locator 和查询表面组成的图模型。
- 消费者动作
-
读者、程序、查询器、校验器、前端、LLM tool、QA 或 reviewer 对模型执行的动作。
- 字段
-
进入公共模型的可观察事实,服务查询、展示、校验、排序、过滤、报告或审计。
- payload
-
保存复杂定位、嵌套结构、原始模型输出或边证据的载荷。
- locator
-
打开或定位原始材料内部位置的数据结构。
- source coordinate
-
回到源表面的路径、行号、列号、payload span 或关系 occurrence 坐标。
- mechanical resource IRI
-
投影图中承担资源结构身份的机械 IRI。它不同于标题文本、stable ID、generated label 和其它查询 label。
- address label
-
资源的可查询地址标签。标题文本、显式 ID、生成地址、local target alias 和外部编号都可以作为查询入口。
- stable ID
-
作者为长期引用、查询和资源块渲染声明的 address label。它是源表面的维护承诺;投影图中的资源身份由 mechanical resource IRI 承担。
- role
-
资源节点身份字段。
- rel
-
xref 边上的关系谓词。
- edge evidence
-
描述一次关系声明来源、字段、raw 和回源位置的边证据。
- 源表面
-
作者和维护者编辑的结构化文本表面。
- 图表面
-
从源表面投影出的可查询图数据表面。
- 报告表面
-
把查询、校验或审查结果组织成任务视图的表面。
- 展示表面
-
面向读者、演示者或业务使用者的资源卡、媒体片段和证据链表面。
- image asset
-
整张图片资源节点。
- image region
-
图片内部可独立消费的区域资源节点。
- video asset
-
整段视频资源节点。
- video segment
-
视频内部可独立消费的时间片资源节点。
- transcript cue
-
声音或文本中的短线索资源节点。
- SPARQL
-
面向 RDF 1.2 图的查询语言,本书用它表达资源节点、字段、关系和 locator 的查询模式。
- RAG
-
检索增强生成;本书把它拆成模糊召回、图查询、答案组织和资源渲染等可观察动作。
- 向量召回
-
使用嵌入向量返回语义相近候选资源的检索阶段。
- SHACL
-
面向 RDF 1.2 图的 shape 校验语言,本书用它表达字段、关系和节点质量约束。
- schema
-
下游消费者用于检查字段或 payload 内部结构的约束。
- resource registry
-
面向展示层的资源索引,保存 address label、role、headline、source coordinate、media path 和 locator 等渲染所需事实。
- source-aware report
-
带有 source coordinate 的查询、校验或审查报告。
- resource block
-
模型回答中引用 address label 并由前端渲染为资源卡的块。
- 模糊召回
-
使用向量、关键词、BM25、全文搜索或混合检索返回候选资源入口的阶段。
- 符号扩展
-
使用 SPARQL 或等价图查询沿字段、关系、父子结构、locator 和 source coordinate 展开证据链的阶段。
参考坐标
-
[rdf12-concepts] W3C, RDF 1.2 Concepts and Abstract Data Model, https://www.w3.org/TR/rdf12-concepts/
-
[sparql] W3C, SPARQL Query Language, https://www.w3.org/TR/sparql12-query/
-
[shacl] W3C, Shapes Constraint Language (SHACL), https://www.w3.org/TR/shacl/
-
[prov-o] W3C, PROV-O: The PROV Ontology, https://www.w3.org/TR/prov-o/
-
[web-annotation] W3C, Web Annotation Data Model, https://www.w3.org/TR/annotation-model/
-
[rag] Patrick Lewis et al., Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks, https://arxiv.org/abs/2005.11401
-
[microsoft-graphrag] Microsoft, GraphRAG Documentation, https://microsoft.github.io/graphrag/
-
[lightrag] HKUDS, LightRAG repository and paper, https://github.com/HKUDS/LightRAG
-
[llamaindex-property-graph] LlamaIndex, Property Graph Index documentation, https://developers.llamaindex.ai/python/framework/module_guides/indexing/lpg_index_guide/
-
[dify-parent-child] Dify, Parent-child Retrieval, https://dify.ai/blog/introducing-parent-child-retrieval-for-enhanced-knowledge
-
[haystack-hierarchical] Haystack, HierarchicalDocumentSplitter and AutoMergingRetriever, https://docs.haystack.deepset.ai/docs/hierarchicaldocumentsplitter
-
[asciidoctor-sections] Asciidoctor Docs, Sections, https://docs.asciidoctor.org/asciidoc/latest/sections/
-
[asciidoctor-xref] Asciidoctor Docs, Cross References, https://docs.asciidoctor.org/asciidoc/latest/macros/xref/
-
[asciidoctor-description-lists] Asciidoctor Docs, Description Lists, https://docs.asciidoctor.org/asciidoc/latest/lists/description/
索引
资源节点 可消费证据资源 ADOC 源表面 资源证据图 消费者动作 字段 payload locator source coordinate address label mechanical resource IRI role rel image-region video-segment SPARQL RAG GraphRAG 模糊召回 符号扩展 source-aware report resource block
本索引 section 是书后索引入口。正文中的索引词可继续扩展本页。