1. 为什么要在 Obsidian 知识库里改 AGENTS.md 和请求入口如果你正在用 Obsidian 管理一套 LLM Wiki 知识库又用 OpenCode 当 AI 引擎那你迟早会遇到一个很具体的问题OpenCode 默认走的是它自己的 Provider 通道而你的知识库规则全写在AGENTS.md里。这两件事一旦没对齐AI 摄入资料时就会乱建页面、乱改raw/、引用格式也不统一。我试过把AGENTS.md当成「AI 的行为宪法」来写同时把 OpenCode 的请求入口统一到一个 Key/API 通道上整个知识库的稳定性会明显不一样。这篇就聚焦两件事一是AGENTS.md里跟请求入口、模型调用相关的规则怎么写二是 OpenCode 的 Base URL、Key、Model ID 三件套怎么配让每次摄入和问答都走同一条通道。先说清楚这套组合是什么、能做什么、适合谁。Obsidian 负责看和编辑双向链接、图谱、全文搜索都靠它OpenCode 负责读raw/、在wiki/里建结构化页面、回答基于知识库的问题AGENTS.md是放在知识库根目录的规则文件OpenCode 每次启动都会读它。适合的人很明确用 Windows 10、知识库放在类似D:\my-knowledge-base这种本地目录、希望 AI 维护 wiki 但不想让它乱动原始资料的用户。核心检索词先摆出来Obsidian 知识库接入 OpenCode、AGENTS.md 配置、LLM Wiki 实践、OpenCode Base URL 配置。这几个词后面会反复出现因为整篇就是围绕它们展开的。目录结构先对齐一下后面所有路径都基于这个D:\my-knowledge-base/ ├── raw/ # 原始素材只读不写 │ ├── 2026-04/ │ ├── 2026-05/ │ └── assets/ ├── wiki/ # 结构化知识库AI 维护 │ ├── INDEX.md │ ├── concepts/ │ ├── entities/ │ ├── summaries/ │ └── analyses/ ├── outputs/ ├── log.md ├── AGENTS.md # AI 规则协议 └── .gitignoreraw/只读、wiki/由 AI 维护、outputs/放衍生内容、AGENTS.md定规则——这四条是 LLM Wiki 模式的骨架。请求入口的配置本质上是让 OpenCode 在执行这些规则时模型调用走一条你能控制、能排查的通道。2. TaoToken 前置把统一 Key/API 通道准备好在改AGENTS.md之前得先把请求入口准备好。OpenCode 支持自定义 Provider你可以把 Base URL 指向统一通道这样摄入、查询、健康检查用的都是同一个 Key 和同一个入口排查问题时不用在多个 Provider 之间来回猜。第一步是拿到 Key。打开控制台页面登录后进 API Keys 管理新建一个 Key 并复制保存。这个 Key 只显示一次丢了只能重建。控制台地址在这里https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite第二步是确认 Base URL。OpenCode 里配置 Provider 时Base URL 填https://taotoken.net/api注意这个地址不带任何查询参数就是干净的 API 根路径。模型对话、Coding Plan、接入文档这几个入口分别在模型对话https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite API Keyshttps://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite第三步是选 Model ID。OpenCode 配置里需要明确写模型标识比如做知识库编译这种重活选一个上下文长、中文稳的模型日常查询可以用轻一点的。Model ID 的具体写法以接入文档为准别凭记忆填。这里有个容易踩的坑很多人以为 OpenCode 的/connect只能选它内置的那几个 Provider其实自定义 Provider 是支持的关键就是 Base URL Key Model ID 三件套写对。三件套缺一个要么 401要么请求发出去但读不到choices。注意Key 不要写进AGENTS.md也不要提交到 Git。AGENTS.md是规则文件会被 OpenCode 读取并可能被 AI 引用把密钥放进去等于泄露。Key 放在 OpenCode 的 Provider 配置或环境变量里。前置准备好之后AGENTS.md里就可以写「所有模型调用走统一通道」这类规则但规则本身不包含密钥只描述行为约束。3. 可复制配置AGENTS.md 片段与 OpenCode Provider 设置这一节是整篇的核心给两段可直接复制的东西一段是AGENTS.md里跟请求入口、模型调用相关的规则片段一段是 OpenCode 的 Provider 配置。先看AGENTS.md。这个文件放在知识库根目录D:\my-knowledge-base\AGENTS.mdOpenCode 启动时会读。下面这段可以直接粘进去路径和原文一致# AGENTS.md - LLM Wiki 行为规则 ## 0. 请求入口 - 所有模型调用统一走已配置的 Provider 通道Base URL 为 https://taotoken.net/api - 不在本文件、wiki/、raw/ 中写入任何 API Key 或密钥 - 若模型调用失败先检查 Provider 的 Base URL、Key、Model ID 三件套再检查网络 ## 1. 目录权限 - raw/ 为只读区禁止修改、删除、重命名其中任何文件 - wiki/ 为 AI 维护区可创建和更新页面 - outputs/ 存放衍生内容可写入 - log.md 只追加不覆盖历史记录 ## 2. 摄入规则Ingest - 读取 raw/ 中指定文件提取关键内容 - 在 wiki/summaries/ 生成摘要页文件名与来源对应 - 在 wiki/concepts/ 新建或更新 3-8 个概念页 - 在 wiki/entities/ 新建或更新实体页 - 更新 wiki/INDEX.md 总目录 - 在 log.md 追加一条摄入记录 ## 3. 查询规则Query - 先读 wiki/INDEX.md 定位相关页面 - 再读相关 wiki 页面综合分析后回答 - 回答中附上 [[引用链接]] - 高质量答案可存回 wiki/ 作为新页面 ## 4. 健康检查规则Lint - 检查页面间矛盾信息 - 识别内容缺口与孤儿页面 - 补充缺失的 [[链接]] - 建议可新建的概念/实体页 ## 5. 链接与格式 - 内部链接统一使用 WikiLinks 语法 [[页面名]] - 附件统一存放 raw/assets/ - 页面标题使用一级标题正文用二级及以下这段规则里第 0 节就是请求入口的约束。它不写密钥只写 Base URL 和行为要求这样 AI 在生成内容时不会把密钥带进 wiki。再看 OpenCode 的 Provider 配置。OpenCode 的配置文件通常在用户目录下的配置目录里具体路径以你安装的版本为准。核心是三件套写成 JSON 结构大致是这样{ provider: { taotoken: { type: openai-compatible, baseURL: https://taotoken.net/api, apiKey: 你的_API_KEY, models: { default: { id: 你的_MODEL_ID, name: 知识库默认模型 } } } } }如果你用的是 TOML 风格的配置等价写法[provider.taotoken] type openai-compatible baseURL https://taotoken.net/api apiKey 你的_API_KEY [provider.taotoken.models.default] id 你的_MODEL_ID name 知识库默认模型三件套对照表方便你检查配置项值说明Base URLhttps://taotoken.net/api不带查询参数的 API 根路径API Key控制台新建的 Key只显示一次妥善保存Model ID接入文档中的模型标识别凭记忆填以文档为准配好之后在知识库目录启动 OpenCodecd D:\my-knowledge-base opencode首次使用可以走/connect选择自定义 Provider确认三件套生效。如果你之前用过 CC Switch 或 Cline MCP 之类的工具思路是一样的Base URL Key Model ID 三件套写全缺一不可。提示AGENTS.md里的规则和 Provider 配置是两回事。前者约束 AI 的行为后者决定请求发到哪。两者都配好知识库操作才稳定。4. 验证请求一次知识库问答的完整动作配置写完得验证请求确实经统一通道正常返回。这一步别跳过因为「配置看起来对」和「请求真的通」是两码事。验证动作分三步启动、提问、看返回。第一步进知识库目录并启动 OpenCodecd D:\my-knowledge-base opencode第二步发一个基于 wiki 的查询。用一次性命令模式最直观opencode -p 基于 wiki/ 内容回答LLM Wiki 模式的核心原则是什么或者进交互界面后输入基于 wiki/ 所有内容回答LLM Wiki 模式的核心原则是什么第三步看返回。正常情况下你会看到一段基于wiki/内容的回答并且带[[引用链接]]。这说明三件事同时成立OpenCode 读到了AGENTS.md的规则、请求经 Base URL 发出、模型返回被正确解析。如果知识库还是空的先做一次摄入再验证。摄入命令opencode -p 请按 AGENTS.md 规则摄入 raw\2026-05\新文章.md摄入完成后wiki/summaries/下应该出现摘要页wiki/concepts/下出现概念页wiki/INDEX.md被更新log.md追加了记录。这时候再发查询返回内容就有依据了。验证时重点看返回里有没有choices结构被正确解析。如果 OpenCode 报「reading choices」相关错误说明请求发出去了但返回格式没对上通常是 Model ID 填错或 Base URL 多了斜杠。如果报 401说明 Key 不对或没带上。如果报 local proxy failed说明请求根本没出去检查 Base URL 和网络。再补一个健康检查的验证确认长任务也能走通opencode -p 请对 wiki 做一次完整的健康检查返回里应该能看到矛盾排查、内容缺口、孤儿页面这几类结果。这一步能跑通说明摄入、查询、维护三条路径都经统一通道正常工作。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配置过程中最容易撞上的几类报错这里逐个对照。每个都给出真实报错特征和排查顺序。401 Unauthorized。特征请求返回 401OpenCode 提示鉴权失败。原因通常是 Key 没填、填错、或过期。排查顺序先确认 Provider 配置里的apiKey是不是控制台新建的那个再确认 Key 没有多余空格最后确认这个 Key 在控制台里还是启用状态。如果 Key 是复制时截断了重新复制一次。local proxy failed。特征OpenCode 提示本地代理失败请求没发出去。原因通常是 Base URL 写错或者本机网络环境拦截了请求。排查顺序确认 Base URL 是https://taotoken.net/api结尾没有多余斜杠确认没有在配置里写本地代理地址确认本机网络能正常访问该地址。这个报错跟 Key 无关别在 Key 上浪费时间。reading choices 相关错误。特征请求发出去了但 OpenCode 解析返回时报错提示读不到choices。原因通常是 Model ID 填错或者 Base URL 指向了一个不返回标准结构的地址。排查顺序对照接入文档确认 Model ID 拼写确认 Base URL 是 API 根路径而不是某个页面地址确认 Provider 类型写的是openai-compatible。OAuth 相关报错。特征OpenCode 提示 OAuth 流程失败或 token 无效。原因通常是/connect时选了需要 OAuth 的 Provider但你的通道用的是 Key 鉴权。排查顺序改用自定义 Provider 配置走 Base URL Key Model ID 三件套不要走 OAuth 流程确认配置里没有残留的 OAuth token 字段。把这几类报错和三件套对照起来看规律很清楚报错最可能原因先查什么401Key 错/缺/过期apiKey 字段local proxy failedBase URL 错/网络拦截baseURL 字段reading choicesModel ID 错/返回结构不符Model ID 与 Provider 类型OAuth 失败鉴权方式选错改用 Key 鉴权还有一个不报错但很烦的问题AGENTS.md规则没生效AI 乱改raw/。这通常是因为 OpenCode 启动目录不对。必须在知识库根目录启动也就是cd D:\my-knowledge-base之后再opencode否则它读不到根目录的AGENTS.md。注意排查时先分清是「请求没出去」还是「出去了但返回不对」。前者查 Base URL 和网络后者查 Key 和 Model ID。分清楚能省很多时间。6. 把知识库操作固定成可复用流程配置和验证都跑通之后最后一步是把它固定下来别每次手动敲。PowerShell 快捷命令是个好办法加到$PROFILE里function kb-cd { Set-Location D:\my-knowledge-base } function kb-ingest { param([string]$file) Set-Location D:\my-knowledge-base opencode -p 请按 AGENTS.md 规则摄入 raw\$file } function kb-query { param([string]$question) Set-Location D:\my-knowledge-base opencode -p 基于 wiki/ 内容回答: $question } function kb-lint { Set-Location D:\my-knowledge-base opencode -p 请对 wiki 做一次完整的健康检查 } Set-Alias -Name kbc -Value kb-cd Set-Alias -Name kbi -Value kb-ingest Set-Alias -Name kbq -Value kb-query Set-Alias -Name kbl -Value kb-lint配好之后日常操作就是四个短命令kbc进目录、kbi 2026-05\文章.md摄入、kbq 核心观点是什么查询、kbl健康检查。每个命令背后都是 OpenCode 在读AGENTS.md、走统一通道调模型。如果你要长期跑知识库维护尤其是摄入量大、健康检查频繁的场景可以看看 Coding Plan 这条路径它更适合持续性的编码和 Agent 类任务https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite接入过程中遇到配置问题接入文档里有完整的参数说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite需要新建或管理 Key走 API Keys 页面https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite想先验证模型返回是否正常用模型对话页面试一句https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite最后说个实际经验AGENTS.md别一次写太满先写目录权限和请求入口这两节跑顺了再补摄入、查询、健康检查的细则。规则越具体AI 越不容易跑偏但规则太多太细维护成本也上去了。我的做法是每加一条规则都对应一次真实踩坑这样规则才有意义。知识库这东西稳定比花哨重要。