一张手机号牵出五人洗钱团伙:FalkorDB图查询快169倍

黑客松项目用图数据库加AI代理,8.4毫秒锁定五人洗钱团伙。
本文介绍了一个名为 Financial Crime Agent 的黑客松项目,它用图数据库和 AI 代理替代传统的逐行规则扫描来追查洗钱。文章指出,循环转账、空壳公司分层和设备碰撞等洗钱模式只存在于账户之间的关系中,关系型数据库难以捕捉。基准测试显示,同一 5 跳资金路径查询,递归 SQL 耗时 1420 毫秒,而 FalkorDB 的 openCypher 仅需 8.4 毫秒,快约 169 倍,根源在于无索引邻接。AI 代理被设计成初级调查员,自动遍历图、发现共用设备的团伙、高亮可疑节点并起草 SAR。为避免幻觉,代理的每一步推理都必须指向图中真实的节点和边,最终报告由人类合规官签字负责。
大多数反洗钱(AML)系统还在逐行扫描交易记录,而犯罪分子早已学会把犯罪结构藏在账户之间的连接里。一个名为 Financial Crime Agent 的黑客松项目展示了另一种思路:用图数据库和 AI 代理顺着关系网络追查,在 8.4 毫秒内锁定一个由同一部 iPhone 15 Pro 操控的五人洗钱团伙。

