2026-09-02 · 原文发布日
PDF 文档自动分类抽取并分流到 Airtable
从 n8n 上传表单或 Gmail 附件收 PDF,提取文本后交 Claude 自动判断文档类型(发票、简历、合同、申请表)并按类型抽取字段,返回缺失项和置信度;缺字段、置信度低于 0.6 或类型不明的进 Airtable 待审表并提醒 Slack,合格的按类型写入对应表并回发成功通知。
原文要点
原模板从 n8n 上传表单或 Gmail 附件(搜索条件 has:attachment filename:pdf)收取 PDF,提取文本并把来源、提交人、可选类型提示和原文规范化;调用 Anthropic Messages API 让 Claude 自动识别四类文档(发票/简历/合同/申请表)、按类型抽字段,返回缺失必填项和置信度;缺字段、置信度低于 0.6 或类型不明时发 Slack 提醒并写入 Airtable 的 Needs Review 表;否则按类型路由写入对应 Airtable 表,并在 Slack 发成功确认。
这次做成什么
搭一条“收 PDF→抽文本→Claude 分类抽字段→按质量分流 Airtable→Slack 通知”的 n8n 流程。本站提供独立练习方案、自写的分类抽取提示词和两类测试文档文本;Claude 请求体结构以 Anthropic 官方 Messages API 文档为准,节点细节请导入模板后核对。
准备什么
- 可登录的 n8n 实例及创建工作流、配置 HTTP 请求节点的权限
- Anthropic API Key,并在 n8n 凭据或请求头中正确引用(调用按官方计费)
- Airtable 账号与一个 Base,内含 Invoices、Resumes、Contracts、Applications、Needs Review 五张表
- Slack 工作区凭据及两个频道:待审提醒频道和一般通知频道
- 可选:Gmail OAuth2 凭据,用于开启邮件附件入口
- 若干测试用 PDF(可用本站示例文本自行生成,勿含真实个人信息)
具体怎么做
配置两个收文入口
入口一:n8n Form 触发器加一个文件上传字段,发布后先跑一次测试提交,记下产出里的文件字段名,把 PDF 文本提取节点的 binaryPropertyName 设成这个名字。入口二:Gmail Trigger,搜索条件设为 has:attachment filename:pdf,取附件二进制。两个入口汇合到同一个文本提取节点。
规范化元数据
提取文本后接 Set 节点,统一输出四个字段:source(form 或 gmail)、submitter(表单提交人或发件人)、doc_hint(可选的类型提示,无则留空)、raw_text(PDF 全文)。后续节点只引用这四个字段,避免两条入口字段名不一致。
调用 Claude 分类并抽字段
用 HTTP 请求节点 POST 到 Anthropic Messages API 端点,请求头带 API Key 与 anthropic-version 头(具体值以官方文档为准);body 中 system 放下方“分类抽取提示词”,user 放 raw_text 与 doc_hint;要求只返回 JSON。
解析并做质量判断
接 Code 节点 JSON.parse 模型输出,得到 type、fields、missing_fields、confidence;接 IF 节点:missing_fields 非空、confidence<0.6、或 type 不在四类清单内,三者任一成立即走待审分支。
待审与按类型落库
待审分支:Slack 发提醒(含提交人、原因、置信度),Airtable 在 Needs Review 建记录存原文与解析结果。合格分支:Switch 节点按 type 四路分流,分别在对应表建记录;字段映射示例:发票表存 invoice_no、amount、date;简历表存 name、years、skills;最后 Slack 一般频道发“已处理并存档:类型+提交人”。
可直接复制的材料
Claude 分类抽取提示词(system,本站独立编写)
字段清单按你的 Airtable 列调整;置信度阈值 0.6 在 IF 节点里设定而非提示词里。
你是文档分类与信息抽取助手。用户会给你一段从 PDF 提取的中文文本和一个可能为空的类型提示。任务:1) 判断文档类型,只能是 invoice(发票)、resume(简历)、contract(合同)、application(申请表)之一,判断不出就填 unknown;2) 按类型抽取字段:invoice 抽 invoice_no、amount、currency、date、vendor;resume 抽 name、years_experience、skills;contract 抽 parties、effective_date、duration;application 抽 applicant、program、submit_date;3) 列出缺失的必填字段名;4) 给出 0 到 1 的置信度。只输出一个 JSON 对象,不要输出任何其他文字,格式:{"type":"...","fields":{...},"missing_fields":["..."],"confidence":0.0}。金额保留原始数字与币种,日期统一为 YYYY-MM-DD,抽不到的字段不要编造。测试文档文本:合规发票(自建 PDF 用)
虚构内容,用于生成测试 PDF;预期分类 invoice、置信度高于阈值、直接进入 Invoices 表。
发票
发票号码:INV-2026-0417
开票日期:2026-09-01
供应商:云舟办公用品(虚构)有限公司
金额:1280.50 元(人民币)
项目:打印纸 20 箱、订书钉 10 盒测试文档文本:缺字段简历(自建 PDF 用)
虚构内容;预期 missing_fields 含 years_experience,触发 Needs Review 分支与 Slack 提醒。
个人简历
姓名:测试求职者丙
技能:Excel、数据透视表
(本文档故意不写工作年限与联系方式)输入与输出示例
本站虚构演示,未真实调用 Claude 或写入 Airtable;JSON 为按提示词格式推演的示意。
输入
通过表单上传由“合规发票”文本生成的 PDF,提交人填 test-finance@example.com;另传“缺字段简历”PDF 一份。对应输出
发票:Claude 返回 {"type":"invoice","fields":{"invoice_no":"INV-2026-0417","amount":"1280.50","currency":"CNY","date":"2026-09-01","vendor":"云舟办公用品(虚构)有限公司"},"missing_fields":[],"confidence":0.93},写入 Invoices 表并 Slack 确认。简历:{"type":"resume","fields":{"name":"测试求职者丙","skills":"Excel、数据透视表"},"missing_fields":["years_experience"],"confidence":0.81},进入 Needs Review 并提醒。做完检查这些
- 表单上传测试 PDF 后,规范化节点输出的 source、submitter、raw_text 四字段齐全且无乱码
- 合规发票样例被分类为 invoice 且 confidence≥0.6,Invoices 表新增一行且五个字段值与 PDF 一致
- 缺字段简历进入 Needs Review 表,Slack 待审频道消息里写明缺失字段名与置信度
- 一份纯图片无文字层的扫描 PDF 不会静默成功,要么文本为空被判待审,要么有可见报错
- Gmail 入口仅处理带 PDF 附件的邮件,普通文本邮件不触发后续节点
容易卡住的地方
- binaryPropertyName 与表单实际文件字段名不一致是最常见失败,必须先跑一次测试提交确认
- 扫描件 PDF 没有文字层,提取结果为空,需要另行接入 OCR,本模板未覆盖
- Airtable 的 Base ID 与各表 ID 必须逐一替换为你自己的,用模板原值会写入失败
- anthropic-version 请求头缺失或填错会直接 400,具体取值以 Anthropic 官方文档为准
- Claude 输出偶发多余文字导致 JSON.parse 失败,解析节点需加 try/catch 并落到待审
- 阈值 0.6 是模板设定而非通用标准,简历类建议按抽样结果自行调校
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Extract and triage PDF documents with Claude, Gmail, Airtable and Slack
- 原作者
- Bhaskar Gorati
- 原始发布日期
- 2026-09-02T05:49:25.966Z
- 来源
- https://n8n.io/workflows/19042