Agent 的核心代码不到 20 行,但大多数团队搭不稳

Agent 的核心代码不到 20 行,但大多数团队搭不稳

Agent Loop 的核心实现逻辑抽象出来不到 20 行代码:

const messages = [{ role: "user", content: userInput }];

while (true) {
  const response = await client.messages.create({
    model: "claude-opus-4-6",
    max_tokens: 8096,
    tools: toolDefinitions,
    messages,
  });

  if (response.stop_reason === "tool_use") {
    const toolResults = await Promise.all(
      response.content
        .filter((b) => b.type === "tool_use")
        .map(async (b) => ({
          type: "tool_result",
          tool_use_id: b.id,
          content: await executeTool(b.name, b.input),
        }))
    );
    messages.push({ role: "assistant", content: response.content });
    messages.push({ role: "user", content: toolResults });
  } else {
    return response.content.find((b) => b.type === "text")?.text ?? "";
  }
}

一个 while 循环,四个阶段不断重复:感知(读取输入)、决策(模型推理)、行动(调用工具)、反馈(结果回填),直到模型返回纯文本为止。

看过不少开源实现和官方 SDK,结构都差不多。从最小 demo 一路扩展到支持子 Agent、上下文压缩、Skills 加载,主循环基本不用动。新能力只通过三种方式接入:扩展工具集、调整系统提示结构、把状态外化到文件或数据库。模型负责推理,外部系统负责状态和边界,分工一旦确定,核心循环就很少需要改。

就这么一个循环。

Agent Loop 四阶段循环流程图

那为什么 Agent 还是跑不稳

很多人用 Agent 做项目,都经历过这个阶段:改了 prompt 好了两天,过几天又出问题,换个模型感觉没什么差别,反复调来调去效果时好时坏。

问题大概率不在 Loop,在 Harness。

Harness 是围绕 Agent 构建的测试、验证与约束基础设施,至少包括四个部分:验收基线(怎么判断做对了)、执行边界(哪些操作不允许)、反馈信号(怎么知道做错了)、回退手段(错了怎么恢复)。

模型当然重要,但决定系统能不能稳定运行的,往往是这些外围工程条件。这个判断在代码编写这类高可验证任务上最成立,但在开放式研究、多轮协商这类弱验证任务里,模型上限本身仍然更关键。

有一个案例很说明问题

3 个工程师,5 个月,写了将近 100 万行代码,1500 个 PR,传统速度的 10 倍。

这个速度不是靠模型强,是几个工程决策做对了:

Agent 看不到的内容等于不存在。知识必须存在于代码库本身,外部文档对运行中的 Agent 不可见。AGENTS.md 只保留约 100 行索引,细节拆到各目录按需引用。

约束编码化而非文档化。写在文档里的规范很容易被忽略,编进 Linter、类型系统或 CI 规则里的约束才具备可执行性。架构分层靠自定义 Linter 机械强制,不靠人工 Review。

Agent 端到端自主完成任务。从复现 Bug、实现修复、驱动验证,到开 PR、处理 Review 反馈、自主合并,全链路不需要人介入。整套可观测性栈按任务临时创建、完成即销毁,Agent 直接查询系统状态来验证修改是否生效。

这些做法有一个共同特征:让”对错”有机器可以执行的判断标准,而不是靠人盯。

怎么判断自己的 Agent 适不适合跑起来

Harness 四象限评估框架

用两个维度画一个四象限:纵轴是任务清晰度,横轴是验证自动化程度。

右上角是最理想的位置:目标明确,结果可以自动验证。写代码、跑测试、修 Bug 这类任务天然在这个区域,Agent 可以放开跑,跑完自己就知道对不对。

左上角,任务清楚但验收还得人盯。比如写一段营销文案,需求很明确,但”写得好不好”只有人能判断。这个区域的吞吐量天花板就是人的审查速度,Agent 再快也得等人看。

右下角最危险:有自动化反馈但目标模糊。比如让 Agent “优化用户体验”,它会一直跑一直改,每次测试都通过,但方向可能从头就是错的。系统越自动化,往错误方向跑得越快。

左下角两者都缺,Agent 基本起不到作用。

Harness 要做的事情,就是把任务往右上角推。没有现成的自动化验收?写一个。目标不够清晰?先把验收标准定义出来,再让 Agent 动手。很多团队的问题不是 Agent 不够聪明,是从来没有定义过”做对了”长什么样。

调试 Agent 的正确顺序

Agent 出了问题,大多数团队第一反应是换模型或者改 prompt。但更有效的排查顺序是反过来的:

先看验收标准有没有。如果连”做对了”的定义都没有,调什么都是碰运气。

再看工具定义准不准。多数工具选择错误不是模型能力问题,是工具描述写得含糊,模型不知道该选哪个。

最后才考虑换模型。到这一步的时候,往往前两步已经解决了大部分问题。


这是「如何构建 Agent」系列第一篇,后续会继续拆上下文工程、工具设计、记忆与自主度。

如果这篇对你有用,转发给同样在做 Agent 的人,或者关注我,下一篇继续。