1. 项目缘起:为什么一家千人集团决定把财务流程交给 AI
1.1 一个典型的“大而不强”财务中台困境
这家集团的情况很有代表性:1000 人左右的规模,旗下 10 家独立法人主体,横跨贸易、制造、服务三个板块。财务共享中心一共 18 个人,要同时应付 10 套账、10 套税务申报口径、10 套内部管理报表。每个月 1 到 10 号是雷打不动的“关账地狱”,加班到凌晨是常态,最夸张的一次因为一家子公司的进项发票漏认证,导致整个集团增值税申报差点逾期。
我介入这个项目的时候,财务总监给我看了一张表:六个核心流程——费用报销审核、应收对账、应付发票处理、银行流水勾稽、税务预申报数据准备、管理报表合并——每个月光是人工重复操作的时间就超过 400 小时。注意,这 400 小时里绝大部分不是“判断”,而是“搬运”:从 A 系统导出,按 B 规则清洗,再录入 C 系统。这种活儿人干久了会麻木,麻木就会出错,出错就要返工,返工又挤占判断类工作的时间,形成恶性循环。
1.2 为什么是“智能体”而不是传统 RPA
一开始团队里有人提议上 RPA(机器人流程自动化)。我否掉了,原因很直接:RPA 是“照着脚本点鼠标”,它假设界面不变、规则不变、数据格式不变。但财务场景恰恰是规则高频变化的——税率调整、科目体系升级、供应商开票习惯变化、银行回单格式改版,任何一个小变动都能让一条 RPA 流程当场报废,维护成本比省下来的人力还高。
我们最终选的是基于 LLM 的财务智能体(Agent)架构。核心区别在于:RPA 是“执行固定动作”,Agent 是“理解目标后自主编排动作”。举个具体例子,同样是处理一张差旅报销单,RPA 只能判断“金额是否小于 5000”,而 Agent 能读懂发票上的行程、比对出差申请单的目的地、判断住宿标准是否符合该员工的职级、甚至识别出“同一张出租车票重复提交”这种语义层面的异常。
这里要澄清一个常见误解:Agent 不是要取代财务人员,而是把财务人员从“操作员”升级为“审核员和规则制定者”。人负责定义什么是“对”,Agent 负责在海量数据里把“不对”的挑出来。这个定位一旦跑通,18 个人的共享中心可以支撑 30 家主体的核算量,这才是老板真正想要的杠杆。
1.3 六个流程的优先级排序逻辑
不是所有流程都适合第一批上 Agent。我们排优先级用了三个维度打分:规则明确度、数据可得性、出错代价。规则越明确、数据越容易拿到、出错代价越高的,越优先上。
| 流程 | 规则明确度 | 数据可得性 | 出错代价 | 优先级 |
|---|---|---|---|---|
| 费用报销审核 | 高 | 高 | 中 | P0 |
| 应付发票处理 | 高 | 高 | 高 | P0 |
| 银行流水勾稽 | 中 | 高 | 高 | P1 |
| 应收对账 | 中 | 中 | 中 | P1 |
| 税务预申报准备 | 中 | 中 | 极高 | P2 |
| 管理报表合并 | 低 | 中 | 中 | P2 |
P0 的两个流程先上,跑稳了再往 P1、P2 推。这个顺序很重要,因为智能体的信任是一步步建立的,你不可能第一天就让 AI 去碰税务申报,但你可以让它先帮你审报销单,审对了三个月,财务团队自然就愿意让它碰更核心的东西。
2. 整体架构设计:财务智能体到底长什么样
2.1 四层架构:从数据源到决策输出
整套系统我把它拆成四层,这个分层方式是我踩过坑之后定下来的,每一层职责必须清晰,否则后期维护会变成一团乱麻。
第一层是数据接入层。集团的数据散在四个地方:用友 NC 的财务账、某 SaaS 报销系统、银行网银导出的流水、还有一堆供应商发来的 PDF 发票。这一层的任务就是把这些异构数据统一成结构化格式。我们用了 OCR 做发票识别,用定时任务拉银行流水,用 API 对接报销系统,NC 那边因为接口老旧,最后是用数据库直连加视图的方式解决的。
第二层是知识与规则层。这是整个系统的大脑,也是最能体现“财务专业性”的地方。我们把集团的费用报销制度、供应商准入规则、科目对照表、税务口径说明全部结构化成了知识库。注意,这里不是简单地把 PDF 丢给大模型,而是人工拆解成一条条可执行的规则,比如“住宿费标准:总监级 800 元/晚,经理级 500 元/晚,普通员工 350 元/晚,超标部分需附说明”。
第三层是智能体编排层。这一层跑的是 Agent 框架,每个财务流程对应一个或多个 Agent。Agent 的职责是:接收任务、调用工具(查知识库、查历史数据、调计算函数)、做出判断、输出结果。我们用的是主流的 Agent 框架,支持多 Agent 协作——比如应付发票处理流程里,一个 Agent 负责验真,一个负责三单匹配(采购单、入库单、发票),一个负责异常上报。
第四层是人工复核与反馈层。这一层绝对不能省。所有 Agent 的输出都先进入“待复核队列”,财务人员确认或修正后,修正结果会回流到知识库,形成闭环。没有反馈闭环的 Agent 系统,用三个月就会退化成一堆没人敢信的自动化脚本。
2.2 为什么选择“规则引擎 + LLM”混合架构
纯 LLM 方案我们试过,问题很明显:幻觉。你问它“这张发票能不能抵扣”,它可能给你一个听起来很有道理但完全错误的答案。财务场景对准确率的要求是 99.9% 以上,纯 LLM 达不到。
纯规则引擎也试过,问题是僵化。财务规则有大量“例外情况”,比如“原则上超标不报,但如果是客户临时改行程导致的,可以特批”。这种规则用 if-else 写会写出几百行,维护噩梦。
最后的方案是混合:确定性判断走规则引擎,模糊判断走 LLM。比如“发票金额是否等于报销单金额”这种,规则引擎一秒搞定;“这张发票的摘要描述和报销事由是否匹配”这种,交给 LLM 做语义判断。两者结合,准确率能到 99.5% 以上,而且每条判断都有据可查。
2.3 多 Agent 协作的通信机制
六个流程不是六个孤立的 Agent,它们之间有数据依赖。比如应付发票处理完,结果要传给银行流水勾稽做付款匹配;费用报销审核完,数据要进管理报表合并。
我们用的是消息队列 + 共享状态的方式。每个 Agent 处理完自己的任务后,把结果写到一个共享的“流程状态表”里,下一个 Agent 从表里读。这样做的好处是解耦——某个 Agent 挂了,不影响其他 Agent 继续跑,恢复后从状态表里接着处理就行。
这里有个坑要提醒:Agent 之间的数据格式必须严格约定。我们一开始没定 schema,结果应付 Agent 输出的金额是字符串,勾稽 Agent 期望的是数字,跑了一周才发现对不上。后来强制所有 Agent 输出 JSON schema,并且加了校验层,才彻底解决。
3. 六个流程的落地实操:从报销审核到报表合并
3.1 费用报销审核:从 3 天到 4 小时
这是第一个上线的流程,也是最容易看到效果的。原来的流程是:员工提交报销单 → 财务人工审核发票真伪、金额、标准 → 有问题退回 → 没问题进入付款队列。平均一单耗时 3 天,月底高峰期能拖到一周。
Agent 上线后的流程变成:员工提交 → Agent 自动审核(发票验真、金额比对、标准校验、重复提交检测)→ 无异常直接进入付款队列,有异常才推给人工。80% 的报销单实现了“提交即通过”,剩下 20% 有异常的才需要人工介入。
具体实现上,Agent 做了这几件事:
- 发票验真:调用税务接口验真,同时用 OCR 提取发票代码、号码、金额、日期,和报销单做比对。
- 标准校验:根据员工职级和出差城市,查知识库里的住宿标准、餐补标准,判断是否超标。
- 重复检测:把发票号码做哈希,和历史报销记录比对,防止一票多报。
- 语义匹配:用 LLM 判断发票的“货物或应税劳务名称”和报销事由是否一致,比如报销“办公用品”但发票开的是“餐饮”,就会触发预警。
实操心得:发票验真接口有频率限制,我们一开始没做限流,结果高峰期被限流导致大量报销单卡住。后来加了本地缓存(同一张发票 24 小时内只验一次)和队列重试机制,才稳定下来。
3.2 应付发票处理:三单匹配的自动化
应付流程的核心是“三单匹配”——采购订单、入库单、发票三者信息一致才能付款。原来这是纯人工比对,一个会计一天最多处理 80 张发票,还容易看花眼。
Agent 的处理逻辑是:
- 从发票 OCR 结果里提取供应商名称、金额、税额、商品明细。
- 根据供应商名称去采购系统里找对应的采购订单。
- 根据采购订单号去仓储系统里找入库单。
- 三方比对:数量、单价、金额是否一致。
- 一致则生成付款申请,不一致则标记差异类型(数量差异、价格差异、时间差异)推给人工。
这里最麻烦的是供应商名称不规范。同一个供应商,发票上可能写“XX科技有限公司”,采购系统里写“XX科技”,仓储系统里写“XX”。我们用了模糊匹配加人工确认的方式,把 Top 200 供应商做了名称映射表,覆盖率到了 95%。
3.3 银行流水勾稽:从“大海捞针”到“自动对号”
银行流水勾稽是财务最烦的活儿之一。10 个主体、20 多个银行账户,每天几百条流水,要一条条和账上的收付款记录对上。原来两个人专门干这个,一天下来眼睛都花了。
Agent 的做法是:拉取银行流水 → 提取关键字段(日期、金额、对方户名、摘要)→ 在财务系统里找匹配的收付款记录 → 匹配成功则自动核销,匹配失败则进入“待认领”队列。
匹配规则我们设了三层:
- 精确匹配:金额、日期、对方户名完全一致,直接核销。
- 模糊匹配:金额一致,日期差 1-2 天,对方户名相似度 80% 以上,标记为“疑似匹配”,人工确认。
- 智能推荐:金额一致但其他信息都对不上,Agent 会根据历史匹配记录推荐最可能的候选,人工选择。
上线后,自动核销率到了 75%,剩下 25% 里有一半是“疑似匹配”只需人工点确认,真正需要人工找的不到 10%。
3.4 应收对账:客户欠款一目了然
应收对账的难点在于客户回款和发票的对应关系。一个客户可能这个月付了 50 万,但这 50 万对应的是哪几张发票?原来靠会计翻记录,一个客户对下来半小时。
Agent 的逻辑是:拉取客户回款记录 → 拉取该客户所有未核销发票 → 按“先到期先核销”原则自动匹配 → 生成对账单 → 推送给客户确认。
这里有个细节:部分客户会要求“指定发票核销”,比如“我这 50 万是付 3 月份那两张发票的”。Agent 支持人工指定,指定后自动重新计算余额。
3.5 税务预申报:数据准备从 2 天到 2 小时
税务申报是出错代价最高的流程,所以我们把它放在 P2,等前面几个流程跑稳了才上。Agent 在这里的角色不是“申报”,而是“数据准备”——把申报需要的进项、销项、税额数据从各个系统里抽出来,按税务口径整理成申报表草稿。
具体做了三件事:
- 进项发票归集:从发票池里筛选出可抵扣的进项发票,按税率分类汇总。
- 销项发票归集:从开票系统里拉取销项发票,按税率分类汇总。
- 差异预警:比对财务账上的收入和申报表上的收入,差异超过阈值就预警。
注意:税务申报的最终提交必须由人工完成,Agent 只做数据准备。这是合规红线,不能碰。
3.6 管理报表合并:10 家主体的数据自动汇总
管理报表合并的难点在于科目体系不一致。10 家主体用的科目表有差异,有的用“管理费用-办公费”,有的用“管理费用-行政开支”,合并时要先做科目映射。
Agent 的做法是:维护一张科目映射表 → 从各主体拉取报表数据 → 按映射表转换科目 → 自动抵消内部交易 → 生成合并报表草稿。
内部交易抵消是最复杂的,因为要识别“A 公司卖给 B 公司的交易”。Agent 通过比对往来科目余额和交易流水来识别,识别不出来的推给人工。
4. 踩过的坑与排查技巧实录
4.1 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| Agent 输出格式错乱 | LLM 幻觉或 prompt 不稳定 | 检查 prompt 模板和输出 schema | 加输出校验层,格式不对自动重试 |
| 发票验真失败率高 | 接口限流或发票信息提取错误 | 查看接口返回码和 OCR 置信度 | 加缓存、加限流、低置信度转人工 |
| 三单匹配率低 | 供应商名称不规范 | 统计匹配失败案例 | 建名称映射表,定期更新 |
| 银行流水漏勾稽 | 流水格式变化 | 对比新旧流水格式 | 加格式校验,变化时告警 |
| Agent 响应慢 | 并发太高或知识库查询慢 | 看日志里的耗时分布 | 加缓存、优化知识库索引 |
4.2 三个必须避开的坑
第一个坑:知识库不做版本管理。我们一开始把财务制度直接丢进知识库,后来制度改了,Agent 还在用旧规则,导致一批报销单审错了。后来加了版本管理,每次制度更新都生成新版本,Agent 明确指定用哪个版本。
第二个坑:没有人工复核兜底。有段时间我们太信任 Agent,把复核环节省了,结果一张重复报销的发票被放过去了,金额不大但性质严重。后来恢复了复核,只是把复核从“全量”改成“抽样 + 异常全量”。
第三个坑:Agent 权限过大。早期 Agent 能直接调付款接口,后来发现如果 Agent 判断错误,可能造成错误付款。现在 Agent 只能生成付款申请,最终付款必须人工点确认。
4.3 让 Agent 越用越聪明的反馈闭环
Agent 上线不是终点,而是起点。我们建了一个反馈闭环:人工复核时如果修正了 Agent 的判断,修正结果会自动记录;每周复盘一次,把高频修正案例转化成新规则或新 prompt;每月更新一次知识库和模型。
这个闭环跑起来后,Agent 的准确率从上线初期的 92% 提升到了 99.3%,人工复核的工作量下降了 70%。
5. 上线三个月后的真实数据与个人体会
5.1 效率提升的量化结果
| 流程 | 上线前月均耗时 | 上线后月均耗时 | 降幅 |
|---|---|---|---|
| 费用报销审核 | 120 小时 | 15 小时 | 87.5% |
| 应付发票处理 | 100 小时 | 20 小时 | 80% |
| 银行流水勾稽 | 80 小时 | 12 小时 | 85% |
| 应收对账 | 60 小时 | 18 小时 | 70% |
| 税务预申报准备 | 40 小时 | 6 小时 | 85% |
| 管理报表合并 | 30 小时 | 8 小时 | 73% |
合计每月节省约 350 小时,相当于释放了 2 个全职人力。但更重要的是质量提升:上线后三个月,报销审核的差错率从 1.2% 降到了 0.1%,银行流水勾稽的遗漏率从 3% 降到了 0.2%。
5.2 财务团队的真实反馈
我印象最深的是共享中心一个做了 8 年应付的老会计说的话:“以前我一天到晚在比对数字,现在我是看 Agent 比对完的结果,把异常的挑出来处理。活儿还是那些活儿,但感觉自己在做判断,不是在当机器。”
这句话点出了财务智能体的真正价值:不是替代人,而是把人从重复劳动里解放出来,去做真正需要专业判断的事。
5.3 后续可以扩展的方向
这套架构跑通后,我们已经在规划下一步:把 Agent 扩展到预算编制、资金预测、成本分析这些更偏“分析”的场景。技术上没有本质障碍,难点在于分析类场景的规则更模糊,对 LLM 的推理能力要求更高。
另外一个小技巧:Agent 的 prompt 要定期“体检”。我们每季度会把 Agent 的判断结果和人工判断做一次全面比对,找出偏差最大的场景,针对性优化 prompt。这个习惯让我们的 Agent 一直保持在“好用”的状态,而不是上线三个月后就没人敢用。