← [ BACK_TO_NOTES ]

Agent Loop

Agent Loop 是 runtime 内部的原子执行循环:模型调用 → tool call → 工具结果回填 → 下一轮模型调用,直到产生最终输出或命中停止条件。

#concept #evergreen #ai #architecture

[!info] related notes

Agent Loop

一句话定义

Agent Loop 是 Agent 的核心执行循环:调用 LLM → 检查是否有 tool_call → 执行工具 → 结果回传 LLM → 继续推理,直到 LLM 输出最终回答或触发停止条件。

核心原理

最小 Agent Loop

async def agent_loop(messages: list, tools: list, llm) -> str:
    for step in range(MAX_STEPS):
        # 1. 调用 LLM
        response = await llm.chat(messages, tools=tools)

        # 2. 检查是否有 tool_call
        if not response.tool_calls:
            # 没有 tool_call,LLM 直接回复
            return response.content

        # 3. 执行每个 tool_call
        for tool_call in response.tool_calls:
            result = await execute_tool(tool_call)
            messages.append(tool_call_message(tool_call, result))

    return "达到最大步数"

带事件流的 Agent Loop

async def agent_loop_with_events(context: Context) -> AsyncIterator[Event]:
    messages = build_messages(context)

    for step in range(MAX_STEPS):
        response = await llm.chat(messages, tools=tools)

        if response.tool_calls:
            for tool_call in response.tool_calls:
                yield ToolCallStartEvent(tool_call)
                result = await execute_tool(tool_call)
                yield ToolCallResultEvent(tool_call, result)
                messages.append(tool_result_message(tool_call, result))
        else:
            yield TextDeltaEvent(response.content)
            break

    yield DoneEvent()

停止条件

条件说明
LLM 无 tool_call模型决定直接回复
达到 max_steps防止无限循环
工具执行失败某步失败需要降级
用户取消前端中断
超时整体时间超限

边界:Agent Loop 不等于完整 Agent 执行闭环

Agent Loop 只描述 runtime 中最小的重复控制结构:模型产生下一步动作,runtime 执行动作并把 observation 回填,然后进入下一轮。它不自动涵盖任务规划、审批策略、durable state、失败恢复、ground-truth verification 等系统级职责。

这些职责如何与 loop 组合成可控执行系统,见 Agent 执行闭环;多个 agent / workflow 如何被组织和约束,见 Orchestration。

常见坑

  1. 不做 max_steps 限制: Agent 可能无限循环
  2. 不处理 tool_call 为空的情况: LLM 可能输出空的 tool_calls
  3. 不检查停止条件: 每步都应该检查是否应该停止
  4. 消息累积不控制: 每步都追加消息,上下文越来越大

学习检查

不看正文回答:

  1. Agent Loop 的一轮至少包含哪三个阶段?
  2. 为什么“模型没有 tool call”只能算一种停止路径,而不是唯一停止条件?
  3. Agent Loop 与 Agent 执行闭环 的职责边界是什么?
  4. 如果工具调用有副作用,为什么仅靠 messages 继续循环不足以保证可恢复性?

参考资料

创建于 2026/6/30 更新于 2026/10/1
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本