Solon ReActAgent 落地发票识别与智能报销
业务方案1.1 目标拍照后自动识别并填单常见合规规则自动校验重复报销可拦截异常单附上下文转人工1.2 流程改造改造前员工贴发票 → 填写报销单 → 主管审批 → 财务初审 → 财务复审 → 出纳打款改造后员工拍照上传 → Agent 识别填单合规检查 → 主管审批 → 通过后打款↓异常 → 人工介入附检查摘要二、技术落地ReActAgent 实现说明这是典型业务闭环正确入口是 ReActAgent 领域工具 HITL。不要使用虚构的 implements Tool、Harness.call()、AiInterceptor、memory.search()。2.1 模块结构com.example.finance/├── tools/│ ├── OcrTools.java # 发票 OCR│ ├── ComplianceTools.java # 合规与重复报销检查│ └── PaymentTools.java # 打款执行├── hitl/│ └── FinanceHitlController.java # 超标/异常审批└── ReimbursementAgentApp.java2.2 工具定义真实 APIimport org.noear.solon.ai.annotation.ToolMapping;import org.noear.solon.ai.chat.tool.AbsToolProvider;import org.noear.solon.annotation.Param;/** 发票 OCR 工具 */public class OcrTools extends AbsToolProvider {ToolMapping(description “识别发票图片返回发票代码、号码、日期、金额、购买方、销售方等字段”)public String ocr_invoice(Param(description “发票图片 base64 或文件 ID”) String imageRef) {// 生产环境调用 OCR 服务return “”{“code”:“044001900111”,“number”:“12345678”,“date”:“2026-06-18”,“amount”:1200.00,“tax”:72.00,“total”:1272.00,“buyer”:“某某科技有限公司”,“seller”:“某某酒店”,“category”:“住宿”}“”;}}/** 合规检查工具 */public class ComplianceTools extends AbsToolProvider {ToolMapping(description “检查发票真伪、抬头、是否重复报销返回合规结论”)public String check_invoice(Param(description “发票号码”) String invoiceNo,Param(description “购买方名称”) String buyer,Param(description “价税合计”) double total) {// 生产环境税务查验接口 已报销库查询 公司抬头校验if (“12345678”.equals(invoiceNo) total 0) {return “”{“invoiceNo”:“12345678”,“titleOk”:true,“duplicate”:false,“taxVerified”:true,“result”:“PASS”,“message”:“合规检查通过”}“”“;}return “””{“result”:“REJECT”,“message”:“发票校验失败请转人工”}“”;}ToolMapping(description 按费用类别检查是否超过公司报销标准) public String check_policy( Param(description 费用类别如住宿/交通/餐饮) String category, Param(description 金额) double amount) { if (餐饮.equals(category) amount 400) { return {\result\:\OVER_LIMIT\,\limit\:400,\amount\: amount ,\message\:\餐饮超标准需主管确认\}; } return {\result\:\OK\,\message\:\符合标准\}; }}/** 打款工具敏感操作 */public class PaymentTools extends AbsToolProvider {ToolMapping(description “提交报销打款。仅在合规通过且审批完成后调用”)public String submit_payment(Param(description “报销单号”) String reportId,Param(description “收款人”) String employee,Param(description “打款金额”) double amount) {return “{“status”:“submitted”,“reportId”:” reportId “”,“employee”:“” employee “”,“amount”: amount “}”;}}2.3 组装报销 Agentimport org.noear.solon.ai.agent.AgentSession;import org.noear.solon.ai.agent.react.ReActAgent;import org.noear.solon.ai.agent.react.intercept.HITLInterceptor;import org.noear.solon.ai.agent.session.InMemoryAgentSession;import org.noear.solon.ai.chat.ChatModel;ChatModel chatModel LlmUtil.getChatModel();HITLInterceptor hitl new HITLInterceptor().onTool(“submit_payment”, (trace, args) - {// 打款一律人工确认也可按金额阈值判断return “报销打款需财务确认”;});ReActAgent agent ReActAgent.of(chatModel).role(“”你是企业智能报销助手。处理步骤1. 先 OCR 识别发票2. 再做合规检查真伪/抬头/重复报销3. 再检查费用标准4. 全部通过后生成报销摘要需要打款时调用 submit_payment5. 任一检查失败明确列出原因并建议转人工“”).defaultToolAdd(new OcrTools()).defaultToolAdd(new ComplianceTools()).defaultToolAdd(new PaymentTools()).defaultInterceptorAdd(hitl).modelOptions(o - o.temperature(0.0)).maxTurns(12).autoRethink(true).build();AgentSession session InMemoryAgentSession.of(“expense_report_001”);String prompt “”员工张三提交差旅报销部门销售部。已上传 1 张住宿发票图片文件 IDimg_001。请完成识别、合规检查并在可打款时提交支付。“”;String result agent.prompt(prompt).session(session).call().getContent();2.4 重复报销怎么做不要虚构 Memory memory; memory.search(…)。正确做法在 check_invoice 工具内部查“已报销发票库”DB/Redis报销成功后由支付/归档服务把发票号写入已报销库下次再报同一票号时工具直接返回 duplicatetrue// check_invoice 内部伪代码if (reimbursedInvoiceRepository.exists(invoiceNo)) {return “{“result”:“REJECT”,“message”:“该发票已被报销过”}”;}2.5 超标场景当 check_policy 返回 OVER_LIMIT 时Agent 不应直接打款应生成摘要给主管若你希望“超标也允许打款但必须审批”可在 HITL 策略里根据参数返回审批原因HITLInterceptor hitl new HITLInterceptor().onTool(“submit_payment”, (trace, args) - {double amount Double.parseDouble(args.get(“amount”).toString());if (amount 2000) {return “单笔报销超过 2000需财务负责人审批”;}return “常规报销打款确认”;});三、业务效果定性录入从手工填单变成 OCR 自动填字段合规检查可覆盖全量票据而不是抽检重复报销可在工具层硬拦截财务从“逐张核对”转向“异常复核”真实处理示例员工上传差旅住宿发票Agent 链路ocr_invoice(img_001) → 金额 1,272类别住宿check_invoice → PASScheck_policy(住宿, 1272) → OKsubmit_payment → HITL 挂起财务批准后续传完成打款提交若餐饮票 500 元、标准 400 元OCR 成功合规通过check_policy 返回超标准Agent 输出“需主管确认超标 100 元”不直接打款四、同类场景扩展业务场景 核心工具 关键规则 业务价值采购发票校验 发票识别 订单匹配 三单匹配 对账效率提升备用金核销 发票识别 预算查询 超标预警 核销周期缩短客户开票 开票 API 商品匹配 额度控制 降低开票错误凭证生成 发票识别 科目映射 借贷平衡 制证提速进项税认证 发票识别 税务接口 可抵扣判断 减少人工认证五、落地建议先做自动填单 人工确认准确率稳定后再放开自动提交

