AI 发票处理自动化:用 .NET 智能体提取、校验并生成发票报表
在 .NET 中用 AI 智能体自动化发票处理
AI 发票处理自动化指让应用读入供应商发票、抽取明细行、对照采购订单做校验,再把结果写进财务系统能直接消费的结构化工作簿。落到工程上,这其实是 .NET 里的文档自动化:用一句自然语言指令,替换掉传统的字段映射和排版代码。Spire.Agent.Office 是一个文档 AI 智能体 SDK,负责理解语言那一半;其下的确定性文档层则保证输出的是真实、格式正确的 Excel 和 PDF 文件。
快速导航
- 为什么发票处理适合 AI
- AI 发票智能体能做什么、不能做什么
- 常见发票处理场景
- 在 .NET 里自动化发票处理的三种方式
- 一个可运行的示例:提取、校验、出报告
- 为什么用 Spire.Agent.Office
- 常见问题
1. 为什么发票处理适合 AI
在开发者眼里,发票工作其实是三件重复的体力活:读取(从 PDF、Word、Excel 或扫描图片里抽出供应商、日期、明细行和合计)、核验(把发票和采购订单对上,标出差异)、输出(把结果写进财务系统能消费的结构化工作簿)。
对 .NET 开发者来说,难点从来不在看懂发票内容,而在于把非结构化、多格式的文档,变成应用能稳定复用的流程。
有三点让这类任务天然适合语言模型,而不是人手写规则:
- 输入格式多样。 进来的发票有 PDF 附件、扫描图片、Word 文档,也有 Excel 文件,布局各不相同。为一种格式写的规则,换一种就失效;LLM 却是直接读文本,不挑文件类型。
- 输出是文档形态。 交付物是一份格式正确的
.xlsx或.pdf,不是一段文本糊弄过去。这正是文档层体现价值的地方。 - 数量一直在变。 一个月新接入 50 家供应商、复核 200 张发票,要的是配置驱动的方案,而不是每来一家供应商就重写一遍代码。
实际工作里,提取和校验往往是绑在一起做的:团队既要把发票汇总、把差异标出来,还要基于模板和结构化数据生成新发票。想进一步了解文档 AI 智能体是怎么构成的、它在内容流水线里处在什么位置,可以看这篇 AI 智能体如何做文档处理:是什么、怎么工作。
2. AI 发票智能体能做什么、不能做什么
| 能做的 | 不能做的 |
|---|---|
| 从 PDF、Word、Excel、扫描图片中抽取出供应商、日期、明细行和合计 | 替代高价值或受监管交易的应付账款专业复核 |
| 把发票与采购订单匹配,并标出差异 | 保证对故意含糊或伪造发票的匹配精度 |
| 批量生成结构化工作簿或 PDF 报告 | 替你去谈判或拍板接受条款 |
| 保持格式、表格样式和字体原样 | 解读新出现或含糊的供应商条款;应转给采购 |
| 在你自己的应用里运行(无需上传云端) | 不经人工复核就保证输出零错误 |
分工很清楚:智能体自动化的是读取、提取和校验(财务文员原本要花掉的那几个小时),最后那一下签字由人来把关。正是这条边界,让工具既真正有用,流程也经得起审计。
3. 常见发票处理场景
发票处理远不止一次性的提取。同一个模式——一条指令、一堆发票文件、可选的一批参照数据——就覆盖了团队最常碰到的几种场景:
| 场景 | 示例指令 |
|---|---|
| 多格式发票提取 | “从这些发票里抽取出供应商、日期、明细行和合计,合并到一张工作表。” |
| 采购订单三方匹配 | “把每张发票和采购订单比对,标出差异超过 5% 的部分。” |
| 批量发票报告 | “生成一份汇总工作簿,含按供应商的金额合计、差异清单和一份可打印的报告。” |
| 重复检测 | “通过比对收件箱里发票的供应商、日期和金额,找出疑似重复的发票。” |
| 审批流路由 | “一万美元以上的发票转入审批队列,以下的自动通过。” |
每种场景都是同一套架构:一句指令进去,一份真实文档出来。
4. 在 .NET 里自动化发票处理的三种方式
| 方式 | 代码量 | 格式保真 | 维护成本 | 最适合 |
|---|---|---|---|---|
| 文档 AI 智能体(LLM + 文档层) | 一条指令 + 约 10 行 | 高(真实的 Excel/PDF 文件) | 低(改指令即改行为) | 想自动化发票、又不想自建 LLM 管线的团队 |
| 裸 LLM API(OpenAI/Claude + 自研代码) | 高(提示词、解析、文件 I/O) | 低(LLM 本身不原生读写 Office 文件) | 高(RAG、路由、错误都得自己管) | 已经跑着一套 LLM 技术栈的团队 |
| 传统 SDK(Spire.Office 或同类) | 每种文档几十行 | 高(确定性强) | 高(每个映射都是代码) | 格式固定、规范明确、很少变化的发票 |
这里的关键点是:没有文档处理层,LLM 读不了 PDF 发票;没有自然语言理解,传统 SDK 看不懂自然语言请求。 文档 AI 智能体把两者合到了一起。
也并不是说传统路线就不对。对于格式固定、表述规范、很少变动的发票,确定性 SDK 常常是更稳的选择,Spire.Office 至今也还在服务这类需求。如果你恰好是这个场景,这篇 用 C# 从 Excel 数据生成 Word 文档 展示了经典的数据驱动文档生成流程。而一旦供应商布局、输入格式、校验规则频繁变化,改代码成了瓶颈,就该让智能体上场了。
为什么裸 LLM API 做不了发票处理
直接调用 gpt-4 或 claude 说一句”从这张发票抽数据”,在生产环境会在三个地方翻车:
- 没法可靠地读写 Office 文件。 LLM 看到的是文本,不是
.xlsx和.pdf的结构。要读 PDF 发票、保住明细表不变、产出合法的 Excel 工作簿,通常得自己另搭一套提取和重建管道。 - 格式没有保证。 发票报告带着列头、数字格式、条件填充,这些对财务部门很要紧。裸 LLM 返回的是文本,而它丢掉的那部分格式,恰恰是财务团队最在意的。
- 整套编排都要自己重写。 提示词设计、字段映射、错误处理、文件 I/O、输出校验,全都成了你要自己写、自己维护的代码。
文档 AI 智能体把模型的语言理解和确定性的文档 API 配在一起:模型决定抽什么、匹配什么,文档层负责保证文件真实、格式正确。这就是”演示能跑”和”团队敢交付”之间的差距。
5. 一个可运行的示例:提取、校验、出报告
下面是财务团队每个月都要重复的一套活:处理进来的供应商发票、从格式各异的文件里抽数据、对照采购订单做校验、产出结构化工作簿。实现用的是 Spire.Agent.Office for .NET,一个通过自然语言指令处理 Word、Excel、PowerPoint 和 PDF 文档的 AI 智能体。示例围绕这条流程设计,而不是照搬教程;官方的集成入门和 AI 合同审查教程会一步步讲 API 搭建,本节聚焦的是 C# 集成模式。
1. 从收件箱里的每张发票抽数据。 配置一次智能体,再读取收件箱文件夹,把每张发票都解析进同一张合并表:
1 | using System.IO; |
多格式的难题由智能体一并解决——PDF、扫描图片、Word 文档、Excel 文件统统走同一条指令,不需要任何按格式分开写的代码:
1 | using (Workbook extracted = new Workbook()) |
关键 API 调用
Workbook.AI(agentOptions)– 为工作簿对象挂载 AI 文档处理器ExecuteInstruction(doc, instruction, savePath, attachments)– 执行一次处理并写出合并结果AIResult.Success/AIResult.ErrorMessage– 校验结果并暴露失败信息
输出
2. 对照采购订单做校验。 加载提取出的文件,用一句大白话把匹配规则讲清楚。智能体会新增一张 Validation 工作表,源数据保持不动:
1 | using (Workbook validation = new Workbook()) |
Validation 工作表会落到源数据旁边,被标记的行、红色填充和 Reason 列都由指令应用上去:
3. 出报告。 把第 5 节的汇总拼出来再导出。savePath 单独决定输出格式——这里写 .xlsx,换成 .pdf 就是分发版:
1 | using (Workbook report = new Workbook()) |
Summary 工作表落到工作簿最前面,随时可以打印或导出 PDF:
差别在哪:传统 SDK vs. AI 智能体
智能体的价值放在一起对比最清楚。用传统 SDK,你要按表头字符串逐一定位字段、把每个校验阈值硬编码、再逐格写输出——而且供应商一改布局或规则一变,这些全得重调。下面这段简化的示意代码,展示的正是那份工作量:
1 | // 传统 SDK(示意):每个字段都按表头字符串逐一定位、 |
而使用智能体,只需要把这一整套编排换成一条指令:
1 | validation.AI(agentOptions).ExecuteInstruction( |
两者产出的是同一份校验工作簿。区别在于:SDK 每多一个字段就多一个 FindColumnByHeader,每多一条规则就多一次阈值比较,每多一处填充就多一次写单元格;而智能体把这些全收进了一条指令。供应商改了布局、财务改了差异阈值,你改的是那句指令,而不是代码。
6. 为什么用 Spire.Agent.Office
上面的三方对比是刻意不带产品立场的——换成任何够用的 LLM,这套模式都成立。对 .NET 团队来说,Spire.Agent.Office 真正值得选的地方在三点:
- 原生支持多格式发票。 PDF、Word 文档、Excel 文件、扫描图片都是一等公民,不是后补的格式。一条指令就能从这四种格式里读取并提取。
- 格式原样保留。 发票报告带的列头、数字格式、条件填充必须在处理后原样存活。智能体的文档层保证它们不被破坏——在指令里加上”保留原始文档的布局和样式”,输出就贴合模板。
- 原生 .NET 集成。 它是一个 C# SDK,直接嵌进现有 .NET 应用,不用另建、不用维护一套文档处理服务,也没有跨服务的粘合成本。上面的示例就是完整的集成面。
如果你已经在用 Spire.Office 做文档处理,智能体是顺理成章的下一层:同一个 Workbook 对象多出一个 AI() 处理器,把指令变成已执行的工作流。
7. 常见问题
AI 发票处理能识别扫描图片吗?
可以。上面的提取示例就是把扫描图片和 PDF、Word 文档一起加载,智能体会按各自的原生格式读取和分析。对没有可提取文本层的扫描件,智能体会直接对图片内容做处理。如果扫描质量很差,建议先跑一遍 OCR 以获得最好效果。
发票数据能留在我的环境里吗?
可以,但有一点要说清楚。Spire.Agent.Office 从你自己的应用运行,SDK、模板和文档处理都留在你的环境里,发票文件不会上传到第三方文档服务做存储或转换。要分析发票内容,AI 需要相关文本,这部分会发给模型处理,这是任何 AI 工作流的固有步骤。如果你在内网部署自有模型,内容就完全不出内网;如果通过 OpenAI、Azure OpenAI 这类托管模型 API 接入,相关内容会按你的配置经网络传给对应提供商。
能用我自己的 AI 模型吗?
可以。Spire.Agent.Office 支持灵活的 AI 模型接入,兼容主流 AI 基础设施,包括托管模型 API 和私有化部署模型,你可以把智能体指向自己的端点。关于你部署环境中支持哪些提供商,请联系客户团队:联系我们。
Spire.Agent.Office 做发票处理时用的是哪个模型?
Spire.Agent.Office 通过一个 SpireToken 密钥连接到大语言模型。你用自然语言描述提取或校验任务,智能体在背后编排文档处理工具;模型负责理解,文档层负责保证格式和文件保真。
能批量处理发票吗?
可以。一条指令作用于一个发票文件夹,智能体就产出一份含全部提取数据的合并工作簿,字段提取和跨文档匹配都支持。要让智能体不漏掉任何一张发票,把收件箱文件夹整理好、别放空文件;如果处理出来的发票数量对不上收件箱数量,先查数据源。
AI 会改动我的工作簿格式吗?
只要你不让它改,它就不会。在指令里加上一句类似”保留原始文档的布局、样式和字体”即可,官方教程里有这个改法。
这和直接用裸 LLM API 有什么区别?
裸 LLM 无法自己可靠地读、改、写 Word 和 Excel 文件,它需要一个文档处理层。文档 AI 智能体把 LLM 的语言理解和确定性文档 API 配在一起,所以输出的是真实、格式正确的文件。
准备好自动化你的发票处理了吗?
提取、校验和出报告是见效最快的三个环节:把智能体指向收件箱、描述处理规则,就能拿到一份结构化工作簿或 PDF。跟随集成入门教程,在 .NET 里跑通你的第一个发票工作流。










