
这不是“教你怎么写个 Agent Demo”的文章,而是一份业务实施纪实:一个 1000 人规模、10 家公司主体、中心集团管控的企业,如何把银行流水、报销付款、开票回款、往来账龄、税负测算、凭证回填这六件最耗人力的财务活儿,从 Excel 搬进对话式智能体,并且真的敢签字用下去。全文以业务实施为主线,工程细节只讲“业务为什么要它”。文中系统截图均已脱敏。
2026 年 9 月 · 实施复盘
目录一、财务卡在哪里二、不改习惯三、上流程四、接系统五、对多账套六、让人敢签七、多 Agent 与安全八、上线与热更新九、收益盘点十、十条军规
先把业务底牌摊开:1000 人规模、10 家公司主体、一个中心集团管控。这意味着每一笔业务都要回答两个问题——归属于哪家公司、走哪套账。这两问,是所有财务痛点的源头。
把 AI 用进财务,和用在别处完全不是一回事。财务对系统提出三个近乎苛刻的要求:
所以我们一开始就定下一条原则:LLM 负责理解和整理,规则负责口径和校验,人类负责拍板,流程引擎负责把三者串成一个可回放的确定性过程。
在这个规模上,财务团队的日常是这样的:银行流水导出成 Excel 手工归类;报销单在钉钉审批完,导出再整理成付款模板;开票台账靠人对着回款记录一行行核;凭证更是“把单据抄进财务软件”。六个流程,六个 Excel,六套口径。
团队并不是没用过 AI。他们此前已经在用一个对话式助手(内部管它叫 workbody)处理简单表格——洗数、汇总、找差异,确实快。但很快撞上三堵墙:
天花板 | 业务原话(意译) | 后果 |
|---|---|---|
一次性 | “今天教会它的口径,明天还得再讲一遍” | 口径无法沉淀,每次都要重新交代 |
不可审计 | “它说是这样算的,但我没法证明给审计看” | 结果不敢直接用于对外报送 |
接不上系统 | “钉钉的单子要导出来喂给它,有成里的账套它又看不见” | 手工搬运成了新的成本 |
结论很清楚:业务需要的不是“更聪明的聊天”,而是一个能接系统、留痕迹、守口径、可回放的程序。这就是整个项目的起点。

登录页即产品说明书:开票回款对账、报销付款、往来挂账、税负测算、凭证填充、银行流水——六大场景,同一套流程引擎。
拿到需求后,最容易被忽略、也最贵的一个决策是:交互形态要不要改?
技术直觉会说“做个表单系统、做个工作台”。但放到 1000 人的组织里算账:换一种交互方式 = 换一次全员肌肉记忆,培训、推广、抵触的成本,远大于功能本身的收益。而且这些人已经在用对话式 AI 了——“聊天”就是他们最熟的入口。
所以我们把程序藏进了对话框:

执行交互台:资金日报、报销直付、业财对账、往来管家、税务雷达、凭证引擎等场景入口;左侧每个会话都是一条流程实例。

左侧任务列表:状态徽标直接映射流程实例状态。这条列表的加载耗时从 17 秒优化到 2~4 秒(见第九章)。
业务侧的感受是: 动作从“打开 Excel → 找模板 → 复制粘贴 → 检查”变成“说一句话 → 在确认卡上点一下 → 下载产物”。学习成本几乎为零。
六个场景长得完全不一样,但每一套口径都是从财务同事嘴里一条条抠出来的:
场景 | 业务动作 | 一条典型口径 |
|---|---|---|
银行流水 | 流水转换、资金日报归集 | 按收支归类并对上资金日报模板,无收款账户的单据照常出表并提示 |
报销付款 | 生成付款模板 | 只取“待支付”单据,同一单号多行明细合并为一行,输出 15 列付款模板 |
开票回款对账 | 开票台账 + 回款匹配 | 仅纳入“审批通过且已结束”的开票申请,用资金日报收款记录回填回款时间 |
往来账龄 | 超期预警、异常台账 | 按账期分档出超期清单,月末推送 |
税负测算 | 四率指标测算 | 从资产负债表推导,输出税负率与预警 |
凭证回填 | 生成记账凭证 | 一票一凭证;保险费要“缴纳 + 月末计提”两步分录 |
这些口径,没有一条是研发能自己想出来的。
六大财务场景加上员工报销、费用审批、月结,共 9 条业务流程定义、92 个活动节点(凭证回填 11 个节点、银行流水 12 个节点、开票回款对账 13 个节点)。它们全长在同一套骨架上——以银行流水(bs)为例:

HUMAN 门(蓝)、LLM 活动(绿)、规则节点(橙)、审计/报告(白)四色分工,六场景同构。统一范式最大的好处是能力只做一遍:进度推送、人工确认、审计报告、产物下载,九个流程共享同一套实现。
下面这张图是银行流水流程的真实运行现场——用户只说了一句话,系统就识别出场景、拆好了步骤,并在“上传门”上停下来等人:

