模型利用才是关键!
即使是前沿模型,包裹在深思熟虑的代理中,也只完成少数复杂的端到端任务。与此同时,这些相同的模型在静态基准测试中取得了接近完美的分数。
AI编程/Vibe Coding 遇到问题需要帮助的,联系微信 ezpoda,免费咨询。
每隔几周,就会有一个新的模型发布,社交媒体上会充满各种图表。基准测试分数上升几个点。截图显示完美的多项选择答案。这看起来像一场永无止境的比赛。
然而,当你要求代理完成一项真正的工作,比如完成功能、运行研究项目或准备法律风格备忘录时,它仍然经常失败而不是成功。
最近的代理基准测试模拟了现实的专业工作,比如 TheAgentCompany 和类似的研究项目环境,显示了一些令人不安的结果。即使是前沿模型,包裹在深思熟虑的代理中,也只完成少数复杂的端到端任务。与此同时,这些相同的模型在静态基准测试中取得了接近完美的分数。
所以失败并不真正关于模型知道什么。失败是关于模型周围的一切。
这就是工具包发挥作用的地方。工具包是你模型的操作系统。它决定代理可以看到什么,可以使用哪些工具,它如何跟踪其工作,以及在出现问题时如何恢复。在实践中,工具包通常比 GPT、Claude、Gemini 或排行榜上任何其他名称之间的微小差异对可靠性更重要。

在本文中,你将看到代理工具包实际上是什么,前沿团队正在从实际部署中学到什么,为什么一个被称为 AI 研究的惨痛教训的经典结果也适用于这里,以及如果你在 2026 年构建代理可以采用的实际模式。
1、错误的比赛:基准测试与实际工作
如果你只看基准测试图表,故事听起来几乎解决了。前沿模型正确回答考试风格的问题,通过编码挑战,并用整洁的要点列表总结论文。在排行榜上,最好的系统通常相互之间相差几个百分点,远远高于大多数人类基线。
现在将其与现实代理评估中发生的情况进行比较。TheAgentCompany 或 WorkBench 等基准测试设置了小型虚拟工作场所。那里的代理需要浏览信息、编写和运行代码、操作文件,并协调自己的行动以完成专业人士需要一小时或更长时间的任务。
完成率突然看起来非常不同。即使底层有强大的模型,代理也只能在没有人工救援的情况下完成少数这些复杂的多步骤任务。当人们为编码、研究或操作构建内部代理并诚实地跟踪它们时,会出现相同的模式。
当研究人员和构建者检查这些失败时,他们很少发现模型缺乏基本的领域知识。更多时候,他们看到这样的模式:
- 代理在许多步骤后偏离了原始目标。
- 它重复失败的方法而不是改变策略。
- 它将重要指令埋藏在大量中间输出下。
- 它留给下一个会话处于令人困惑的半成品状态。
换句话说,薄弱点不是原始模型。薄弱点是编排和环境,尤其是在长期任务上。
如果你正在构建代理,问"为什么这个工具包无法将模型能力转化为结果?"比争论哪个模型在另一个静态基准测试上领先更有用。
2、工具包实际上是什么
人们在这里使用不同的标签:框架、运行时、编排器、代理栈。在这些名称下是相同的基本想法。
代理工具包是将语言模型预测转化为工作的层。它控制模型如何看到世界,它可以采取什么行动,以及它如何记住它已经做了什么。
你可以沿着几个关键轴思考工具包:
- 可见性:在每一步可以看到哪些文件、数据库、API 和文档,以及该视图如何随时间变化。
- 工具:代理可以采取哪些具体行动,例如运行 shell 命令、编辑代码、调用服务或触发测试。
- 记忆:如何存储进度、决策和中间结果,以便以后的步骤或以后的会话可以恢复它们。
- 控制流:大目标如何分解为子任务,如何选择下一步,以及如何检测循环或死胡同。
- 恢复:当出现问题时会发生什么,从瞬态错误到损坏状态或上下文限制。

