AI Agent + OCR 硬核实战,打造 2B 级智能进销存
在企业级服务(2B)和公共服务的数字化转型中,“进销存”(PSI)系统往往是最枯燥却又最致命的一环。特别是在学校食堂这种**“高客单量、低单价、非标品多、人员素质参差不齐”**的特殊场景下,传统的ERP系统几乎完全失效。
为什么?因为传统系统的数据录入依赖人工。当采购员为了省事,把一堆皱巴巴的、沾着油渍的手写单据一股脑塞给会计时,数据的 “源头污染” 就已经发生了。更不用说其中潜藏的“猫腻”——以次充好、虚报数量、甚至根本不存在的采购记录。
今天,我们不谈空泛的“智慧校园”概念,而是从硬核工程落地的角度,拆解如何利用 Llama-3-Vision(多模态大模型)+ OCR + LangGraph Agent(智能体工作流),构建一套**“零人工录入、全链路审计”**的下一代智能进销存系统。这将是一场从像素到数据库比特的深度清洗。
一、 行业痛点与技术范式转移
传统的食堂进销存管理存在一个著名的“不可能三角”:低成本录入、高数据精度、强合规审计。
- 人工录入:成本低,但精度极差,且容易串通造假。
- 传统 OCR:精度尚可,但对非结构化数据(手写体、模糊图片、非标准表格)无能为力,且无法理解“语义逻辑”(例如:买了10斤猪肉,但单价是市场价的3倍,传统OCR识别出来也不会报警)。
范式转移:我们需要从“识别文字”转向“理解业务”。这不仅仅是 Optical Character Recognition,更是 Semantic Context Understanding(语义上下文理解)。通过引入多模态大模型作为“感知层”,配合 Agent 作为“逻辑层”,我们可以实现从“非结构化图像”直接到“结构化数据库记录”的飞跃。
技术选型对比:为何选择 Llama-3-Vision + LangGraph?
在构建这套系统时,我们对比了市面上主流的三种技术路径:
| 维度 | 方案 A: 传统 OCR (Tesseract/PaddleOCR) | 方案 B: 闭源多模态 API (GPT-4o) | 方案 C: 开源 Llama-3-Vision + Local Deploy |
|---|---|---|---|
| 手写体识别率 | 低 ( < 70%) | 极高 ( > 95%) | 高 ( > 90%) |
| 非标票据容错 | 极差 (版式需固定) | 极强 | 强 (微调后更佳) |
| 数据隐私性 | 高 (本地部署) | 低 (数据需上传云端) | 极高 (完全本地化) |
| 语义纠错能力 | 无 | 极强 | 强 (可接入规则引擎) |
| 部署成本 | 低 | 高 (按 Token 计费) | 中 (一次性硬件投入) |
| 可定制性 | 低 | 低 | 极高 (开源权重) |
对于学校食堂这种涉及未成年人食品安全及公共资金的场景,数据隐私是红线。因此,基于 Llama-3-Vision 的本地化部署方案,配合 LangGraph 进行复杂的逻辑编排,是性价比与安全性最优的平衡点。
二、 系统架构设计:从像素到审计
这套系统的核心不在于“识别”,而在于“校验”。我们设计了双循环 Agent 架构,确保每一条入库数据都经得起推敲。
架构解析:
-
感知层:
- 使用
Llama-3-Vision直接处理图像。相比于传统 OCR 逐字识别,VLM(视觉语言模型)能理解“这是西红柿的单价,这是总价”,并直接输出 JSON。 - 关键点:利用 VLM 的 In-Context Learning(上下文学习)能力,无需训练,仅需 Few-Shot Prompting 即可适应不同供应商的排版。
- 使用
-
逻辑层:
- 这是系统的“大脑”。LangGraph 允许我们定义复杂的状态机。
- 它不仅仅是提取数据,还负责执行逻辑判断:
总价 ≈ 单价 * 数量吗?日期合理吗?
-
合规层:
- 引入外部数据源(如农贸市场指导价)进行实时比对,自动标记异常价格。
三、 硬核实战:Prompt Engineering 与 Agent 逻辑
要让 Llama-3-Vision 准确提取表格数据并不仅是扔一张图进去那么简单。我们需要构造结构化的 Prompt 并结合 Pydantic 进行强类型校验。
1. 视觉大模型的数据提取策略
对于食堂票据,最大的挑战是表格线不清晰甚至无表格线。Llama-3-Vision 展现出了惊人的鲁棒性。
Prompt 设计示例:
SYSTEM: You are an expert auditor for a school cafeteria supply chain.
TASK: Extract item details from the image of the receipt.
CONSTRAINT:
1. If the handwriting is unclear, estimate and flag as 'low_confidence'.
2. Output MUST be valid JSON matching the schema.
3. Calculate the 'unit_price' if only 'total_price' and 'quantity' are present.
SCHEMA:
{
"supplier_name": "string",
"date": "YYYY-MM-DD",
"items": [
{
"name": "string",
"quantity": "float",
"unit": "string (e.g. kg, crate)",
"unit_price": "float",
"total_price": "float"
}
]
}
USER: [Image Data]
2. LangGraph 实现逻辑闭环
单纯提取数据是不够的,我们需要一个 Validator Agent 来清洗数据。LangGraph 的优势在于它可以循环执行任务,直到数据通过校验。
以下是基于 LangGraph 的核心逻辑伪代码:
from langgraph.graph import StateGraph, END
from typing import TypedDict, List
from pydantic import BaseModel, ValidationError
# 定义状态
class AgentState(TypedDict):
image_data: bytes
extracted_json: dict
validation_errors: List[str]
retries: int
def extraction_node(state: AgentState):
# 调用本地部署的 Llama-3-Vision Server
response = llama_vision_client.chat(
model="Llama-3-70B-Vision",
messages=[{"role": "user", "content": state["image_data"]}]
)
return {"extracted_json": response.json()}
def validation_node(state: AgentState):
errors = []
data = state["extracted_json"]
# 规则 1: 数据类型校验
try:
ReceiptModel(**data) # Pydantic 校验
except ValidationError as e:
errors.append(str(e))
# 规则 2: 业务逻辑校验 (价格偏离度)
for item in data['items']:
market_price = get_market_price(item['name'])
if abs(item['unit_price'] - market_price) / market_price > 0.2:
errors.append(f"Warning: {item['name']} price deviation > 20%")
return {"validation_errors": errors}
def should_retry(state: AgentState):
if state["validation_errors"] and state["retries"] < 2:
return "retry"
return END
# 构建工作流
workflow = StateGraph(AgentState)
workflow.add_node("extractor", extraction_node)
workflow.add_node("validator", validation_node)
workflow.add_edge("extractor", "validator")
workflow.add_conditional_edges(
"validator",
should_retry,
{"retry": "extractor", END: END}
)
这段代码展示了一个自愈系统:如果数据提取有误或价格异常,Agent 会自动重试或标记异常,而不是直接入库。
四、 深度防御:对抗“后厨猫腻”的数据策略
技术上实现 OCR 并不难,难的是对抗人性的贪婪。在 2B 级应用中,系统必须具备**“抗欺诈”**能力。
1. 图像溯源与完整性校验
所有上传的票据图片,必须计算 SHA-256 哈希值并上链(或存入不可篡改的日志库)。防止采购员 PS 票据金额。
- 方案:可以实验性使用 C2PA(内容来源和真实性联盟,国内尚未广泛应用)标准,在图像元数据中嵌入数字签名。
2. 异常检测算法
利用历史数据训练一个轻量级的 Anomaly Detection 模型(如 Isolation Forest)。
- 特征维度:采购时间(例如凌晨3点采购生鲜极为异常)、采购频率(一天买3次油不合理)、单品价格波动。
- 输出:风险评分。高于 80 分直接阻断入库,推送到管理员手机。
3. 供应商知识图谱
构建供应商-物品-价格的关联图谱。如果某个供应商突然开始供应其经营范围以外的物品(例如卖调料的突然开始卖海鲜),Agent 会立即触发警报。
| 欺诈场景 | 传统 ERP 表现 | AI Agent 方案 | 防御机制 |
|---|---|---|---|
| 虚报数量 | 无法识别,需人工盘点 | 视觉估算 + 历史消耗对比 | 库存一致性校验 |
| 涂改单价 | 难以肉眼分辨 | 像素级分析墨迹/字体差异 | 图像取证 |
| 重复报销 | 难以跨期检索 | 向量数据库相似度检索 (Cosine Similarity > 0.99) | Semantic Deduplication |
| 甚至没去采购 | 无能为力 | 检查照片 EXIF 中的 GPS/时间戳 | 物理世界锚定 |
五、 总结与展望
通过 Llama-3-Vision 处理非结构化感知,LangGraph 编排复杂逻辑,配合严格的数据合规策略,我们不仅是在做一个进销存系统,而是在构建一个**“数字审计员”**。
这套系统的价值在于:
- 降本:财务人员对账时间减少 90%。
- 增效:库存实时更新,不仅不仅治好了“糊涂账”,更为食堂备菜提供了精准的数据支撑,减少食物浪费。
- 合规:让“猫腻”无处遁形,用技术手段捍卫廉洁。
在 AI 时代,2B 产品的核心竞争力不再是简单的 CRUD(增删改查),而是如何利用 AI Agent 将业务流转化为数据资产。这,才是学校食堂数字化转型的终极答案。
附录:开源仓库与技术引用
为了便于开发者复现,以下是核心依赖的开源项目与文档地址:
-
Llama-3-Vision (Meta Llama 3 Community):
- 注:Meta 官方 Llama 3 主要指文本模型,视觉多模态版本通常基于社区(如 Llava-next 或 LazyLlama)结合 CLIP/SigLIP 实现。推荐使用
Llava-v1.6配合 Llama-3 LLM 权重。 - Hugging Face: https://huggingface.co/collections/meta-llama/meta-llama-3-66214712577ca38149ebb2b6
- Llava (Vision): https://github.com/haotian-liu/LLaVA
- 注:Meta 官方 Llama 3 主要指文本模型,视觉多模态版本通常基于社区(如 Llava-next 或 LazyLlama)结合 CLIP/SigLIP 实现。推荐使用
-
LangGraph (LangChain):
- 用于构建循环、可控的 Agent 工作流。
- GitHub: https://github.com/langchain-ai/langgraph
- Doc: https://langchain-ai.github.io/langgraph/
-
PaddleOCR (备选/辅助):
- 用于预处理或作为传统 OCR 基线对比。
- GitHub: https://github.com/PaddlePaddle/PaddleOCR
-
C2PA (内容凭证标准):
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)