一条消息拉起整条流程:意图识别 → 歧义消解(HUMAN 卡)→ 任务步骤条 2/2 步 → 上传门「请上传银行流水文件」;左下角还挂着“291 秒后超时(需人工处理)”的兜底倒计时——没人接手也不会卡死。
每个人都能看见流程走到哪一步:

任务步骤面板展开到节点级(bs_intent_disambiguate → bs_query_records …)。业务不需要懂流程引擎,但能随时确认“卡在谁那里”。
“接不上系统”是旧工具的第一大死因。这一步要解决的是:让智能体自己会取数。
两条集成链路:
setOfBooksId),并按各公司账套取权威的科目与客户档案——模板是手工导出的快照,会过期;接口取的是当下值。两条链路最终汇入同一条转换管线,手工上传 Excel、钉钉拉取、有成同步三种入口,出来的付款模板完全一致。
集成最怕“等接口开通”。有成接口还没批下来时,我们用结构与真实返回完全一致的本地数据把全流程跑通——业务可以先验收“流程对不对、模板对不对”,等接口开通,改一个配置就切真实联调,流程和数据结构都不用动。

“已从有成导入昨日单据,生成付款模板成功”:同步单据笔数、待支付笔数(状态口径 = 5)、付款行数、模板 ID、下载链接,以及“可继续:下载付款模板 / 查询付款记录 / 查看有成同步单据”三个下一步按钮。左下角能看到同一实例上并行跑着多条流程(报销付款、银行流水、税负测算、往来账龄…)。
这是“集团 + 多主体”最硬的地方,也是 AI 最容易翻车的地方。
为保护商业信息,本节起对 10 家主体统一以 A~H 公司代称。
公司识别靠支付账户/单据里的关键词匹配,先命中先返回。而真实公司名天生重叠:
顺序写错,就会把分公司的账记进母公司账套——模板、银行科目、辅助核算全错。所以关键词表的顺序即优先级,并在代码注释里写明了顺序理由。
差异点 | 事实 | 后果 |
|---|---|---|
职员明细科目 | B/E/C/A 公司账套设了 122101 职员;H/G/F/D 公司没有 | 前者落 122101 + 员工,后者必须落 1221 其他应收款 + 客户,照别家抄就导入失败 |
贷方银行科目 | A 公司 = 银行 A 支行;H 公司 = 银行 B 支行;G/D 公司账套直接以 1002 银行存款 核算 | 只能按公司各取各的银行明细科目 |
费用科目编码 | 编码随账套改版会变(如账套里 560205 已是水电费、560211 才是差旅费) | 所以只登记科目名,编码按“本公司账套科目表”实时解析 |
辅助核算 | 部分科目要求“项目 + 职场”成对齐全,只填其一必报错 | 职场统一填档案项「无」,项目按 客户→地区→摘要 三级匹配 |
已知局限(如实告知业务):E/C/B 公司账套有多个银行明细科目(账号不同),而模板只给科目名称、没有“账号 → 明细科目”对照表,目前统一落基本户。这条局限我们写进了代码注释,也写给了业务:要精确到账号级落科目,需业务提供账号对照表。
报销人在钉钉提单、财务审核、出纳付款、会计做账——四个角色看到的是同一份数据的四个切面。这直接决定三件事的设计:
finance-system 这类系统身份——必须在系统边界处统一,否则“流程启动人”都写不进去;这一幕的体会:业务视角里没有“技术难点”,只有“能不能用、敢不敢签”。上面每一条,用户给的评价标准只有一个——“算得对不对”。
流程里所有关键决策都设计成人工确认节点。但纯人工会话会“哑火”——用户一句“好的继续”,到底走哪个分支?我们给人工门设计了三个放行口,严格程度递减:
模糊一律挂起、超时一定兜底——这是“敢签字”的前提。会话里的确认卡就是这些留痕的落点:

