AI在线 AI在线

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

两个月前,知识星球中有个关于银行流水分析的提问:想问问对于流水识别是否有比较好的解决方案呢? 我们现在想用大模型能够对多家银行进行识别,但是发现识别准确率很一般,经常出现表格识别数据错乱的情况,而且效率也不太行这个问题在企业信贷的贷前风控场景经常出现,不同银行的流水格式一般有所区别,而且一家企业往往涉及多家银行的账户使用。 这也导致了流水解析和分析工作复杂度确实高很多。

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

两个月前,知识星球中有个关于银行流水分析的提问:

想问问对于流水识别是否有比较好的解决方案呢?我们现在想用大模型能够对多家银行进行识别,但是发现识别准确率很一般,经常出现表格识别数据错乱的情况,而且效率也不太行

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

这个问题在企业信贷的贷前风控场景经常出现,不同银行的流水格式一般有所区别,而且一家企业往往涉及多家银行的账户使用。这也导致了流水解析和分析工作复杂度确实高很多。

我其实去年底在 Github 上开源过一个见知流水格式的流水分析报告Demo,当时是针对单一银行格式,不过也是完整实现了指标加工逻辑的和报告生成方法的介绍,感兴趣的可以瞅瞅:https://github.com/weiwill88/bank-statement-analysis

这篇试图说清楚:

信贷场景的贷前尽调背景、多银行流水的非标特点,以及如何基于 Dify 实现对多源异构银行流水的自动化分析报告生成。

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

基于Dify动态解析异构银行流水,韦东东,8分钟

以下,enjoy:

1、项目背景

熟悉信贷行业的盆友应该都知道,在贷前风控体系中,通过线上方式获取到的企业的工商、司法、税务及征信等多类型数据,因为有非常多成熟的解析和清洗做法,各家更多的是基于经验来构建规则引擎进行自动化审批。但是,这套体系存在一个关键的盲区,也就是下述要展开提到企业真实的经营现金流情况。

分析企业银行流水,是判断企业经营稳定性和真实贸易背景的最重要手段之一。尤其是其中收入是否稳定、支出是否合理、是否存在异常的资金往来。当然,既然大家都没普遍采用这类数据肯定是因为有众多显示的难点:

1.1线下获取问题

银行流水不像税务数据一样,可以线下或线上完成授权后,直接线上获取后处理分析。而且一家企业往往会涉及多个常用的银行账户,所以需要业务人员线下方式向企业收集,最常见的格式是 Excel 或 PDF 格式(这篇以 EXCEL 格式为例进行演示)。

1.2人工分析的瓶颈

抛开纯线上的企业贷款产品不谈,一般线下授信的贷前尽调环节,客户经理都需要从客户收集多家银行格式各异的流水表格,然后再手动进行汇总和分析。这个过程不仅效率低下,更容易因人为疏忽而遗漏关键的风险点,比如一笔伪装成正常经营的大额融资款流入,或一笔隐藏的关联方资金占用等。

2、核心挑战

要利用 LLM Agent 实现对银行流水的全自动分析,我们必须克服几个现实的技术难题:

2.1表头位置不固定

不同银行的流水导出格式差异很大。最棘手的问题是,列标题(Header)并不是总在文件的第一行,有的在第二行,有的甚至在第四、第五行,上方可能包含银行 Logo、账户信息等元数据。

这种不确定性也让传统的硬编码脚本(如 pandas.read_excel(header=0))完全失效。所以,现在市面上多家

 SaaS 的做法就是穷举所有银行或支付公司的模板。虽然这种做法看起来和务实,但确实属于上一个时代的做法,既不优雅也无法应对银行未来可能发生的格式调整。

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

2.2核心字段名称不统一

即便定位了表头,还需要把不同银行的列名映射到统一的分析字段上。例如,关注的核心指标是“交易时间”、“收入”、“支出”、“账户余额”、“交易对手”和“摘要”。但在实际流水中,它们可能被命名为“记账日”、“贷方发生额(收入)”、“借方发生额(支出)”、“余额”、“对方户名”、“附言”等等。如何准确理解这些“同义词”,是实现自动化的关键。

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

