[RFC] Openviking支持 ov compile 知识编译命令 #3570
fujiajie666
started this conversation in
RFC
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
TL;DR
ov compile是 OpenViking 新增的一条知识编译链路:一条命令,把散落的来源材料按用户指定的 Skill,整理成 OKF v0.1 规范的 LLM Wiki ,或 Skill 包、或.yaml/.json/.png等 artifact。batch-write/add_skill归档。created / updated / unchanged,未变的页面不写;不会脏写。可实践的例子如下
1. 为什么做
ov compile把一批来源材料整理成一套可被 Agent 检索、可持续维护的知识页面,OpenViking 此前只有两条路径,都不够用:
ov compile想解决的是同一个诉求:用可复用的规则(Skill)把来源材料确定性地整理进目标目录,并且只在内容真正变化时才写入。 它不追求"更聪明的 Agent",追求"更可控的整理流水线"。2. 与"Agent 裸写"的关键差异
batch-write/add_skill进行写入from/to/skill;写范围仅to上表右列即 compile 的设计主线:把 Agent 的自由发挥约束在一个结构化草稿协议里,把对 OpenViking 的实际改动收敛到一条确定性、可校验、可增量的写入链路上。
3. 架构:Skill 驱动 + 确定性 Renderer + 增量写入
一次 compile 沿单向管线推进,各阶段职责单一、可独立观测:
组件调用关系与写入出口收敛点:

主流程状态机:

三条设计主线要展开一句:
--skill决定要整理成什么。Skill 语义决定输出是 Wiki 页面(.md+ OKF frontmatter)、Skill 包(<skill-name>/SKILL.md+ 附属文件),还是普通 artifact(.yaml / .json / .png)。三种目标各自分流写入,.md且含typefrontmatter 才参与 OKF 校验并打ov.kind=wiki标签。Renderer是整条链路的一条确定性关卡,负责校验输入的wiki类型的草稿,输出可以直接落盘的文档,全程无随机性。OKF frontmatter、Wiki 链接、Citations、bareviking://URI linkify、Related pages、created/updated/unchanged 判定,都由代码完成,不依赖模型。update_uri的页面先读旧文件生成 sha256 作为base_hash,与渲染后的新内容对比:一致 →unchanged不写;不一致 →replace_if_hash(base_hash);不存在 →create_if_absent。重试靠 hash 幂等收敛,不会覆盖并发写入。4. 一条命令上手
ov compile \ --from viking://resources/周报 \ --to viking://resources/团队知识库 \ --reason "按月整理团队的成本优化进展" \ --skill viking://agent/skills/monthly_wiki \ --wait参数说明:
--from--tomkdir--skillSKILL.md的 Viking URI--reason--wait/--timeout--wait等任务完成;--timeout只限制 CLI 等待,不取消服务端任务--output/--compact--output table|json控制结果呈现任务是异步的:
POST /bot/v1/compile立刻返回task_id,GET /bot/v1/compile/{task_id}查询进度。状态机是accepted → running → committing → completed | failed,失败会终止在对应 stage 并携带错误码。5. AgentLoop 输出协议
Agent 必须调用
submit_wiki_bundle提交WikiBundleDraft。PS:
update_uri必须来自to目录已有文件且保持原 URI,不能改名或移动。"Reflect on the results and decide next steps."触发重试;达到迭代上限仍未提交合法结果,任务failed。skills 目标是个特例:
submit_wiki_bundle只保留files(去掉pages/links),要求所有文件位于<skill-name>/下、必须包含<skill-name>/SKILL.md,并校验 Skill name 与目录名一致——这样一条链路既能编译 Wiki,也能编译出可运行的 Skill 包。6. 端到端实测:四类真实产物
下面四个样例已跑通,分别验证 利用历史资源/记忆生成可复用skills 、利用开源高质量 Skill 完成论文导读、One Page生成、LLM Wiki四条产物路径。
6.1 生成
weekly-report-writerSkill以周报样例 + trajectory memory 为来源,用一个"构建周报 Skill"的指导 Skill 编译出一个新的
weekly-report-writerSkill(--to viking://agent/skills,走 skills 目标分流):ov compile \ --from viking://resources/compile-skill-demo/weekly-reports \ --from viking://user/memories/trajectories/compile-skill-demo \ --to viking://agent/skills \ --skill viking://agent/skills/build-weekly-report-skill \ --reason "创建或更新名为 weekly-report-writer 的 Skill:基于周报样例提炼稳定结构,结合 trajectory 中经过验证的写作流程与质检规则" \ --wait --timeout 1800产出:
viking://agent/skills/weekly-report-writer/下生成含SKILL.md的完整 Skill 目录,校验 Skill name 与目录名一致。6.2 复用外部 ARA compiler Skill 编译论文
复用开源的 ARA compiler Skill,把一篇 ResNet 论文 PDF 编译为结构化研究产物:
产出:在
ara-resnet-output下生成 ARA compiler Skill 规定形态的产物集合。本例验证的是 compile 对第三方 Skill 的兼容——只要 Skill 描述了想要的输出形态,Renderer 会按 Skill 规则渲染。6.3 生成 One-Page 知识导航页
把一批企业知识库解析材料整理为一个面向产品 / 研发 / 运维的单页导航:
产出:面向产品 / 研发 / 运维的单页导航 one-page,跨来源的入口在同一页可直达。
6.4 LLM Wiki测试
把 Aurora 项目状态、关键决策与风险整理为两页 Wiki Pages,验证多页面 + 页面间链接:
ov compile \ --from viking://resources/compile-source \ --to viking://resources/compile-wiki \ --skill viking://user/skills/compile-wiki \ --reason "把 Aurora 项目状态、关键决策和风险整理为两页 Wiki" \ --wait --timeout 1800产出:
项目概览.md与决策风险.md两页,通过links建立 Wiki 链接。本例覆盖pages+links的完整渲染链路:OKF frontmatter、Citations、Related pages 与 created / updated 判定。7. 边界与限制
ov compile只新增"任务编排 + 领域规则"这一层,底层 Skill 加载、OpenViking 读写、AgentLoop 推理都复用现有实现。为了避免单任务拖垮 Bot,CompileLimits给了一组默认上限:并发采用两层:同一
to目录串行(target lock),叠加全局信号量 4(concurrent_tasks)。身份方面,Bot Proxy 认证 CLI 请求并把当前用户身份转交 VikingBot,VikingBot 用同一身份完成所有读写;任务查询会校验创建者身份,无权与不存在统一返回NOT_FOUND。不做的事情也讲清楚:
from材料本身有错,产出会保留原始引用,需要靠update_uri增量更新来修正。8. Roadmap 与 Feedback
接下来还想推进:
ov watch联动的自动化:来源目录发生变化时自动 trigger compile。欢迎在 OpenViking 上直接跑一遍:
任何 use case都欢迎在这个 discussion 下面 reply。
All reactions