顶部是用户诉求横幅,消息流里是系统的确认卡。每一次确认/拒绝都是一条可回放的记录。
早期业务口径(科目映射、模板列、阈值、审计要点)全部硬编码在系统提示词里,改一个映射要改代码重新发版。后来我们把口径全部外置成 JSON 文件,运行时加载注入:
voucher-fill-rules.json(凭证口径)、reimburse-pay-rules.json(付款模板)、tax-burden-rules.json(税负)、youcheng-openapi-catalog.json(有成接口目录)等十余个文件;真正的价值是协作方式的改变:财务专家可以直接打开口径文件 review 并提修改意见,不用隔着 prompt 字符串和研发排期对话。
流程跑完不等于交付完成。财务要的是能下载、能编辑、能存档的产物,所以我们做了三件事:
producedOutputs=["auditReport"],引擎按声明统一生成 .md + .json 双格式审计报告,推 flow_artifact 事件——覆盖全部财务流程,不需要每个场景各写一遍;
产物横幅带文件名与生成时间(如「往来挂账异常·2026年09月.xlsx 09-27 23:57」),任务步骤显示“4/4 步完成·本轮完成”。左侧列表里同一实例上并行运行着开票回款、报销付款、税负测算、往来账龄等多条流程。
审计报告的内容模板同样来自业务口径:流程名、实例 ID、执行结论、关键统计、校验要点、风险待补、产物清单、证据链接。财务同事第一次拿到自动生成的对账审计报告时说了一句:“格式比我手写的还全。”
必须承认现实约束:没有“停下来重建三个月”的奢侈。业务每天在跑,报销每天在付,我们只能在飞行中换引擎。
“边修飞机”能成立,靠三条护栏:
再配上一组“保险丝”,让流程不会自己转晕:同一条回环边在同一纪元内只允许自动重入一次,第二次即判定为死循环并置失败;路由跳数超过预算直接熔断;所有外部依赖超时降级、读多写少的地方加短 TTL 缓存。群落的稳定,不靠每个 agent 都聪明,靠每个 agent 只做一件事、边界清楚。
一旦 LLM 能读数据、能调工具、能跨实例协作,“安全”就从技术洁癖变成业务前提。财务最关心三件事:谁做的(不可抵赖)、能做什么(最小权限)、出了事能不能查(全程留痕)。对应到架构上是四道边界:
边界 | 机制 | 回答的业务问题 |
|---|---|---|
身份 | 统一取当前用户,禁止前端自报;消息通道握手身份优先于消息体自报 | 这是谁做的? |
服务态来源 | 调用方必须声明来源,且落在可信来源白名单内 | 是不是“自己人”在调? |
机器操作 | 沙箱令牌(不入库、不打印);未配令牌即拒绝服务;工具分「只读 / 受限写 / 危险」三级,由策略上限统一收口 | 它能做到多危险的事? |
数据隔离 | 多租户标识 + 工作根白名单,越界即拒 | 会不会串了别家公司的数据? |
四道边界之外还有一条不成文的规矩:AI 不得修改约束自己的那套规则。让 AI 修 bug 可以,让它改“护栏”不行——这是把“最小权限”落到实处。
没有搞“大爆炸”式切换,而是先让 AI 出的结果与人工 Excel 结果对照,一致了才逐步把人工活交出去。财务同事从“复核 AI”过渡到“看 AI 出的报告”。
整套系统切成了两层:
层 | 内容 | 体积 | 发布频率 |
|---|---|---|---|
平台基线 | 流程引擎、文件系统、事件总线、协作协议、聊天前端 | ≈ 199.2 MB | 月级 |
业务 jar | 六大财务场景 + 员工报销 + 费用审批 + 月结 | ≈ 716 KB | 天级 |

这组数字对业务的直接含义是:
代价也必须付:平台与业务必须同版本发布——两边错版会在运行时抛出致命错误,这是“分离”的另一面,所以每次平台改动都要连带重建业务制品。
把可核验的收益摊开(以下数据均来自项目过程的实测与实例快照,非估算):
维度 | 实施前 | 实施后 | 证据 |
|---|---|---|---|
交付物 | 手工整理 Excel、逐行核对 | 流程结束即产出可下载产物(审计报告 / 付款模板 / 异常台账) | 产物横幅 |
口径 | 靠人记、靠口口相传,改口径要排期发版 | 口径文件化,业务可直接 review,改动当天生效 | 十余个口径 JSON 文件 |
可审计 | “算得对但说不清” | 节点级轨迹 + 人工确认留痕 + 产物带时间戳 | 步骤条 / 确认卡 |
响应速度 | 任务列表加载 17 秒 | 2~4 秒 | 客户端分批并发 + 缓存 + 超时降级 |
流程创建 | 新流程目录创建约 6.9 秒 | 334~441 毫秒 | 去掉无消费方的远程全量拉取 |
数据同步 | 单轮同步约 7 秒 | 约 960 毫秒 | 修复缓存校验 + 补索引 |
系统集成 | 等接口开通才能联调 | 结构一致的模拟数据先验收流程,开通即切真实 | mock 开关 |
发布效率 | 平台与业务同包,全量传输重启 | 换 716KB 业务 jar,秒级 | 199.2MB ↔ 716KB |
人工介入 | 每个流程全程人工 | 只在关键决策点确认(放行 / 驳回) | 人工门三放行口 + 6 秒超时兜底 |
一句话总结收益:不是“更聪明的 AI”,而是更少的手工、更硬的留痕、更快的响应——再加上一条最实在的:口径改了当天就能上线,不用等研发排期。
回头看这 60 天,最重要的收获不是任何单个技术点,而是一个认知——
企业级 Agent 的核心竞争力,不是模型能力,而是“把不确定性关进确定性笼子”的工程能力,以及“让业务敢签字”的交付能力。
本文基于真实项目史实整理,2026 年 9 月。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。