
1. 从 RAG 到 LLM Wiki为什么 Hermes 值得折腾如果你正在检索「Hermes 搭建 Karpathy LLM Wiki」这个组合大概率已经踩过传统 RAG 的坑文档切得稀碎每次提问都要重新召回一堆片段模型拼上下文时还容易把互相矛盾的说法混在一起。Karpathy 提的 LLM Wiki 思路正好相反——把知识当代码写入阶段就完成解析、关联和结构化查询时直接读「编译产物」。这套东西适合谁适合手里有一批论文、技术文档、内部笔记想让它们长成一个可演化语义网络的人而不是只想做个一次性问答机器人。我这次用 Hermes Agent 做底座核心原因是它的双层记忆和 Skill 沉淀机制天然贴合 Wiki 的「编译执行」模型。L1 持久记忆存实体和关系L2 用 SQLite 做全文检索兜底再配合 Schema 约束知识库不会越写越乱。整条链路里模型调用是高频动作所以统一 Key 接入就成了必须先解决的前置问题——这也是本文会把 TaoToken 的 Base URL、auth.json 配置写全的原因。下面按「场景 → 前置 → 配置 → 验证 → 排障 → 分流」的顺序走一遍每一步都能直接复制。2. TaoToken 统一 Key 前置Base URL 与 auth.json 三件套在 Hermes 里跑 Wiki 编译Agent 会频繁调用模型做实体抽取、链接生成和一致性校验。如果每个工具各自配一套 Key后面排障会非常痛苦。TaoToken 的作用是把模型通道统一成一套 Base URL Key Model IDHermes、Cline、Codex 这些工具都指向同一个入口。先拿 Key打开 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapikeys 创建一个新 Key 并复制。注意 Key 只在创建时完整显示一次丢了就重建。拿到 Key 后统一通道的三个要素是要素值Base URLhttps://taotoken.net/apiAPI Key你刚创建的那串Model ID按需选例如 claude-sonnet-4-5、gpt-4.1 等Hermes 读取模型配置时常见做法是走auth.json。在 Hermes 工作区根目录创建或编辑auth.json{ base_url: https://taotoken.net/api, api_key: sk-你的TaoTokenKey, model: claude-sonnet-4-5, provider: openai-compatible }如果你用的是 Codex 风格的auth.json字段名可能是OPENAI_BASE_URL和OPENAI_API_KEY那就写成{ OPENAI_BASE_URL: https://taotoken.net/api, OPENAI_API_KEY: sk-你的TaoTokenKey, model: claude-sonnet-4-5 }注意Base URL 结尾不要多加/v1TaoToken 的兼容层已经处理了路径。多写一层会导致 404这个坑我在 Cline MCP 里踩过。如果你同时用 Cline 或 Claude Code建议把三件套写进各自的 settings 文件保持 Base URL 和 Key 完全一致后面出问题只需要查一个地方。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc 里面有各工具的字段对照。3. 可复制配置wiki_schema.yaml 与 Hermes 工作区初始化前置通道打通后进入 Wiki 编译流水线的配置。第一步是初始化 Hermes 工作区指定 SQLite 作为记忆后端hermes init --project-name karpathy_wiki --memory-backend sqlite执行后目录里会出现USER.md、skills/、tools/和memory/。接着定义 Schema它是知识库的「宪法」。创建wiki_schema.yamlversion: 1.0 directives: - name: extract_entities type: entity_recognition params: categories: [概念, 人物, 技术栈, 项目] strict_mode: true - name: bi_linker type: backlinking params: match_threshold: 0.85 auto_create_stub: true - name: knowledge_lint type: validation params: check_conflicts: true check_dead_links: true然后在USER.md里给 Agent 定角色# Role: 知识编译工程师 ## Goal 根据 wiki_schema.yaml 将输入的原始文档编译为标准的 Markdown Wiki 词条。 ## Constraints - 必须使用双向链接 [[Link]] 格式。 - 发现定义矛盾需在文档末尾标注 CONFLICT 标签。 - 保持学术化、严谨的语调。文档解析用 Python 工具链补上tools/parser.pyimport fitz # PyMuPDF def parse_pdf_to_md(file_path): 将 PDF 解析为 Markdown 文本保留层级结构 doc fitz.open(file_path) md_content for page in doc: text page.get_text() md_content text \n\n return md_contentHermes 在收到解析后的文本后会按 Schema 执行实体抽取、记忆查询、链接生成、一致性校验和记忆更新。这里的关键是模型调用全部走第 2 节的auth.json所以 Schema 里的strict_mode和match_threshold调参时不用再关心 Key 的问题。如果你想让 Agent 长期跑编译任务Coding Plan 比按次调用更划算入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcodingplan 。4. 验证请求一次 Wiki 问答的调用链路与返回结构配置写完后必须做一次最小验证确认调用链路和返回结构正常。Hermes 的 Wiki 问答本质是「读 L1 记忆 L2 检索 模型生成」所以验证分两步。第一步直接用 curl 打一次模型通道确认 Base URL 和 Key 有效curl -X POST https://taotoken.net/api/chat/completions \ -H Authorization: Bearer sk-你的TaoTokenKey \ -H Content-Type: application/json \ -d { model: claude-sonnet-4-5, messages: [ {role: user, content: 用一句话解释 Transformer 的核心机制} ] }正常返回结构里会有choices[0].message.content如果这里报 401说明 Key 或 Header 有问题先别往下走。第二步在 Hermes 里发起一次 Wiki 问答hermes ask --project karpathy_wiki Transformer 在视觉任务中的应用有哪些预期行为是Hermes 先查 L1 记忆里的实体「Transformer」再走 L2 SQLite 全文检索召回相关词条最后把结构化上下文交给模型生成回答。返回里应该能看到引用到的 Wiki 词条链接比如[[Transformer]]、[[ViT]]。如果返回里只有模型自由发挥、没有词条引用说明 Schema 的bi_linker没生效回去检查match_threshold是不是设太高。验证模型本身是否正常也可以直接在模型对话页试一句入口在 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodelchat 。5. 常见错排查401、local proxy failed 与 reading choices这一节按真实报错来对。第一个高频错是 401{error: {message: Invalid API key, type: authentication_error}}原因通常是auth.json里的 Key 带了多余空格或者复制时漏了sk-前缀。解决方式是重新从 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapikeys 复制粘贴后检查首尾字符。第二个是local proxy failedError: local proxy failed to connect to upstream这个多半是 Base URL 写成了https://taotoken.net/api/v1或者带了尾部斜杠。统一改成https://taotoken.net/api不要加/v1也不要加/。第三个是reading choices相关报错TypeError: Cannot read properties of undefined (reading choices)这说明返回体不是标准的 chat completions 结构常见于 Model ID 写错比如把claude-sonnet-4-5写成了claude-sonnet-4.5。对照接入文档里的模型列表改回来即可。第四个是 OAuth 类报错出现在 Claude Code 或 Codex 走 OAuth 登录时OAuth token exchange failed如果你已经用 TaoToken 的 Key 通道就不需要再走 OAuth。检查auth.json里是否同时存在 OAuth 字段和 API Key 字段冲突时删掉 OAuth 相关配置只保留 Base URL Key Model ID 三件套。排障时建议固定一个检查顺序先 curl 打通道再看auth.json字段最后查 Model ID。这样能覆盖九成以上的接入问题。6. 语义一致 CTA把通道固定下来再谈 Wiki 演化Wiki 编译流水线跑通后真正决定长期体验的是通道稳定性。Hermes 的 Skill 沉淀机制会在执行约 15 次工具操作后把重复逻辑固化成可复用的 Skill Markdown 文件比如自动格式化引用、自动生成存根。这些动作全都依赖模型调用如果 Key 通道三天两头换Skill 的触发条件也会跟着乱。所以我的做法是把auth.json里的 Base URL、Key、Model ID 三件套固定下来Hermes、Cline MCP、Codex 全部指向同一套。需要长期跑 Agent 编译任务时用 Coding Plan 承接高频调用只是临时验证模型返回结构用模型对话页就够。接入细节和字段对照都在接入文档里遇到 401 或reading choices先回第 5 节对一遍报错基本能自己解决。通道稳了Wiki 才会越写越聪明而不是越写越难维护。