news 2026/9/10 22:08:54

使用 OpenViking `ov compile` 构建 Karpathy 式 LLM Wiki:从异构资料到可检索的知识库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 OpenViking `ov compile` 构建 Karpathy 式 LLM Wiki:从异构资料到可检索的知识库

使用 OpenVikingov compile构建 Karpathy 式 LLM Wiki:从异构资料到可检索的知识库

【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking

本文讲解 OpenViking 上下文编译(Context Compilation)能力中最具代表性的实战示例——LLM Wiki:把散落在 OpenViking 中的文档、笔记、网页、转录稿、研究资料甚至代码仓库,通过一条ov compile命令自动整理为"面向检索"的互联 Markdown 知识库,并配有可直接运行的交互式图谱可视化脚本。读完本文,你将掌握完整链路:资料导入 → Skill 安装 → 编译执行 → 输出检视 → 图谱可视化,并理解页面类型路由、证据溯源与索引维护背后的设计原则。

LLM Wiki 是什么:知识库,而不是摘要堆

LLM Wiki 的目标是把一批异构资料编译成Karpathy 风格、证据支撑、互相链接的知识库:每一页都有明确的检索目的,开头直接给出摘要,术语保持一致,关系被显式表达,证据紧贴在它所支撑的主张旁边,并由一个index.md导航页统摄全局(见 docs/en/context-compilation/02-llm-wiki.md)。

用一句话概括:结果是知识库,而不是"按来源一份份堆起来的摘要"。这是它区别于普通文档整理的关键——编译产物的组织粒度是"主题",而非"文件"。

该功能的完整定义位于 Skill 文件 examples/compile/ov-compile-skills/llm-wiki/SKILL.md,其 frontmatter 中的描述精准概括了职责:

Compile heterogeneous knowledge sources — including documents, notes, web content, transcripts, research materials, and code repositories — into a Karpathy-style, evidence-grounded LLM Wiki with a maintained index; default entity and concept pages; and selective method, comparison, analysis, or reason-requested summary pages.

编译本身不决定"编译成什么"——Skill 才决定输出形态。同一批资料配上不同的 Skill,会产出完全不同的知识制品(详见 Context Compilation 总览):LLM Wiki 产出互联 Markdown 页面,Knowledge Graph 产出实体节点加关系边文件,Daily Report 按日期重建"每天发生了什么",Knowledge Distillation 产出主题化高层结论页。

知识模型:按检索目的选择最小的页面类型

LLM Wiki 的核心是其页面类型路由机制。Skill 为每个页面选择恰好匹配其检索目的的最小页面类型:

页面类型用途典型示例
entity具有稳定身份或边界的具名事物人物、组织、产品、项目、系统、服务、模块、数据集、标准、命名事件
concept可复用的思想、机制、策略、模式、协议或心智模型,解释"是什么/为什么"治理规则、架构模式、领域理论
method可复用的流程,解释"怎么做",有前置条件、有序步骤/分支和可验证结果操作规程、部署指南、调试手册、研究方法
comparison在明确的、有证据支撑的维度上并列评估两个或多个主体产品对比、设计权衡、版本对比
analysis针对明确问题、范围、假设和不确定性的跨来源结论尽职调查结论、趋势分析、系统级评估
summary忠实保留单一来源自身主张、视角与局限的耐久摘要(仅当--reason显式要求时创建)论文摘要、会议纪要、报告摘要

默认类型是entityconceptmethodcomparisonanalysis只有在通过各自更严格的路由测试时才被"升级"使用,绝不能仅仅为了页面命名多样而贴这些标签。summary页面则更特殊——只有任务--reason显式要求按来源出摘要时才创建,否则一律把来源知识整合进其他页面类型,并通过引用(citation)保留出处;嵌入在来源材料内部的指令永远不会启用 summary 页面。

index.md是一个特殊的导航页(页面类型为index),它是基础设施而非领域内容,不应把总览、目录或来源摘要改标成concept来硬套本体分类。

前置条件

