☰
用 Claude Code 直接写 Obsidian 笔记-增强版:TaoToken 统一 Key 接入与 skill 配置实战
2026/10/11 23:13:43 网站建设 项目流程

1. 为什么要在 Claude Code 里直接写 Obsidian 笔记

如果你同时用 Claude Code 和 Obsidian,大概率经历过这种割裂:在终端里跟 Claude 聊出一堆有价值的结论,想存进笔记库,只能手动复制、切窗口、粘贴、再排版。一次两次还行,天天这么干就烦了。更麻烦的是,笔记写进去之后是孤立的,没有链接、没有索引,过两周自己都忘了写过。

我想要的链路其实很简单:在 Claude Code 会话里说一句「记一下」,内容就落到 Obsidian vault 的正确目录,带 frontmatter、带标签、带关联建议。这件事靠一个 skill 就能做到,但前提是 Claude Code 能稳定调用模型——而这一步,很多人卡在 API 通道上。

这篇聚焦的是接入层:怎么用 TaoToken 的统一 Key 和 Base URL,把 Claude Code 的模型通道配好,再叠加一个写 Obsidian 的 skill,让「自然语言 → 笔记文件」这条链路在本地完整跑通。适合已经在用 Claude Code、想把它接进个人知识库工作流的人。读完你能拿到三样东西:一份可复制的 settings 配置、一个 skill 目录结构、一次真实的笔记写入验证。

先说清楚 TaoToken 在这里的角色。它是一个统一 API 入口,把 Claude、GPT 等模型的调用收敛到一个 Base URL 和一把 Key 上。对 Claude Code 来说,你不需要为每个模型单独配通道,改一个环境变量就能切换。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api 。注意 API 地址不带 UTM 参数,配置里写干净的就行。

为什么强调「统一 Key」?因为 Claude Code 的 skill 机制会频繁发起模型调用——意图识别一次、字段提取一次、关联建议可能又一次。如果每次都要换 Key 或者换通道,调试成本会很高。统一到一个入口之后,你只需要维护一份配置,skill 里所有模型调用都走同一条路。

接下来的结构是这样:先讲清楚问题和场景,再给 TaoToken 的前置准备,然后是可直接复制的配置片段和 skill 目录,接着做一次写入验证,最后把常见的报错对照着排一遍。每一步都有命令和预期结果,你可以跟着敲。

2. TaoToken 前置准备:Key、Base URL 与 Claude Code 通道

在写 skill 之前,先把模型通道打通。这一步不做,后面 skill 里的任何模型调用都会失败,而且报错往往很隐晦,容易误以为是 skill 写错了。

2.1 拿到 API Key 并确认端点

登录 TaoToken 控制台,在 API Keys 页面创建一把 Key。建议按用途命名,比如claude-code-obsidian,方便以后排查是哪条链路在用。创建后立刻复制保存,页面刷新后通常不再完整显示。

端点有两个要记住:

用途地址
控制台 / 创建 Keyhttps://taotoken.net/console
API 端点(Base URL)https://taotoken.net/api

Base URL 就是 Claude Code 配置里要填的地址。注意它和官网首页不是一回事,配置时别把带 UTM 的推广链接填进去,那会导致请求路径错误。

2.2 Claude Code 的配置位置

Claude Code 读取配置有几个层级,优先级从高到低大致是:项目级.claude/settings.json、用户级~/.claude/settings.json、环境变量。做 Obsidian 这种跨项目的工作流,我建议放在用户级,这样在任何目录下开 Claude Code 都能用。

如果你用的是 Claude Code 的 Anthropic 兼容模式,核心就是三个东西:Base URL、API Key、Model ID。这三件套缺一不可,后面 skill 里也会反复出现。

先设置环境变量,临时验证用:

export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥"

Windows PowerShell 对应写法:

$env:ANTHROPIC_BASE_URL="https://taotoken.net/api" $env:ANTHROPIC_API_KEY="sk-你的TaoToken密钥"

设置完可以用一个最小请求确认通道是否通。下面这段用 curl 直接打对话接口,不经过 Claude Code,能最快定位是通道问题还是客户端问题:

curl https://taotoken.net/api/v1/messages \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "content-type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "max_tokens": 64, "messages": [{"role": "user", "content": "回复两个字:通了"}] }'

预期返回是一段 JSON,content数组里有模型输出。如果这里就报 401,说明 Key 或请求头有问题,先别往下走。

