本地文档与 URL 引用
长篇使用指南可放在本地 Markdown 文件,外部资料可登记为 HTTPS URL。它们通过能力的 documents[].source 关联;能力定义本身仍写在 Provider 的 capabilities 数组中。
本地文件与 URL 引用的完整示例
先按安装准备 Node.js >=22.12.0 的项目。下面三个文件放在同一目录;也可以按运行示例复制后运行 node examples/documents/read.mjs,无需模型或网络请求。
provider.json 声明同一能力的两个文档:guide 是本地文件,upstream 是外部引用。example.com 是示意资料地址,Graph 不会请求它。
保存本地正文 knowledge/route.md:
保存 read.mjs。它先通过详情取得 URL 引用,再按声明 ID 读本地正文,最后展示误读 URL 正文的明确错误。成功时 stdout 是完整的 {local, upstream, urlReadError} 组合对象;local 是原始 DocumentResult,upstream 是原始文档声明;其他 Graph 错误写 stderr 并以 1 退出,finally 关闭 Graph。
以下是这个随包示例的完整 stdout。local 保留原始文档结果,包括原始字节数/哈希;upstream 保留 URL 声明,未发送网络请求。
查看本地读取和 URL 引用的完整结果
本地文件不存在、无权限、不是合法 UTF-8 或超预算时,readDocument 抛相应 document 阶段错误;URL 正文读取固定为 CG_DOCUMENT_REFERENCE_ONLY。处理恢复见错误与恢复。
本地路径边界
文件式文档根固定为 Provider JSON 所在目录。内联 definition 若要读取本地文档,必须给该来源配置 documentRoot,完整对照见下方;它不是给单个 capability 配置的 path。默认正文预算 1 MiB,text 去首 BOM、保留 CRLF,byteLength/contentHash 取自同一次稳定读取的原始字节。
绝对路径、父级越界、设备/驱动器/UNC 等危险形式拒绝。合法根内 symlink 可读,逃逸 symlink 拒绝;部署需控制可信根及祖先目录,见安全页。修改正文不改变静态 Graph Revision。
选择正确的文档根与读取阶段
usage.contract 是已有契约引用,接受openapi/mcp-tool/json-schema/other及HTTPS/URN;documents 是能力关联的使用材料引用。两者均不自动联网、解析、执行。正文不在Catalog中,也不自动发给匹配模型;宿主在选中后按需读取,再决定是否提供给当前模型。
文件式与内联式的完整验证
按运行示例复制,在项目根运行 node examples/scenarios/documents.mjs。它在系统临时目录创建自己的声明和正文,finally删除该目录,不修改你的业务文件。文件式与内联式各读取同一个guide,程序逐项比对,并检查缺根/缺文件/URL只引用。
以下是该脚本的完整stdout。正文初始带UTF-8 BOM和CRLF;text去首BOM、保留CRLF,byteLength和contentHash仍针对同一次读取的原始字节。修改正文后哈希变而Graph revision保持原值:
查看完整文档根与原始字节验证脚本
不要把Graph revision当作整个文件系统快照:需要校验某次知识内容时使用该次readDocument的contentHash,并由应用管理后续处理的一致性。