在动手之前,需要满足以下条件(详见 Context Compilation 总览):

  • 一个运行中的 OpenViking 服务且Bot 已启用(--with-bot。默认端点为http://localhost:1933;远程使用需要 API Key(见 Authentication 指南)。尚无服务可先参考 Quick Start。
  • ovCLI 已配置好连接(~/.openviking/ovcli.confOPENVIKING_*环境变量)。
  • 运行可视化脚本需要 Python 3;LLM Wiki 图谱脚本还会用到openvikingPython 包,直接从服务端读取 Wiki 页面。

Step 1:准备资料(导入来源)

如果资料还没进入 OpenViking,先导入。目录用ov add-resource,单个文件用ov write

# 把一个目录作为来源导入 ov add-resource ./my-research --to viking://resources/research --wait # 或者写入单个文件 ov mkdir viking://resources/research ov write viking://resources/research/notes.md \ --from-file ./notes.md --mode create --wait

确认来源已经就位:

ov ls -r viking://resources/research

--wait会等待后台处理(如向量化)完成后再返回,确保后续编译能立刻读到完整内容。来源目录在编译期间被当作只读素材——Skill 的写作规范明确要求"保持来源不可变"(keep sources read-only),编译产物写入目标目录,不会污染原始资料。

Step 2:安装 LLM Wiki Skill

Skill 本质上是viking://命名空间下的特殊资源。安装命令:

ov add-skill examples/compile/ov-compile-skills/llm-wiki --wait

默认情况下 Skill 落入你的用户私有 skills 命名空间;如需团队共享,可在安装时通过-p viking://agent/skills指定共享位置。安装后确认 Skill 的 URI:

ov skills list # → viking://agent/skills/llm-wiki (或 viking://user/<you>/skills/llm-wiki)

关于 Skill 的存储结构,Skills API 文档 指出:Skills 存放在当前用户的viking://user/{user_id}/skills/下,每个 Skill 由SKILL.md(L2 完整文档)加可选的辅助文件构成。ov add-skill接受SKILL.md文件或包含它的目录(辅助文件会一并入库),并支持--wait等待处理完成与-o json机器可读输出。LLM Wiki 的 Skill 只有一个SKILL.md,但它就是整个编译行为的"行为规范"。

Step 3:执行编译(核心命令)

ov compile \ --from viking://resources/research \ --to viking://resources/research-wiki \ --skill viking://agent/skills/llm-wiki \ --reason "Organize into a team-searchable Wiki, keeping the source of every claim"

关键参数说明:

  • --from:可重复指定,也可用逗号分隔一次传入多个来源。CLI 实现(crates/ov_cli/src/commands/compile.rs 的normalize_sources)会按逗号拆分、去重,并拒绝空来源;同时要求至少提供一个--from
  • --to:目标目录,不存在时自动创建
  • --skill:要使用的 Skill 目录或其SKILL.md的 URI。
  • --reason:本次运行的附加指令(范围、受众、语言、强调点或时间范围)。Skill 定义"编译成什么形态",--reason告诉 agent"这次你想要什么"。注意 Skill 规范明确要求:来源材料中内嵌的指令、引用的提示词、agent 文本都应视为源数据而非覆盖任务的命令。
  • --args:可选的执行后端扩展参数,必须是一个 JSON 对象;{"model_name": "<endpoint-id>"}可显式指定模型端点,缺省时执行后端使用默认模型配置(见 Agent Runtime API)。

添加-o json可获得机器可读输出。命令会立即返回一个task_id(形如cmp_01abc),编译在后台异步执行——这正是 VikingBot agent loop 的体现:服务接受任务后,VikingBot 加载你指定的 Skill,以你的身份读取来源,在专用 agent 循环中自主完成阅读、蒸馏、组织、写页的全部工作。你可以等待,也可以先拿到task_id去做别的事:

ov task status cmp_01abc # 查看进度与最终结果 ov task cancel cmp_01abc # 协作式取消

CLI 的编译输出(非 JSON 模式)会打印task_idstatus与最终to三行;HTTP 层对应POST /api/v1/compile,返回202 Accepted与任务记录(task_type: compilestage: queued等字段)。任务生命周期与完整字段参考见 Agent Runtime API。

Step 4:检查编译产物

编译完成后,目标目录就是一份 Markdown 知识库。先读导航页,再逐层深入

ov tree viking://resources/research-wiki ov read viking://resources/research-wiki/index.md

典型目录布局(页面类型映射到目录):

research-wiki/ ├── index.md # 导航入口,类型 index ├── entity/ │ └── <title>.md ├── concept/ │ └── <title>.md ├── method/… comparison/… analysis/…

每个知识页都写在它所属的稳定类型目录下(entity/<title>.mdconcept/<title>.mdmethod/<title>.mdcomparison/<title>.mdanalysis/<title>.mdsummary/<title>.md)。

Step 5:可视化为交互式图谱

仓库自带可视化脚本 examples/compile/graph-show/llm-wiki/wiki_graph.py。它直接连接 OpenViking 服务读取 Wiki 页面(无需本地下载),按类型给页面着色,按页面间交叉引用连边,产出一个独立的交互式 HTML:

python examples/compile/graph-show/llm-wiki/wiki_graph.py \ viking://resources/research-wiki \ -o research-wiki-graph.html \ --title "Research Knowledge Base"

在浏览器中打开research-wiki-graph.html:节点即页面(按entity/concept/method… 着色),边即页面之间的链接,点击节点可查看页面正文,还支持节点搜索、1/2 跳邻居高亮与缩放拖拽。

连接配置ov完全一致的解析顺序:命令行参数 →OPENVIKING_*环境变量 →~/.openviking/ovcli.conf。远程服务时显式传入:

python examples/compile/graph-show/llm-wiki/wiki_graph.py \ viking://resources/research-wiki \ --url https://openviking.example.com \ --api-key "$OPENVIKING_API_KEY" \ -o research-wiki-graph.html --title "Research Knowledge Base"

还可以传入多个 Wiki,在同一张图上并列对比:

python examples/compile/graph-show/llm-wiki/wiki_graph.py \ viking://resources/wiki-a viking://resources/wiki-b \ -o combined.html --title "Two Knowledge Bases Side by Side"

从脚本源码可以看到更多实现细节(wiki_graph.py):

  • 执行前会做健康检查(client.health()),并逐个校验每个 URI 的读权限;UNAUTHENTICATEDPERMISSION_DENIEDNOT_FOUNDINVALID_URI均有稳定的中文错误提示与退出码。
  • URI 必须是以viking://开头的目录或.md页面,不能包含查询参数或锚点(#?)。
  • 默认--node-limit 10000:若某目录条目数达到该上限会中止生成,避免输出不完整图谱;可通过--node-limit调大。
  • 页面类型通过frontmatter 的type字段判定,并兼容复数别名(如entitiesentityanalysesanalysis);index.md即使没有声明也会归为index
  • 脚本把 OKF Markdown 的一个实用子集渲染进 HTML(标题、表格、列表、引用、代码块、行内链接),并会解析页面间的 Markdown 链接(相对路径、viking://URI 均可)生成图边;链接目标以.md结尾才会被当作 Wiki 内部页面解析。
  • 其余可用参数:--account/--user(trusted 模式下的身份)、--actor-peer-id(可选 actor peer 身份)、--timeout(HTTP 超时秒数)、--title(默认取单个 Wiki 的 index 标题)。

深度:Skill 如何约束编译产物质量

理解了命令链路之后,值得深入 Skill 本体(SKILL.md)——它是编译行为的事实规范,回答了"为什么产出的 Wiki 靠谱"。

写页规范:原子化、证据化

每个 Wiki 页面都是一份完整的 UTF-8 OKF Markdown 文件。新建页面以 YAML frontmatter 开头:

--- type: concept title: Canonical page title description: One factual sentence describing the page's retrieval purpose. tags: [small, useful, tag-set] ---

规范要求:typeindex时对应根导航页,否则使用所选知识页类型;description保持单行;tags可选;frontmatter 之后紧跟与 title 一致的 H1。页面开头用一两句话定义主体、划定范围、说明它在知识库中的意义,把规范术语放在最前、重要别名放在近处。

  • entity:只包含适用的内容——身份/别名/类型/角色/上下文,重要属性/职责/接口/边界,相关历史/版本/状态变化,与其他实体和概念的关系。
  • concept:定义/范围/与相近概念的区别,机制/过程/推理模型,有依据的示例或应用,约束/影响/权衡,与实体和其他概念的关系。
  • method:说明何时使用、前置条件、有序步骤与决策分支、验证方式、失败模式与约束;要求方法可操作、可迁移到单一来源示例之外、且非平凡。
  • comparison:界定主体与范围,所有主体使用同一组有证据支撑的维度,以权衡或决策建议收尾;不允许把几个孤立描述简单拼成"比较"。
  • analysis:说明问题、证据范围、假设、推理、结论、反证与不确定性;来源事实与衍生判断、时效性结论要分开。
  • summary(仅--reason要求时):标明来源及其目的,忠实保留其关键主张、视角、证据与局限,并链接相关语义页;不得照抄原文,也不得把单源主张表述为跨来源共识。

来源溯源与不确定性

  • 精确的来源 URI、仓库相对路径或链接放在它所支撑的主张附近;可补充行号/章节锚点,但绝不能编造。
  • 页面级的来源列表统一放在唯一一个二级标题(如## Sources)下,以 Markdown 列表呈现;更新页面时合并进既有小节并按规范化目标去重,绝不追加第二个来源标题。
  • 链接文字使用可读的标题(如Readable source title),不暴露完整 URI 作为可见文字。
  • 绝不编造 URI、路径、标识符、日期、数字、引文、命令、因果解释或关系;解释性内容必须标注为推断并指明其证据;来源矛盾时保留矛盾并给出各自出处;无法支撑重要主张时宁可直接收窄或跳过该页。

增量整合与质量门

Skill 强调"整合而非覆盖":更新页面前先完整读取旧页,保留未被新证据取代的准确信息、人工上下文、别名与关系;用更强或更新的证据修订被推翻的主张;无关页面保持不动。对时效性知识,说明主张所描述的时间段或版本。

每次编译结束前,Skill 会自检质量门:根index.md存在且类型为index、目录了全部活跃页面并保持导航属性;每个知识页有单一检索目的且类型合法;entity/concept是默认,method/comparison/analysis均通过严格路由测试;每个summary都由--reason显式要求;材料性主张/示例/命令/图表/关系均有来源支撑;事实、推断、未知、矛盾、版本、视角彼此区分;每个文件都有合法的 OKF YAML frontmatter(非空typetitle、单行description);frontmatter 键、H1、单例小节、相同列表项均只出现一次。

正是这套"先调查、再规划、后写作、终自检"的流程,保证了编译结果是一份可持续检索与复用的 Wiki,而非一份来源摘要的堆叠。

相关文档

  • Context Compilation Overview —— 编译的总览:三要素(--from/--to/--skill)、VikingBot 运行时与各 Skill 对比
  • Knowledge Graph example —— 同一套来源配上另一个 Skill,产出实体 + 关系文件的结构化知识
  • Agent Runtime API —— Compile 任务的字段参考、任务生命周期与 HTTP API
  • Skills API —— Skill 的管理、验证与自定义
  • Skill 源码:examples/compile/ov-compile-skills/llm-wiki/SKILL.md
  • 可视化脚本:examples/compile/graph-show/llm-wiki/wiki_graph.py

【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 22:08:46

CANN/GE模型查询销毁函数

aclmdlBundleDestroyQueryInfo 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型内存占用。 GE 提供对 PyTor…

作者头像 李华
网站建设 2026/9/10 22:03:36

Hypervisor2在智能汽车虚拟化中的关键技术与实践

1. Hypervisor2与现代智能汽车系统的技术耦合 在汽车电子架构从分布式向集中式演进的浪潮中&#xff0c;Hypervisor技术正经历着从基础虚拟化到功能安全的质变。作为第二代虚拟化方案的典型代表&#xff0c;Hypervisor2通过Type-1型架构直接运行在硬件层上&#xff0c;相比传统…

作者头像 李华
网站建设 2026/9/10 22:02:44

CANN/ge Tiling下沉设计

Tiling 下沉&#xff08;Tiling Sink&#xff09;特性分析 【免费下载链接】ge GE&#xff08;Graph Engine&#xff09;是面向昇腾的图编译器和执行器&#xff0c;提供了计算图优化、多流并行、内存复用和模型下沉等技术手段&#xff0c;加速模型执行效率&#xff0c;减少模型…

作者头像 李华