Skill 从入门到精通——第四章 Anthropic 官方Skill解析—pdf Skill 解析
pdf Skill解析—PDF处理
一、技能概述
PDF Skill 是 Anthropic 官方 Agent Skills 体系中负责 PDF 全生命周期处理的专业技能。覆盖:
- 读取解析: 文本/表格/元数据/图像提取。
- 内容创建: 基于 reportlab 的 PDF 生成(含多页文档、表格、样式系统)。
- 文档操作: 合并、拆分、旋转、裁剪、水印、加密。
- 表单处理: 可填写表单(AcroForm)与非可填写表单(纯视觉表单)的自动填充。
- 格式转换: PDF ↔ 图像、OCR 文本提取。
- 高级渲染: 基于 PDFium 的高速渲染与浏览器端解析。
二、项目文件结构
基于./skills/skills/pdf目录源码,文件结构如下:
|
|
职责分析:
- SKILL.md:处理常见任务(合并、拆分、提取、创建、OCR、水印),并将表单填写委托给
forms.md。 - reference.md:补充 SKILL.md 未覆盖的高级特性、JS 生态、性能与故障排查。
- forms.md:定义表单填写的多路径决策流程,强制规定步骤顺序。
- scripts/ :是确定性的、单用途工具,将复杂工作流固化为可复用的 CLI 脚本。
设计模式: 渐进式披露,元数据(frontmatter)→ 核心指令(SKILL.md)→ 专业工作流(forms.md)→ 参考百科全书(reference.md)→ 可执行自动化(scripts/)。
三、核心决策树
PDF Skill 的执行逻辑基于输入参数触发决策分支,核心决策树如下:
|
|
四、主要工作流
1、标准文本提取工作流
|
|
底层原理: pdfplumber 基于 pdfminer.six 解析 PDF 内容流。extract_tables() 默认采用 "lines" 策略,即通过显式线条划分单元格。
2、可填写表单工作流
|
|
3、非可填写表单
两种方案选择:
Approach A:结构优先
当extract_form_structure.py在 PDF 文件中检测到文本标签时,请使用此方法。
|
|
Approach B:视觉回退
当 PDF 为扫描件 / 图片格式,且结构提取未识别到可用文本标签时(例如所有文字均显示为「(cid:X)」类乱码),请使用此方式。
|
|
4、性能优化工作流
| 场景 | 策略 | 工具 |
|---|---|---|
| 大文件拆分 | 流式处理,分 chunk(如每 10 页一组) | PdfReader + 循环切片 |
| 大文件文本提取 | 避免全量加载,使用 pdftotext |
poppler-utils |
| 图像提取 | 直接提取内嵌对象,避免渲染 | pdfimages -all |
| Web 优化 | 线性化(流式下载) | qpdf --linearize |
| 损坏修复 | 结构检查 + 对象重建 | qpdf --check / --fix-qdf |
五、设计通用启示
1、渐进式披露
PDF Skill 不是单一大文档,而是 分层加载的知识图谱:
- 元数据层(YAML)→ 供 Agent 路由决策
- 核心层(SKILL.md Body)→ 覆盖 80% 场景的快速解决路径
- 专项层(forms.md / reference.md)→ 按需加载的深度知识
- 工具层(scripts)→ 预置可执行代码,Agent 无需自行编写
启示: 在处理简单 PDF 任务时仅加载 SKILL.md,仅在触及表单填充或高级渲染时才拉取 forms.md / reference.md,实现上下文效率与能力深度的平衡。
2、防御性工程
源码中多处体现防御性设计:
- Monkey Patch: 对上游库已知 bug 做运行时修复,而非等待版本更新
- 校验脚本:
check_bounding_boxes.py在写入前拦截几何错误 - 异常隔离: 批量处理中逐文件捕获异常,防止级联失败
- 坐标双轨: 同时支持 PDF 坐标与图像坐标,并自动检测/转换
3、工程脚本化固化
forms.md 的核心设计是将认知工作流转化为可执行脚本:
- 人工判断(“是否有 fillable fields?")→
check_fillable_fields.py - 人工观察(“字段在什么位置?")→
extract_form_structure.py+convert_pdf_to_images.py - 人工计算(“坐标是否正确?")→
check_bounding_boxes.py - 人工验证(“填充后是否正确?")→
create_validation_image.py
这种设计将 LLM 的推理过程与工程执行解耦:LLM 处理模糊任务(从图像中识别字段用途、在方案 A/B 之间选择、解释验证错误)。边界清晰:
- 自动化: JSON 提取、坐标转换、验证、PDF 写入
- 人/LLM: 视觉分析、坐标细化、错误修正
4、文档即提示词
SKILL.md 和 forms.md 的结构是可执行的操作手册,而非被动文档。约束条件被强力标记:
- “关键: 你必须按顺序完成这些步骤”
- “重要: 切勿使用 Unicode 下标/上标字符”
- “始终在填写前验证边界框”
这充当了约束 LLM 在该 Skill 内行为的系统提示词。
5、显式状态优于隐式状态
该 Skill 始终将中间状态写入磁盘(field_info.json、form_structure.json、fields.json)。这带来了:
- 可检查性和可调试性
- 错误后的可恢复性
- 无需重新生成一切即可进行人工覆盖
六、设计要点
-
表单填写工作流是架构的核心: 它展示了如何通过组合确定性提取、LLM 视觉分析、显式 JSON 中间体和分层验证来处理高风险、多模态任务。
-
显式中间状态(
fields.json、form_structure.json): 它将不透明的二进制格式转变为可检查、可修复的流水线。 -
修改前快速失败验证: 三层填写前验证(结构性、模式性、语义性)确保坐标错误在产生损坏的 PDF 之前就被捕获。
-
跨工具链的优雅降级:大多数操作都有 Python 和 CLI 替代方案,减少了环境脆弱性。
-
文档即控制平面: Skill 文件中的强约束标记(“关键”、“重要”、“始终”)将文件转变为 LLM 的可靠系统提示词。
-
运行时补丁修复库 bug 展示了务实的防御性编码——当依赖项存在影响真实世界 PDF 的已知 bug 时,Skill 会修补它而不是等待上游修复。
七、使用示例
示例1:解析pdf提取信息并创建新PDF
在claude code中输入指令:
|
|
生成结果如下:

生成PDF文件ibm-1q-26-earnings-summary.pdf 如下:

补充学习资源
如您想要系统建立 AI Agent 全栈开发能力,从概念认知到企业级项目落地、线上迭代优化,可以参考《栖微 AI Agent 工程师实战成长营》专栏。专栏以六阶成长路径组织内容,配套实战源码与持续更新的前沿案例,补齐 Demo 到生产环境之间的工程化短板。
Github 项目 :https://github.com/tinyseeking/tidy-agent-practice
欢迎大家一起探讨智能体开发相关问题。