相关新闻

六自由度航空模拟平台:高保真地面仿真 赋能航空训练与测试提质增效

六自由度航空模拟平台:高保真地面仿真 赋能航空训练与测试提质增效

六自由度航空模拟平台:高保真地面仿真 赋能航空训练与测试提质增效 随着民用航空、通用航空及无人机产业的快速发展,飞行人才培养、机载设备研发验证的需求持续攀升。传统航空训练与测试高度依赖真机试飞,不仅运营成本高昂、受气象空域条件限制严格,还存在一定的安全风险;…

2026/10/14 18:24:02 阅读更多 →
Nginx location与proxy_pass配置详解与实战技巧

Nginx location与proxy_pass配置详解与实战技巧

1. Nginx location与proxy_pass基础概念解析 在Nginx配置中,location和proxy_pass是两个最核心的指令,它们共同构成了反向代理的基础架构。location用于匹配客户端请求的URI路径,而proxy_pass则负责将匹配到的请求转发到后端服务器。 locati…

2026/10/18 3:24:33 阅读更多 →
CentOS 7下Java技术栈环境搭建与配置指南

CentOS 7下Java技术栈环境搭建与配置指南

1. 环境准备与基础组件安装在搭建这套技术栈之前,我们需要先准备好基础环境。我选择CentOS 7作为操作系统平台,因为它兼具稳定性和广泛的社区支持。以下是基础组件的安装步骤:1.1 JDK安装与配置Java环境是整个技术栈的基础,这里我…

2026/10/19 2:38:49 阅读更多 →

最新新闻

开箱即用的 diff 级代码审查 CLI 工具设计与实践

开箱即用的 diff 级代码审查 CLI 工具设计与实践

1. 项目概述:一个真正“开箱即用”的代码审查 CLI 工具,不是概念演示,而是每天能塞进你 Git 提交流程里的硬核助手“open-code-review”这个名字乍看平平无奇,但拆开来看,每个词都踩在当下工程效能的痛点上。“open”不…

2026/10/19 3:42:16 阅读更多 →
open-code-review:面向 Git 变更的 CLI 代码审查协作者

open-code-review:面向 Git 变更的 CLI 代码审查协作者

1. 这不是又一个“AI代码审查”玩具:open-code-review 的真实定位与设计哲学 你肯定见过太多打着“AI代码审查”旗号的工具——点开网页,粘贴几行代码,等三秒,弹出几条泛泛而谈的“建议”,比如“变量名可以更语义化”…

2026/10/19 3:42:16 阅读更多 →
开源CLI代码审查工具:可审计、可定制的LLM增强型质量保障方案

开源CLI代码审查工具:可审计、可定制的LLM增强型质量保障方案

1. 项目概述:这不是又一个“AI写代码”玩具,而是一套可嵌入真实开发流水线的开源代码审查协作者“open-code-review”这个名字乍看平平无奇,但拆开来看——open(开源)、code(代码)、review&…

2026/10/19 3:42:16 阅读更多 →
AI原生应用的内容生成全链路:从意图识别到质量保障与成本优化

AI原生应用的内容生成全链路:从意图识别到质量保障与成本优化

最近帮一个内容团队梳理技术方案,对方把预算几乎全部压在"调用大模型"这一项上,觉得只要选一个足够聪明的模型,内容生成就解决了。我在他们那份方案旁边补了整整三页注释:意图解析怎么做、生成结果谁来校验、用户反馈怎…

2026/10/19 3:42:16 阅读更多 →
基于协同过滤的电影推荐系统:SpringBoot+Vue3+MyBatis全栈实战

基于协同过滤的电影推荐系统:SpringBoot+Vue3+MyBatis全栈实战

做推荐系统这件事,很多人第一反应是"算法很难"。但当我真正把一个 Java SpringBoot Vue3 MyBatis 的协同过滤电影推荐系统,从前端页面到后端算法完整跑通之后,最大的体会是:算法本身就是整个项目里相对好啃的部分&…

2026/10/19 3:42:16 阅读更多 →
AI辅助编写教材:从查重原理到个性化改写的完整实战

AI辅助编写教材:从查重原理到个性化改写的完整实战

很多人第一次拿到AI生成的教材初稿时,心里其实是犯嘀咕的:内容看起来像那么回事,但送去查重一测,重复率愣是能冲到百分之四五十,个别段落甚至被标红一大片。这其实是AI写教材最常见的翻车现场,也是这篇文章…

2026/10/19 3:41:16 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →