news 2026/9/11 16:13:03

OpenViking LLM Wiki 编译实战:把异构资料整理成有出处的可检索知识库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenViking LLM Wiki 编译实战:把异构资料整理成有出处的可检索知识库

OpenViking LLM Wiki 编译实战:把异构资料整理成有出处的可检索知识库

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

本指南基于 OpenViking 的上下文编译(Compile)能力,讲解如何把一批异构来源——文档、笔记、网页、访谈记录、研究资料、代码仓库——编译成一套 Karpathy 风格、有出处、互相链接的LLM Wiki知识库。读完本文,你将掌握:LLM Wiki 的六类页面模型与路由规则、从导入来源到执行编译的完整ov命令链路、产物目录结构与页面规范,以及把 Wiki 可视化为交互式知识图谱的具体方法。本示例的完整 Skill 位于 examples/compile/ov-compile-skills/llm-wiki/SKILL.md,可视化脚本位于 examples/compile/graph-show/llm-wiki/wiki_graph.py。

LLM Wiki 是什么:知识库,不是摘要拼盘

LLM Wiki 的核心目标是把来源编译成持久、互相连接的知识,而不是一份逐文档的摘要合集。它的设计约束可以概括为四点:

  • 每一页有明确的检索目的:读者(人或 Agent)能凭一句话判断这页解决什么问题;
  • 开头一句话直给结论:打开页面第一段就能获取该主题的核心信息;
  • 术语统一、关系显式:同义概念收敛到一个规范主题,页面之间的链接构成可遍历的网络;
  • 证据紧贴结论:每个事实主张旁边都带有精确的来源引用,且由一个index.md做导航入口。

在知识模型上,这套 Skill 会按页面的检索目的挑选最合适的页面类型,而不是按文档数量机械生成页面。默认以entityconcept为主,其余类型只在满足各自的严格判定时才提升:

页面类型用于典型对象
entity有稳定身份的具名事物人、组织、产品、项目、系统、服务、模块、数据集、标准、具名事件
concept可复用的思想、机制、模式、协议、心智模型治理规则、架构模式、领域理论
method有前置条件、有序步骤、可验证结果的可复用流程操作规程、部署指南、调试手册、研究方法
comparison在明确维度上对两个及以上对象做并排评估产品对比、设计取舍、版本差异
analysis围绕一个问题的跨来源结论(含问题、范围、假设与不确定性)尽调结论、趋势分析、系统性评估
summary单一来源的忠实数字化摘要(仅当--reason明确要求时才生成论文摘要、会议纪要、报告摘要

从 SKILL.md 的源码看,entityconcept是默认路由,method/comparison/analysis只有在完整通过表格中的判定标准时才允许使用,不能仅仅为了页面命名变化而滥用这些标签summary页面则必须由任务--reason显式要求才会创建,来源正文里的指令或 Agent 的隐性偏好都不能触发它。特别地,"一个来源"只是出处的证据,不等于一个页面——除显式要求的摘要外,不按"一个文档一个页面"的方式生成,来源本身只有在作为知识库中有意义的具名主体时才可以是entity

第一步:准备来源

如果材料还没进 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

这里使用的viking://URI 是 OpenViking 中定位资源的标准形式(对应 CLI 实现里的filesystem::ls/content::write等命令)。--wait让命令在导入完成后返回,便于在脚本中串接后续步骤。

第二步:添加 Skill

把 LLM Wiki 的 Skill 装进服务。默认落到你的用户私有 skills 命名空间;想让团队共用就用-p viking://agent/skills

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

从 crates/ov_cli/src/commands/skills.rs 的实现看,ov add-skill会把你指定的本地目录(本示例中是仓库内的examples/compile/ov-compile-skills/llm-wiki)打包上传,通过POST /api/v1/skills写入服务端,--wait表示等待处理完成。

查看装好的 Skill URI:

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

Skill 的核心是一个 SKILL.md 文件,其 YAML frontmatter 中的namedescription字段就是 Skill 的元信息:name: llm-wikidescription描述了它面向的输入(文档、笔记、网页、访谈记录、研究材料、代码仓库)与产出(带导航索引、有出处的 LLM Wiki)。

第三步:执行编译

ov compile \ --from viking://resources/research \ --to viking://resources/research-wiki \ --skill viking://agent/skills/llm-wiki \ --reason "面向团队检索整理成 Wiki,保留每条结论的出处"

各参数说明:

  • --from:一个或多个来源目录/文件。可以重复传参,也可以用逗号分隔,一次传入多个来源;
  • --to:产物写入的目标目录,不存在时会自动创建
  • --skill:指定编译成什么形态的 Skill URI;
  • --reason:可选的补充指令,告诉 Agent 这一次具体要什么——例如范围、受众、语言、侧重点,以及是否生成summary页面。Skill 定义"编译成什么形态",--reason在此之上定义"这一次具体要什么"。

从 crates/ov_cli/src/commands/compile.rs 的源码可以看到三个实现细节:

  1. 多来源规范化normalize_sources会把每个--from参数按逗号拆分、去空值、按顺序去重,因此重复来源不会被重复消费;
  2. 任务参数解析parse_args要求--args必须是合法的 JSON object(例如--args '{"model_name":"your-model-endpoint-id"}'可用于指定执行端模型),非 object 会直接报错;
  3. 提交与返回:命令通过 crates/ov_cli/src/client.rs 中的create_compilePOST /api/v1/compile发起请求,返回202 Accepted后立即打印task_id等摘要信息。

机器可读输出与任务生命周期

想要机器可读结果加-o json;命令会立即返回task_id,用它查询或取消任务:

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

任务类型前缀为cmp_。根据 Agent Runtime API 的定义,任务生命周期包含以下状态:

Status常见 Stage
pendingqueued
running执行端返回的执行 Stage,例如agentwriting
cancelling收敛当前进程内工作和清理资源
completedcompletedsalvaged
failed失败发生时的 Stage;响应包含error
cancelledcancelled

ov task cancel协作式取消:任务先进入cancelling,等当前进程内工作和清理完成后进入cancelled,已经完成的写入不会回滚;重复取消已处于cancelled的任务是幂等的。任务的执行由 VikingBot(或兼容 Runtime)在独立的 Agent Loop 中完成——Compile 的底层执行模型详见 VikingBot 概念。

第四步:看看产物

编译完成后目标目录里就是一套 Markdown 知识库。先看导航页,再按需钻进去:

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

典型结构(页面类型对应目录):

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

这套目录约束来自 SKILL.md 的"写入路径"规则:entity页写到entity/<title>.mdconcept写到concept/<title>.md,依此类推。

页面的规范形态

每一个 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] ---
  • type:知识页类型(entity/concept/method/comparison/analysis/summary),根导航页固定为index
  • title:规范标题,frontmatter 之后紧跟一个与之相同的 H1;
  • description一行事实性描述,说明该页的检索目的;
  • tags:可选。