为什么逐行检查抓不住洗钱
一笔凌晨两点转出的 4.8 万美元,放在表格里看只是一个数字。规则引擎逐行判断,很可能直接放行。洗钱者正是利用这一点,构建出只有在全局视角下才显形的结构:
- 循环转账(Wash Rings):资金从 A 到 B 到 C 到 D 再回到 A,每一跳都像正常业务,循环本身才是犯罪。
- 空壳公司分层:资金被拆分后穿过层层空壳实体,拉长资金来源与去向的距离。
- 设备碰撞:多个“不同”客户共用同一部物理手机,通常意味着一个人在操作多个身份。
这些模式的共同点是:它们不存在于任何单行记录中,而存在于记录之间的关系里。关系型数据库最不擅长的,恰恰就是这种问题。
SQL 与 openCypher 的差距:1420ms 对 8.4ms
项目作者做了一个基准测试:查找长度在 2 到 5 跳之间、最终回到起点的资金路径。用递归 SQL 实现时,每一跳都意味着对同一张大表再做一次自连接,中间结果随深度指数膨胀。在小型数据集上,这个查询耗时 1420 毫秒,还伴随大量临时数据和锁竞争。
同样的查询在 FalkorDB 的 openCypher 中只需要一行:
MATCH path = (a:Account)-[:TRANSFERRED_TO*2..5]->(a)
RETURN path
结果耗时 8.4 毫秒,约 169 倍加速,且没有任何 join。查找设备团伙同样直接:匹配两个账户通过 USES_DEVICE 指向同一设备,聚合并筛选出关联账户数不少于 5 的设备即可。
作者指出,性能差距的根源在于无索引邻接(index-free adjacency):图数据库中每个节点直接指向邻居,沿边遍历只是一次指针跳转,成本取决于实际访问的图规模,而不是整张表的大小。五跳遍历不需要为它从未访问的数十亿行买单。
递归 SQL 的复杂度陷阱:原文提到递归 SQL 在每一跳都要对同一张大表做自连接,中间结果指数膨胀。这背后是关系型数据库执行多跳查询时的本质局限:它没有持久化的“边”概念,账户间关系只能通过外键或连接表隐式表达,因此每一跳都必须重新扫描并连接基表。查询深度为 k 时,中间结果规模大致按分支因子^k 增长,数据库还要为每层递归维护临时表、排序和哈希索引,I/O 与内存开销随之放大。即便建立索引,优化器也难以跨递归层级做全局规划。这正是 1420 毫秒的来源——成本与表的整体规模挂钩,而非与真正需要访问的子图挂钩。图数据库把关系物化为指针,才从根本上绕开了这一瓶颈。
无索引邻接(index-free adjacency):这是原生图数据库的核心存储机制。每个节点在物理存储中直接保存指向其相邻节点的指针,遍历一条边就是一次内存指针跳转,无需查询全局索引来定位邻居。因此一次 k 跳遍历的代价大致与沿途实际访问的节点和边数成正比,而与传统关系库中“先查索引、再回表、再连接”的代价模型截然不同。它带来的直接好处是:当图规模达到数十亿节点时,一个只触及几百个节点的局部查询依然保持毫秒级延迟,不会因为表变大而变慢。代价是图数据库更擅长局部遍历而非全表聚合扫描,存储也需为每条边维护双向指针。
代理如何像调查员一样工作
这个 AI 代理被设计成“一个不知疲倦的初级调查员”。当可疑账户触发警报后,它会:
- 沿资金流和共享属性(如设备)向外遍历图;
- 发现五个账户绑定同一个硬件 ID;
- 在界面上高亮这个团伙,并将无辜节点淡化到背景中;
- 基于发现起草一份 FinCEN 可疑活动报告(SAR)。
技术栈相对简单:React + Vite 做前端,TailwindCSS 负责样式,Cytoscape.js 绘制关系图,底层是 FalkorDB。选择 Cytoscape 的原因是可以按状态给节点设置样式,正好满足高亮与淡化的需求。
作者特别提到,高亮和淡化看似是小功能,却是演示中最喜欢的部分。真实调查员面对的是信息过载,当五个可疑节点亮起、其余全部安静下来时,答案直接“摆在那里”,不需要读报告就能理解。
FinCEN SAR 与可疑活动报告:SAR(Suspicious Activity Report)是美国金融犯罪执法网络(FinCEN)要求金融机构提交的法定报告,用于上报疑似洗钱、欺诈或其他可疑交易。依据《银行保密法》,达到申报门槛的机构必须在规定时限内提交,且报告内容受保密条款约束,不得向被报告对象透露。SAR 具有真实法律后果:它进入执法与监管数据库,可能触发账户冻结、进一步调查甚至刑事程序。因此 SAR 的撰写必须基于可核查的事实与证据链,叙述部分需要说明谁、在何时、通过何种方式、涉及多少资金。这也解释了原文为何坚持由人类合规官最终签字——提交行为本身即产生法律责任。
让代理保持诚实:图是证人,模型只讲故事
大语言模型有个习惯:言之凿凿地编造内容。在金融犯罪领域,这极其危险——错误指控一个真实的人是严重伤害,而不是有趣的 bug。
因此作者做了一个关键设计:代理推理时间线上的每一步都必须指向图中真实的节点和边。当它声称 Rivera、Lee、Kim、Patel 和 Chen 共用一台设备时,用户可以点击查看证明这一点的查询结果。
图是证人,语言模型只是讲述图返回的结果。
作者由此得出一个更普适的结论:用架构而非提示词来修复幻觉。如果代理只能报告数据库给出的内容,虚构的证据就无处藏身。
用架构约束幻觉:大语言模型的幻觉源于其生成机制——它按概率续写文本,并不内在地校验事实。常见的“提示词修复”只是在输入侧提醒模型不要编造,无法阻止它在长推理链中虚构实体或关系。原文提出的思路属于“架构级”约束:把模型可引用的证据限定为图数据库查询的返回结果,代理的每个论断都必须附带对应的节点、边或 Cypher 查询,相当于为生成过程加上可验证的溯源层。这类做法在业界常被称为检索增强生成(RAG)或工具调用约束的一种变体——模型不再自由回忆,而是只能转述外部系统提供的事实。在受监管场景中,这种“可审计的推理链”比模型本身的准确率更重要,因为监管者需要的是可复核的证据,而非看似合理的叙述。
最终签字仍然是人
代理不会判定任何人有罪。提交 SAR 具有真实法律效力,可能导致账户冻结和执法介入,这必须由经过培训、承担责任的人来决定。
代理承担的是缓慢枯燥的工作——遍历图、汇集证据、起草叙述——然后把附带证据的案卷交给合规官。合规官审视上下文、运用判断,给出最终法律签字。
作者认为这是 AI 进入受监管行业的唯一现实路径。监管机构关心的不是模型多聪明,而是谁负责、能否展示工作过程。人工签字回答前者,图关联的时间线回答后者。
项目启示与后续方向
作者从这次构建中总结了几个要点:图数据库对反洗钱不是锦上添花,因为欺诈本身就是图状的;Cypher 不仅更快,可读性也让查询更容易被审计和信任;推理时间线的价值甚至超过速度提升——一个神秘的风险评分 94 让人紧张,而一条“这是设备、这是五个账户、这是它们之间的转账”的线索是监管者真正能核查的。
后续计划包括:流式交易处理,让团伙在形成过程中就被标记;跨手机号、地址、IP 和受益所有人的实体解析;用社区发现等图算法自动排序可疑集群;以及带审计日志和多审核人的正式案件管理。
正如作者所说:犯罪分子已经在用网络思考,我们的工具也应该如此。
项目已在 GitHub 开源,并提供在线演示。
相关推荐

不写代码,用AI规划生产级应用系统架构
不写一行代码,如何用 AI 规划生产级应用系统架构?本文拆解 AI 私人教练应用的数据库建模、Agent 端点设计、聊天记录存储与分层记忆架构,讲清何时该用 AI、何时该提前生成,帮你从 vibe coding 迈向可维护的生产级开发。

花旗14000名工程师用Devin,技术外包账单砍掉30%
花旗集团14000名工程师使用AI编程智能体Devin,一年内将技术供应商账单削减30%,产品发布提速30-40%。但30%仅限单一成本项,摩根大通同期表示AI收益尚未体现在财报中,揭示企业AI落地的真实分化。

AI写代码,程序员要失业?Devin自主编程真相
Devin等自主AI编程代理正改变软件开发:从Copilot辅助编码到全自动工程代理,程序员角色从写代码转向系统设计与监督。本文分析AI编程对就业、代码安全、初级开发者培养的影响,以及效率悖论下程序员需求的真实走向。