2026 年 6 月,Google Cloud 发布了 Open Knowledge Format(OKF)。OKF 试图规范一类已经广泛存在、但彼此不兼容的做法:把表结构、指标口径、API 约定、运行手册和业务规则写入 Markdown 文件,由人和 Agent 共同维护。
OKF 不提供知识库产品、向量数据库或 Agent runtime。它定义的是知识交换格式:目录化的 Markdown 文件、少量 YAML frontmatter、普通 Markdown 链接,以及对来源、验证状态、过期时间和受控计算的约定。人工、元数据导出程序和 LLM 都可以生产 OKF;搜索索引、网页阅读器、RAG 管道、MCP Server 和 Agent 都可以消费它。
本文依据 Google 的发布文章和 OKF 规范整理。发布文章介绍的是 v0.1;仓库中的现行规范已更新到 v0.2。v0.2 保留了目录和链接模型,并补充了面向 Agent 维护知识库的 provenance、trust、lifecycle 和 attestation 字段。下文以 v0.2 为准,同时说明与 v0.1 的关系。
Agent 缺少的是可用且可迁移的上下文
企业知识通常分散在数据目录、Wiki、代码注释、指标平台、工单、共享盘,以及少数熟悉系统的员工经验中。以一个分析问题为例:
“本周活跃用户应该怎样计算?”
要回答这个问题,Agent 需要知道事件表的位置、用户 ID 口径、去重规则、时区、过滤条件、可用表、指标负责人,以及 SQL 是否符合财务或分析团队确认的定义。这些信息可能分别存在于数据目录、dbt 模型、业务文档和历史 SQL 中。
常见处理方式主要有两种:
- 检索原始资料。 将 Wiki、文档和代码切分后写入搜索或向量索引,回答时再拼接上下文。
- 维护产品专用目录。 数据目录、语义层、知识图谱和 Agent 平台各自维护 API、对象模型和权限模型。
检索原始资料时,命中文本通常没有明确表达来源、当前性和审核状态。产品专用目录则难以迁移到其他系统。每接入一个新的 Agent,团队都可能要重新实现导出、转换、索引和上下文组装。
OKF 的范围较窄:先把知识表示为可由 Git 管理、可由普通编辑器打开、可被其他系统导入的文件集合。检索、执行、权限和界面仍由具体系统负责。
现有方案解决了哪一层问题
为 Agent 提供正确上下文,通常需要解决四个问题:从哪里取得知识、如何将其转成可检索数据、回答时如何选择上下文、以及如何判断内容是否仍然可信。现有方案各自覆盖其中一部分。
| 方案 | 主要做法 | 能解决的问题 | 仍然缺少的部分 |
|---|---|---|---|
| 文档加向量 RAG | 切分原始文档,生成 embedding,按查询召回 chunk | 快速为模型补充外部事实 | chunk 通常缺少稳定身份、跨文档关系、来源和审核状态;原文更新后需重建索引 |
| 关键词或全文检索 | 建立倒排索引,按词匹配文档或段落 | 对术语、产品名和精确短语检索稳定 | 无法自动补足语义相近但措辞不同的查询,也不定义知识结构 |
| 数据目录和语义层 | 用专用对象模型维护表、字段、指标和血缘 | 统一数据资产发现和指标口径 | 模型和 API 常绑定特定平台,导出给其他 Agent 时仍需要转换 |
| 知识图谱 | 用实体、关系和本体保存知识 | 表达显式关系,支持关系查询和推理 | 建模和维护成本较高;自然语言说明、运行步骤和长文资料仍需其他载体 |
| 微调 | 将稳定知识或行为模式写入模型参数 | 减少固定任务中的 prompt 和检索依赖 | 更新需要重新训练,无法提供可审计的逐条来源,也难以处理频繁变化的政策 |
| 工具和 API 调用 | Agent 通过函数或 MCP 查询权威系统 | 获取实时库存、订单、账户等状态 | API 返回的是当前数据,不负责解释业务规则、关联概念和历史依据 |
| 项目自建 Markdown Wiki | 用 Markdown、frontmatter 和链接维护知识 | 文件易读,适合 Git 和 Agent 编辑 | 各项目字段、路径、索引和链接规则不同,难以由通用消费者直接解析 |
实际系统通常组合使用这些方案。例如客服 Agent 通过 API 查询订单状态,通过 RAG 召回退款政策,通过规则引擎控制可执行操作。问题不在于缺少检索或存储产品,而在于知识从源系统进入这些组件时,常常丢失或重新定义了身份、来源、审核状态、有效期和关系。不同团队又会为同一类文件设计不同 frontmatter、目录和导出程序。
OKF 试图补足的是这一层公共约定。它不替换向量检索、知识图谱或数据目录,而是为表、指标、API、政策和运行手册提供可被这些系统共同读取的源文件格式。一个消费者可以把 OKF Bundle 建入向量索引,另一个消费者可以从其中抽取图谱边,第三个消费者可以按 status 和 verified 过滤;三者不必各自定义原始知识的结构。
Bundle、Concept 与文件路径
OKF 的 Knowledge Bundle 是可独立分发的目录树。目录中每个普通 .md 文件表示一个 Concept,即一条独立知识。Concept 可以描述表、数据集、API 等具体资源,也可以描述指标、业务规则或故障处理手册等抽象对象。
Concept ID 使用文件相对 Bundle 根目录的路径,并去掉 .md 后缀:
analytics/
index.md
tables/
orders.md
customers.md
metrics/
weekly-active-users.md
playbooks/
late-data.md上例中,tables/orders.md 的 Concept ID 是 tables/orders。目录用于导航;Concept 之间的普通 Markdown 链接用于表达关联、依赖和引用。因此,一个 Bundle 同时具备目录层级和链接图。
Bundle 可以作为 Git 仓库、压缩包,或较大仓库中的子目录分发。规范推荐 Git,因为提交历史、责任人和 diff 有助于审核知识变更;但 Git 不是格式要求。
index.md 与 log.md
每一级目录有两个保留文件名:
| 文件 | 用途 | 是否属于 Concept |
|---|---|---|
index.md |
列出当前目录内容,支持渐进式浏览 | 否 |
log.md |
按日期记录当前目录范围内的更新历史 | 否 |
其他 .md 文件都是 Concept。不能将 index.md 和 log.md 作为普通概念文档使用。
index.md 并非必需。人或 Agent 可以先读取索引,再按需打开少量文件,而不用把整个知识库放进上下文。log.md 也可选。Git 历史记录了文件变更,面向读者的更新摘要则便于了解近期语义变化。
Concept 文档与 frontmatter
每份 Concept 都是 UTF-8 Markdown,由文件开头的 YAML frontmatter 和其后的 Markdown body 组成:
---
type: BigQuery Table
title: Customer Orders
description: 所有渠道中已完成订单,每行对应一笔订单。
resource: https://console.cloud.google.com/bigquery?p=acme&d=sales&t=orders
tags: [sales, orders, revenue]
---
# Schema
| 字段 | 类型 | 含义 |
| ------------- | --------- | ----------------------------------------------- |
| `order_id` | STRING | 全局唯一订单标识。 |
| `customer_id` | STRING | 关联 [customers](/tables/customers.md) 的外键。 |
| `placed_at` | TIMESTAMP | 用户提交订单的时间。 |
# Joins
通过 `customer_id` 与 [customers](/tables/customers.md) 关联。frontmatter 存放适合过滤、路由和预览的结构化信息。body 保留 Markdown 的表达能力,适合记录字段说明、示例、决策依据和运行步骤。OKF 不要求把所有领域知识收敛为固定 JSON Schema。
唯一必填字段是 type
v0.2 的合规性要求很少:每个非保留 Markdown 文件必须包含可解析的 frontmatter,且其中必须有非空 type。
type 是描述 Concept 种类的短字符串。规范列出的例子包括 BigQuery Table、API Endpoint、Metric、Playbook、Reference 和 Attested Computation。OKF 没有中央类型注册表。生产者应选用清晰稳定的类型名;消费者必须容忍未知类型,并按通用 Concept 处理。
格式只约束互操作所需的最小表面,不接管领域模型。数据平台可以使用 dbt Model、Looker Explore,研发知识库可以使用 Service、ADR、Runbook。消费者不能因为不认识某个类型而拒绝整个 Bundle。
推荐字段和扩展字段
规范推荐以下字段,但均非强制:
| 字段 | 含义 | 常见用途 |
|---|---|---|
title |
人类可读标题 | 索引页、搜索结果、UI |
description |
单句摘要 | 预览、检索结果、Agent 路由 |
resource |
底层资源的规范 URI | 跳转、工具调用、资产绑定 |
tags |
横向分类的字符串列表 | 过滤、专题索引 |
生产者可以加入其他字段。消费者应在读写往返时保留未知字段,且不能因为未知字段拒绝文档。团队因此可以逐步加入数据分级、责任人或访问策略等约定,无需等待 OKF 修改规范。
body 没有必需章节。# Schema、# Examples 和 # Computation 具有约定含义,适用时应优先使用,方便人和程序定位内容。
链接与路径规则
OKF 使用 Markdown 链接表示 Concept 关系,支持两种路径:
- 以
/开头的 Bundle 相对路径,例如[customers](/tables/customers.md)。规范推荐这种形式,因为移动链接源文档后,目标路径不受源目录影响。 - 标准相对路径,例如
[相邻概念](./other.md)。
链接不携带 depends_on、joins_with 等关系类型。关系含义由周围文本表达。图消费者通常将链接作为有向、无类型边处理。这一选择降低了图谱语义的精确性,但保留了 Markdown 的可读性和编辑便利性。
消费者必须容忍断链。链接目标不存在不构成格式错误,它可能表示尚未补齐的知识。例如,Agent 发现某表引用了不存在的指标定义时,可以创建待办,而不应使整个 Bundle 导入失败。
resource、sources[].resource、computation、executor.resource 和 attester.resource 等路径型字段均支持绝对 URL、以 / 开头的 Bundle 相对路径和普通相对路径。references/ 是建议的目录名,适合存放外部资料镜像、执行说明和校验程序,但不是必需目录。
v0.2 如何表达来源、信任和当前性
早期 Markdown 知识库可读,但 Agent 难以判断内容的依据、审核状态和有效期。OKF v0.2 增加了一组可选 frontmatter 字段,使这些状态可以被程序读取。
字段可选不代表状态缺失没有含义。未填写相关字段的文档依然合规,消费者也能明确知道该文档没有提供相应信号。
sources:来源和主张归因
sources 记录 Concept 所依据的材料。每条来源的 resource 必填,可以是绝对 URL、Bundle 内路径、references/ 中的材料,也可以是不能直接跳转的范围描述,例如 “BigQuery 项目 X 中的全部查询”。
sources:
- id: revenue-policy
resource: https://wiki.example.com/finance/revenue-recognition
title: 收入确认政策
author: team:finance-fpa
last_modified: 2026-06-18
- id: executive-dashboard
resource: dashboards/executive-revenue
title: 收入驾驶舱
author: team:finance-fpa
usage_count: 5000
last_modified: 2026-06-28
usage_window: { from: 2026-06-01, to: 2026-06-30 }sources[].id 是可选字段,但正文引用来源时应提供稳定 ID。正文用 Markdown 脚注将具体主张关联到该 ID:
收入按财年内已确认记录的 `amount` 求和。[^revenue-policy]
[^revenue-policy]: 收入确认政策脚注标签是 sources[].id 的连接键。消费者应按 ID 解析归因,不应依赖脚注中的自由文本。即使 Agent 重排来源列表,主张与来源的关联也不会变化。
来源可以包含三类客观信号:
author:来源由谁或什么生成;usage_count:在usage_window内被使用、访问或执行的次数;last_modified:来源本身最后修改的日期。
规范没有定义统一的可信度分数。不同组织对作者、使用量和新鲜度的权重不同,固定分数难以迁移,也会随时间失效。usage_count 只应作为活跃度和趋势信号,不应用于精确比较仪表盘阅读次数和定时任务执行次数。
generated 与 verified
generated 记录当前内容最后一次实质性变更的生产者和时间:
generated: { by: catalog-agent/1.4.2, at: 2026-08-06T09:30:00Z }generated.by 在 generated 对象出现时必填,generated.at 使用 ISO 8601 时间。规范为 actor 建议了统一写法:
- Agent 或工具:
<producer>/<version>,例如catalog-agent/1.4.2; - 人:
human:<id>,例如human:alice; - 自动流程:
process:<id>,例如process:finance-nightly。
verified 记录内容是否已由某个参与者根据来源或底层资源确认。它可以保留多条事件,例如人工审核和自动校验:
verified:
- { by: human:finance-owner, at: 2026-08-05T15:00:00Z }
- { by: process:finance-nightly, at: 2026-08-06T02:00:00Z }规范也接受单个 mapping:verified: { by: human:finance-owner, at: ... }。消费者必须把它作为单元素列表处理。
消费者可以从 verified 推导信任层级:
| 条件 | 信任层级 |
|---|---|
没有 verified |
unverified |
只有非 human: 的校验者 |
machine-confirmed |
至少有一个 human:<id> 校验者 |
human-reviewed |
这些字段是建议性信号,不是访问控制。人工审核过的定义仍可能过期;自动校验通过的定义也可能不适用于某个业务问题。
status 与 stale_after
status 可取 draft、stable 或 deprecated,缺失时默认 stable:
status: deprecated
stale_after: 2026-09-30draft 表示内容尚未审阅或可能不完整。deprecated 表示保留历史和链接,但不再是当前定义。stale_after 是绝对日期。当 today >= stale_after 时,文档处于 stale 状态。规范使用绝对日期而非 “读取后 30 天” 这类 TTL,消费者只需比较日期,不需要确定 TTL 的起算点。
Agent 选择上下文时,应结合 status、stale_after、generated.at、最新的 verified.at 和来源的 last_modified。不宜将 stale 文档直接排除,因为历史指标解释、旧系统修复和迁移仍可能需要它。任务允许时,可以保留这类内容,并将 stale 状态明确传给模型和用户。
Attested Computation 如何约束敏感计算
v0.2 新增的 Attested Computation 用于描述经批准的计算及其运行校验方式。它解决的问题是:如何确认某次数字确实由批准的计算产生。
假设 Agent 需要回答 “2025 财年收入是多少”。即使它检索到了正确的指标文档,也可能改写 SQL、遗漏参数、替换为相近的表,或在复述时更改查询结果。将 SQL 放在 Markdown 文档中无法约束实际运行。
OKF 将经批准的计算建模为独立 Concept:
---
type: Attested Computation
title: 按财年计算已确认收入
runtime: bigquery
parameters:
- { name: year, type: integer, required: true }
executor:
resource: references/skills/run-bigquery.md
receipt: [job_id, executed_sql, result]
attester:
resource: references/attesters/revenue.py
generated: { by: metric-agent/2.0.0, at: 2026-08-01T08:00:00Z }
verified: { by: human:finance-owner, at: 2026-08-02T14:00:00Z }
stale_after: 2026-12-31
sources:
- id: revenue-policy
resource: https://wiki.example.com/finance/revenue-recognition
title: 收入确认政策
---
# Computation
```sql
SELECT SUM(amount) AS revenue
FROM finance.recognized_revenue
WHERE fiscal_year = @year
```该类型在通用字段之外定义了以下契约字段:
| 字段 | 要求 | 含义 |
|---|---|---|
runtime |
该类型必填 | 计算如何解释和运行,例如 bigquery、postgres、dbt、python、Looker |
parameters |
可选 | Agent 可填入的具名、带类型参数;绑定语义由 runtime 决定 |
computation |
可选 | 指向外部计算文件;缺失时使用 body 中 # Computation 下的代码块 |
executor.resource |
推荐 | 执行说明或执行代码的位置 |
executor.receipt |
推荐 | 运行必须返回的证据字段,例如 job ID、实际 SQL 和结果 |
attester.resource |
推荐 | 对 receipt 做确定性检查的程序位置;规范要求它不是 LLM |
指标说明无需包含全部 SQL,可以链接到独立计算 Concept:
# Definition
财年收入由[按财年计算已确认收入](../computations/revenue.md)产生。同一计算可以被指标、仪表盘和报表复用,也可独立维护验证状态和过期时间。
参数边界和执行过程
规范要求 Agent 只能为已声明的 parameters 提供值,不能改写 computation。参数绑定和可执行产物生成由消费者或 executor 完成。attester 根据计算定义和参数独立推导预期执行产物,再与 receipt 中的 executed_sql 或 compiled_sql 比较。
典型消费过程如下:
- 通过
type: Attested Computation或指标文档链接发现计算; - 读取 frontmatter 契约和内联或外部计算;
- 仅填写已声明的参数;
- 按
executor执行并获取符合receipt约定的运行证据; - 在确定性环境中运行 attester,校验实际计算、参数绑定和展示结果;
- 根据 attestation、
stale_after和 trust tier 展示结果、提示风险或拒绝输出。
verified 与 attestation 的职责不同:
verified确认定义仍符合政策或来源。它通常较慢,记录在 Bundle 中;- attestation 确认一次运行是否按批准定义产生结果。它发生在运行时,receipt 不写回 Bundle。
旧定义仍可能被正确执行并通过 attestation。刚经人工审核的定义,也仍需要对每次敏感查询进行 attestation。
OKF 的职责边界
OKF 是知识表示和交换格式,不是完整的平台:
| 能力 | OKF 负责 | 实现方仍需负责 |
|---|---|---|
| 文档表示 | Markdown、frontmatter、目录、链接 | 富文本协同编辑体验 |
| 领域模型 | 必填 type 和可扩展字段 |
统一企业本体或固定业务 Schema |
| 检索 | 可索引的结构和渐进式目录 | 向量索引、重排序、召回服务 |
| 生产和消费 | 允许生产者与消费者独立实现 | SDK、服务端或具体 Agent 框架 |
| 可信性 | 来源、验证者、状态、过期日等信号 | 权限认证、数据脱敏、访问控制 |
| 受控计算 | runtime、参数、执行证据和 attester 接口 | executor 协议、attester ABI、沙箱和缓存 |
OKF 可以与 RAG、知识图谱、数据目录、MCP 和 Agent Skill 组合使用:
- RAG 可以对 OKF 文件和 frontmatter 建立混合索引;
- 知识图谱可以从目录和 Markdown 链接生成节点与边;
- 数据目录可以将表、血缘和使用信息导出为 OKF;
- MCP Server 可以将 Bundle 暴露为
search_concepts、read_concept、run_attested_computation等工具; - Agent Skill 可以说明如何按某个 runtime 读取、执行和验证 Attested Computation。
OKF 与 AI Native Agent 知识库的区别
这里的知识库指为 Agent 补充模型参数中没有、或需要随业务变化而更新的信息。例如客服 Agent 的知识库会包含商品规则、服务政策、退款条件、常见问题、工单处理流程和升级路径。Agent 在回答用户问题前,从中检索相关内容,以减少依赖通用预训练知识带来的错误,并让回答符合当前业务口径。
这类知识库通常由文档、FAQ、网页、表格或数据库记录构成。系统会对原始材料切分、嵌入并写入向量索引,再在每次请求时召回相关片段,拼接到模型上下文中。它解决的是”当前问题应补充哪些事实”。
OKF 解决的是更靠前的一层:这些知识在进入索引前,应以什么结构保存和交换。它不规定使用哪种 embedding 模型、向量数据库、分块策略或重排序算法。它规定一份知识文档如何表达类型、底层资源、来源、验证状态、过期时间和与其他知识的链接,使不同检索服务和 Agent 可以读取同一份知识资产。
| 维度 | AI Native Agent 知识库 | OKF |
|---|---|---|
| 主要目标 | 为一次 Agent 请求补充模型缺少的业务事实和操作信息 | 定义知识资产的文件表示和跨系统交换约定 |
| 典型内容 | 客服政策、商品说明、FAQ、流程、案例和工单知识 | 表、指标、API、运行手册、业务规则和受控计算 |
| 核心处理 | 采集、切分、嵌入、索引、召回和上下文拼接 | 编写或导出 Bundle、Concept、frontmatter 和链接 |
| 消费方式 | 根据用户问题召回片段,作为模型上下文 | 由检索器、浏览器、Agent 或其他消费者直接解析 |
| 质量判断 | 关注召回率、相关性、答案正确性和时效性 | 记录 sources、verified、status、stale_after 等可供消费者使用的信号 |
| 知识关系 | 常被切分为独立 chunk,关系依赖索引或额外图谱 | 目录和 Markdown 链接保留 Concept 之间的关系 |
| 更新路径 | 原文更新后需要重新切分和建立索引 | 文件变更可被 Git 审查、diff、导出和被不同消费者重新索引 |
| 执行约束 | 通常只提供检索文本,具体工具调用由 Agent 自行决定 | Attested Computation 可限制参数,并描述执行证据和确定性校验接口 |
客服 Agent 可以将服务政策、退款规则和升级流程整理成 OKF Concept,再由检索系统构建向量索引。用户询问退款条件时,检索系统先按问题召回相关 Concept 或片段,随后将正文、来源、验证状态和过期时间提供给模型。此时 OKF 不是 RAG 的替代品,而是 RAG 上游的知识表示层。
这一区分会影响知识库的建设方式。若只把文档切块写入向量库,原始资料的来源、审核人、版本、链接关系和过期状态常需由每个系统重新定义。OKF 将这些信息留在可审查的源文件中。索引可以重建,embedding 模型可以更换,服务可以迁移,知识的结构、来源和状态仍可保留。
不过,不需要为所有检索材料建立复杂的 OKF Bundle。变化快、风险低的临时公告或短期 FAQ 可以直接进入现有检索管道。涉及业务口径、合规政策、跨系统关联或需要 Agent 执行计算的知识,更适合使用 OKF 记录来源、审核和当前性。对于客服 Agent,这些字段可以帮助系统在召回后区分已审核的现行政策、待确认草稿和已废弃规则。
OKF 的优点、限制与适用范围
OKF 的价值来自其刻意收窄的范围。它只要求目录、Markdown、YAML frontmatter、链接和少量保留文件名,因此可以被现有编辑器、Git、静态站点、搜索系统和 Agent 直接处理。
| 优点 | 对工程实践的影响 |
|---|---|
| 人和 Agent 使用同一份源文件 | 人可以直接阅读和审查 Markdown,Agent 可以解析 frontmatter 和链接,无需先转换为专用对象模型 |
| 不依赖特定平台 | Bundle 可以放入 Git、压缩包或任意文件系统;生产者、检索器和展示工具可以独立替换 |
| 保留知识关系 | 文件目录提供导航,Markdown 链接保留表、指标、政策和运行手册之间的关联,消费者可构建图或按链接继续读取 |
| 将来源和当前性放入源数据 | sources、generated、verified、status 和 stale_after 可随文档版本一起审查,而不是散落在索引服务的私有元数据中 |
| 支持渐进式读取 | index.md 让 Agent 先浏览目录,再读取需要的 Concept,减少一次加载无关上下文 |
| 支持受控计算的描述 | Attested Computation 可将指标定义、参数范围、执行证据和确定性校验放在同一份可链接的契约中 |
这些优点有明确前提。OKF 不会自动让检索结果更相关,也不会验证来源是否真实、内容是否正确。verified 和 status 只是生产者提供的信号,消费者仍要决定信任策略。Attested Computation 只定义计算的描述和校验入口,实际 executor、attester、运行权限和沙箱必须由平台实现。
OKF 也有一些成本和限制:
- 格式仍处于早期阶段。 当前规范是 v0.2,生态中的 producer、consumer 和兼容性实践仍在形成。采用时需要自行维护版本兼容策略。
- 最小 Schema 带来一致性风险。 只有
type是必填字段。不同团队可能为相同对象使用不同类型名和扩展字段,需要在组织内部另行约定词表和校验规则。 - Markdown 不适合所有内容。 大型表格、复杂图形、多媒体、细粒度评论和多人实时协作,通常需要其他存储或编辑系统。OKF 可以引用这些资源,但不取代它们。
- 链接图缺少标准关系类型。 Markdown 链接只表示存在关系,
depends_on、joins_with或数据血缘等具体语义仍在正文中表达。需要严格关系查询时,消费者要增加领域 Schema 或同步到知识图谱。 - 文件路径是身份。 重命名或移动文件会改变 Concept ID,并可能影响 Bundle 内链接和外部引用。团队需要将路径稳定性纳入变更流程。
- 来源与审核需要持续维护。 若没有 Owner、复核流程和过期策略,frontmatter 会像普通文档一样过时。格式不能替代内容治理。
- 不提供访问控制。 Bundle 内的
verified、status和resource不等同于权限。数据读取、工具执行和密钥访问仍需 IAM、工具网关和审计系统控制。
适用范围可以按知识的复用范围和风险判断。跨多个 Agent、检索服务或团队使用的领域知识,特别是业务政策、指标定义、服务接口、数据资产说明和运行手册,适合整理为 OKF Bundle。它们需要稳定身份、来源、审核记录和关系导航。仅服务于单个检索应用、变化很快且风险较低的临时通知、活动文案或短期 FAQ,可以直接进入现有采集和索引流程。高结构化且要求严格关系推理的数据,也可以继续以语义层或知识图谱为主,再将面向人和 Agent 的说明导出为 OKF。
在 AI Native 系统中落地 OKF
OKF 不适合作为一次性文档迁移项目。它更适合进入知识生产、审核、消费和反馈的日常流程。
按发布边界组织 Bundle
可按独立发布、独立授权和变更节奏相近的领域划分 Bundle:
knowledge/
commerce-analytics/
finance-metrics/
order-domain/
developer-platform/
incident-response/Bundle 不必等同于组织部门。更实用的判断是:Concept 是否来自相近的源系统,是否遵循同一权限等级,是否需要同时提供给同一类 Agent。
团队还应约定常用 type 和对应正文结构:
| 类型 | 建议内容 | 维护责任 |
|---|---|---|
Data Table |
Schema、分区、关联、示例查询 | 数据工程或表 Owner |
Metric |
定义、适用范围、反例、关联计算 | 指标 Owner |
API Endpoint |
请求、响应、鉴权、错误语义 | 服务 Owner |
Playbook |
触发条件、步骤、验证、升级路径 | Oncall Owner |
Attested Computation |
计算契约、参数、executor、attester | 业务定义 Owner 与平台团队 |
这样做不要求建立全局本体,只是减少同一团队内的写法分歧。
从权威系统生成初稿
表结构、OpenAPI、dbt manifest、告警规则和服务目录等结构化来源可以由确定性导出器生成初始 Concept。导出器至少应写入 type、title、resource、generated 和对应的 sources。
LLM 可以补充字段摘要、示例、关联文档和关联路径。这些补充必须保留可追溯来源,不能将模型推断写成权威事实。
一条可审计的生产流水线通常包括:
- 从权威 API 或代码仓库导出基础字段;
- 为每个对象创建或更新对应 Concept;
- 让 Agent 在指定的权威材料范围内补充 body 与
sources; - 对 source link、frontmatter、重复 Concept 和断链运行确定性检查;
- 对高风险类型创建变更请求,由 Owner 写入
verified: human:<id>; - 合并后更新目录索引和搜索索引。
generated.by 应记录实际使用的生成器和版本。生成器出现系统性摘要错误时,团队可以据此定位并重建受影响批次。
为 Agent 提供渐进式读取工具
将整个 Bundle 拼入 system prompt 不具备可扩展性。更合适的方式是提供只读工具,以 index.md 和 frontmatter 作为导航面:
list_bundle(path) -> 当前目录的 index 或合成目录
search_concepts(query, filters) -> ID、title、description、type、trust、freshness
read_concept(id) -> frontmatter、body、出站链接
read_sources(id) -> sources 与逐条归因当 Agent 回答 “订单收入如何计算” 时,可以先搜索 Metric 和 Attested Computation,再读取命中的指标定义、计算契约和少量关联表说明。index.md 支持在没有向量检索时按目录浏览。搜索服务也可以先按 type、tags、status、信任等级和过期时间过滤,再读取正文。
检索策略应由确定性代码实现:
- 默认优先
status: stable且未过期的内容; - 涉及财务、生产变更、权限和合规的任务,要求
human-reviewed,或进入人工审批; - stale 或
draft内容可作为背景材料,但应将状态传给模型和用户; deprecated内容只用于历史追溯或迁移,不作为默认操作依据。
仅在 prompt 中写 “优先选择可信资料” 不足以执行这些约束,因为模型可能忽略或误解字段。
通过工具网关执行 Attested Computation
高风险指标、报表和生产操作需要区分解释知识和执行动作。MCP Server、内部工具网关或 Agent runtime 可以按 Attested Computation 暴露受限工具:
get_metric_value(
computation_id: string,
parameters: object
) -> { result, receipt, attestation, freshness, trust }调用链至少应保证:
- 参数 schema 来自
parameters,拒绝未声明参数; - executor 从 Bundle 指向的已批准实现读取运行说明;
- receipt 保存实际执行内容、运行 ID 和原始结果;
- attester 在独立的确定性环境中校验 receipt;
- 返回给模型的结果包含 attestation verdict、验证时间和 stale 状态;
- 工具网关、身份系统和数据权限系统继续控制执行权限,OKF 字段不替代这些机制。
这样可以避免 Agent 读到正确收入定义后,临时编写另一段 SQL 并直接展示数字。OKF 单独使用无法阻止该行为;需要将 executor 和 attester 接入工具网关。
将 Bundle 纳入代码审查和持续校验
当 Agent 使用知识做决策、生成 SQL 或执行操作时,知识文件也需要版本、审核和回滚能力。CI 可以检查:
- 每个 Concept 是否具有可解析的 frontmatter 和非空
type; index.md、log.md是否被误写成 Concept;sources中必填的resource是否存在,脚注 ID 是否能对应来源;stale_after是否格式合法,敏感 Concept 是否过期后仍被标记为可自动执行;- Attested Computation 的
runtime、参数、executor、attester 和计算位置是否完整; - attester 是否覆盖成功和失败 receipt;
- 面向生产操作的变更是否经过指定 Owner 审核;
- 索引是否在变更后重建,检索结果是否保留 Bundle commit SHA。
对于自动生成的批量变更,还应限制可写目录、单次修改数量和可访问源系统。允许 Agent 维护知识库,不等于允许它绕过审核覆盖所有业务定义。
将运行反馈转为可审核的变更
Agent 使用 Bundle 时会发现断链、过期定义、缺少字段说明或 attestation 持续失败等问题。此类发现不应只留在 trace 中。
可以分别处理:
- 对断链、缺失
description、过期日临近等低风险问题,自动创建 issue 或候选变更; - 对 schema API 可确定同步的新字段,自动更新并写入新的
generated记录; - 对指标语义、政策、权限、运行手册步骤和 Attested Computation 的变更,提交给 Owner 审核,并在确认后更新
verified。
Agent 的运行轨迹因此成为知识维护的输入,而不会直接变成事实。
一个最小 Bundle 示例
以下目录可以承载订单分析领域的知识:
commerce-analytics/
index.md
tables/
orders.md
customers.md
metrics/
weekly-active-users.md
computations/
weekly-active-users.md
references/
skills/run-bigquery.md
attesters/weekly-active-users.pyBundle 根目录的 index.md 可以声明目标协议版本,并提供 Agent 导航:
---
okf_version: "0.2"
---
# 数据表
- [订单表](tables/orders.md) - 完成订单及其金额、用户与时间。
- [客户表](tables/customers.md) - 客户主数据与注册信息。
# 指标
- [周活跃用户](metrics/weekly-active-users.md) - 按事件口径计算的周去重活跃用户。frontmatter 只允许出现在 Bundle 根 index.md。okf_version 也是可选的。消费者不认识声明版本时,应尽力读取,而不应直接拒绝。
指标文档负责解释口径,并链接到受控计算:
---
type: Metric
title: 周活跃用户
description: 在自然周内至少完成一次有效行为的去重用户数。
tags: [engagement, active-users]
status: stable
generated: { by: analytics-catalog/1.4.2, at: 2026-08-06T08:00:00Z }
verified: { by: human:growth-metrics-owner, at: 2026-08-05T16:00:00Z }
stale_after: 2026-11-01
sources:
- id: metric-policy
resource: /references/metric-policy.md
title: 活跃指标口径说明
---
# Definition
自然周按业务时区划分;同一用户在同一周内只计一次。结果由[周活跃用户计算](../computations/weekly-active-users.md)产生。[^metric-policy]
[^metric-policy]: 活跃指标口径说明生产环境中,SQL 可以保存在版本控制的 .sql 文件中,再通过 computation 字段引用。
仍需由实现方解决的问题
OKF 的格式范围很小,也明确将一些问题留给实现方。
type 和 Markdown 链接不能替代严格的语义层或数据血缘系统。OKF 可以表达 “该指标由哪个计算产生”,但不定义列级血缘、血缘变更传播或统一关系类型。
verified 和来源信号不是安全边界。Agent 是否可以读取 Bundle、访问 URI 或运行计算,仍应由 IAM、工具网关、密钥管理和数据分级策略控制。
Attested Computation 定义了概念接口,但 v0.2 尚未规定 receipt/verdict 的统一 wire format、attester ABI、跨环境可移植性、沙箱和缓存。这些部分需要平台实现,或等待后续协议演进。
Markdown 降低了迁移和编辑成本,但不会自动保证内容质量。没有来源、Owner、过期策略、CI 校验和人工审核时,Bundle 仍会积累过时或互相矛盾的描述。
结语
Google OKF 将知识交换层限制在一组人可读、Agent 可解析、可版本管理的 Markdown 文件中。v0.1 定义目录、Concept、frontmatter、链接、index.md 和 log.md 等基础约定。v0.2 新增 sources、generated、verified、status、stale_after 与 Attested Computation,让知识库能够表达来源、审核、当前性,以及计算是否按批准定义执行。
在 AI Native 系统中,OKF 可以作为知识资产层:权威系统导出基础事实,Agent 补充可读上下文,Git 和 CI 管理变更,检索服务根据当前性和信任状态选择上下文,工具网关通过 Attested Computation 约束敏感执行。权限、检索质量和运行安全仍需要由周边系统提供。

