一个离岸公司的注册档案里,通常只有名字、注册地和成立日期。想判断"和这家公司做生意安不安全",答案往往不在它自己的记录里,而藏在两三层关系之外:一个名义股东同时在另一家公司持股,而那家公司的股东,出现在制裁名单上。
![]()
这是一条路径问题,而路径正是图数据库擅长的东西。Shell Game 这个项目就围绕这一点展开:输入一家公司或一个人,由三个智能体在一张基于 FalkorDB 构建的图上展开调查。
数据来自两份公开数据集。一份是 ICIJ 的离岸泄密数据,包含巴拿马、天堂和潘多拉文件中的约 200 万个实体、高管、中介和地址;另一份是 OpenSanctions 汇总的制裁名单。系统最终给出三种结论之一:通过、加强尽职调查(EDD)或拒绝,而图上的那条路径就是证据。
项目里记录了一次真实运行:Creatum Business Group Ltd(英属维尔京群岛)的股东是 Bridgewater Second Nominees,后者同时是 Sealfate Ltd 的股东,而 Sealfate Ltd 的股东 Gulbakhor Ismailova 与一名制裁名单上的人员精确匹配。三跳,毫秒级找到。界面上能看到路径逐段亮起,也能读到找出它的那条 Cypher 查询。
让大模型只做选择,不做查询
设计上最关键的一条:大模型永远不写 Cypher。负责调查的智能体只能从一小批人工编写、带参数、只读的工具里挑选,包括制裁路径、空壳集群、瓶颈点、反事实和召回。它自己编出来的节点 ID 会被直接拒绝。每个工具结果都附带对应的 Cypher,所以解释就是真实查询本身,而不是一段关于查询的故事。
结论由确定性规则给出。一个"怀疑者"智能体会攻击每条路径,标记"名字相似"的边和仅靠词元匹配的名字。随后"守门人"套用五条固定规则:最短、强关联且名字匹配度不低于 0.95 的路径判为拒绝;6 跳内找不到任何路径则判为通过。大模型可以解释结论,但改不了结论。
"没有路径"本身也是一种答案。图数据库能在数据范围内证明一个否定命题:如果 6 跳搜索一无所获,说明这份数据集里不存在相关暴露。向量检索给不了这个结论。
反事实功能同样实用:切掉任意一个节点,路径会重新计算。如果移除某个名义股东就断掉了所有连接,那这个节点就是瓶颈点,而这恰恰是调查人员最想知道的信息。
最短路径比想象中难算
项目作者提到,在真实的泄密数据图上找最短路径并不轻松。第一版用的是内置的最短路径枚举,在真实数据上有时会跑过 60 秒,原因是律所类中介连接着成千上万家公司,搜索会在它们之间四处游荡。解决办法是分层广度优先搜索:每一跳是一条带索引的 Cypher 查询,一旦某一跳触达受制裁方就停止,并且只重建最短路径。中位搜索时间降到 0.03 秒。FalkorDB 的 PageRank 仍在全图上运行,用来显示瓶颈点在更大网络中的位置。
名字匹配是可信度的胜负手。一次宽松匹配会把"MRH Investment S.A."误判成受制裁实体,那就是一次错误指控。最终采用的规则很严:名字至少两个词元;双方都列出国家时必须有重叠;匹配超过五条记录的名字直接丢弃;部分匹配永远不能产生拒绝结论。即便如此,产品给出的措辞始终只是"可能存在关联"。
规模数据方面:图中有 241,847 个节点和 506,015 条边,覆盖匹配结果 3 跳内的全部内容,另加 4 万家随机背景公司,让普通公司也存在于图中。名字匹配共 1,712 条,其中精确匹配 503 条、别名匹配 602 条、词元匹配 607 条。路径搜索中位 0.03 秒,p95 为 2 秒。
技术栈上,数据库用 FalkorDB,支持 Cypher、全文索引和 PageRank 算法;后端用 FastAPI 通过 SSE 流式推送智能体事件;前端是 Next.js 加 react-force-graph。每个案件写入同一实例中的独立图,用 EXAMINED、FLAGGED、CLEARED 三类边指向它触碰过的节点,下一次调查走到这些节点时就能召回先例,多图支持顺带解决了租户隔离。
需要说明的是,这类系统输出的是"可能关联",不是对任何不当行为的认定。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.