Agentic 循环是让 agent 运转起来的引擎。它是一个重复的周期:模型推理该做什么,执行一个动作(工具调用),观察结果,然后决定继续还是停止。没有这个循环,你只有一个 chatbot。
循环过程
- 模型接收对话历史(包括之前的工具结果)
- 模型推理任务并决定下一步动作
- 如果需要工具 → 模型返回一个工具调用(
stop_reason: tool_use)。Client 执行工具,追加结果,把一切送回去。循环继续。 - 如果任务完成 → 模型返回最终响应(
stop_reason: end_turn)。循环终止。
每次迭代都涉及一次 API 调用。模型看到完整的累积对话——所有之前的消息、工具调用和工具结果——然后决定接下来做什么。
stop_reason 驱动循环
stop_reason 字段是控制信号:
tool_use→ 模型需要执行一个工具。继续循环。end_turn→ 模型结束了。返回最终响应。
这让循环是模型驱动的。模型决定什么时候继续(通过请求工具)和什么时候停止(通过返回最终响应)。不是固定迭代次数,不是计时器,不是每步都要人工批准。
不保证完成
Agentic 循环不保证任务完成。工具可能失败。信息可能不可用。任务可能就是做不到。模型可能撞上 max_tokens。循环可以在没有成功完成任务的情况下终止。
这就是 max_turns 作为安全限制存在的原因——它防止模型一直尝试但永远不收敛的失控循环。但它不会让循环成功;只是防止无限转圈。
计算迭代次数
一个”找出所有 TODO 注释并生成摘要”的任务至少需要 3 次迭代:
- 模型调用 Grep → 结果返回(tool_use)
- 模型调用 Read → 文件内容返回(tool_use)
- 模型生成摘要 → 完成(end_turn)
“至少”是因为模型可能需要对多个文件调用多次 Read。每次工具调用是一次单独的迭代。模型不能把 Read 和摘要生成批量处理——它需要先拿到 Read 的结果才能总结。
循环 vs 单次调用
单次 API 调用生成文本然后停止。Agentic 循环加上了带观察的迭代工具执行:调用工具、看到结果、推理、决定下一步。这个观察 → 推理 → 行动的循环才是复杂多步任务得以实现的原因。同一个模型,同一个 API——循环加的是迭代能力,不是模型算力。
一句话总结: Agentic 循环按”推理 → 工具调用 → 观察结果 → 重复”运转,由 stop_reason 驱动(tool_use = 继续,end_turn = 停止)——它使多步任务成为可能,但不保证完成。