用 LlamaParse + GPT-4o 提取发票数据并自动入账
用 LlamaParse 把复杂 PDF 解析成可用文本,再用 GPT-4o 输出严格的发票 JSON。把结果写入 Google Sheets,原文件归档到 Google Drive,并通过 Telegram 推送给审核人。
谁适合用?
解决了什么问题?
挑战
人工录入发票约 12 分钟/份,按 50 美元/小时计成本约 10.00 美元。
复制粘贴易出错,税额/总额/供应商名约 1-3% 不一致导致返工。
多页 PDF 的原始 OCR 文本嘈杂,常见 20,000-60,000 tokens。
解决方案
解析+抽取约 45 秒/份,把人工成本压到约 0.63 美元(降低约 94%)。
用 Schema 校验的 JSON 把不一致率降到约 0.2%,并可自动做字段校验。
结构化解析+定向提示词通常控制在约 2,000-6,000 tokens(降低约 70-95%)。
使用此工具包你将获得的成果
把发票与业务 PDF 变成可入账的结构化台账,同时保留可追溯的原件归档与快速人工复核。
把所有发票统一成一个 JSON 合约
通过 Schema 校验,在入账前拦截缺失总额、日期格式错误、币种不一致等问题。
让财务流程可审计(附件不丢失)
每一行结构化数据都能回链到原始文件,让审计从 30 分钟翻找变成 30 秒定位。
流程概览
Step 1: 收集源文档
从邮件附件(更适合供应商寄送)或人工上传文件夹接收发票 PDF,并记录最小化的收件元数据。
实操提示词/代码:
System: 你是一名运营助理,负责记录发票入库元数据。
只返回 JSON:{"source":"email|upload","received_at":"ISO-8601","sender":"string","filename":"string","notes":"string"}。
不知道就返回 null。
专家提示:先保存原文件,后做抽取;这样就算抽取失败也不影响审计追溯。
接收并保存发票 PDF
选择它是因为它能稳定接收邮件附件并保留发件人/时间戳,让入库链路具备审计级可追溯性。
Step 2: 把文档解析成干净文本
把已保存的 PDF 发送到 LlamaParse,请求版式友好的输出(markdown 或 text),确保行项目与合计金额可读。
实操提示词/代码:
import os
from llama_parse import LlamaParse
parser = LlamaParse(
api_key=os.environ.get("LLAMA_CLOUD_API_KEY"),
result_type="markdown",
verbose=False,
)
# file_path = "/path/to/invoice.pdf"
# documents = parser.load_data(file_path)
# parsed_markdown = "
".join([d.text for d in documents])
专家提示:多页发票保留分页分隔符,复核时能快速定位字段来源页。
保留版式的发票解析文本
选择它是因为它能版式感知解析表格与行项目,减少下游模型“看错列”的风险与返工。
Step 3: 把发票字段抽取为合法 JSON
把解析文本交给 GPT-4o,强制按 Schema 输出,确保总额/税额/行项目被统一口径。
实操提示词/代码:
System: 你是一个财务数据抽取引擎。
你必须只返回严格合法的 JSON,且必须完全匹配 schema。禁止输出 markdown 或解释。
归一化规则:
- 日期必须是 ISO-8601(YYYY-MM-DD)。
- 金额必须是数字(不含币种符号)。
- 币种尽量输出 ISO 4217(如 USD/JPY/EUR)。
- 行项目有数量/单价就输出,没有就置 null。
JSON Schema(严格):
{
"invoice_number": "string|null",
"invoice_date": "string|null",
"vendor_name": "string|null",
"vendor_tax_id": "string|null",
"bill_to": "string|null",
"currency": "string|null",
"subtotal": "number|null",
"tax": "number|null",
"total": "number|null",
"due_date": "string|null",
"payment_terms": "string|null",
"line_items": [
{"description":"string|null","quantity":"number|null","unit_price":"number|null","amount":"number|null"}
]
}
专家提示:当 subtotal + tax 与 total 偏差超过 0.5% 时直接判失败,优先拦截解析漂移。
抽取为 JSON 的发票字段
选择它是因为它能在半结构化文本上稳定推理并按严格 Schema 填充字段,避免写脆弱的正则规则。
Step 4: 写入台账并归档原件
把 JSON 作为“一票一行”追加写入 Google Sheets,再把原始 PDF 存入 Google Drive,并把文件 URL 写回表格。
实操提示词/代码:
// 伪代码(任意 Sheets/Drive SDK 都能实现)
const row = [
data.invoice_number,
data.invoice_date,
data.vendor_name,
data.currency,
data.subtotal,
data.tax,
data.total,
data.due_date,
drive_file_url
];
// sheets.appendRow("Invoices", row)
专家提示:用 vendor_name + invoice_number + total 作为幂等键,避免重复入账。
表格台账行及文件归档链接
选择它是因为它以“类数据库行”承载财务台账,团队无需开发应用就能筛选、透视与审计。
选择它是因为它能可靠保存文件并提供可共享链接,让每一条台账都能回溯到原始 PDF。
Step 5: 向审核人发送复核通知
通过 Telegram 发送简洁消息(供应商/总额/到期日/Drive 链接),让人工在约 10 秒内完成复核。
实操提示词/代码:
消息模板:
新发票待复核
- 供应商:{vendor_name}
- 总额:{currency} {total}
- 到期:{due_date}
- 链接:{drive_file_url}
回复:APPROVE 或 REJECT:{原因}
专家提示:在表格里加一列状态(Pending/Approved/Rejected),对账就会非常确定且可追踪。
包含发票摘要的复核通知消息
选择它是因为它能用最低摩擦完成快速审批,把人留在关键环节,但不引入笨重的工单系统。
相似工作流
正在寻找不同的工具?探索这些替代工作流。
这套方法可以把新闻源持续转化为可发布的 AI 新闻视频, 并完成跨平台分发。将 GPT-4o 用于生成简洁文案, 用 HeyGen 输出虚拟人视频, 再用 Postiz 统一发布到 Instagram、Facebook 与 YouTube。
把一份活动 Brief 变成多平台优化文案:用 GPT-4o 与 Gemini 生成内容,通过 Gmail 做双重审批,再用 Buffer 排程发布,并用 Telegram 同步状态。
个人自媒体超级工厂是一套闭环的视频生产方案,旨在将创意想法直接转化为 4K 超写实节目。通过集成 GPT-4o、Sora 和 ElevenLabs,本工具包帮助内容创作者实现从文案到成片的自动化,彻底瓦解重资产拍摄门槛,让单人即可支撑起电影级频道。
常见问题
最适合发票/收据/对账单,尤其是带表格和多栏版式的 PDF;也可用于报告/合同/扫描图片,但准确率取决于扫描质量(建议 300 DPI)。
一个现实的基线是每张约 0.01-0.05 美元(解析+LLM 抽取,小规模),再加接近 0 的存储成本;最大收益来自把人工从约 10.00 美元/张(12 分钟、50 美元/小时)降到约 0.63 美元/张(45 秒)。
5-15 页的发票包原始 OCR 文本常见约 20,000-60,000 tokens;而版式解析+定向抽取通常约 2,000-6,000 tokens,往往可降低约 70-95%,从而直接降低 API 花费并加快响应。
手写发票与低清扫描会显著降精度;另外,供应商行项目格式不统一时,需要更严格的 schema 和自定义归一化规则手册来保证 line_items 一致。
可以:上传 PDF → 解析 → 跑抽取提示词 → 把 JSON 写入表格行 → 发复核消息;自动化的价值只是把复制粘贴去掉,并让批量处理更一致。
通知可换成邮件或 Slack,台账可换成 Airtable 或数据库表;核心不变:解析 → Schema-JSON → 写入台账 → 回链原件。