Agentic Loop 中模型与工具的角色分工(解析 Claude Code 为何被定位为 Agentic Harness)

把 Claude Code 拆到最底层,它的核心其实是一个极简的 while 循环:接收输入 → 模型判断下一步 → 调用工具执行 → 把结果喂回模型 → 重复直到模型不再发出工具调用。Anthropic 官方文档把它称为「包裹在 LLM 外面的 Agentic harness」——模型是大脑,harness 提供工具、上下文管理与执行环境;二者组合才是「能干活的 Agent」,单独哪一边都跑不起来。

一、Agentic Loop 的最小骨架

Agentic Loop 之所以被称为「循环」,是因为它让模型能根据工具的真实输出来调整下一步动作。下图是社区公认的最小实现,写下来不到 20 行:

conversation = [system_prompt, user_message]
while True:
    response = model(conversation)              # 模型思考
    conversation.append(response)
    if response.has_tool_calls:
        results = run(response.tool_calls)      # harness 真正动手
        conversation.append(results)            # 结果回喂
    else:
        break                                    # 模型结束思考,输出最终答案

每一轮循环都把「到目前为止的完整对话」重新喂给模型。模型看到的是:用户最初的请求、自己之前调过的工具、每个工具的返回结果,再决定下一步是再调一个工具还是直接给答案。这条回路把模型从「只能生成文本」升级成「能在真实环境里持续操作」。

二、模型与工具的角色边界

模型和工具在同一循环里的分工是严格互补的。把它们各自的职责列清楚,工程上才不会混淆「该让 LLM 做」和「该让程序做」。

维度 模型(Models) 工具(Tools)
本质能力 读懂意图、规划步骤、产出结构化输出 执行具体动作:读文件、跑命令、查数据库
输入 完整对话历史 模型发出的结构化调用请求
输出 文本回复或 tool_use 调用 真实副作用 + 结果回填到对话
错误来源 推理偏差、上下文不足 权限拒绝、超时、命令不存在
状态 无状态,每轮从对话重读 进程内可变,可能有副作用
数量 通常 1 个主模型 多个,可由 MCP 动态扩展

模型决定「接下来做什么」,但它无法自己动手——它不能直接打开文件、跑 shell、调 HTTP。工具负责「把模型想做的事真的做完」,但工具本身没有判断力,只按照模型传来的参数执行。结果反馈给模型后,模型再决定下一步,整个系统才「活」起来。

三、为什么强调 Claude Code 是 Agentic Harness

「harness」一词强调的是「围绕模型的工程化外壳」。Claude Code 文档中明确写到,它是为软件工程场景定制的 harness,给模型提供程序员日常使用的工具集合,并加上权限、上下文、IDE 桥接等支撑。设计哲学可总结为「保持循环简单,把投资放在 harness 上」。

Claude Code 的工程复杂度不在循环本身,而在循环周围的五大子系统:

子系统 关键职责 典型实现
工具系统 注册、调度 30+ 内置工具;MCP 动态扩展 Bash、Read、Edit、Grep、WebFetch
权限门控 每个工具独立的允许/询问/拒绝策略 危险命令前弹出确认
上下文管理 窗口接近上限时多级压缩 清理旧工具输出 → 摘要历史 → 持久化到磁盘
子 Agent 调度 受限深度委派子任务,防止递归失控 子 Agent 不再生子 Agent
IDE / CLI 桥接 与 VS Code、JetBrains 双向通信 bridge 模块

正是这些子系统,让 Claude Code 不止是一个「会调工具的 LLM」,而是一个「可被工程师托付日常编码任务」的产品。模型在中心提供推理能力,harness 围绕它提供可执行环境、安全边界、长流程稳定性——这就是官方把 Claude Code 称作「围绕 Claude 模型构建的 agentic harness」的根因。

四、循环稳定运行的两条工程经验

「工具调用失败」是循环里最常见的异常。Claude Code 的做法不是让模型硬扛,而是给 harness 配四层恢复:

  1. PTL(Prompt Too Long)恢复:上下文快满时主动压缩;
  2. 输出超限恢复:工具结果超长时切片回填;
  3. 模型过载回退:上游接口 5xx 时按指数退避重试;
  4. 工具错误自然恢复:让模型从错误信息推理下一步。

另一个常见踩坑是「循环不收敛」——模型反复调同一工具但拿不到想要的结果。工程上需要给循环加最大步数或时间预算上限,触顶后强制让模型总结现状并向用户求助,而不是无限重试。

到这里,agentic loop 中模型与工具的角色分工就比较清楚了:模型做决策,工具执行动作,harness 把它们装进一个能稳定跑几十分钟的闭环。Claude Code 之所以强调「围绕 Claude 模型构建的 agentic harness」,是因为价值不在模型本身,而在循环周围那套被精心打磨的工具、权限、上下文与恢复机制。

常见问题(FAQ)

Q1:模型能直接读写文件吗?

不能。模型只产出结构化调用请求,由 harness 中的工具实际执行 I/O。

Q2:Agentic Loop 和普通对话有什么区别?

普通对话一轮就结束;Agentic Loop 会让模型多次调用工具,直到模型不再发出工具调用才退出。

Q3:为什么不直接用大模型做所有事?

大模型只能生成文本,不能保证真实执行;harness 把模型推理与外部副作用桥接起来,才能形成可用的 Agent。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
其AI的头像其AI普通用户

相关推荐

返回顶部