尽快摆脱 LLM 的束缚

2025年4月1日 远离这里

不要让 LLM 做出决策或实现业务逻辑:它们在这方面很糟糕。我为一款在线游戏构建 NPC,经常有人问我“你是如何让 ChatGPT 做到这一点的?” 答案总是不变:“我没有,而且你也不应该这样做”。

在大多数应用中,LLM 应该只是用户和应用程序逻辑 API 之间的用户界面。LLM 不应实现任何逻辑。尽快摆脱 LLM 的束缚,并尽可能长时间地保持这种状态。

为什么?

用一个虚构的例子可以最好地说明这一点:你想编写一个可以通过 WhatsApp 访问的下棋机器人。用户发送他们想要做什么的描述(“用我的主教吃掉骑士”),机器人与他们对战。

你能让 LLM 负责维护棋盘状态并令人信服地进行游戏吗? 可能,也许。 你会这样做吗? 当然不会,原因如下:

例子

象棋的例子说明了将 LLM 用于核心应用逻辑的根本问题,但这一原则远远超出了游戏范围。 在任何精度、可靠性和效率都很重要的领域,都应遵循相同的方法:

  1. 用户说他们想用他们的 vorpal sword 攻击玩家 X? LLM 不应该是确定用户是否拥有 vorpal sword 或结果会是什么的系统:LLM 负责将用户提供的自由文本转换为 仅此而已 的 API 调用,并将结果转换为用户的文本
  2. 你正在构建一个应该响应用户报价的谈判代理? LLM 不负责谈判,只负责打包它,将其传递给谈判引擎,并告诉用户结果
  3. 你需要随机选择如何响应用户? LLM 不能选择

提醒 LLM 擅长什么

虽然我专注于 LLM 不应该做什么,但同样重要的是要了解它们的优势,以便你可以适当地利用它们:

LLM 擅长转换和分类,并且对“世界如何运作”有很好的基础,这正是你应该在流程中部署它们的地方。

LLM 擅长将“用我的剑击中兽人”转换为 attack(target="orc", weapon="sword")。 或者将 {"error": "insufficient_funds"} 转换为 “你没有足够的金币来购买它”。

LLM 擅长弄清楚用户想要做什么,并将其路由到系统的正确部分。 这是战斗命令吗? 库存检查? 请求帮助?

最后,LLM 擅长了解人类的概念,并且知道 “blade” 可能是一把剑,而 “smash” 可能意味着攻击。

请注意,所有这些优势都涉及转换、解释或交流——而不是复杂的决策或维护关键的应用程序状态。 通过将 LLM 限制在这些角色中,你可以在获得它们优势的同时避免前面描述的陷阱。

未来

LLM 能做什么和不能做什么一直在变化,让我想起了“God of the gaps”。 这是神学中的一个术语,其中每个神秘现象都曾经用神圣干预来解释——直到科学填补了这一空白。 同样,人们不断识别新的“仅限人类”的任务,声称 LLM 不是真正的智能或有能力的。 然后,仅仅几个月后,出现了一个新的模型,可以很好地处理这些任务,迫使每个人再次移动目标,passim 的例子。 这是一个不断变化的目标,今天看起来遥不可及的东西可能会比我们预期的更快得到解决。

因此,就像我们的象棋例子一样,我们可能很快就会得到可以相当好地处理我们上面所有例子的 LLM。 然而,我怀疑大多数缺点不会消失:你传递给它的非 LLM 逻辑将更容易推理、更容易维护、运行成本更低、并且更容易进行版本控制。

即使 LLM 继续改进,基本的架构原则仍然存在:将 LLM 用于它们最擅长的领域——接口层——并依靠专用系统来实现你的核心逻辑。