RAG 实战:百行代码解析“增值税发票“,大模型让数据结构化更轻松(附源码)
LlamaIndex 是一个用于构建上下文增强型大模型应用的编程框架,它让使用大语言模型(LLMs)变得更加简单高效。
引言:发票数据的自动化需求
昨天吃了顿必胜客,开张发票准备给公司报销时,我突然灵机一动:这些发票的数据录入是不是可以用程序自动化搞定?作为一个对大模型技术情有独钟的博主,我当然不能放过这个实际应用的好机会!于是,我决定用 LlamaIndex 和 Pydantic 结合大模型,设计一个能解析增值税发票并生成结构化数据的解决方案。

这就是今天我们要解析的发票
1. 什么是 LlamaIndex 编程框架?
LlamaIndex 是一个用于构建上下文增强型大模型应用的编程框架,它让使用大语言模型(LLMs)变得更加简单高效。
核心功能:
- 1. 数据连接器:从 API、PDF、SQL 等多种来源提取数据。
- 2. 数据索引:将非结构化数据转换为大模型易于处理的中间格式。
- 3. 引擎:提供自然语言接口,包括问答引擎和对话引擎。
- 4. 代理(Agents):通过工具增强的大模型知识工作者,可以执行复杂任务。
- 5. 可观察性与评估:帮助开发者监控和优化模型性能。
在本次发票解析中,LlamaIndex 的 PDF 读取器负责从 PDF 中提取文本,为大模型的处理提供原始数据。
2. 什么是 Pydantic?它跟结构化输出有什么关系?
Pydantic 是一个强大的 Python 数据验证和转换库,能够通过类型提示和模型定义,轻松实现复杂数据的验证与序列化。
我们可以通过定义 BaseModel 来构建数据模型,例如发票和发票明细项:
from typing import List
from decimal import Decimal
from datetime import datetime
from pydantic import BaseModel, Field
class InvoiceItem(BaseModel):
description: str = Field(..., description="商品描述")
quantity: float = Field(..., description="数量")
unit_price: Decimal = Field(..., description="单价")
total: Decimal = Field(..., description="总价")
tax_rate: float = Field(..., description="税率")
class Invoice(BaseModel):
invoice_number: str = Field(..., description="发票编号")
date: datetime = Field(..., description="开票日期")
vendor_name: str = Field(..., description="供应商名称")
vendor_address: str = Field(..., description="供应商地址")
total_amount: Decimal = Field(..., description="总金额")
tax_amount: Decimal = Field(..., description="税额")
items: List[InvoiceItem] = Field(default_factory=list, description="发票明细")
Pydantic 的模型定义为结构化输出提供了明确的模板,让大模型生成的结果能够直接映射为 JSON 数据,便于后续分析和处理。
3. 我们的程序是如何分析增值税电子发票的?
3.1 实现步骤
解析一张发票并生成结构化输出的完整流程包括以下 5 个步骤:
- 1. 创建 Pydantic 数据模型:定义发票和明细项的结构。
- 2. 创建结构化 LLM:结合 Pydantic 模型和大模型,使其能够生成结构化输出。
- 3. 加载文件数据:使用 LlamaIndex 的 PDF 读取器提取发票内容。
- 4. 使用大模型分析数据:通过大模型理解发票文本内容并提取关键信息。
- 5. 生成 JSON 输出:将结果转换为 JSON 格式。
3.2 程序实现
以下是核心代码的简化版本:
from llama_index.readers.file import PDFReader
from llama_index.llms.azure_openai import AzureOpenAI
from models import Invoice # 引入我们定义的 Pydantic 模型
import json
# 读取 PDF 文件
pdf_reader = PDFReader()
documents = pdf_reader.load_data(file="path/to/invoice.pdf")
# 初始化 LLM
llm = AzureOpenAI(api_key="your_key", engine="deployment_name")
# 创建结构化 LLM
sllm = llm.as_structured_llm(Invoice)
# 分析 PDF 并生成结构化数据
response = sllm.complete(documents[0].text)
json_response = json.loads(response.text)
# 输出 JSON
print(json.dumps(json_response, indent=2))
3.3 输出结果示例
解析完成后,程序生成如下 JSON 输出:
{
"invoice_number": "60852335",
"date": "2024-12-09T00:00:00",
"total_amount": "81.0",
"vendor_name": "\u5317\u4eac\u5fc5\u80dc\u5ba2\u6bd4\u8428\u997c\u6709\u9650\u516c\u53f8",
"vendor_address": "\u5317\u4eac\u5e02\u4e1c\u57ce\u533a\u65b0\u4e2d\u897f\u88572\u53f7\u65b0\u4e2d\u5927\u53a6301\u5ba4 15300051118",
"items": [
{
"description": "\u9910\u996e\u670d\u52a1",
"quantity": 1.0,
"unit_price": "72.3",
"total": "72.3",
"tax_rate": 6.0
},
{
"description": "\u7eb8\u5236\u54c1 PH\u5305\u88c5\u76d2",
"quantity": 1.0,
"unit_price": "2.09",
"total": "2.09",
"tax_rate": 13.0
},
{
"description": "\u7269\u6d41\u8f85\u52a9\u670d\u52a1 \u914d\u9001\u8d39",
"quantity": 1.0,
"unit_price": "1.89",
"total": "1.89",
"tax_rate": 6.0
}
],
"payment_terms": "N/A",
"tax_amount": "4.72"
}

每一项内容都被精确地解析和映射到 Pydantic 模型中。
4. 结论
本次发票解析案例展示了大模型在处理非结构化文本到结构化数据转换中的强大能力。通过结合 LlamaIndex 和 Pydantic,我们不仅能快速解析中文增值税电子发票,还能生成标准化的 JSON 数据格式,便于后续分析与集成。
优势
- - 高效性: 通过预定义模型和大模型能力,减少了复杂规则的编写。
- - 通用性: 方法适用于发票、合同、收据等多种文档类型。
- - 可扩展性: 支持多语言发票解析及与 ERP 系统集成。
局限性与展望
当前方法对标准格式发票效果最佳,但对格式不规范或模糊文本的适配能力仍有改进空间。未来,我们计划扩展对多语言、多行业发票的支持,并进一步优化处理速度和准确性。
希望本篇文章能为从事发票自动化处理的开发者提供实用思路【本文源码下载添加获取】
如何学习AI大模型?
作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】【本文源码下载添加获取】
一、全套AGI大模型学习路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

二、640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

三、AI大模型经典PDF籍
随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

四、AI大模型商业化落地方案

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。
更多推荐


所有评论(0)