2.3摘要信息定性难

判断一笔交易的真实性质(如销售回款、采购支出、工资发放),强依赖于对“摘要”或“附言”字段的理解。人工判断不仅耗时,且极度依赖个人经验。要让机器做出精准判断,就必须为其注入两类核心知识:

交易分类知识:如何根据摘要关键词(如“货款”、“工资”)将交易归入正确的业务类别?

风险分析知识:当某些数据模式出现时(如客户高度集中、大额对私转账),它们具体意味着什么风险?

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

为了系统性地解决这个问题,我提供了两个核心知识库作为示例:银行流水交易分类规则.md 和风险分析规则与文本模板.md。这两个文件把风控专家的经验规则化、文本化,是驱动 LLM 进行贴合场景深度分析的必要参考。

3、解决方案架构

为了解决上述提到的问题,下面演示一个基于 Dify 的工作流方案。其核心思想是“分而治之”,引入了很多代码和 LLM 节点,让不同的节点各司其职,最后完成一份流水分析报告。核心架构参考下图:

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

3.1动态识别与解析

核心节点:打印流水前十行 (Code) -> 定位表头位置 (LLM)

实现方式:不直接让 LLM 处理整个流水文件,而是先用一个 Code 节点(打印流水前十行)提取每个文件的前 10 行作为“预览”。这一般足以暴露表头的位置和命名方式。

然后把这些预览喂给定位表头位置 LLM 节点,并给它一个非常明确的指令(来自 定位表头位置 节点):

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

LLM 会输出一个结构化的 JSON 指令,精确地告诉后续节点每个文件的表头在哪一行,以及“收入”、“支出”等标准字段对应原始表中的哪一列。

3.2标准化与计算

核心节点:标准化合并 (Code) -> 核心指标计算 (Code)

实现方式:标准化合并 Code 节点接收上一步 LLM 生成的 JSON 指令和原始文件全文。它会严格按照指令解析每一个格式各异的文件,把所有交易记录清洗、转换并合并成一个统一格式的 JSON 数组。

随后,核心指标计算 Code 节点对标准化的数据进行纯粹的数学计算,得出月度趋势、流入流出构成、核心对手方等关键指标,并输出为 JSON。值得一提的是,在此节点中,引用了银行流水交易分类规则.md 的核心思想。 对于高频且明确的交易类型,我们直接在代码中内置了关键词分类逻辑,以保证计算的效率和准确性。

这个知识库定义了如何将模糊的交易摘要映射到标准的财务类别:

在 核心指标计算 节点的代码中,实现了下述这个逻辑。这种“规则代码化”的方式确保了基础分类的稳定,而完整的知识库文件则用于后续 LLM 的深度理解。

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

3.3知识增强与洞察

核心节点:生成分析查询 (Code) -> 知识库召回 (Knowledge Retrieval) -> 生成分析报告 (LLM)

实现方式:这一步是提升分析深度的关键。此阶段深度依赖第二个知识库 风险分析规则与文本模板.md。这个知识库以“规则-模板”的形式存在。它告诉 AI 在发现特定数据模式时,应该生成什么样的风险提示。

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

工作流程如下:

1、生成分析查询 节点基于计算指标,动态生成查询,如“客户集中度为 85%,这存在什么风险?”。

2、知识库召回 节点接收到这个问题后,从风险分析规则与文本模板.md 中精确匹配到“客户集中度风险”的规则和模板。

3、最后,生成分析报告 LLM 节点会拿到三样东西:数据(指标 JSON)、问题(动态查询)、以及答案模板(从知识库召回的文本)。LLM 最后把实时计算出的数据(如{concentration_ratio}的值)填充到分析模板中,最终生成一份数据翔实分析报告。

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

基于Dify动态解析异构银行流水:架构拆解→风控报告生成