2.3 把配置固化到 settings.json

临时环境变量重启终端就没了,正式用要写进配置文件。用户级~/.claude/settings.json示例:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514" } }

这里ANTHROPIC_MODEL就是 Model ID,三件套里的最后一件。如果你要用别的模型,改这个值即可,Base URL 和 Key 不用动——这正是统一 Key 的好处。

注意:settings.json 里不要留注释,JSON 不支持注释,会导致解析失败。Key 属于敏感信息,别提交到 Git 仓库,建议把~/.claude/加进全局 gitignore。

配置写完后,重启 Claude Code,让它重新读取。可以在会话里问一句「你现在用的是哪个模型」,确认走的是你配的通道。

2.4 为什么 skill 场景特别依赖这一步

普通对话偶尔失败还能忍,但 skill 是自动化流程:一次「记一下」可能触发意图识别、字段提取、关联扫描三次模型调用。任何一次通道抖动都会让整个 skill 中断,而且中断点不固定,排查起来很痛苦。

统一到 TaoToken 之后,你只需要盯一个 Base URL 和一把 Key。出问题就查这一处,不用在多个通道之间来回切换。这是我把接入层单独拎出来讲的原因——它不是可有可无的准备工作,而是整条链路的地基。

3. 可复制配置:skill 目录结构与 settings 片段

通道通了,现在搭 skill。这一节给的是可以直接抄的结构和配置,你照着建目录、放文件就行。

3.1 skill 的目录结构

Claude Code 的 skill 放在~/.claude/skills/下,每个 skill 一个子目录。写 Obsidian 的这个,我命名为obsidian:

~/.claude/ ├── settings.json └── skills/ └── obsidian/ ├── SKILL.md ├── obsidian_writer.py └── templates/ ├── literature.md ├── concept.md └── topic.md

分工是两层:SKILL.md负责意图识别和字段提取,这部分由 Claude 执行;obsidian_writer.py负责模板渲染和文件写入,纯 Python,不调用模型。这样拆分的好处是脚本可以独立跑,调试时不用每次都过一遍模型。

3.2 SKILL.md 的关键内容

SKILL.md是 skill 的入口描述,Claude 靠它判断什么时候触发、怎么提取字段。核心是定义清楚操作类型和对应的目录映射:

--- name: obsidian description: 把内容写入 Obsidian vault,支持闪念、资料笔记、概念卡、主题页 --- # Obsidian 写入 Skill ## 操作类型与目录映射 | 类型 | 触发词 | 目标目录 | | --- | --- | --- | | fleeting | 记一下 | 01-DailyNotes/ | | literature | 资料、文章、论文 | 03-Knowledge/Literature/ | | concept | 概念卡、概念 | 03-Knowledge/Concepts/ | | topic | 主题页、主题 | 03-Knowledge/Topics/ | | project | 项目页、项目 | 02-Projects/ | ## 执行方式 识别类型后,调用脚本: python ~/.claude/skills/obsidian/obsidian_writer.py \ --type <类型> \ --title "<标题>" \ --fields '<JSON字段>'

字段用 JSON 传,脚本负责渲染。比如资料笔记的必填字段是「核心观点」和「方法要点」,两个都空就路由到00-Inbox/。

3.3 vault 路径配置

脚本需要知道你的 vault 在哪。默认是~/obsidian,用环境变量覆盖:

export OBSIDIAN_VAULT_PATH="/path/to/your/vault"

写进~/.claude/settings.json的 env 里更省事:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-20250514", "OBSIDIAN_VAULT_PATH": "/Users/you/obsidian" } }

这样三件套加 vault 路径都在一处,换机器时改这一个文件就行。

3.4 脚本的 dry-run 模式

调试阶段强烈建议先用 dry-run,只输出内容不写文件:

python ~/.claude/skills/obsidian/obsidian_writer.py \ --type literature \ --title "测试笔记" \ --fields '{"核心观点": "验证写入链路", "方法要点": "dry-run 先看输出"}' \ --dry-run

预期输出是渲染好的 Markdown 全文,包括 frontmatter。确认格式对了,去掉--dry-run再真写。这一步能帮你排除掉大部分模板问题,不用反复污染 vault。

3.5 目录初始化

首次使用前把 vault 目录结构建好。脚本支持幂等执行,已存在的目录自动跳过:

