28天,我的知识库自己长出来了:用 TaoToken 打通 Notion、Obsidian 与 AGENTS.md 的 Multi-Agent 配置骨架
1. 从「能搜的文件夹」到「自己会长的知识库」我踩了哪些坑先说结论知识库能不能自己长出来不取决于你存了多少笔记而取决于你有没有给它装上一套「采集—沉淀—调用」的自动通道。我用的组合是 Notion 做采集入口、Obsidian 做本地沉淀、AGENTS.md 定义 Skill 行为再用 TaoToken 统一 Key 和 API 通道把 Multi-Agent 串起来。28 天下来它从 46 条散笔记变成了一个带 8 个用途文件夹、1 个追问 Skill、1 套 Agent 规则的操作台。如果你现在的状态是笔记越存越多、找的时候还是靠翻、AI 用起来每次都要重新贴背景——那这篇就是写给你的。适合人群很明确有 Notion 或 Obsidian 其一、想让 AI 真正参与知识流转、愿意花 28 天做增量而不是一次性大重构的人。我试过最蠢的做法是一上来就想设计一套完美分类。结果第 3 天就放弃了因为分类是「静态」的而你的需求每天都在变。真正让知识库活起来的是 Phase 5 那次改动把「按主题存」换成「按用途存」。打开知识库第一反应不再是「它属于哪类」而是「我现在要干什么」。这个转变才是自增长的起点。下面我把 28 天里真正可复制的部分拆开TaoToken 怎么前置、config.toml 和 settings.json 骨架长什么样、CC Switch 怎么切、每天增量同步怎么验证、报错怎么排。2. TaoToken 前置统一 Key 与 API 通道别让每个 Agent 各配一套Multi-Agent 最容易崩的地方不是模型能力是通道管理。你有 Notion 采集 Agent、Obsidian 沉淀 Agent、Skill 追问 Agent如果每个都单独配 Key、单独记 endpoint改一次配置要动五个文件迟早出错。我的做法是所有 Agent 的模型调用统一走 TaoToken 的 API 通道Key 只维护一份。官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 这个不加 UTM配置里直接写。具体前置三步第一步在控制台创建 Key。地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 进去后新建一个 Key命名建议带上用途比如kb-multiagent-28d方便后面排查是哪个 Agent 在调。第二步把 Key 写进环境变量不要硬编码进 config。Linux/macOS 用export TAOTOKEN_API_KEYsk-你的keyWindows 用setx TAOTOKEN_API_KEY sk-你的key。这样 config.toml 里只引用变量名换 Key 不用改配置。第三步确认模型通道。如果你要跑 Claude 系模型做 Skill 追问走 https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 这个通道说明如果只是普通对话验证用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 先测通再说。注意Key 只创建一次所有 Agent 共用。不要给每个 Agent 建独立 Key否则你会在排障时疯掉——分不清是通道问题还是 Agent 逻辑问题。前置做完你应该有一个可用的 Key、一个环境变量、一个确认能通的 API 基址。接下来才是配置骨架。3. 可复制配置config.toml 与 settings.json 骨架这一节是全文最干的部分直接给骨架你改路径和 Key 变量名就能用。3.1 config.toml定义 Multi-Agent 的通道与角色# ~/.kb-agents/config.toml # 知识库 Multi-Agent 统一配置骨架 [api] base_url https://taotoken.net/api api_key_env TAOTOKEN_API_KEY timeout_seconds 60 max_retries 3 [agents.collector] # 采集 Agent负责从 Notion 拉取新增内容 role collector model claude-sonnet source notion poll_interval_minutes 30 target_dir ~/ObsidianVault/00_Inbox [agents.distiller] # 沉淀 Agent把 Inbox 内容整理进用途文件夹 role distiller model claude-sonnet input_dir ~/ObsidianVault/00_Inbox output_dir ~/ObsidianVault/_使用工具箱 skill_file ~/ObsidianVault/AGENTS.md [agents.griller] # 追问 Skill Agent动手前把模糊想法问清楚 role griller model claude-sonnet skill grill-me trigger manual [sync] # 每日增量同步 mode incremental state_file ~/.kb-agents/sync_state.json schedule 0 9 * * *关键点解释api_key_env引用环境变量而不是写死 Key三个 Agent 共用同一个[api]段这就是统一通道的意义state_file记录上次同步位置增量同步靠它。3.2 settings.jsonObsidian 侧与 Skill 挂载{ vault_path: ~/ObsidianVault, inbox: 00_Inbox, toolbox: _使用工具箱, agents_md: AGENTS.md, skills: { grill-me: { path: _使用工具箱/skills/grill-me.md, trigger: manual, description: 动手前追问把模糊需求问清楚 } }, sync: { incremental: true, conflict_policy: newer_wins, log_dir: ~/.kb-agents/logs }, api: { base_url: https://taotoken.net/api, key_env: TAOTOKEN_API_KEY } }conflict_policy设成newer_wins是为了避免 Notion 和 Obsidian 两边同时改一条笔记时卡住。log_dir一定要留排障全靠它。3.3 AGENTS.md让 AI 知道该做什么AGENTS.md 不是「告诉我你是谁」而是「告诉 AI 该做什么」。骨架如下# AGENTS.md ## 角色 你是知识库的沉淀助手负责把 Inbox 内容整理进 _使用工具箱。 ## 规则 1. 按「什么时候用」分类不按「属于什么主题」分类。 2. 每条内容必须能回答它在哪个场景下被调用。 3. 不确定归属时放进 _使用工具箱/待归类不要硬塞。 ## Skill: grill-me 触发时机用户提出模糊需求时。 行为连续追问 3 个问题直到需求可执行为止。这份文件放在知识库根目录config.toml里的skill_file指向它。改规则不用改代码改这个 md 就行。4. CC Switch 切换与每日增量同步验证配置写完怎么切、怎么验证是决定它能不能「自己长」的关键。4.1 CC Switch 切换步骤CC Switch 用来在多个 Agent 配置间切换。假设你有「采集模式」和「沉淀模式」两套# 查看当前激活配置 cc-switch list # 切到采集模式 cc-switch use collector # 切到沉淀模式 cc-switch use distiller # 确认切换结果 cc-switch current切换后Agent 会读取对应段的model和target_dir。实测下来切换本身不重启进程但下一次轮询才会生效所以切完等一个poll_interval_minutes再验证。4.2 每日增量同步验证动作增量同步靠sync_state.json记录游标。每天验证三步第一步看状态文件有没有推进cat ~/.kb-agents/sync_state.json正常输出类似{ last_sync: 2025-07-01T09:00:12, notion_cursor: abc123, processed_count: 7 }processed_count大于 0 说明当天有增量被处理。第二步看 Inbox 是否被清空、工具箱是否新增ls ~/ObsidianVault/00_Inbox | wc -l ls ~/ObsidianVault/_使用工具箱 | wc -lInbox 数量应该下降工具箱对应用途文件夹应该上升。第三步看日志有没有报错tail -n 50 ~/.kb-agents/logs/sync.log没有ERROR行且能看到distilled N items字样就算当天同步成功。4.3 验证请求确认通道真的通在正式跑 Agent 前先用一条最小请求确认 TaoToken 通道可用curl -s https://taotoken.net/api/v1/messages \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: claude-sonnet, max_tokens: 64, messages: [{role: user, content: 回复 OK 两个字母}] }返回里带content且内容是 OK说明 Key、基址、模型名三者都对。这一步过了再跑 Agent排障范围能缩小一半。5. 本篇常见错排查5.1 报错 401Key 没读到现象Agent 启动即报401 Unauthorized。原因九成是环境变量没生效。检查echo $TAOTOKEN_API_KEY有没有值。Windows 下setx后要重开终端。如果用的是 systemd 或 launchd 托管环境变量要在服务文件里单独声明不会自动继承 shell 的。5.2 报错 404base_url 写错现象请求返回404。多半是 base_url 多写或少写了/v1。TaoToken 的基址是https://taotoken.net/api具体路径按接口文档拼。别自己猜路径去接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 对一遍。5.3 同步卡住state_file 权限或游标没推进现象processed_count一直是 0。先看sync_state.json是否可写再看notion_cursor有没有变。如果游标不动通常是采集 Agent 的poll_interval_minutes设太大或者 Notion 侧 token 过期。把 interval 临时改成 1 分钟测一次。5.4 Skill 不触发AGENTS.md 路径不对现象grill-me 该追问时不追问。检查config.toml里skill_file指向的 AGENTS.md 是否真实存在以及settings.json里skills.grill-me.path是否和实际文件一致。两个路径必须都指向真实文件缺一个就不触发。5.5 分类乱还在按主题存现象工具箱里越来越乱。根因是沉淀 Agent 的规则没生效或者你手动往 Inbox 丢的时候带了主题标签。回到 AGENTS.md把「按用途分类」这条规则写死并在settings.json里把toolbox路径固定别让 Agent 自由发挥。6. 让知识库继续长从操作台到传送带28 天里我最大的体会是知识能被记住靠的不是重复阅读是重复使用。每一次「用得上」都在逼知识库进化一次。你现在要做的不是一次性设计完美系统而是先把通道打通、把骨架跑起来然后每天做一次增量验证。如果你卡在接入或排障先去 API Keys 页 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapikeysutm_campaignrewrite 确认 Key 状态再对照接入文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 检查路径。如果你只是想先验证模型能不能按预期追问用模型对话页 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 手动测几轮 grill-me 的追问逻辑。如果你打算长期跑编码类 Agent、让 Multi-Agent 持续协作Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcodingplanutm_campaignrewrite 更适合做长期通道。最后留一个自检打开你的知识库能不能 3 秒内找到今天要用的素材分类是按「什么时候用」还是「属于什么主题」每周至少有 3 次打开它是为了用东西而不是翻东西三个都是「是」你的知识库已经在从操作台往传送带走了。