LLM 扩展的根本教训
文章探讨了 LLM 功能扩展的局限性,认为大规模数据和算力才是核心竞争力,值得了解 LLM 的发展方向。
完整中文译文
ChatGPT Plugins(2023年3月)
仅在启动四个月后,OpenAI 发布了 ChatGPT Plugins。回顾起来,这些功能远远领先于它们的时代。
这个想法很雄心勃勃:给 LLM 一个 OpenAPI 规范的链接,让它"野蛮生长"调用 REST 端点。这直接指向 AGI 风格的思维:通过标准 API 实现通用工具使用。
{
"schema_version": "v1",
"name_for_human": "TODO Manager",
"name_for_model": "todo_manager",
"description_for_human": "Manages your TODOs!",
"description_for_model": "An app for managing a user's TODOs",
"api": { "url": "/openapi.json" },
"auth": { "type": "none" },
"logo_url": "https://example.com/logo.png",
"legal_info_url": "http://example.com",
"contact_email": "hello@example.com"
}
问题是什么?模型还没准备好。GPT-3.5(甚至早期的 GPT-4)在没有幻觉或迷失在语境中的情况下很难驾驭庞大的 API 规范。而且,用户体验很笨拙。你必须为每个聊天手动切换插件!
但它让我们对未来有了一瞥:Code Interpreter 插件(后来的 Advanced Data Analysis)变得不可或缺,预示了我们今天使用的强大沙盒执行环境。
Custom Instructions(2023年7月)
Custom Instructions 是对插件复杂性的"简单大脑"反应。我在写这部分时做了个双击,因为我确信这个功能在插件之前就发布了。
它只是一个用户定义的提示附加到每个聊天中。简单。显而易见。但它解决了一个巨大的问题:重复的上下文设置。
这是后来所有 .cursorrules 和 CLAUDE.md 文件的精神祖先。
Custom GPTs(2023年11月)
OpenAI 将指令和工具重新打包成 Custom GPTs。这是一次"产品化" prompt 工程的尝试。你可以将一个角色、一些文件和几个操作打包成一个可共享的链接。
这是从插件的开放式承诺向精心策划的单一用途"应用"的撤退。
ChatGPT 中的 Memory(2024年2月)
到目前为止,我们讨论了扩展 LLM 的手动方式。Memory 代表了向自动个性化的转变。
ChatGPT Memory 记录你对话中的细节,并悄悄地将它们插入未来的语境中。它就像一个自己写自己的系统提示。如果你提到你是素食主义者,它会在几周后记住。这是一个小功能,但它标志着维持长期状态而无需用户干预的 agent 的开始。
Cursor Rules(2024年4月)
Cursor 通过将自定义指令放在它们真正属于的地方——仓库中——改变了游戏规则。
.cursorrules 文件是一个启示。与其把语境粘贴到聊天窗口,你可以把它提交到 git。
"We use tabs, not spaces."
"Always use TypeScript."
它最初是一个文件,然后发展成一个具有复杂作用域的 .cursor/rules 文件夹。你可以组织多个规则文件,甚至定义它们何时应用,例如仅针对某些文件类型或子目录。这是第一次扩展对代码感觉"原生"。
后来 Cursor 引入了让 LLM 决定何时应用规则的能力,这是一个我们会再次看到的模式。
Model Context Protocol(2024年11月)
到了 2024 年末,模型终于足够聪明,可以可靠地处理真实工具。Anthropic 的 Model Context Protocol (MCP) 是答案。
MCP 是一个重量级解决方案。MCP 客户端需要与 MCP 服务器保持持久连接。服务器向客户端(在大多数情况下是一个 agent)提供工具定义、资源和提示,它可以向服务器发送消息说工具已被调用,服务器可以用结果响应。
与 Custom Instructions(仅添加语境)不同,MCP 为模型提供了实际的功能。它可以读取你的仓库、查询你的 Postgres 数据库或部署到 Vercel。除了提供工具,它还允许服务器直接向 agent 提供资源(文档、日志)和提示。
这很强大,也许有点过度设计。虽然复杂性对 agent 开发者来说可能是值得的,但要求用户设置和连接 MCP 会产生很多摩擦,整个生态系统中有许多初创公司如 Smithery 致力于使 MCP 更容易使用。
值得注意的是,2025 年 10 月发布的 ChatGPT 应用是建立在 MCP 作为基础层之上的。这是一次尝试,目的是让最终用户更容易使用 MCP,而不必真正考虑它。
Claude Code:新 Agent,新扩展(2025年2月)
2025 年初为我们带来了 Claude Code,它本质上向 agent 添加了所有可想象的扩展机制。
CLAUDE.md:仓库级指令的标准。
MCP:用于重量级工具集成。
Slash Commands:类似于 Cursor 的 notebooks,用于可重用的提示。
Hooks:拦截和修改 agent 循环的能力(例如,"如果测试失败则停止")。
Sub-agents:生成专门的工作者来处理子任务。
Output Styles:(已弃用)配置语调和格式。
时间会告诉我们这些功能中有多少会长期存在。Anthropic 已经尝试弃用输出样式。
Agent Skills(2025年10月)
添加到 Claude Code 的下一个扩展机制足够重要,值得深入探讨。Agent Skills 是 ChatGPT Plugins 的重生。
虽然 MCP 有整个客户端-服务器协议,但 Agent Skills 只是 markdown 文件和脚本的文件夹(用你选择的任何语言)。
agent 只需扫描 skills/ 目录,读取每个 SKILL.md 的前言,并建立一个轻量级索引。然后,它仅在适合当前任务时选择读取技能的完整内容。这解决了 MCP 的主要问题之一:必须一次性将所有工具定义加载到上下文窗口中带来的上下文膨胀。
这是来自 Anthropic 的 Skills 示例存储库的 e2e 测试技能结构的片段:
webapp-testing/
├── examples/
│ ├── console_logging.py
│ ├── element_discovery.py
│ └── static_html_automation.py
├── scripts/
│ └── with_server.py
└── SKILL.md
这是脚本、示例和纯文本指令的混合。唯一必需的文件是 SKILL.md 文件。让我们看一下那个文件:
---
name: webapp-testing
description: Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
license: Complete terms in LICENSE.txt
---
# Web Application Testing
To test local web applications, write native Python Playwright scripts.
**Helper Scripts Available**:
- `scripts/with_server.py` - Manages server lifecycle (supports multiple servers)
**Always run scripts with `--help` first** to see usage. DO NOT read the source until you try running the script first and find that a customized solution is absolutely necessary. These scripts can be very large and thus pollute your context window. They exist to be called directly as black-box scripts rather than ingested into your context window.
... skill continues ...
这只是一个带有元数据和技能描述的纯 markdown 文件。agent 读取该文件,该文件自由地引用 agent 可以读取的其他文件。相比之下,一个 playwright MCP 服务器有几十个工具定义来控制浏览器,这个技能只是说"你有 bash,这是你如何编写 playwright 脚本"。
诚然,要使用技能,agent 需要对计算机有通用访问权限,但这是在实践中的痛苦教训。给 agent 通用工具并相信它能够使用它们来完成任务,可能比为每个任务制造专门工具更有可能是获胜策略。
未来会怎样
Skills 是 ChatGPT Plugins 提出的梦想的实现:只需给模型指令和一些通用工具,然后相信它能做中间的粘合工作。但我有一个假设,它现在可能实际上会工作,因为模型实际上足够聪明来让它工作。
Agent Skills 之所以有效,是因为它假设 agent 具有编写自己工具的能力(通过 bash 命令)。你可以只给它代码片段,然后要求 agent 弄清楚如何通用地为当前任务运行它们。
重要的是,我认为技能标志着对 agent 真正含义的新定义。一个 agent 不仅仅是一个在 while 循环中的 LLM。它是一个在 while 循环中的 LLM,并且有一台计算机绑定在它上面。
Claude Code 是第一个让我真正理解这一点的软件,但它太专注于开发者,不能成为最终形式。其他应用程序如 Zo Computer 试图将 LLM 和计算机打包到一个单一应用程序中,但我仍然认为它仍然没有从最终用户那里充分抽象计算机。如果我要求同事做某事,我不需要看到他们的整个文件系统,我只需要知道他们有一台计算机。
展望 2026 年,我预计我们使用的越来越多的 LLM 应用程序将以新的有趣方式附加计算机,无论我们是否意识到这一点。
如果我能做空 MCP,我会的,我预计我们会回到用最容易访问的编程语言扩展我们的 agent:自然语言。