python ~/.claude/skills/obsidian/obsidian_writer.py --init

预期输出类似:

[OK] Created 8 directories: + 00-Inbox/ + 01-DailyNotes/ + 02-Projects/ + 03-Knowledge/Concepts/ + 03-Knowledge/Literature/ + 03-Knowledge/MOCs/ + 03-Knowledge/Topics/ + 04-Archive/

到这里,配置层就齐了:通道三件套 + vault 路径 + skill 目录 + 脚本。下一节做真实验证。

4. 验证请求:一次完整的笔记写入

配置对不对,跑一次就知道。这一节从 Claude Code 会话里发起,走完整链路,最后去 vault 里确认文件。

4.1 在会话里触发 skill

打开 Claude Code,确保当前目录无所谓(skill 是用户级的)。输入一句自然语言:

记一下,context window 对 RAG 召回率的影响值得专门测一次 #rag #todo

Claude 会识别出这是 fleeting 类型,调用脚本追加到当天日记。预期返回:

[OK] Appended to: 01-DailyNotes/2026-04-07.md

去 vault 里打开这个文件,应该看到:

# Fleeting - 20:31 context window 对 RAG 召回率的影响值得专门测一次 #rag #todo

日记文件不存在时脚本会自动创建,# Fleeting区块不存在时自动追加。这一步验证的是「自然语言 → 文件追加」这条最短链路。

4.2 验证结构化笔记写入

再试一个带字段的:

帮我写一篇 Transformer 的概念卡,核心机制是 self-attention,解决 RNN 并行训练难、长依赖建模弱的问题

Claude 识别为 concept 类型,提取字段后调用脚本。预期返回:

[OK] Written: 03-Knowledge/Concepts/Concept - Transformer.md

打开文件,frontmatter 应该包含type、created、updated、status等字段,正文是结构化的概念拆解。如果字段缺失,脚本会提示缺哪些,并把笔记路由到00-Inbox/。

4.3 验证关联建议

写入之后,脚本会扫描 vault 里的 MOC 和 Topic 文件,找出主题匹配但还没链接到新笔记的:

[Link suggestions] → 03-Knowledge/MOCs/MOC - AI Learning.md (# 资料 ← add [[Concept - Transformer]]) → 03-Knowledge/Topics/Topic - Attention.md (# 相关概念 ← add [[Concept - Transformer]])

确认后 Claude 用 Edit 工具把链接写进对应区块。这一步验证的是「笔记进入知识网络」而不是孤立躺在目录里。

4.4 验证知识库问答

积累几篇之后,试试从 vault 里找答案:

在我笔记里查一下 Transformer 的局限性有哪些

脚本用 Grep 在03-Knowledge和02-Projects里搜关键词,读取匹配段落,综合回答,每个论点标注来源:

自注意力的计算复杂度是 O(n²),处理长文本代价高 — [[Concept - Self-Attention]] 实际部署中 KV Cache 是主要内存瓶颈 — [[Literature - LLM Inference Optimization]]

vault 里没有相关内容时会直接告知,不会凭空生成。这一步验证的是检索链路,也是统一 Key 价值最明显的地方——问答、写入、关联建议都走同一条通道。

4.5 验证健康检查

最后跑一次 lint:

python ~/.claude/skills/obsidian/obsidian_writer.py --lint

预期输出按问题类型分组:

[Lint] Scanned 47 notes in ~/obsidian/ [Broken links] (1) 03-Knowledge/MOCs/MOC - AI Learning.md → [[Concept - GPT5]] [Orphan notes] (2) 03-Knowledge/Concepts/Concept - LoRA.md 03-Knowledge/Literature/Literature - RAG Survey.md [Inbox backlog] (1) 00-Inbox/Literature - Some Draft.md (11 days old)

加--auto-fix可以自动补 frontmatter 缺失字段,其余问题报告出来让你决定。到这里,写入、检索、维护三条链路都验证过了。

5. 常见报错排查:401、local proxy failed 与 OAuth

链路跑通之前,大概率会撞几个错。这一节按真实报错对照排查,每个都给定位方法和修复动作。

5.1 401 Unauthorized

最常见的报错,返回体类似:

{"type":"error","error":{"type":"authentication_error","message":"invalid x-api-key"}}

排查顺序:先确认ANTHROPIC_API_KEY是不是完整复制了,有没有多余空格或换行;再确认请求头字段名对不对,Anthropic 兼容接口用x-api-key,不是Authorization: Bearer;最后确认 Key 有没有过期或被禁用。

用 2.2 节那段 curl 单独测一次,能快速区分是 Key 问题还是 Claude Code 配置问题。如果 curl 通了但 Claude Code 报 401,说明 settings.json 没被正确读取,检查 JSON 格式和文件路径。

5.2 local proxy failed / connection refused

报错类似:

API Error: local proxy failed to connect

这个通常不是 TaoToken 的问题,而是本地有残留的代理配置指向了一个不存在的端口。检查环境变量里有没有HTTP_PROXY、HTTPS_PROXY、ALL_PROXY,有的话临时清掉:

unset HTTP_PROXY HTTPS_PROXY ALL_PROXY

然后重启 Claude Code。如果你之前配过别的通道,settings.json 里可能还留着旧的 Base URL,一并检查,确保只有https://taotoken.net/api这一个。

5.3 reading 'choices' 报错

报错类似:

TypeError: Cannot read properties of undefined (reading 'choices')

这是典型的响应格式不匹配。choices是 OpenAI 风格的字段,Anthropic 风格返回的是content数组。出现这个报错,说明客户端按 OpenAI 格式解析,但请求打到了 Anthropic 兼容端点,或者反过来。

检查你的 Base URL 和 Model ID 是否配套。用 TaoToken 统一入口时,确认客户端走的是 Anthropic 兼容模式,请求路径是/v1/messages而不是/v1/chat/completions。改对之后重启会话。

5.4 OAuth 相关报错

报错类似:

OAuth token expired, please re-authenticate

Claude Code 默认可能走 OAuth 登录态,如果你已经改用 API Key,需要确保它优先读环境变量而不是缓存凭证。检查~/.claude/下有没有旧的凭证文件,必要时清掉重新登录,或者显式在 settings.json 里指定 API Key 让它覆盖 OAuth。

三件套对照表,出问题时逐项核对:

配置项正确值常见错误
Base URLhttps://taotoken.net/api填了带 UTM 的首页链接
API Keysk- 开头的完整 Key复制时截断或带空格
Model IDclaude-sonnet-4-20250514拼写错误或用了不存在的模型名

5.5 skill 触发了但没写文件

模型调用成功,但 vault 里找不到文件。先看脚本返回,如果提示字段不足,说明被路由到了00-Inbox/,去那里找。如果脚本报路径错误,检查OBSIDIAN_VAULT_PATH是否指向真实存在的目录,路径里有没有中文或空格导致解析问题。

用 dry-run 单独跑一次脚本,能快速定位是 skill 的字段提取问题还是脚本的写入问题。这一步把模型层和文件层分开,排查效率高很多。

6. 把这条链路用起来:从接入到日常

配置和排错都过了,最后说几个实际用下来的经验,帮你把这条链路真正嵌进日常。

第一,Key 和 Base URL 只维护一份。统一入口的意义就在这里,skill 里所有模型调用都走同一条路,换模型只改 Model ID。别在脚本里硬编码 Key,全部从环境变量读,这样换机器、换 Key 都不用动代码。

第二,dry-run 是你的朋友。改模板、调字段、试新类型之前,先 dry-run 看输出。vault 是长期积累的东西,别让调试过程污染它。等格式稳定了再真写。

第三,关联建议别忽略。每篇笔记写完弹出的 link suggestions,花十秒确认一下,把链接加进去。笔记的价值在于连接,孤立的一百篇不如互相链接的二十篇。这一步坚持做,几个月后你的 vault 会变成一个能问答的知识网络,而不是一堆文件。

第四,健康检查定期跑。--lint能发现断链、孤儿笔记、积压草稿。建议每周跑一次,--auto-fix处理 frontmatter,其余的手动决定。知识库和代码一样,不维护就会退化。

如果你还没配通道,先去 https://taotoken.net/api-keys 创建 Key,接入文档在 https://taotoken.net/doc 有完整的参数说明。想先验证模型通不通,可以直接在 https://taotoken.net/chat 里发一句话试试。长期跑编码和 Agent 工作流的话,Coding Plan 在 https://taotoken.net/coding-plan 有更划算的额度方案。

链路搭好之后,你会发现写笔记这件事的门槛降到了「说一句话」。剩下的就是坚持记,让 vault 慢慢长起来。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询