一个简单想象这一点的方法是引擎和汽车的类比。模型是将燃料和输入转化为运动的引擎。工具包是围绕该引擎建造的汽车:底盘、转向、安全系统、仪表盘,以及其他所有使坐在里面的人安全和有用的东西。
大多数公开讨论仍然关注谁拥有最强的引擎。对于真实用户,汽车质量更重要:它是否可靠启动,保持在路上,并在没有持续手动干预的情况下到达目的地。
这里也有时间转变。在智能手机的早期,处理器速度主导了营销和用户体验。一旦设备对于日常使用变得"足够快","更好"的含义转向了操作系统、生态系统和相机软件。芯片仍然重要,但它不再是唯一的故事。
代理系统正在经历类似的转变。模型改进仍然有帮助,但实际部署中的许多失败存在于管理工具、内存和长期行为的工具包层中。
3、前沿团队正在发现什么
如果你阅读来自构建大规模代理团队的技术材料,相同的模式会一次又一次地出现。最大的收益不是来自单个聪明的提示。它们来自更好的工具包设计。
3.1 OpenAI:技能、shell 和压缩
在关于长期代理的最近指导中,OpenAI 强调了三个想法。
第一个是使用技能。不是将每条指令塞进一个巨大的系统提示中,而是将可重用的程序和参考资料捆绑到单独的单元中。当任务需要时,代理可以加载正确的技能,这使得提示更小并降低了冲突指令的风险。
第二个是可靠的shell 环境。不是要求模型想象每个行动,而是工具包给它一个真实的工作空间,它可以在其中安装依赖项、运行脚本和操作文件。这会将大量的抽象推理转化为可以检查和重复的具体步骤。
第三个是服务器端压缩。长时间的自然会话产生很长的历史记录。压缩以一种受控的方式修剪和压缩此历史记录,以便代理可以在不丢失最重要信号的情况下继续运行。
在一起,这些选择显示了焦点的转变。工程工作正在投入代理如何在几个小时内工作,而不仅仅是如何措辞单个答案。
3.2 Anthropic:作为轮班工人的代理
Anthropic 的长期编码代理的公共示例也严重依赖工具包设计。
一种常见的模式使用两个角色:
- 一个初始化器,用于设置项目、编写脚本和创建进度文件。
- 一个编码代理,用于从该脚手架中拾取,一次实现一个功能,运行测试,提交和更新共享笔记。
重要思想是期望每个会话将存储库保持在干净、可理解的状态,并为下一个会话提供清晰的交接说明。工具包将代理视为更像轮班的队友,而不是神谕。
这种设计减少了系统对完美的、不间断的上下文窗口的依赖。进度存在于代码库和明确的进度文件中,未来运行可以在行动之前阅读。
3.3 生产代理和上下文工程
在生产环境中操作通用代理的公司报告了类似的教训。
他们谈论:
- 优化缓存重用,因为长输入主导成本和延迟。
- 当太多选项使代理困惑时,掩盖或修剪工具。
- 将重要上下文存储在文件中,而不仅仅是在提示中,以便以后可以恢复和重新组合。
在这些示例中,模式是一致的。成功来自于围绕模型塑造环境、工具和内存结构,而不是无休止地调整单个提示的措辞。
4、工具包设计的惨痛教训
2019 年,研究员 Richard Sutton 写了一篇题为"惨痛教训"的短文。他的主要主张是,在几十年中,随着计算扩展的方法往往优于依赖于详细的人工编码领域知识的方法。
你可以在游戏、语音和视觉中看到这种模式。依赖于相对简单的学习和搜索并由更多计算支持的系统,最终会超越尝试嵌入许多关于世界如何工作的人工规则的系统。
工具包设计中出现了同样的紧张关系。
当代理失败时,自然的反应是手动添加更多结构:
- 一个管理每个步骤的管理器代理。
- 一个在几十个工具之间进行选择的路由器。
- 一个试图涵盖每个角落案例的复杂手工规则树。
某些结构是有用的,尤其是当你需要强大的安全保证时。问题是这些手工构建的框架老化很快。随着模型的改进,旧规则和路线可能成为约束而不是支持。
另一种方法是致力于从模型改进中受益而不是与之对抗的工具包模式。这通常意味着:
- 模型可以灵活组合的小型、通用工具集。
- 简单、可检查的内存机制,例如进度文件和结构化日志。
- 易于重置和易于扩展的控制流。
一个有用的心理规则是设计工具包组件,以便它们以后易于删除。如果新的模型版本允许你删除几层路由或特殊外壳,你的系统就会变得更简单、更强大。
相反,如果每次模型升级都迫使你添加更多异常处理和更多特殊工具,这是工具包偏离惨痛教训的迹象。它过多地依赖人工设计的脚手架,而不是足够地依赖随着底层模型改进而变得更好的可扩展模式。
5、2026 年的实用工具包模式
原则只有在转化为具体设计选择时才有用。以下是如果你在今年构建或维护代理可以应用的几种实用模式。
5.1 让你的工具包采用工具节食
许多代理随着时间的推移积累了工具。每个新的失败案例都会激发一个新的助手,很快模型就会在每个步骤面对长菜单行动。
你可以通过运行结构化实验来反击这一点:
列出你的代理当前可以调用的工具。
移除大多数狭窄、高度专业的工具,这些工具重复了 shell 和文件访问已经可以完成的功能。
保持紧凑的核心集,例如:
- 在受控环境中运行 shell 命令。
- 读取、写入和搜索文件。
- 调用少量关键 API。
重新运行你的评估任务并测量完成率、令牌和延迟。
在许多情况下,更简单的工具集将使代理更可靠、更容易推理。模型可以花费其能力组合几个通用工具,而不是导航拥挤的菜单。
这是一个紧凑、专注于文件的工具包在使用 LangChain 的 Python 中看起来像这样:
from tempfile import TemporaryDirectory
from langchain_community.agent_toolkits import FileManagementToolkit
from langchain_community.tools import ShellTool
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
workspace = TemporaryDirectory()
# 只给代理一个小的、作用域良好的工具集。
file_tools = FileManagementToolkit(
root_dir=str(workspace.name),
selected_tools=["read_file", "write_file", "list_directory"],
).get_tools()
shell_tool = ShellTool() # 在实际部署中考虑沙盒化。
llm = ChatOpenAI(model="gpt-4.1-mini")
agent = initialize_agent(
tools=[*file_tools, shell_tool],
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
)
agent.run(
"Create a progress.md file that describes current task, then list files "
"in workspace so I can see what you created."
)
这保持工具包专注于几个通用能力:基本的 shell 访问和文件操作,同时将规划和组合留给模型。
5.2 将文件系统视为记忆
大的上下文窗口有帮助,但它们并不能消除对外部记忆的需要。如果你将每个中间结果流式传输到单个对话历史中,重要的指令和决策最终会被淹没在噪音中。

