1. 为什么办公场景需要 PDF-Skill 自动化
PDF 大概是办公里最"难缠"的一种文件格式。它看起来规整,但真要动手改点东西,就会发现处处是坑:想复制一段文字,结果排版全乱;想把发票明细导进 Excel,只能一行行手敲;遇到扫描版表单,连光标都点不进去,更别说批量填充了。我身边做财务、行政、教务的朋友,几乎每个人都被 PDF 折磨过。
传统做法无非两条路:要么买商业软件,功能是强但按年收费,批量处理还得上企业版;要么自己写脚本,用 pypdf 抽文本、pdfplumber 抠表格、reportlab 画报表,光是调研库和踩兼容性的坑就能耗掉一整天。更麻烦的是,这些库各管一摊,遇到"扫描版表单填充"这种复合需求,你得把 OCR、坐标定位、图像渲染全串起来,代码量直接起飞。
Claude Skills 里的 PDF-Skill 就是冲着这些痛点来的。它把 pypdf、pdfplumber、reportlab、pypdfium2、pytesseract、pdf2image 这些 Python 库,加上 poppler-utils、qpdf、pdftk 这些命令行工具,打包成一套开箱即用的技能包。你不需要记住每个库的 API,只要用自然语言告诉 Claude 你要干什么,它会自动挑对应的脚本执行。文本提取、表格转 Excel、PDF 转图片、扫描版表单填充、生成汇报报告、加密解密,基本覆盖了办公里 90% 的 PDF 操作。
它适合谁?我觉得三类人最该试试:一是每天要处理大量票据、合同的财务和行政;二是需要从 PDF 报表里扒数据做分析的数据岗;三是想把重复劳动交给 AI、自己专注在判断和决策上的普通办公人。下面我就按"从零搭环境 → 接入统一 Key → 跑通四类实战 → 排错"的顺序,把整套流程拆开讲,你跟着做,10 分钟内能跑通第一个案例。
2. TaoToken 前置:统一 Key 与 API 通道准备
在动手装 PDF-Skill 之前,先把模型调用的通道理顺。Claude Skills 本身是技能框架,真正干活的是背后的模型,而模型调用需要一个稳定的 API 入口。TaoToken 在这里扮演的就是"统一 Key + 统一 Base URL"的角色——你不用为每个模型单独申请账号、记不同的密钥,一个 Key 就能覆盖对话、编码、Agent 等多种调用场景。
先说清楚它是什么:TaoToken 是一个模型 API 聚合服务,提供兼容 OpenAI 风格的接口。你拿到一个 API Key,配上 Base URL,就能在 Claude Code、Cline、Codex 这类工具里直接调用模型。对 PDF-Skill 这种需要模型理解指令、决定调用哪个脚本的场景来说,通道稳不稳定直接决定了体验。
适合谁用?如果你只是偶尔问几个问题,用网页版模型对话就够了;但如果你要把 PDF 处理做成可复用的自动化流程,尤其是批量任务,那就需要一个能扛住连续请求的 API 通道。TaoToken 的 Coding Plan 就是为长期编码和 Agent 场景设计的,适合这种高频调用。
具体要准备三样东西,我把它叫"三件套":
| 配置项 | 值 | 说明 |
|---|---|---|
| Base URL | https://taotoken.net/api | 兼容 OpenAI 风格的接口地址 |
| API Key | 在控制台生成 | 形如sk-xxxx,注意保密 |
| Model ID | 按需选择 | 如claude-sonnet-4-5等,以控制台列表为准 |
获取 Key 的路径是:先访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册账号,然后进控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite 创建 API Key。创建完记得立刻复制保存,页面刷新后就看不全了。
注意:API Key 等同于你的账户凭证,不要写进公开的代码仓库,也不要在截图里露出完整字符串。建议放在环境变量里,用
export TAOTOKEN_API_KEY=sk-xxxx的方式引用。
如果你用的是 Claude Code,它读取的是~/.claude/settings.json或项目级的.claude/settings.json;如果用 Cline,配置写在 VS Code 的设置里;如果用 Codex,则对应~/.codex/auth.json。不管哪个工具,核心都是把上面三件套填对。下一节我会给出可直接复制的配置片段。
3. 可复制配置:Skill 安装与 settings 片段
这一节是整篇的核心,我把配置拆成"装 Skill"和"配通道"两步,每步都给可复制的片段。
3.1 安装 PDF-Skill 到 Claude Skills
PDF-Skill 的源码在 ModelScope 的 ms-agent 仓库里。先克隆下来:
git clone https://github.com/modelscope/ms-agent.git cd ms-agent/projects/agent_skills/skills/pdf ls -la你会看到这样的结构:
pdf/ ├── scripts/ # 8 个实用 Python 脚本 ├── SKILL.md # 主要技能文档 ├── forms.md # 表单填写工作流程 ├── reference.md # 高级功能参考 └── LICENSE.txt然后把它复制到 Claude Skills 的目录。Linux/Mac 下通常是~/.claude/skills/:
mkdir -p ~/.claude/skills cp -r /path/to/ms-agent/projects/agent_skills/skills/pdf ~/.claude/skills/pdf ls ~/.claude/skills/pdfWindows 下对应C:\Users\你的用户名\.claude\skills\pdf。复制完确认SKILL.md在目录里,Claude Code 启动时会自动扫描这个目录加载技能。
3.2 配置 TaoToken 通道(settings.json)
Claude Code 的配置写在settings.json里。下面是一个可直接复制的片段,把env部分换成你的实际值:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_AUTH_TOKEN": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-5" }, "permissions": { "allow": [ "Bash(python:*)", "Bash(pdftotext:*)", "Bash(qpdf:*)", "Read", "Write" ] } }这里三个字段对应三件套:ANTHROPIC_BASE_URL是 Base URL,ANTHROPIC_AUTH_TOKEN是 API Key,ANTHROPIC_MODEL是 Model ID。permissions.allow里放行 Python 和几个 PDF 命令行工具,避免每次执行脚本都弹确认。
如果你用的是 Cline,配置在 VS Code 的settings.json里,字段名不同但逻辑一样:
{ "cline.apiProvider": "openai", "cline.openAiBaseUrl": "https://taotoken.net/api", "cline.openAiApiKey": "sk-你的TaoToken密钥", "cline.openAiModelId": "claude-sonnet-4-5" }Codex 用户则编辑~/.codex/auth.json:
{ "OPENAI_API_KEY": "sk-你的TaoToken密钥", "OPENAI_BASE_URL": "https://taotoken.net/api" }提示:三个工具的字段名不一样,但本质都是 Base URL + Key + Model ID。填的时候别把 Base URL 末尾的
/api漏掉,也别多加斜杠。
3.3 安装 Python 依赖与命令行工具
PDF-Skill 依赖一批 Python 库和系统工具。先建虚拟环境再装:
cd ~/.claude/skills/pdf python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install pypdf pdfplumber reportlab pypdfium2 pytesseract pdf2image命令行工具按系统装:
# Ubuntu/Debian sudo apt install poppler-utils qpdf pdftk tesseract-ocr # macOS brew install poppler qpdf pdftk tesseract装完验证一下:
pdftotext -v qpdf --version tesseract --version看到版本号就说明工具链齐了。这一步别偷懒,OCR 和图像提取全靠这些命令行工具撑着,缺一个后面就会报错。
4. 验证请求:四类实战跑通与成功结果
配置好之后,用四个案例验证整条链路。每个案例我都给出提示词和预期结果,你照着跑一遍就知道通没通。
4.1 单文件解析:PDF 转图片
先拿最简单的练手。准备一个 PDF,比如发票文件,然后对 Claude 说:
请使用 pdf 这个 skill 帮我把当前目录下"增值税电子普通发票4.pdf"转成图片并输出。Claude 会调用convert_pdf_to_images.py,用 pypdfium2 渲染每一页。跑完你会看到输出目录里多出若干 PNG 文件,分辨率清晰,文字边缘不糊。这一步验证的是"Skill 加载成功 + 模型能正确选择脚本 + 命令行工具可用"。
如果这一步就卡住,八成是 Skill 没被扫描到,或者pypdfium2没装。先确认~/.claude/skills/pdf/SKILL.md存在,再pip list | grep pypdfium2看库在不在。
4.2 批量任务:多文件表格提取
单个文件跑通后,试试批量。假设一个目录下有几十个发票 PDF,你想把每张的明细导成 Excel:
请使用 pdf 这个 skill,把当前目录下所有 PDF 发票的明细提取出来, 每张发票生成一个 Excel 工作表,最后合并成一个文件输出。Claude 会遍历目录,对每个文件调用pdfplumber抽表格,再用 pandas 写 Excel。这里的关键是提示词里说清"所有 PDF"和"合并输出",模型才知道要循环处理。批量任务最怕中途某个文件格式异常导致整体中断,PDF-Skill 的脚本带了错误恢复机制,单个文件失败会跳过并记录,不影响其余文件。
跑完后打开 Excel,你会看到发票概览、完整信息、发票明细几个工作表,数据整整齐齐。这一步验证的是"批量调度 + 异常隔离"。
4.3 扫描版表单填充
这是 PDF-Skill 最有含金量的能力。扫描版 PDF 没有可填充字段,传统方法根本没法自动填。PDF-Skill 用"坐标定位法":先渲染页面成图,用视觉模型识别字段位置,生成边界框 JSON,再按坐标把数据画上去。
准备一份扫描版表单和一份数据(比如 Markdown 格式的成绩表),然后说:
请使用 pdf 这个 skill,把"成绩表-扫描版.pdf"按"成绩数据.md"里的内容填充, 输出"成绩表-填充版.pdf"。Claude 会先跑check_fillable_fields.py判断是否可填充,发现不可填充后走fill_pdf_form_with_annotations.py路径,生成fields.json记录每个字段的坐标,再用create_validation_image.py出一张可视化验证图——蓝色框标标签区域,红色框标输入区域。你检查这张图确认坐标没错,再执行填充。
实测下来,表格空间充足时填充准确率很高;如果表格行距太密,可能会有个别字段偏移,这时候调fields.json里的坐标值重跑即可。这一步验证的是"OCR + 坐标定位 + 视觉验证"整条链路。
4.4 生成汇报报告
最后验证创建能力。给 Claude 一份 Markdown 总结,让它生成 PDF 报告:
请使用 pdf 这个 skill,把"技能总结.md"的内容整理成一份给领导汇报的 PDF 报告并输出。Claude 会用 reportlab 的 Platypus 模式,把 Markdown 转成带标题、表格、分页的结构化文档。跑完打开 PDF,排版专业,表格样式清晰,直接能拿去开会。这一步验证的是"文档创建 + 样式渲染"。
四个案例跑完,说明你的 PDF-Skill + TaoToken 通道已经完全打通。想验证模型本身是否正常,可以到模型对话 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 发一条测试消息;如果打算长期做批量自动化,建议了解 Coding Plan https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite ,它的额度更适合高频调用。
5. 本篇常见错排查:401、proxy failed 与依赖冲突
配置和实战过程中,最容易撞上几类报错。我把它们和真实错误信息对照着列出来,方便你对号入座。
5.1 401 Unauthorized
Error: 401 Unauthorized - invalid api key这是最常见的。原因无非三个:Key 复制时带了空格或换行;Key 已经失效或被删除;ANTHROPIC_AUTH_TOKEN字段名写错。排查顺序是:先重新去控制台 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite 生成一个新 Key,粘贴时注意首尾不要有空白;再确认配置文件里字段名和工具要求一致——Claude Code 用ANTHROPIC_AUTH_TOKEN,Cline 用cline.openAiApiKey,Codex 用OPENAI_API_KEY,别混用。
5.2 local proxy failed / connection refused
Error: local proxy failed: dial tcp 127.0.0.1:xxxx: connect: connection refused这个报错说明工具在尝试连本地某个端口,通常是之前配过本地转发规则残留导致的。检查你的环境变量里有没有HTTP_PROXY、HTTPS_PROXY之类的设置,有就清掉:
unset HTTP_PROXY HTTPS_PROXY ALL_PROXY然后确认ANTHROPIC_BASE_URL填的是https://taotoken.net/api,不是localhost或127.0.0.1。Base URL 填错是这类报错的头号原因。
5.3 reading 'choices' of undefined
TypeError: Cannot read properties of undefined (reading 'choices')这个报错一般出现在响应格式不符合预期时。可能是 Model ID 填错了,服务端返回了错误结构;也可能是 Base URL 少了/api后缀,请求打到了错误的路由。先核对 Model ID 是否在控制台列表里,再检查 Base URL 拼写。如果用的是 Cline,还要确认cline.apiProvider设成了openai,否则它不会按 OpenAI 格式解析响应。
5.4 OAuth 相关报错
Error: OAuth token expired / failed to refresh token如果你之前用过 OAuth 登录方式,配置文件里可能残留了旧的 token 字段,和新的 API Key 冲突。解决办法是把配置文件里 OAuth 相关的字段删掉,只保留 Base URL + Key + Model ID 三件套。Claude Code 用户重点检查settings.json里有没有多余的oauth或refreshToken字段。
5.5 依赖类报错
AttributeError: module 'numpy' has no attribute 'float'这是 numpy 版本太新导致的,降级即可:
pip install numpy==1.26.4TesseractNotFoundError: tesseract is not installed or it's not in your PATHTesseract 没装或没加进 PATH。Windows 下需要在代码里显式指定路径:
import pytesseract pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'PdfReadError: file has not been decryptedPDF 有密码。先解密再处理:
import pypdf reader = pypdf.PdfReader('encrypted.pdf') reader.decrypt('your-password')表格识别不准时,调 pdfplumber 的检测参数:
import pdfplumber with pdfplumber.open('document.pdf') as pdf: page = pdf.pages[0] table = page.extract_table({ 'vertical_strategy': 'lines', 'horizontal_strategy': 'lines', 'snap_tolerance': 3, 'join_tolerance': 3, 'edge_min_length': 3, })排错时如果拿不准是通道问题还是 Skill 问题,可以先用模型对话 https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 发一条纯文本请求,能正常返回就说明通道没问题,问题在 Skill 或依赖上。接入细节可以对照接入文档 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite 逐项核对。
6. 把 PDF 自动化变成日常习惯
跑通四个案例之后,你会发现 PDF-Skill 真正的价值不在于单次处理,而在于把重复劳动沉淀成可复用的流程。我的做法是给每类高频任务写一个固定的提示词模板,存在一个 Markdown 文件里,下次直接复制粘贴。比如发票提取、合同拆分、报表生成各一个模板,用的时候只改文件名。
另一个实用技巧是善用scripts/目录里的独立脚本。有些任务其实不需要模型介入,比如纯文本提取,直接命令行跑pdftotext input.pdf output.txt比走一遍模型快得多。PDF-Skill 的脚本设计成模块化,就是为了让你在"AI 调度"和"手动直调"之间灵活切换。批量任务用 AI 编排,单文件简单操作用脚本直跑,效率最高。
还有一点:扫描版表单填充的坐标验证图一定要看。那张蓝红框的图是最后一道防线,花十秒扫一眼,能避免填错字段返工十分钟。我试过跳过这步直接填充,结果因为表格行距识别偏差,数据整体下移了一行,只能重来。
最后,如果你打算把这套流程用在团队里,建议把配置和提示词模板一起放进项目仓库,新同事克隆下来改个 Key 就能用。TaoToken 的统一 Key 在这里省了不少事——不用给每个人单独开模型账号,一个 Key 配好,大家共用通道,管理成本低很多。长期高频使用的话,Coding Plan 的额度比按次计费更划算,具体可以到 https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite 看当前方案。
工具终究是工具,真正省下时间的是你愿意把重复的事交给它。从今天起,把手上那份积压的 PDF 处理掉,就是最好的开始。