解析

一套压根不碰旧系统的做法

这是对一篇长文的简读。原文讲的是如何把 AI 代理接到十五年、二十年前的巨石系统上。我们不按案例顺序复述,只抽一根线索:文中每一处招数,都是为了不必往旧库里写字。一旦看出这点,整套架构读起来就是一条很长的绕行。

为什么绕行比正路便宜

企业世界究竟跑在什么之上,原文列得毫不客气:SAP ERP、Oracle 数据库、老旧版本的 Microsoft Dynamics、Java EE 上的自研方案,乃至 COBOL 主机。这些东西设计于十五到二十年前,存着 PB 级的数据,处理着数以十亿计的交易,却既没有 REST,也没有 GraphQL。

接着摆出两个供人权衡的数字。把巨石完整迁移到微服务,要三到五年、数千万美元,失败风险还很高;把旧 ERP 换成 SAP S/4HANA 之类的新系统,企业要掏两百万到一千万美元,并让各部门停摆数年。原文所推的那条替代路线,据称便宜得多,计时单位是月而不是年。

网关既当译员,又当门房

它做的头一件事是翻译。旧系统讲的是 SOAP、XML-RPC,或者用 FTP 传扁平文件;代理用 JSON 思考,靠函数调用干活。网关接过 JSON,铺开成一份臃肿的 SOAP 请求,再把回来的 XML 拆解开,交给代理一份齐整的结构。线那头是 2005 年,代理始终不知情。

第二件事是压住节奏。一千个人同时问订单状态,就会变成一千次同步调用,库会趴下。于是在代理与巨石之间架一个消息中介——RabbitMQ、Apache Kafka 或 Redis 流——由网关按旧系统扛得住的速率把队列一点点喂进去,文中给的例子是每秒十条。这期间用户看到的,是一行正在分析的提示。

第三件事是干脆不问。目录、价格、分支机构名单这类参考数据被激进地缓存在 Redis 里,并以异步方式刷新。主库负载的减轻写作「最多九成」,旁边还立着一句值得留住的话:这是作者对典型场景的估计,不是量出来的。

写权限是一滴一滴发的

代理永远拿不到直连的 SQL。它得到的是一组被卡得很死的函数——查客户状态、开支持工单——而网关会硬碰硬地校验参数。把注入藏进标识符里(借提示词注入,理论上确有可能),会在请求触到内网之前就被打回。

服务账号按最小权限行事:大多数表只给读。写权限则外科手术式地给,而且只给到无关痛痒的地方——日志、工单——并且一律走存储过程。往来的每一个字节都落进不可篡改的存放处,或是区块链,或是 WORM 硬盘,好让代理的推理链条能被逐秒还原。

连生成出来的 SQL 也不在正库上跑

另有一桩苦事,是那种表叫 T_DOC_435、带着一百五十个毫无注释的列的库结构。为它们搭一层语义元数据:用模型读得懂的白话,把结构描述一遍。文本转 SQL 的代理照着这份描述写查询,网关检查其中有无删除与改动的命令,然后到副本上执行,而不是到正本上。

「十五秒」背后站着什么

物流那个例子拆得很细。一家握着五百辆卡车的公司,日子过在一套改得面目全非的旧 ERP 和几十张巨大的表格上。一条自由格式的委托——二十托盘砖,从一座城运到另一座城,明天上午,要带尾板升降机的车——被代理拆成一个个要素;它经网关向库里问五十公里半径内的空车,拿回三辆,比对评级与司机资质,给司机发消息,得到应允后下达生成运单的指令。

给出的对照是:三名调度员、四十分钟,对上十五秒、全天候,业务提速十倍,而核心 ERP 原封未动。值得留意的是原文没有明说的那一点——整条链路里往旧系统写入的东西,恰好只有一样:那张运单。读取、交谈和拿主意,统统被挪到了外面。

银行那个例子形状相同,只是用 CQRS 模式正式化了。余额与流水异步复制进 Redis 或 Apache Ignite 这类快速内存库,「这个月咖啡花了多少」从缓存里一百毫秒内答完。给妻子转 150 美元则走另一条路:校验意图、索取双因素验证码、进 Kafka 队列,再由适配器把这笔操作塞进核心,装得像一笔寻常转账。

档案开始开口

往来函件与维修记录在夜里从旧库导出,清洗、切块,过一遍嵌入模型,装进向量存储——被点名的有 Pinecone、Qdrant 和 Milvus。白天的负载丝毫不受打扰。

真正有说服力的不是手法,而是那条示范回答。问及 B-450 机器为何压力正常却在启动时过热,拿「过热」二字去检索一无所获:2018 年那张工单上写的是启动时引擎发烫。按意思照样找得到,而给出的答复里带着技师的姓、处置办法,以及压力阀滤芯的料号 33-B。

把故障当作常态

旧东西会趴窝,这一点已经写进了行为里。碰上超时,代理先等两秒,再等四秒,再等八秒。系统若始终不起,它不抛错,而是拿最后一份已知缓存来答话:十五分钟之前库里还有十二件,预订已经下了,等系统缓过来再确认占位。与此同时,一个后台代理攒起带日志的故障报告,经 Slack 发给工程师。

时间表,以及支撑它的东西

落地被切成四个阶段。影子模式两到三周,代理只读,只为真人操作员起草。内部副手三到四周,写入非关键系统的权限正是在这一步出现。面向客户之前还有四到六周,而且必须先过安全审计。此后便持续下去:一支专职代理的队伍,夜里查账的、盯库存下单的、给沉睡客户发优惠的。

收益的说法,比这类文章通常的写法更实诚,这份实诚应当整个搬过来。人手减负三到四成,是作者对典型场景的估计。第三阶段转化率的上升被称作显著,却没有附上任何一个数字。那家运输公司与那家银行都被写成场景,而非具名客户;全文没有点出任何一位客户的名字。

被直说出来的边界

凡是政策不许上云之处——国防承包、医疗、卡组织合规——给出的方案是把开源模型搬回自家:Llama 3、Mistral、Qwen,压成 GGUF、AWQ 或 EXL2,一直做到完全断网的隔离环境。模型开销靠严格的词元额度圈住,遭到攻击时网关自己丢掉垃圾流量,免得预算被人刷光。

旧系统并未死去。它记得的,正是新系统尚不知自己已忘之事。— 公案 第35则,Maksim Valentinovich Galatin

这则公案里藏着整件事的落点。巨石的价值不在代码,而在里头积攒下来的东西,而任何一次迁移,赌上的恰恰就是它。这套方法主张的不是把积攒之物搬走,而是让它留在原处,再学会向它发问。代价作者自己讲得明白:一层中间人,从此要一直养着。

原始出处

全文共十八节:网关解剖的完整版、两个细节详尽的案例、用机器视觉处理纸质单据、让旧数据库接下加密支付、为监管而设的 LLMOps 层,以及新增列的自动发现。