4、工程经验与架构升级方向

4.1工程经验提炼

LLM 与 Code 的“指令-执行”模式

这个项目演示的一大亮点在于,把 LLM 定位成生成结构化指令(JSON)的“动态解析器生成器”。由确定性的 Code 节点来执行这些指令,确保了数据处理的稳定性和可靠性。

“预览+认知”策略的有效性

通过让 LLM 先看“预览”来降低问题难度,可以显著提升其识别复杂格式的准确率,并节约处理 Token 的成本。

动态 RAG

相比于用一个笼统的问题去检索知识库,先通过 Code 节点先分析数据,再提出“数据驱动”的、具体的问题。这使得 RAG 的召回内容更具针对性,极大地提升了最终报告的分析深度。

混合分类方法

在 核心指标计算 节点中,内置了基于关键词的简单分类规则,用于处理明确的交易(如“工资”、“税”)。这是一种有效的“人机协作”,将简单、高频的任务交给代码,把复杂、模糊的定性任务留给知识库和 LLM,实现了效率和质量的平衡。

4.2架构升级参考

引入多模态能力处理 PDF 和图片

当前工作流主要处理 Excel(文本化后)。下一步可以集成其他工具作为前置节点,把扫描版的 PDF 或图片格式的流水单据转换为文本,从而将处理范围扩大到所有常见流水格式。

构建交易对手知识图谱

当前的对手方分析停留在 TOP N 列表。未来可以引入知识图谱技术,将所有交易对手构建成一个网络,用于挖掘隐性的关联关系、识别资金的循环流动(空转)或疑似的壳公司交易。

增加自修正的闭环反馈机制

可以在标准化合并节点后增加一个校验环节。如果解析失败或数据出现逻辑错误(如余额对不平),可以将错误信息和原始预览再次反馈给定位表头位置 LLM 节点,让其再试一次,形成一个自修正的循环,提升鲁棒性。

人机协同

对于 LLM 无法准确分类的“未分类交易”,可以设计一个简单的标注界面。系统将这些模糊的交易推送给人工进行标注,标注结果再反哺到知识库,使系统在持续使用中变得越来越聪明。

相关资讯

从零到一,用 Dify 打造 NL2SQL

近期 AI 大火,朋友圈很多都在晒成果。 我也禁不住尝试,使用Dify这一开发平台做了第一个 AI 应用。 整体感觉下来还是非常方便的,也是由于Dify的出现大大降低了构建 AI 应用的门槛,相信未来真的可以解放人的双手,让 AI 帮助我们解决更多的问题。
4/2/2025 7:30:37 AM
韩锋

Dify+MCP: 泵类设备的预测性维护案例 (升级版 )

上篇文章中,给大家分享了一个使用 Dify RAGFlow 实现的泵类设备的预测性维护案例,过去两天里有很多盆友在后台私信我了一些实现细节,比如:HTTP 请求的数据存在哪里? IoT 平台的数据能否直接实时“流”入 Dify? 以及如何使用 MCP 的方案实现四个数据源(IoT, CMMS, MES, ERP)的智能查询。
4/14/2025 12:40:00 AM
韦东东

基于Bad Cases的Dify合同审查案例演示(工作流拆解)

4月底时,知识星球里有个关于在 RAG 流程中,如何实现基于 Bad Cases(负面案例)的合同审查和合同生成(基于合同模板)的提问,算是一个很有代表性的进阶 RAG 应用方向,这篇针对其中的合同审查场景来做些介绍和演示。 注:“整体文档理解”(Bad Cases 分析)和“结构化对象检索”(模板匹配)合同审查场景里,利用历史上的“坏案例”(Bad Cases,包含合同原文和审查结果)来辅助新合同的审查,而不仅仅依赖预设规则是个很实际的业务需求。 但标准 RAG 主要召回与问题语义相似的片段,确实很难让 LLM 理解一个 Bad Cases 的整体情况和参考价值。
5/20/2025 4:00:00 AM
  • 1