跳到主要内容

LLM 作为通用协议翻译器:无人规划却悄然兴起的中间件模式

· 阅读需 12 分钟
Tian Pan
Software Engineer

每个集成工程师都曾面对过两个拒绝相互通信的系统。一个说的是 2008 年的 SOAP XML,另一个期望的是上季度刚设计的 REST JSON 负载。传统的解决方案——编写自定义解析器、维护映射层、祈祷没人改动模式——在第三或第四个系统加入之前都还能用。之后你就要维护一个没人愿意接手的组合爆炸式翻译代码了。

现在团队正在将 LLM 放入这个缺口中。不是作为聊天机器人,不是作为代码生成器,而是作为运行时协议翻译器——读取一种格式并输出另一种格式。对于某些用例,它的效果出奇地好——而对于其他用例,它的失败方式则真正令人担忧。理解这两个区域之间的边界就是整个博弈的关键。

催生此模式的 N×M 问题

企业集成一直受困于 N×M 问题。如果你有 N 个源系统和 M 个目标系统,你需要 N×M 个自定义集成。一家拥有 15 个内部服务和 10 个外部合作伙伴 API 的公司面临 150 个潜在集成点——每个都有自己的序列化格式、认证方案和错误处理约定。

传统中间件——ESB、API 网关、iPaaS 平台——通过引入规范格式来解决这个问题。每个系统都与规范模型进行双向转换,将问题简化为 N+M 个适配器。但规范模型也有其代价:它们需要前期设计,随着系统演进会与现实脱节,而且会成为关于哪个团队的数据模型被认定为"规范"的政治角力场。

LLM 提供了一种不同的方案。不是一个刚性的规范模式,而是一个已经消化了足够多的 API 文档、数据格式和协议规范的模型,能够在推理时执行即席翻译。"规范模型"隐式地存在于模型权重中,而不是显式地存在于模式注册中心里。

这不是理论练习。团队正在生产环境中应用这一模式:

  • 遗留系统 SOAP 转 REST 桥接,为每个服务编写 WSDL 解析器的成本过高
  • 跨供应商数据标准化,医疗系统需要交换 HL7v2、FHIR 和专有 CSV 格式
  • 内部 API 版本管理,v1、v2 和 v3 的消费者共存,在代码中维护向后兼容性已变得不可持续
  • 合作伙伴接入,每个新合作伙伴以略有不同的 JSON 结构发送数据,对相同概念使用不同的字段名

翻译层的实际工作原理

架构在概念上很直观。LLM 位于内部 API 端点之后。上游系统将其原生负载连同关于源格式和期望目标格式的元数据一起发送到该端点。LLM 转换负载并返回结果。

在实践中,实现根据你对模型输出的信任程度分为三个层级。

第一层级:模式引导翻译。 你向 LLM 提供源模式、目标模式和负载。模型映射字段、转换类型,并处理结构差异,如展平嵌套对象或拆分复合字段。这是最高置信度的层级,因为两端的模式都约束了输出空间。

第二层级:示例引导翻译。 你没有一方或双方的正式模式。取而代之的是,你提供一些示例输入-输出对,让模型进行泛化。这对于半结构化格式效果很好,比如列名不一致的 CSV 文件或带有可选字段的 XML 文档。当模型遇到示例未覆盖的边缘情况时,它就会失败。

第三层级:自由格式翻译。 你用自然语言描述源和目标,让模型自行推断映射关系。这是"演示令人印象深刻、生产环境却很危险"的层级。它在演示中很出色,但不应该碰你的计费管道。

关键的架构决策是 LLM 在请求路径中的位置。目前出现了三种模式:

  • 同步内联:LLM 实时处理每个请求。简单但每次翻译增加 200-800ms 延迟,并创建单点故障。
  • 异步富化队列:负载进入队列,LLM 异步翻译,下游消费者获取翻译后的版本。更适合对吞吐量有容忍度的工作负载。
  • 编译时翻译:LLM 生成静态翻译代码(映射函数或配置文件),在请求时无需 LLM 即可运行。这让你在构建时获得 LLM 的智能,在运行时获得确定性执行。

编译时模式值得特别关注。你不是在每个请求上调用模型,而是调用一次来生成转换逻辑,审查和测试该逻辑,然后将其作为传统代码部署。你获得了基于 LLM 翻译的灵活性,却不承担运行时成本或非确定性。当模式变更时,重新生成即可。这是大多数生产团队在尝试内联方式后最终收敛到的模式。

模型在哪里"幻觉"你的数据

LLM 中介翻译的失效模式与传统集成失败有本质不同。传统解析器遇到意外输入时会大声崩溃。LLM 则通过生成看起来合理但存在微妙错误的输出来静默失败。

最危险的失效模式是字段幻觉。当模型遇到在目标模式中没有明确映射的源字段时,它不会报错——它会发明一个映射。customer_tier 字段可能被悄悄映射到 account_type,因为模型认为它们语义相似。它们可能是,也可能不是。你不会知道,直到有人发现下游分析出了问题。

类型强制幻觉是第二个主要风险。模型可能将字符串 "001234" 转换为整数 1234,去掉了编码有意义路由前缀的前导零。或者它将 Unix 时间戳转换为 ISO 日期字符串,但默认假设 UTC,而源系统使用的是太平洋时间。这些错误在 95% 的测试用例中看起来正确,在剩余 5% 中损坏数据。

结构幻觉发生在模型改变数据基数时。一对多关系被展平为一对一。数组被解包为单个值,因为测试示例中只有一个元素。模型是在做模式匹配,而不是推理数据语义。

加载中…
References:Let's stay in touch and Follow me for more thoughts and updates