1. 为什么你的 AI 助手总说“我没读过这本书”
你花 100 多块买了一本《数据密集型应用系统设计》,啃了两周,笔记记了三页。三个月后线上出了个一致性问题,你隐约记得书里讲过 quorum 和 read repair 的关系,但翻 PDF 搜关键词、翻笔记、来回跳转,15 分钟才找到那两段话——而真正读完只花 30 秒。
这是技术人共同的尴尬:书读完了,知识没留下。传统做法各有硬伤。PDF 搜索只给页码不给答案;直接问 AI,它要么一本正经地编,要么老实说“我没有这本书的内容”;把整本 PDF 塞进上下文,一本 400 页的书约 20 万 tokens,每轮对话都先烧掉这个预算,聊三次就心疼。
book-to-skill 的思路很直接:把书在“编译时”解析一次,提取出作者真正的框架、原则、技术模式和反模式,组织成 AI 助手能按需加载的 Agent 技能文件。运行时只加载几 KB 的精炼结构,而不是几百 KB 的原始文本。这篇就带你从零把一本技术书 PDF 变成 Claude Code 里可调用的技能,并用 TaoToken 统一 Key 通道接入,省去多平台来回切账号的麻烦。
2. TaoToken 前置:先把统一通道和 Key 准备好
book-to-skill 在“编译”阶段需要调用大模型来分析书的结构,这一步会产生 API 请求。如果你同时用 Claude Code、Copilot CLI 或者自己写的脚本,每个平台一套 Key、一套计费,管理起来很碎。我的做法是先用 TaoToken 把通道统一,一个 Key 走所有模型调用。
TaoToken 是一个大模型 API 聚合与统一接入平台,适合个人开发者和中小团队:你不需要为每个模型单独注册、单独充值,用一套 Key 和统一的 OpenAI 兼容接口就能调用多家模型。对 book-to-skill 这种“一次性编译、长期使用”的场景特别合适——编译时用便宜快速的模型做结构分析,验证时切到更强的模型做问答。
具体操作分三步。第一步,注册并登录控制台,地址是 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。第二步,在控制台里创建 API Key,入口在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,创建后立刻复制保存,页面刷新后就不再完整显示。第三步,把 Key 写进环境变量,后面 book-to-skill 和 Claude Code 都读这个变量。
# 写入 shell 配置,按你的实际 shell 选择 .bashrc 或 .zshrc echo 'export TAOTOKEN_API_KEY="sk-你的key"' >> ~/.zshrc echo 'export OPENAI_BASE_URL="https://taotoken.net/api"' >> ~/.zshrc echo 'export OPENAI_API_KEY="$TAOTOKEN_API_KEY"' >> ~/.zshrc source ~/.zshrc # 验证变量生效 echo $OPENAI_BASE_URL注意:
OPENAI_BASE_URL结尾不要带/v1,TaoToken 的兼容层会自动处理路径。如果你用的工具强制要求/v1后缀,写成https://taotoken.net/api/v1也可以,两种都实测可用。
如果你打算长期在 Claude Code 里做编码和 Agent 任务,可以顺手了解 Coding Plan,它把常用模型的额度打包,比按次调用更划算:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。接入细节和参数说明在文档里:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。
3. 可复制配置:安装 book-to-skill 并编译第一本书
book-to-skill 是一个开源工具,能把 PDF、EPUB、DOCX 转成 Claude Code、Copilot CLI、Amp 可直接加载的 Agent Skill。核心机制是“编译时一次解析,运行时按需加载”。先把它克隆到 AI 助手的技能目录。
# 克隆到 Claude Code 的技能目录 git clone https://github.com/virgiliojr94/book-to-skill.git ~/.agents/skills/book-to-skill # 安装 PDF 提取依赖 pip3 install pypdf pdfminer.six # 技术书含代码和表格,强烈建议装 docling pip3 install docling # 检查各提取器安装状态 cd ~/.agents/skills/book-to-skill python3 scripts/extract.py --check--check会逐项打印提取器状态,类似这样:
[PDF] pdftotext: 未安装(sudo apt install poppler-utils) [PDF] pypdf: 已安装 [PDF] pdfminer: 已安装 [PDF] docling: 已安装(技术书推荐) [EPUB] ebooklib: 已安装 [DOCX] python-docx: 未安装(pip3 install python-docx)缺哪个补哪个。技术书一定要用 docling,它能保留 Markdown 表格和代码块;纯叙述类书籍用 pdftotext 更快,docling 对纯文字书会慢 10 到 20 倍。
接下来把书编译成技能。命令格式是“PDF 路径 + 技能名”,技能名会成为后续调用的斜杠命令。
# 处理一本技术书,技能名定为 ddia /book-to-skill ~/books/designing-data-intensive-apps.pdf ddia # 如果已经 pip install 过,也可以直接用 CLI book-to-skill ~/books/clean-architecture.pdf clean-arch执行过程中工具会先判断内容类型:技术书走 docling 提取,保留表格和代码块;文字书走 pdftotext 快速提取。然后合并文本和元数据,调用大模型分析标题、作者、章节、目录,最后生成技能文件。生成后的目录结构如下:
~/.agents/skills/ddia/ ├── SKILL.md # 核心心智模型 + 章节索引,约 4K tokens ├── chapters/ │ ├── ch01-reliability-scalability.md │ ├── ch02-data-models.md │ ├── ch03-storage-retrieval.md │ └── ... ├── glossary.md # 关键术语,字母排序 + 章节引用 ├── patterns.md # 技术模式、算法、设计模式 └── cheatsheet.md # 决策表和速查规则这里有个关键点:book-to-skill 不是 RAG。RAG 在查询时做向量检索,返回“和你问题最相似的片段”;book-to-skill 在编译时做深度分析,提取作者的实际框架并给它命名,输出的是作者花几年构建的思考结构。两者对比如下。
| 对比维度 | RAG | book-to-skill |
|---|---|---|
| 处理时机 | 查询时 | 编译时 |
| 输出 | 相似片段 | 命名框架 + 原则 |
| 适用场景 | 几十本书里“找到提到 X 的地方” | 一本书里“用作者的框架思考” |
| 可复用性 | 每次查询独立 | 一次编译,永久使用 |
编译成本大约 1 美元一本书(按 Sonnet 级别模型估算),而全文灌入是每轮对话都付。用 TaoToken 统一通道后,你可以在编译时选便宜模型、验证时切强模型,成本更可控。
4. 验证请求:在 Claude Code 里确认技能被正确加载
技能生成后,回到 Claude Code 里验证它是否真的被加载和检索。先确认技能目录被识别。
# 查看已安装技能列表 ls ~/.agents/skills/ # 确认 ddia 技能文件完整 ls ~/.agents/skills/ddia/ cat ~/.agents/skills/ddia/SKILL.md | head -40SKILL.md开头应该能看到书名、作者、核心框架概述和章节索引。如果这个文件是空的或者只有几行,说明编译阶段模型调用失败,多半是 Key 或 base_url 没配对。
然后在 Claude Code 会话里直接调用技能。book-to-skill 生成的技能以斜杠命令形式暴露:
# 加载核心心智模型 /ddia # 查找某个主题 /ddia replication # 深入某一章 /ddia ch05 # 查看章节列表 /ddia "what chapters do you have?"正常工作的表现是:输入/ddia replication后,助手先加载SKILL.md(约 4K tokens)拿到核心框架和章节索引,定位到ch05-replication.md,再加载该章节(约 1K tokens),然后基于实际内容回答。整个过程总消耗约 5K tokens,而不是全文的 20 万以上。
如果你想单独验证模型通道是否通,可以用模型对话页面发一条测试消息:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite 。在那边确认 Key 能正常返回,再回到 book-to-skill 编译,能快速区分是通道问题还是工具问题。
用三本真实技术书对比 token 消耗,差距很明显:
| 书名 | 页数 | 原始 tokens | 技能消耗 | 节约倍数 |
|---|---|---|---|---|
| Think Python | 224 | 119K | ~5K | 24× |
| Working Backwards | 371 | 175K | ~5K | 35× |
| AI Engineering | 512 | 256K | ~5K | 51× |
章节越大,节约越明显。而且全文灌入的成本每轮对话都付,技能是一次编译、永久使用。
5. 本篇常见错排查
报错一:extract.py --check显示 pdftotext 未安装。这是系统级依赖,不是 pip 包。Debian/Ubuntu 系执行sudo apt install poppler-utils,macOS 执行brew install poppler。装完重新跑--check。
报错二:编译到一半卡住或报 401。九成是环境变量没生效。先echo $OPENAI_API_KEY确认有值,再确认OPENAI_BASE_URL是https://taotoken.net/api。如果你在 Claude Code 里配置的是 Anthropic 协议通道,参考 ClaudeCodeAnthropic 接入说明:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,注意协议和 base_url 要匹配,别把 OpenAI 兼容地址填进 Anthropic 配置里。
报错三:章节分割失败,chapters 目录只有一个大文件。book-to-skill 依赖Chapter N或Capítulo N这类标题格式自动分割。如果书用描述性标题(比如 “The Data Model”)或罗马数字,自动分割会失败。这时需要手动指定章节边界,在编译命令后加参数,或者先手动把 PDF 按章拆成多个文件再逐个编译。
报错四:技能调用没反应,/ddia不识别。确认技能目录路径正确。Claude Code 读的是~/.agents/skills/,如果你克隆到了别处,要么移动过去,要么在配置里加技能搜索路径。另外技能名要和编译时指定的名字一致,ddia和DDIA在部分系统上大小写敏感。
报错五:回答内容明显是编的。检查chapters/下对应章节文件是否真的有内容。如果编译时模型分析失败,章节文件可能是占位符。重新编译,并在编译时确认模型通道正常。用 TaoToken 的话,先在模型对话页发一条消息确认返回正常,再重跑编译。
6. 把统一通道用起来,让每本书都变成可调用技能
到这里你已经走完了完整链路:TaoToken 准备统一 Key,book-to-skill 安装并编译 PDF,Claude Code 里验证技能加载和检索,最后排查了五类常见错误。核心价值在于把书的编译成本一次性前置,运行时只加载几 KB 的精炼结构。
下一步建议你选一本最常翻的技术书,按上面的命令跑一遍。编译时用 TaoToken 的模型对话页确认通道正常,长期编码和 Agent 任务可以走 Coding Plan 把额度打包。接入文档和参数细节都在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite ,遇到协议或 Key 问题先查文档再动手改配置,能省不少来回试的时间。