Usage Guide · v0.2

Open Knowledge Format (OKF) 全面使用指南

基于仓库源码(src/reference_agent/)、规范(SPEC.md)、示例(samples/ · bundles/)与连接器文档完整研读整理 · 2026-09
一句话:把「知识目录」变成一堆普通的 Markdown 文件,让人和 AI Agent 用完全相同的方式生产、审查、消费它。

01项目是什么

仓库由三部分组成,重要性依次递减——格式是贡献,Agent 和可视化只是让它摸得着的两端。

组成部分位置角色
OKF 格式规范 v0.2核心SPEC.md知识如何表示:目录树 + Markdown 文件 + YAML frontmatter。不绑定任何 agent、框架、厂商
Reference Agent生产者 PoCsrc/reference_agent/从 BigQuery 元数据 + 官方文档网页自动生成 OKF bundle
可视化查看器消费者 PoCviewer/ · bundles/*/viz.html把 bundle 渲染为单文件交互式知识图谱

仓库自带 4 个可直接浏览的成品 bundle:bundles/ga4/(GA4 电商)、bundles/stackoverflow/、bundles/crypto_bitcoin/、bundles/acme_retail/(演示 Attested Computation 完整家族)。

为什么用 Markdown 而不是元数据服务?

02OKF 格式核心概念

2.1 Bundle 结构

bundle/
  index.md                # 可选:目录清单(渐进披露)
  log.md                  # 可选:按日期倒序的更新日志
  <concept>.md            # 一个概念 = 一个 .md 文件
  <子目录>/               # 按领域自由组织
    index.md
    <concept>.md

保留文件名只有两个:index.md 和 log.md。分发方式:git 仓库(推荐)、tar/zip、或大仓库的子目录。

2.2 概念文档 = frontmatter + 正文

唯一必填字段是 type,只带 type 的概念即完全合规。推荐字段:title、description(一句话,会被 index.md 原样引用)、resource(底层资产 URI)、tags。

---
type: BigQuery Table
title: Customer Orders
description: One row per completed customer order across all channels.
resource: https://console.cloud.google.com/bigquery?p=acme&d=sales&t=orders
tags: [sales, orders, revenue]
generated: { by: reference_agent/gemini-2.5-pro, at: 2026-05-28T14:30:00Z }
---

# Schema

| Column        | Type      | Description                              |
|---------------|-----------|------------------------------------------|
| `order_id`    | STRING    | Globally unique order identifier.        |
| `customer_id` | STRING    | Foreign key into [customers](customers.md). |

# Common query patterns

```sql
SELECT * FROM orders WHERE total_usd > 100
```

约定俗成的正文标题:# Schema(字段结构)、# Examples / # Common query patterns(示例)、# Computation(见 2.5)。

2.3 信任、来源、生命周期(v0.2 的重点)

字段作用示例
sources来源。每条含 resource(必填)、id(正文脚注关联键)、title,及可选可信度信号 author / usage_count / last_modified{ id: ga4-schema, resource: https://... }
usage_window给所有 usage_count 加 {from, to} 时间窗{ from: 2026-06-01, to: 2026-06-30 }
generated内容怎么产生:{ by, at }{ by: reference_agent/gemini-2.5-pro }
verified谁确认过内容:{ by, at } 列表[{ by: human:ahormati, at: ... }]
statusdraft / stable(默认)/ deprecatedstatus: draft
stale_after绝对时刻,now ≥ stale_after 即过期2026-09-23T00:00:00Z
关键设计:OKF 记录客观信号,不记录主观评分。可信度由消费者从信号推断,同一信号在不同场景有不同权重。usage_count 应读作「活跃度与趋势」,不是精确排名。

信任层级由 verified 推导:无 verified → unverified;仅被 process: / 工具确认 → machine-confirmed;被 human:<id> 确认 → human-reviewed。Actor 命名约定:Agent 用 <producer>/<version>、人用 human:<id>、自动流程用 process:<id>——信任分级靠 human: 前缀判断,人工确认必须用这个前缀。

逐条断言溯源:正文论断用脚注关联 sources[].id。用稳定 id 而非 sources[0] 位置索引,因为 Agent 会不断重写文档,位置索引在重排后会静默错配:

The `events_` table is sharded daily as `events_YYYYMMDD`.[^ga4-schema]

[^ga4-schema]: GA4 BigQuery Export schema

2.4 链接与图状结构

概念之间用普通 Markdown 链接互指,构成超越目录树的有向图。绝对形式(相对 bundle 根,移动文档时稳定)与相对形式均可;本仓库的 Agent 实际写文件相对路径(如 ../references/metrics/daily_active_users.md),保证 GitHub 直接渲染时链接可用。关系类型(joins-with、depends-on…)由周围散文表达,链接本身不携带类型。消费者必须容忍死链——死链可能只是「尚未写出的知识」。

references/ 子目录是命名约定:把外部材料、运行说明、代码镜像为 bundle 内一等概念(如 references/attesters/revenue.py)。

2.5 Attested Computation(可证明计算)

v0.2 最有特色的类型:不只记录一个值是什么,还记录官方认可的算它的方法,让消费者能机械地确认「Agent 跑的是被批准的计算,而不是即兴发挥」。

契约(frontmatter) runtime: bigquery parameters: [{year}] executor + receipt attester: sql_equal.py verified / stale_after sources(政策依据) # Computation 官方认可的 SQL / 模型 Agent 只准填参数 executor 运行 返回 receipt:job_id, executed_sql, result attester 校验 provenance:SQL 逐字一致 fidelity:值与 receipt 一致 Gate:不过就拒展示 verdict 可见(如 job 日志链接)
Attested Computation 消费流程:契约 → 参数化执行 → receipt → 确定性 attester → Gate。receipt 是运行时产物,不存进 bundle。

verified 与 attestation 的区别:前者确认定义仍符合政策(文档级、慢、落盘);后者确认某次运行按官方方式产生值(每次调用、运行时、不落盘)。定义过期也能干净通过 attestation;定义刚确认过也每次运行仍需 attestation——所以两者都要。

03Reference Agent 工作原理

Agent 基于 Google ADK + Gemini(默认 gemini-flash-latest),分两个独立 pass 运行,最后统一重生成索引。

BigQuery 数据集 元数据:Schema / 分区 / 类型 Seed URLs(seed 文件) 官方文档 · 可选 ReferenceRunner Google ADK · Gemini gemini-flash-latest Pass 1 · BQ pass(每概念一次 LLM 会话) ① read_existing_doc → 有旧稿就精修 ② read_concept_raw → 真实 Schema ③ sample_rows(3) → 元数据稀疏时采样 ④ list_concepts → 织入交叉链接 ⑤ write_concept_doc → 恰好调用一次 Pass 2 · Web pass(LLM 自己当爬虫) 从 seed 出发自主跟链;fetch_url 内置硬限制 每页三选一:(a) 增强已有概念 (b) 立 references/<slug>(四道门) (c) 跳过 · 指标/join 强制抽取 + 回链 守卫:Schema/sources 只准增不准减 regenerate_indexes 自动重写各级 index.md(汇编 description)
整体架构:两个 pass 各自独立运行(web pass 可整体跳过),最后统一重生成 index。

3.1 Web pass 的爬虫硬限制(工具内强制,Agent 无法逾越)

限制默认说明
--web-max-pages100页数硬上限
--web-max-depth2距任意 seed 的跳数上限
allowed-hosts仅 seed 主机名同域过滤,--web-allowed-host 可追加
--web-allowed-path-prefix无限制路径前缀白名单
--web-denied-path-substring无路径黑名单(如 /login)
安全设计:Agent 不能凭空造 URL——只有「被已抓取页面的链接返回过」的 URL 才有深度记录,直接输入图外 URL 会被 fetch_url 拒绝。

3.2 立 reference 的四道门

页面要立为 references/<slug> 新概念,须同时满足:①主题可被主概念点名引用;②非 bundle 级元页面(slug 含 overview / quickstart / faq 等直接跳过);③通过「引用测试」(能写出 See the [X reference](…) for …);④复用测试(≥2 个概念会引用它)。

强制的结构化抽取则绕过四道门:页面上的聚合指标、维度、join 路径必须捕获——指标写 references/metrics/<slug>.md(拥有 SQL 公式),join 写 references/joins/<a>__<b>.md(双下划线、按字母排序),且立了引用就必须回链:相关表的 # Metrics / # Joins 章节必须链接它,会话结束前校验无孤儿 reference。

3.3 防幻觉守卫(代码级)

tools/bundle_tools.py 的 write_concept_doc 内置三层防御:缺 type 等必需键拒写;web pass 中新 # Schema 丢失 BQ pass 从真实元数据填充的字段 → 拒写并列出缺失字段;新 sources 条目数少于现存 → 拒写。提示词同时约定:「拒写不代表失败——读回旧文档、原样保留全部内容、只做增量,然后重试。」

04快速上手

安装

python3.13 -m venv .venv
.venv/bin/pip install \
  --index-url https://pypi.org/simple/ \
  -e .[dev]

凭据

gcloud auth application-default login
gcloud config set project <billing-project>

# Gemini 二选一:
export GEMINI_API_KEY=...
# 或 Vertex AI:
export GOOGLE_GENAI_USE_VERTEXAI=true
export GOOGLE_CLOUD_PROJECT=<id>
export GOOGLE_CLOUD_LOCATION=<region>

最小运行

.venv/bin/python -m reference_agent enrich \
    --source bq \
    --dataset <project>.<dataset> \
    --web-seed-file <path/to/seeds.txt> \
    --out ./bundles/<name>

不提供 seed 或加 --no-web → 只跑 BQ pass。公共数据集可读,但查询按字节计费到你的项目。

05六大使用场景与示例

场景 A · 为公共数据集建完整知识库(端到端)

以 GA4 为例(samples/ga4_merch_store/ 是完整配方):

.venv/bin/python -m reference_agent enrich \
    --source bq \
    --dataset bigquery-public-data.ga4_obfuscated_sample_ecommerce \
    --web-seed-file samples/ga4_merch_store/seeds.txt \
    --out ./bundles/ga4

seed 文件每行一个 URL(支持 # 注释),指向该数据集的官方文档。产出:每个 BQ 概念一个文档 + 从官方文档立出的 references/metrics/*、增补的字段语义 + 各级自动 index.md。三个官方样例覆盖三种形态:GA4(单张去规范化大表)、Stack Overflow(大量独立实体表)、Bitcoin(少数紧密关联的事实表,锻炼跨表外键的表达)。

场景 B · 内部数据集 / 不想爬网

.venv/bin/python -m reference_agent enrich \
    --source bq --dataset my-company.sales \
    --no-web --out ./bundles/sales

只从 BigQuery 元数据生成(Schema、分区、字段类型),零网页依赖。适合内部敏感数据或不具备文档站的场景。

场景 C · 迭代单个概念(省钱省时的调试姿势)

.venv/bin/python -m reference_agent enrich \
    --source bq --dataset bigquery-public-data.crypto_bitcoin \
    --concept tables/transactions \
    --out ./bundles/crypto_bitcoin

--concept 可重复。注意:它依然会触发 web pass(除非同时 --no-web)。Bitcoin 的表动辄几百 GB,官方样例明确建议迭代期用 --concept 做冒烟测试、控制 --web-max-pages。

场景 D · 可视化与分享

.venv/bin/python -m reference_agent visualize --bundle ./bundles/crypto_bitcoin
# 写出 bundles/crypto_bitcoin/viz.html

# 自定义输出与标题:
.venv/bin/python -m reference_agent visualize \
    --bundle ./bundles/crypto_bitcoin --out /tmp/btc.html --name "Bitcoin OKF"

生成单文件自包含 HTML(bundle 解析后序列化为 JSON 内嵌;Cytoscape.js 画力导向图、marked 渲染 Markdown,均走 CDN)。功能:按类型着色的概念图谱、详情面板、反向链接(Cited by)、搜索框、类型过滤、5 种布局切换。直接发给同事、放静态服务器、或提交到 bundle 旁边。

场景 E · 发布到 GCP Knowledge Catalog

connectors/gcp-knowledge-catalog.md 提供与 Dataplex Knowledge Catalog 双向同步的完整教程:用 kcmd CLI 把 bundle 推入 EntryGroup、拉回做 round-trip 校验。

重要限制:只携带 7 个 frontmatter 键 + 正文;只同步 .md;cross-links 原样存储不解析;以 git 为权威——合并后推送,不要反向 pull 进受 git 管理的 bundle。首拉会有一次 YAML 风格归一化 diff,提交一次后即字节稳定。

场景 F · 不用本仓库的 Agent,直接生产/消费 OKF

格式本身零工具依赖:手写——任何编辑器建 .md 填 frontmatter,只带 type 也合规;脚本生产——walk 数据库、导出 Dataplex / Unity Catalog / Collibra 目录后写 md;消费——cat、LLM 直接读进上下文、Obsidian/Notion/MkDocs/Hugo 原生浏览、自建搜索索引、仓库自带的 viz 图谱。

06CLI 完整参考

enrich

Flag默认说明
--source必填目前仅 bq
--dataset必填(bq 时)project.dataset
--out必填bundle 根目录(自动创建)
--billing-projectADC 默认查询计费项目
--concept全部只处理指定概念 id(如 tables/events_),可重复
--modelgemini-flash-latestGemini 模型 id
--web-seed / --web-seed-file无seed URL / 每行一 URL 的文件,均可重复
--web-max-pages / --web-max-depth100 / 2爬取页数 / 跳数硬上限
--web-allowed-host仅 seed 主机额外允许的主机名,可重复
--web-allowed-path-prefix / --web-denied-path-substring无 / 无路径白名单前缀 / 黑名单子串,可重复
--no-web—完全跳过 web pass
-v—详细日志(完整 JSON 工具调用)

visualize

Flag默认说明
--bundle必填bundle 根目录
--out<bundle>/viz.html输出 HTML 路径
--name目录名查看器标题栏显示名

07一份 OKF 文档的完整生命周期

  1. 生产:BQ pass 用元数据写初稿(真实 Schema、SQL 模式、交叉链接)→ Web pass 用官方文档增补语义(指标公式、join 路径、枚举值),全程守卫防缩水
  2. 组织:regenerate_indexes 生成各级目录;可选手工维护 log.md
  3. 审查:人用 human:<id> 补 verified;信任层级从 unverified 升到 human-reviewed
  4. 演进:内容变化时 generated.at 刷新;过时定义设 status: deprecated(保留供链接与历史);有时效的知识设 stale_after
  5. 分发:git 推送 / tar 包 / 静态服务器 / kcmd 推到 Knowledge Catalog
  6. 消费:LLM 逐层读 index.md → 按需加载概念;或开 viz.html 交互探索;确定性代码扫 frontmatter 建索引;运行 Attested Computation 时由 attester 背书

08测试与开发

.venv/bin/pytest    # 7 个测试文件:BQ source、bundle 工具、文档解析、
                    # index、viewer、web fetcher、web 工具
模块(src/reference_agent/)职责
cli.py参数解析、seed 收集、组装 Runner
runner.py两 pass 编排、事件日志(紧凑/详细两种格式)
agent.py构建 BQ agent 与 web agent(ADK Agent + FunctionTool)
prompts/两个 pass 的完整系统提示词
tools/bundle_tools.pyread_existing_doc / write_concept_doc + 守卫
tools/source_tools.pyBQ 元数据读取、采样
tools/web_tools.pyfetch_url(预算/域/深度强制)
bundle/OKF 文档解析、路径、index 重生成
viewer/单文件 viz.html 生成器

09设计决策与注意事项