第八章:Hermes如何使用LLM Wiki工具

Hermes Agent 整合了基于 Andrej Karpathy 提出的 LLM Wiki 模式,提供了一个强大的、可自我维护的知识库解决方案。
这一功能允许用户和 Agent 共同构建和维护一个由相互关联的 Markdown 文件组成的知识库,从而实现知识的持续积累、更新和高效检索。
本章将深入探讨 Hermes Agent 的 LLM Wiki 应用,包括其核心理念、架构设计以及操作管理。
8.1 LLM Wiki 介绍
Hermes Agent 的 LLM Wiki 功能是基于 Andrej Karpathy 的 LLM Wiki 模式,旨在解决传统知识管理和检索的痛点。它不仅仅是一个简单的文档存储系统,而是一个能够构建和维护持久化、相互关联的 Markdown 文件知识库的智能系统。
与传统的 RAG (Retrieval-Augmented Generation) 模式不同,LLM Wiki 的核心区别在于其知识处理方式:
- 传统 RAG:在每次查询时从头开始重新发现知识,这意味着每次都需要重新检索和理解源材料。
- LLM Wiki:知识被编译一次并持续更新。一旦信息被摄取到 Wiki 中,它就会被结构化、交叉引用,并与现有知识进行整合。这意味着知识库中的矛盾已经被标记,综合信息已经反映了所有摄取的内容。
这种模式下,人类用户负责策划来源和指导分析,而 Agent 则负责总结、交叉引用、归档和维护知识库的一致性。通过这种分工,LLM Wiki 能够随着时间的推移不断增长和完善,成为一个“活”的知识系统。
8.2 Wiki 架构与分层
Hermes Agent 的 LLM Wiki 采用清晰的三层架构,确保了知识库的结构化、可维护性和可扩展性。整个 Wiki 存储在一个指定的目录中(默认为 ~/wiki,可通过 WIKI_PATH 环境变量配置),该目录由一系列 Markdown 文件和子目录组成。
8.2.1 三层架构
LLM Wiki 的三层架构包括:
- 原始来源 (Raw Sources):这一层包含不可变的原始材料,如网页文章、PDF 文档、会议记录、访谈稿以及引用的图像和图表。Agent 只读取这些文件,但不会修改它们。它们是知识库的基础,确保了所有信息的来源可追溯。
- Wiki (Agent 拥有):这一层由 Agent 创建、更新和交叉引用的 Markdown 文件组成。它是知识库的核心,包含了经过 Agent 处理和整合后的实体、概念、比较和查询结果等页面。这些文件是 Agent 学习和沉淀经验的体现。
- Schema (结构定义):
SCHEMA.md文件定义了 Wiki 的结构、约定和标签分类法。它充当了 Agent 行为的约束,确保知识库的整体一致性和规范性。例如,它定义了文件命名约定、页面前置元数据 (frontmatter) 格式、链接规则以及标签的使用规范。
8.2.2 目录结构
典型的 LLM Wiki 目录结构如下:
wiki/
├── SCHEMA.md # 约定、结构规则、领域配置
├── index.md # 带有单行摘要的分段内容目录
├── log.md # 按时间顺序排列的行动日志 (仅追加,每年轮换)
├── raw/ # 第一层:不可变原始材料
│ ├── articles/ # 网页文章、剪报
│ ├── papers/ # PDF、arxiv 论文
│ ├── transcripts/ # 会议记录、访谈
│ └── assets/ # 原始来源引用的图像、图表
├── entities/ # 第二层:实体页面 (人物、组织、产品、模型)
├── concepts/ # 第二层:概念/主题页面
├── comparisons/ # 第二层:并排分析
└── queries/ # 第二层:值得保留的归档查询结果
8.3 Wiki 操作与管理
Hermes Agent 提供了一套完整的操作流程来初始化、维护和更新 LLM Wiki,确保知识库的有效性和准确性。
8.3.1 初始化新 Wiki
当用户要求创建或启动一个 Wiki 时,Agent 会执行以下步骤:
- 确定 Wiki 路径:从
$WIKI_PATH环境变量获取,或询问用户,默认为~/wiki。 - 创建目录结构:按照上述三层架构创建相应的目录和文件。
- 询问 Wiki 领域:明确 Wiki 涵盖的具体领域。
- 编写定制化的
SCHEMA.md:根据领域定制结构、约定和标签分类法。 - 编写初始
index.md:包含分段标题。 - 编写初始
log.md:记录 Wiki 的创建事件。 - 确认 Wiki 就绪:并建议用户摄取第一个来源。
8.3.2 Wiki 定位
在处理现有 Wiki 时,Agent 在每次会话开始时都会进行“定位”操作,以理解当前的领域、约定和最新活动:
- 阅读
SCHEMA.md:理解领域、约定和标签分类法。 - 阅读
index.md:了解现有页面及其摘要。 - 扫描最近的
log.md:阅读最近的 20-30 条记录,了解近期活动。
这一步骤至关重要,它能防止创建重复页面、遗漏交叉引用、违反约定或重复已完成的工作。
8.3.3 摄取 (Ingest) 来源
当用户提供一个来源(URL、文件、粘贴文本)时,Agent 会将其整合到 Wiki 中:
- 捕获原始来源:
- URL:使用
web_extract获取 Markdown 内容,保存到raw/articles/。 - PDF:使用
web_extract处理,保存到raw/papers/。 - 粘贴文本:保存到相应的
raw/子目录。 - 文件命名:描述性命名,例如
raw/articles/karpathy-llm-wiki-2026.md。 - 添加原始前置元数据 (raw frontmatter):包含
source_url、ingested和内容的sha256摘要。sha256用于检测内容是否发生变化,避免重复处理或标记内容漂移。
- URL:使用
- 讨论要点:与用户讨论来源中的重要信息和对领域的影响(自动化场景下可跳过)。
- 检查现有内容:搜索
index.md并使用search_files查找现有页面,避免重复。 - 编写或更新 Wiki 页面:
- 新实体/概念:仅当满足
SCHEMA.md中定义的页面阈值(例如,2 个以上来源提及或对一个来源至关重要)时才创建新页面。 - 现有页面:添加新信息、更新事实、更新
updated日期。如果新信息与现有内容冲突,遵循更新策略。 - 交叉引用:每个新页面或更新页面必须通过
[[wikilinks]]链接到至少 2 个其他页面,并检查现有页面是否反向链接。 - 标签:仅使用
SCHEMA.md中定义的标签分类法。 - 出处:对于综合了 3 个以上来源的页面,在段落末尾添加
^[raw/articles/source-file.md]标记,以追溯信息来源。 - 置信度:对于观点性强、变化快或单一来源的主张,可在前置元数据中设置
confidence: medium或low。
- 新实体/概念:仅当满足
- 更新导航:将新页面添加到
index.md的正确部分,并更新“总页数”和“最后更新”日期。
8.3.4 页面阈值与更新策略
LLM Wiki 设定了明确的页面阈值和更新策略,以确保知识库的质量和一致性:
- 创建页面:当一个实体/概念出现在 2 个以上来源中,或对一个来源至关重要时。
- 添加到现有页面:当一个来源提及已涵盖的内容时。
- 不创建页面:对于一笔带过、次要细节或领域之外的内容。
- 拆分页面:当页面内容超过约 200 行时,将其拆分为带有交叉链接的子主题。
- 归档页面:当页面内容被完全取代时,将其移动到
_archive/并从索引中移除。
更新策略:当新信息与现有内容冲突时:
- 检查日期:新来源通常取代旧来源。
- 标记矛盾:如果存在真正的矛盾,记录两个立场及其日期和来源。
- 在前置元数据中标记矛盾:
contradictions: [other-page-slug]。 - 在 lint 报告中标记以供用户审查。
8.3.5 标签分类法
SCHEMA.md 中定义了标签分类法 (Tag Taxonomy),规定了 Wiki 中可使用的顶级标签。所有页面上的标签都必须出现在此分类法中,以防止标签蔓延,确保标签的一致性和可管理性。
例如,对于 AI/ML 领域的 Wiki,标签可能包括:
- 模型:
model,architecture,benchmark,training - 人物/组织:
person,company,lab,open-source - 技术:
optimization,fine-tuning,inference,alignment,data - 元信息:
comparison,timeline,controversy,prediction