相反,依赖文件系统。让你的代理:
- 维护一个进度文件,例如
progress.md,它描述目标、完成的步骤、当前关注点和未决问题。 - 将长日志、部分计划和参考资料存储在专用文件中。
- 在每个步骤开始时读取进度文件,并在有意义的更改后更新它。
这种设置有两个优点。它保持上下文窗口专注于当前决策,并且允许以后的会话,甚至是不同的模型,在不依赖脆弱的聊天历史记录的情况下拾取工作。
你可以通过将 shell 工具与简单的指令配对以维护进度文件,用 Agno 表达相同的模式:
from pathlib import Path
from agno.agent import Agent
from agno.tools.shell import ShellTools
workspace = Path("/tmp/agno-agent")
workspace.mkdir(parents=True, exist_ok=True)
shell_tools = ShellTools(base_dir=workspace)
agent = Agent(
tools=[shell_tools],
instructions=(
"You are a long-running agent working in a local workspace. "
"Keep a progress.md file up to date with:\n"
"- overall goal\n- completed steps\n- next actions"
),
)
agent.print_response(
"Open or create progress.md and write an initial checklist for this task. "
"Then show me contents of file.",
markdown=True,
)
在这里,工具包将长期状态推入文件系统,而模型处理如何随着时间的推移构建和更新检查表。
5.3 为交接设计而不是英雄主义
长期运行的代理经常尝试在单次不间断运行中做太多事情。它们开始强劲,然后失去自己状态的跟踪。
你可以设计你的工具包以鼓励更小、更干净的工作单元。例如:
- 期望每次运行完成有界数量的步骤或功能。
- 要求代理在退出之前将存储库保持在可构建、可测试的状态。
- 让它在进度文件中编写一个简短的交接部分,解释了什么改变了接下来应该发生什么。
这是使人类团队有效的相同心态。你正在教工具包更倾向于可靠的轮班而不是英雄马拉松。
5.4 使恢复成为首要关注点
失败是不可避免的,所以值得明确设计恢复。
有用的实践包括:
- 清晰的重置路径,例如从头开始重新创建环境的脚本。
- 轻量级检查点,例如标记的提交或快照文件,工具包在出现问题时可以回滚到这些点。
- 结构化记录工具调用和结果的日志,以便你可以重放和调试有问题的运行。
当恢复内置于工具包中时,你不需要一个管理器代理的迷宫来监视每个特定的失败模式。你依赖于几个可靠的跨多种错误工作的模式。
5.5 选择具有工具包哲学思想的生态系统
用于编码、分析和操作的现代工具越来越多地带有自己的工具包哲学。有些倾向于深度编辑器集成和最少的工具集。其他的强调远程 shell、可重用的技能或广泛的子代理系统。
当你选择一个时,有助于问:
- 这个系统如何在长期任务中管理状态?
- 它是否保持工具表面小且可组合,还是无限制地增长?
- 它的内存和恢复机制可见且可调整多少?
你的底层模型选择仍然重要。但你承诺的工具包生态系统将塑造你如何工作、如何调试,以及未来如何轻松适应新模型。
5.6 将所有内容放在一起:端到端工具包脚本
为了使其具体,这里是一个使用 LangChain 的 Python 中的小型端到端示例。它连接了一个带有文件工具、shell 工具和围绕 progress.md 文件的简单约定的紧凑工具包。
你可以将其放入 main.py 文件中,安装依赖项,并将其作为你自己实验的起点运行:
"""
Minimal harness example: a LangChain agent that
- works inside an isolated workspace directory
- has access to just file tools and a shell
- maintains a progress.md file as external memory.
"""
from pathlib import Path
from tempfile import TemporaryDirectory
from langchain_community.agent_toolkits import FileManagementToolkit
from langchain_community.tools import ShellTool
from langchain_openai import ChatOpenAI
from langchain.agents import AgentType, initialize_agent
def build_agent(workspace: Path):
# Keep all file operations inside this directory.
toolkit = FileManagementToolkit(
root_dir=str(workspace),
selected_tools=["read_file", "write_file", "list_directory"],
)
file_tools = toolkit.get_tools()
shell_tool = ShellTool() # In production, prefer a sandboxed shell backend.
llm = ChatOpenAI(model="gpt-4.1-mini", temperature=0)
agent = initialize_agent(
tools=[*file_tools, shell_tool],
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
)
return agent
def main():
with TemporaryDirectory() as tmpdir:
workspace = Path(tmpdir)
print(f"Workspace: {workspace}")
agent = build_agent(workspace)
# First call: create or update progress.md with a plan.
agent.run(
"You are working in a clean repo. "
"Create a progress.md file that describes a small coding task, "
"lists 3 concrete steps, and marks them as unchecked checkboxes."
)
# Second call: do a tiny bit of work and update progress.md.
agent.run(
"In this workspace, write a hello.py script that prints 'hello harness'. "
"Then update progress.md to mark first step as done and briefly "
"summarize what changed."
)
# Third call: show the final state so that human can inspect it.
agent.run(
"List the files in workspace and then print the contents of progress.md "
"so that user can see the current plan and status."
)
if __name__ == '__main__':
main()
此脚本在一个地方说明了本节的核心思想。工具包限制工具,使用文件系统作为内存,并鼓励代理留下一个清晰的进度文件,供人类或另一个代理稍后拾取。
6、重要性的安静转变
模型发布将继续到来。基准测试将继续攀升。这些曲线不会消失。
与此同时,一个更安静的转变已经在进行中。将语言模型转化为可靠代理的系统正在成为真正的差异化来源。它们决定代理是否可以将任务从模糊请求带到完成的工作产品,而无需持续的人工救援。
如果你在 2026 年构建代理,你可以做的最有价值的工作通常不是另一轮提示调整或另一场关于模型排名的辩论。它是工具包工程。这意味着简化工具、设计良好的内存和交接模式,并将恢复视为核心功能而不是事后考虑。
模型并没有真正过时。它们只是不再是真正进步发生的唯一地方。持久的优势现在来自于你围绕它们构建的操作系统,以及这些系统让你选择实际上执行其工作的程度。
原文链接: Models Are Almost Obsolete. Harnesses Are What Matter Now!
汇智网翻译整理,转载请标明出处