正文的写作约束值得注意:

  • 开头开门见山:用一两句话定义/识别该主题、划定范围并说明它在知识库中的意义,规范术语放在最前,重要别名紧随其后;
  • 证据与不确定性:精确的来源 URI、仓库相对路径或链接放在它所支撑的主张旁边;页面级来源统一收在一个二级标题(如## 来源)下以列表形式列出;推理要标注为推断并说明依据,未知之处如实陈述;来源有分歧时保留分歧并注明出处,区分错误与时间变化、版本、视角、范围差异;
  • 整合而非覆盖:更新已有页面时先完整读取,保留新证据未推翻的独特信息、别名与有用关系,合并互补证据,修订被更强更新证据推翻的主张,不要为导航另建 overview(那是index.md的职责),也不要在页面中追加第二个来源标题;
  • 代码来源:若来源包含代码,还需检查清单文件、文档、入口点、公共契约、schema、测试、运行时接线、配置与部署单元,依据证据而不是目录名分类仓库,优先通过真实实现追溯关键行为。

质量门禁(Quality Gate)

编译结束前,Skill 要求自查以下要点:index.md存在且类型为index,收录所有活跃知识页并保持导航性;每个知识页只有一个检索目的且使用六种类型之一;entity/concept是默认,method/comparison/analysis都通过严格路由测试;summary全部由--reason显式请求;通用来源与代码来源遵循同一知识模型;别名被规范化而未合并不同主体;关键主张、示例、命令、图与关系都有来源支撑;事实、推断、未知、矛盾、版本、视角彼此区分;最终产物是 Wiki 而不是逐来源摘要或生成式文档站;每个 Wiki 文件都有合法 frontmatter(非空typetitle、单行description),且每个 frontmatter key、H1、单例小节(如 Sources)、相同列表项只出现一次。

第五步:可视化成交互式图谱

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-wiki-graph.html即可。节点是页面(按entity/concept/method… 分色),边是页面之间的链接,点节点能看正文。

从 wiki_graph.py 的源码看,这个脚本的完整工作流是:初始化openvikingPython 客户端 → 校验服务健康(client.health())→ 对每个输入 URI 鉴权并枚举其下全部.md页面(stat/ls)→ 读取正文、解析 frontmatter 与页面类型 → 解析页面间的 Markdown 链接构建图谱 → 渲染独立的 HTML 文档。其中几个值得注意的细节:

  • 类型着色_CATEGORY_STYLE定义了index(导航,红)、entity(实体,绿)、concept(概念,蓝)、method(方法,紫)、comparison(比较,青)、analysis(分析,橙)、summary(摘要,粉)等类别的中文标签与颜色,_CATEGORY_ALIASES还兼容entities/concepts/analyses/synthesis等别名写法;
  • 图谱构建build_graph只把能解析到目标页面的.md链接画成边,并计算每个节点的度(degree),节点大小随连接数增大;HTML 页面内置 D3 力导向布局,支持搜索节点、点击浏览正文、拖拽节点、滚轮缩放,以及"拓展到 2 跳"的邻居高亮;
  • 安全与容错:脚本在写入 HTML 前会检查每个 URI 的读权限,UNAUTHENTICATED/PERMISSION_DENIED/NOT_FOUND等错误会以明确的退出码和中文提示返回;
  • 节点数量保护--node-limit默认 10000,当目录条目数达到该限制时会中止并提示提高限制,避免生成不完整的图谱。

连接配置与多 Wiki 对照

连接配置的解析顺序和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 "研究知识库"

可用参数还包括--account(trusted 模式下的 account 身份)、--user(trusted 模式下的 user 身份)、--actor-peer-id(可选 actor peer 身份)、--timeout(HTTP 超时秒数)以及--node-limit。没有配置连接前,可参考 快速开始;远程鉴权方式见 鉴权指南。

一次传多个 Wiki,可以把它们画在同一张图里对比:

python examples/compile/graph-show/llm-wiki/wiki_graph.py \ viking://resources/wiki-a viking://resources/wiki-b \ -o combined.html --title "两个知识库对照"

默认输出文件为./llm-wiki-graph.html;单个 Wiki 时若存在index页,标题默认取该 index 的标题,否则回退为"LLM Wiki 知识图谱"。

相关文档

  • 上下文编译概览 —ov compile的整体机制与全部示例 Skill
  • Knowledge Graph 示例 — 同一编译机制产出的另一种结构化知识形态
  • Agent Runtime API — 创建、查询和取消 Compile 任务的 HTTP 接口、字段定义与任务生命周期
  • VikingBot 概念 — Compile 背后的 Agent 执行体

【免费下载链接】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/11 16:11:20

反激电源深度解析:从工作原理到选型实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/11 15:58:26

从ADC原理到数字化仪设计:SAR与Delta-Sigma选型及信号链实战

一提到数字化仪&#xff0c;很多人的第一反应是&#xff1a;这不就是一台示波器吗。这句话对了一半——数字化仪和示波器核心都绕不开ADC&#xff0c;但两者的设计思路完全不同。数字化仪更像一个“为数据而生的采样设备”&#xff0c;它把模拟信号变成一串带时间戳的数字序列&…

作者头像 李华
网站建设 2026/9/11 15:57:42

高温高湿盐雾环境下光电液位传感器的选型与实战经验

直接聊干货。这段时间在做一个高温高湿、强盐雾环境下的液位检测项目&#xff0c;甲方工况表一拉出来就劝退了三个方案&#xff1a;介质温度长期80℃左右&#xff0c;峰值能冲到95℃&#xff0c;车间旁边就是盐雾区&#xff0c;普通传感器上去基本就是消耗品。最后定下来的方案…

作者头像 李华
网站建设 2026/9/11 15:56:48

汇写AI:搞定开题报告难题,解锁高效学术写作新模式

在学术写作的全流程中&#xff0c;多数同学最大的瓶颈从来不是正文撰写&#xff0c;而是开题报告。作为整篇论文的核心纲领&#xff0c;开题报告直接决定了研究方向的可行性、整体写作逻辑的完整性&#xff0c;更是导师审核、论文通过率的核心评判标准。但从本科到硕博阶段&…

作者头像 李华