
倒不是因为它处理了什么惊世骇俗的复杂逻辑,而是因为它把同一份文件连续总结了 47 次。它发现活儿已经干完了,然后……决定再干一遍。没崩溃,没报警,只有一个不停旋转的 Loading 图标和一张疯狂跳涨的账单。
你去查模型日志,发现模型完全是按训练要求在跑。
真正的坑在于:包裹在模型外面的那层系统,根本不记得自己干过啥。它没有状态文件,没有终止条件,完全没法说出那句核心的:“这地儿咱们来过。”
这就是“Demo(演示版)”和“Production(生产版)”Agent 之间的鸿沟。
在这篇文章里,我会为你拆解构建可靠 AI Agent 的 7 个紧箍咒(Harnesses)。
做一个跑通一次的 Agent 真的太简单了:调个 LLM,塞几个工具,写个循环。二十行 Python 代码搞定,录出来的 Demo 干净漂亮。
然后你发布了。真实用户开始输入各种离奇的东西。
工具调用返回了空值;聊了 40 分钟后上下文塞满了;两个子 Agent 开始打架,逻辑自相矛盾;模型决定对某个错误无限重试。
Demo 里隐身的所有细节,在生产环境里全是灾难。
这道鸿沟不在于模型质量,而在于“Harness”的质量。
“没有Harness的模型,就像一个没有神经系统的脑子。空有思考,无法行动。”
这个公式会改变你的构建思路:
Agent = 模型 + Harness
如果你不是那个模型,你就是那个Harness 。
Harness 是包裹在模型周围的每一行代码、每一个配置、每一个执行钩子。它把一个“文本生成器”变成了一个真正能干活儿的东西。
模型决定干什么,Harness 确保它能安全、稳定、大规模地干成。
大多数工程师把 90% 的精力花在模型上:死磕提示词、换新模型、喂更多例子。但生产环境的崩盘,通常都发生在那被忽略的 10% 环节里。

循环是 Agent 的心脏。没有它,你得到的就是“一问一答”的聊天机器人,而不是 Agent。
循环负责运行模型、读取返回结果、执行工具调用、把结果塞回上下文,然后不断重复,直到模型收手或者触发了步数限制。
while agent_is_running:
response = call_model(context)
if response.has_tool_calls:
results = execute_tools(response.tool_calls)
append_to_context(results)
continue
if response.is_final_answer:
return response.content
if step_count > MAX_STEPS:
return "任务未完成,已达到最大步数限制。"
那个 MAX_STEPS(最大步数)不是选配,它是救命稻草。它是让你的 Agent 保持体面和那桩“38 美元惨案”之间的唯一防线。在写任何工具之前,先把这行代码焊死。

模型默认是健忘的。每一次 API 调用都是一张白纸。如果Harness不记录,Agent 根本不知道刚才发生了什么、哪一步成功了、现在停在哪儿。
你需要两种状态:
最简单的生产级状态存储就是 JSON 文件。它可读、好调试、进程重启了还在,而且不需要复杂的架构。

状态跟踪的是“这一局”干了啥,记忆则是它跨局知道的信息。

Agent 自己没法管理记忆,这是Harness 的工作。
工具是将语言转化为行动的媒介。
工具设计比数量更重要。每加一个工具,都会消耗上下文并增加模型“选错工具”的概率。三个描述完美的工具,效果远好于十五个描述模糊的工具。
这里有个大招:Bash 逃生舱。与其预设死所有的工具,不如直接给 Agent 访问 Bash 的权限,让它按需现场写工具。这就是 Claude Code 处理开放式任务的秘诀。
当然,这也意味着沙箱隔离(Sandbox)是必须的。你总不希望 Agent 随手写个脚本把你的主机硬盘给格式化了吧?

“上下文腐烂”是最阴险的生产故障。
Agent 跑了 40 分钟都挺好,突然开始无视系统提示词了。没崩溃,没报错,只是上下文塞满了,核心指令被埋在了中间,模型渐渐“间歇性失忆”了。
Harness 必须控制模型能看到什么。 生产环境有三个必杀技:

没有规划的模型只会盲目走下一步。
对于复杂任务,这会导致逻辑混乱:步骤颠倒、重复干活。“规划文件”模式是生产中最简单的解法:列出步骤清单,每完成一步打个勾。
Harness 在每一轮循环开始前把这个清单塞进上下文。这样即使 Agent 重启,它也知道自己在哪。

真实世界是充满恶意的。API 会限流,文件会丢失,模型偶尔会胡言乱语。
没有显式错误处理的 Agent 只有两个结局:要么崩溃,要么开始一本正经地胡说八道。
每一个工具调用都应该有明确的失败逻辑。 比如:如果是频率限制,那就指数退避重试;如果是权限报错,那就去搬救兵(找人类);如果模型连续三次格式错误,那就强制切换到结构化输出模式。

用户输入:“总结上个月关于欧盟 AI 法案的新闻要点。”
模型只负责写总结,剩下的脏活累活——状态追踪、上下文控制、步数限制、记忆读写——全由Harness代劳。
Agent 往往被过度吹捧。以下情况请直接避坑:
“Agent 不是工作流的升级版,它是处理另一类问题的不同工具。搞清楚你面对的是哪种问题。”
一个优秀的 Agent,其价值不在于它顺风顺水时表现有多好,而在于它在出事时能多体面。
随着模型越来越强,Harness 的一些功能会被原生吸收。但那种围绕智能进行的工程设计——工具、状态、上下文、验证闭环——永远不会过时。
模型每几个月就变一茬,而Harness才是你真正的资产。
“模型不是你的 Agent。Harness 才是。把钱和精力花在对的地方。”