
1. 为什么我要把 Obsidian 笔记接到统一 API 通道先说清楚 LLM-Wiki 是什么、能做什么、适合谁。LLM-Wiki 是一套用 Markdown 组织个人知识库的结构化方法核心是把原始资料拆成 sources原始摘要、concepts概念、entities实体、comparisons对比、summaries方案摘要几层再用双向链接串起来。它适合手上有大量文档、PPT、竞品资料却每次问答都要翻半天的人。Obsidian 是这套结构的笔记底座负责本地存储、图谱视图和链接管理。我之前的痛点很具体笔记散在好几个文件夹搜关键词能搜到文件名但搜不到语义。比如我问“某容灾产品和竞品差在哪”Obsidian 只能按文件名匹配真正的内容对比得自己一页页翻。后来我把 OpenClaw 技能接上大模型让 AI 读本地文档、生成结构化 Wiki 条目检索才真正可用。但这里有个绕不开的问题模型调用。本地跑小模型做日常问答够用可首次解析文档、批量生成结构化内容时本地模型上下文窗口和输出质量都吃紧。我需要一个统一的 Key 和 API 通道既能调商用大模型做重活又能保持配置可复现。TaoToken 就是在这个环节进来的——它提供统一的 API 入口我把 Base URL 和 Key 配一次OpenClaw 技能里所有模型调用都走这条通道不用每个工具单独配一遍。这一篇的目标很明确给你可复制的目录模板、技能配置片段以及一次端到端问答验证。跟着做你能得到一个可检索、可调用、可复现的本地知识库。全程不需要你懂多少编程会复制粘贴、会改路径就行。2. TaoToken 前置准备Key、Base URL 与模型 ID 三件套在动手搭知识库之前先把模型通道打通。这一步不做后面技能里的模型调用全是空转。你需要准备三样东西API Key、Base URL、Model ID。这三件套在 TaoToken 控制台都能拿到。打开 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 创建 Key复制下来存好页面关了就看不到了。Base URL 统一用 https://taotoken.net/api注意这个地址后面不加任何路径后缀OpenClaw 和大多数兼容 OpenAI 协议的工具都认这个格式。Model ID 在模型列表里选首次解析文档建议用上下文大的商用模型日常检索可以用本地模型。我试过把这三件套写进一个环境变量文件后面所有技能都引用它改一处就全局生效。具体做法是在知识库根目录建一个.env文件# ~/knowledge-base/.env TAOTOKEN_API_KEYsk-你的Key TAOTOKEN_BASE_URLhttps://taotoken.net/api TAOTOKEN_MODEL_ID你的模型ID然后在 OpenClaw 的配置里引用这些变量。OpenClaw 的模型配置通常在~/.openclaw/config.toml或项目级的openclaw.toml具体看你安装方式。下面是一段可复制的 TOML 配置片段# ~/.openclaw/config.toml [model] provider openai-compatible base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY model_id 你的模型ID timeout 120 max_retries 3如果你用的是 Cline 或 Claude Code 这类工具配置逻辑一样只是字段名不同。Cline 的 MCP 配置里Base URL 填https://taotoken.net/apiKey 填你的 KeyModel ID 填对应模型。Claude Code 的settings.json里则是{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key, ANTHROPIC_MODEL: 你的模型ID } }注意 Claude Code 用的是 Anthropic 协议字段名但 Base URL 和 Key 还是同一套。如果你不确定自己的工具用哪种协议先看它的文档里 Base URL 字段叫什么OpenAI 兼容的填base_urlAnthropic 兼容的填ANTHROPIC_BASE_URL。配完之后验证一下通道是否通。用 curl 发一个最小请求curl -s https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: $TAOTOKEN_MODEL_ID, messages: [{role: user, content: 回复 OK}], max_tokens: 10 }返回里能看到choices数组和内容就说明通道通了。这一步别跳过后面技能报错十有八九是这里没配对。3. 可复制配置目录模板与 OpenClaw 技能片段通道通了接下来搭知识库骨架。我建议一开始就把目录结构定死后面迁移会产生大量断链修起来很烦。在 Obsidian Vault 根目录下按下面的结构建目录。假设你的 Vault 路径是E:\Obsidian\knowledge-baseknowledge-base/ ├── wiki/ │ ├── sources/ # L1: 原始文档摘要 │ ├── concepts/ # L2: 技术概念 │ ├── entities/ # L2: 产品/竞品实体 │ ├── comparisons/ # L3: 竞品对比 │ ├── summaries/ # L3: 方案摘要 │ ├── synthesis/ # L4: 综合结论 │ ├── index.md # 子库索引 │ └── log.md # 更新日志 ├── assets/ # 图片资源 ├── .env # 模型三件套 └── quality-report.md # 质检报告子库数量控制在 3 到 5 个太多维护不过来。每个子库都套用上面wiki/下的结构。assets/目录别忘建产品知识库后续提取图片全靠它。目录建好后创建 OpenClaw 技能。技能就是放在~/.openclaw/skills/技能名/SKILL.md的 Markdown 文件。先建构建器技能mkdir -p ~/.openclaw/skills/llm-wiki-builder然后写SKILL.mdfrontmatter 必须包含 name、version、description、allowed-tools--- name: llm-wiki-builder version: 1.0.0 description: 按 LLM-Wiki 分层架构创建和填充知识库 allowed-tools: - read - write - exec --- # LLM-Wiki Builder ## 职责 按照 sources/concepts/entities/comparisons/summaries 分层架构创建知识库 读取源文档并生成结构化 Wiki 条目。 ## 目录规范 - sources/L1 原始文档摘要 - concepts/ entities/L2 概念与实体 - comparisons/ summaries/L3 对比与摘要 - synthesis/L4 综合结论 ## 工作流 1. 摸底现有目录 2. 创建缺失目录 3. 生成文件模板 4. 读取源文档 5. 理解后重新表述不逐段翻译 6. 补充至少 2 个 [[关联链接]] 7. 检查字数是否达到源文件 70% ## 质量标准 - YAML frontmatter 必填title/tags/type/last_updated - 每文件至少 1 个 [[链接]] - 写入时指定 UTF-8 编码避免 GBK 乱码再建质检器技能mkdir -p ~/.openclaw/skills/llm-wiki-analyzerSKILL.md内容--- name: llm-wiki-analyzer version: 1.0.0 description: 对 LLM-Wiki 知识库做质量检查和评分 allowed-tools: - read - exec --- # LLM-Wiki Analyzer ## 检查维度每项 10 分总分 60 - 完整性所有项目都有案例文件 - 结构化目录层级清晰命名规范 - 内容深度字数达到源文件 70% - 元数据YAML frontmatter 完整 - 可发现性双向链接覆盖率 90% - 一致性命名/格式/结构统一 ## 输出 评分表格 问题列表 优化建议保存到 quality-report.md ## 排除文件 AGENTS.md、CLAUDE.md、README.md、SCHEMA.md创建完验证一下cat ~/.openclaw/skills/llm-wiki-builder/SKILL.md cat ~/.openclaw/skills/llm-wiki-analyzer/SKILL.md两个文件都能正常输出说明技能就位。接下来在 OpenClaw 对话里输入/llm-wiki-builder如果出现在技能列表里就说明加载成功。4. 验证请求从文档解析到端到端问答技能就位后跑一次完整链路。先让构建器搭框架再解析一份真实文档最后用问答验证。第一步在 OpenClaw 对话里发指令请使用 llm-wiki-builder 技能在 E:\Obsidian\knowledge-base 下 1. 创建 wiki/sources、wiki/concepts、wiki/entities、wiki/comparisons、wiki/summaries 目录 2. 为每个子库创建 index.md 索引 3. 创建 overview.md 和 log.md 4. 所有文件使用 UTF-8 编码写入执行完检查目录ls -R E:/Obsidian/knowledge-base/wiki第二步解析一份源文档。准备一个.docx或.md文件发指令请使用 llm-wiki-builder 技能读取 E:\docs\容灾产品介绍.docx 生成 source 类型 Wiki 文件 1. 提取核心内容理解后重新表述 2. 保留性能指标、版本号、配置参数 3. 补充至少 2 个 [[关联链接]] 4. 生成 YAML frontmatter 5. 写入 wiki/sources/ 目录UTF-8 编码生成的文件长这样--- title: 容灾产品核心能力 tags: [容灾, 高可用, 数据复制] type: source last_updated: 2025-01-15 --- # 容灾产品核心能力 该产品采用 CDP 块级复制RPO 达到微秒级应急接管内置 KVM 无需外挂虚拟化平台。适用核心交易系统场景。 关联[[CDP块级复制原理]]、[[竞品A对比分析]]第三步端到端问答验证。在 OpenClaw 里问某容灾产品和竞品A比核心差异是什么预期调用链是先查comparisons/下的对比文件再向量检索召回 top-3最后模型合成回答。输出应该包含技术路线差异CDP 块级复制 vs 定时快照、RPO 指标微秒级 vs 分钟级、应急接管方式内置 KVM vs 需外挂虚拟化平台、适用场景核心交易系统 vs 一般业务系统。如果这一步能返回结构化对比说明整条链路通了Obsidian 存内容OpenClaw 技能调模型TaoToken 提供统一通道。整个过程不需要你手动翻任何文档。5. 本篇常见报错排查401、local proxy failed 与 reading choices跑链路时最容易撞的几个错我按真实报错对照给你排查方法。401 Unauthorized。这个最常见九成是 Key 没配对。检查.env里的TAOTOKEN_API_KEY是不是完整复制有没有多余空格。然后确认 OpenClaw 配置里api_key_env指向的变量名和.env里一致。如果用的是 Claude Code检查ANTHROPIC_API_KEY字段。还有一种情况是 Key 创建后没保存页面关了就得重新建。local proxy failed / connection refused。这个报错说明请求根本没发出去。先确认 Base URL 是https://taotoken.net/api没有多余路径。然后检查网络能不能通curl -I https://taotoken.net/api返回 200 或 401 都说明地址可达返回超时就是网络层问题。另外检查 OpenClaw 配置里有没有残留的旧代理设置有的话删掉。reading choices 报错 / choices 字段为空。这个通常是模型 ID 写错了或者请求体格式不对。检查model_id是不是从模型列表里复制的完整 ID大小写敏感。再检查请求体里messages数组格式role 和 content 字段不能少。如果是流式请求确认stream参数和客户端解析逻辑匹配。OAuth 相关报错。如果你用的是 Claude Code 且看到 OAuth 字样说明它走了默认的 Anthropic 登录流程没读你的环境变量。检查settings.json里env字段是否生效或者用claude config命令确认当前配置。实在不行把ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY直接写进 shell 的.bashrc或.zshrc重启终端。技能加载失败。检查SKILL.md路径是不是~/.openclaw/skills/技能名/SKILL.md不能放在 workspace 下。frontmatter 的allowed-tools至少声明read、write、exec漏了 write 会导致生成文件失败。写入乱码。这是编码问题在技能提示词里明确要求“写入时指定 UTF-8 编码”。如果已经产生乱码文件用 Python 转一下with open(file.md, r, encodinggbk) as f: content f.read() with open(file.md, w, encodingutf-8) as f: f.write(content)排查顺序建议先 curl 验证通道再检查配置字段最后看技能 frontmatter。大部分问题在前两步就能定位。6. 把知识库用起来持续优化与统一通道链路跑通只是开始真正让知识库有价值的是持续优化。我每周花 30 分钟做一次质检流程固定先用 Obsidian 技能搜索新文件确认入库再跑 Analyzer 检查质量按问题列表修复修复后再跑一次确认评分提升最后更新log.md。Analyzer 的输出是一张评分表六个维度各 10 分。常见问题是孤立文件没入链、frontmatter 缺字段、字数不达标。修复优先级按影响面排先补链接再补元数据最后扩内容。跨库链接在 Obsidian 里看不到通常是因为多个子库没放在同一个 Vault 下把它们统一到一个 Vault 就能解决。图片路径也有讲究。wiki/下的文件引用图片用../assets/根目录文件用assets/。YAML 手写容易漏字段用 Templater 插件或obsidian-cli create --content自动生成模板。断链修复是持续工作每次增删文件后跑一遍 Analyzer。模型调用这块我把 TaoToken 的统一通道固定下来后所有技能都引用同一套环境变量。首次解析文档用商用模型日常检索切本地模型改一个TAOTOKEN_MODEL_ID就全局生效。这样知识库的模型层是可替换的不会绑死在某个工具上。如果你想把这条链路复制到团队建议把.env和 OpenClaw 配置纳入 Git 管理Key 用环境变量注入不要硬编码。知识库根目录初始化 Git每次修改后 commit出问题能回滚。这样一套下来你的知识库就是可检索、可调用、可复现的换台机器拉下来配好 Key 就能跑。