第 4 章
Agent Loop
Agent 的心跳 — 思考、行动、观察的循环
🎯
像厨师做菜一样
一个厨师做菜的过程是:看菜谱(思考)→ 切菜(行动)→ 尝味道(观察)→ 决定加盐还是加糖(再思考)→ 继续操作。这个循环会一直进行,直到菜做好上桌。Agent Loop 就是完全一样的过程 —— AI 不断循环「思考 → 使用工具 → 查看结果 → 再思考」,直到任务完成。
Agent Loop 是什么?
Agent Loop 是整个 Harness 的核心引擎,可以说是 Agent 的「心跳」。
它的工作流程非常简单:
1. 把用户的消息发送给 LLM
2. LLM 返回响应 —— 可能是文字,也可能是工具调用请求
3. 如果是工具调用,执行工具,把结果反馈给 LLM
4. 回到步骤 2,继续循环
5. 直到 LLM 认为任务完成,返回最终文字响应
这就是 Agent 能完成复杂任务的秘密 —— 它不是一次性给出答案,而是通过多轮循环,逐步推进任务。
🔄 Agent Loop 动画演示
用户
LLM
工具调用
权限检查
执行工具
返回结果
💬第 1 步:用户发送消息
用户输入一个请求,比如「帮我读取 config.json 文件」
来看看真实的代码(简化版)
openharness/engine/query.py
1async def run_query(context):2 """Agent Loop 的核心:不断循环直到任务完成"""34 for turn in range(context.max_turns):5 # 第 1 步:把消息发给 LLM,获取响应6 response = await stream_response(7 context.api_client,8 context.messages,9 context.tools10 )1112 # 第 2 步:如果 LLM 没有请求工具调用,说明任务完成13 if response.stop_reason != "tool_use":14 break1516 # 第 3 步:执行 LLM 请求的每个工具17 for tool_call in response.tool_uses:18 result = await execute_tool(tool_call)19 context.messages.append(result)2021 # 第 4 步:工具结果已加入消息,回到循环顶部
这是 OpenHarness 中 Agent Loop 的核心代码,简化后只有不到 20 行:
为什么 Agent Loop 如此重要?
Agent Loop 是 Agent 所有能力的基础。没有它,工具、权限、技能这些子系统都只是零散的组件。是 Agent Loop 把它们串联起来,形成一个完整的工作流程。
想想看:如果一个任务需要读取文件、修改内容、运行测试、修复错误 —— 这需要多次循环才能完成。每次循环中,LLM 都会根据前一步的结果来决定下一步做什么。
这种「思考 → 行动 → 观察」的循环,正是 AI Agent 强大的原因。
stop_reason 的秘密
在 Agent Loop 中,有一个关键的判断条件:stop_reason。
当 LLM 返回的 stop_reason 是 "tool_use" 时,意味着 LLM 想要使用工具,循环继续。
当 stop_reason 是其他值(比如 "end_turn")时,意味着 LLM 认为任务已完成,循环结束。
这个简单的判断,就是 Agent 知道何时继续工作、何时停止的机制。
📌 关键要点
循环是 Agent 的核心模式
Agent Loop 是一个简单但强大的模式:发送消息 → 获取响应 → 如果需要工具就执行 → 把结果反馈给 LLM → 重复。整个 OpenHarness 的 Agent Loop 核心代码不到 70 行,但它驱动了所有复杂功能。
🧠 检验理解
Agent Loop 什么时候会停止循环?
🧠 检验理解
如果 Agent 需要完成「读取文件 → 修改内容 → 运行测试」这个任务,Agent Loop 大概会循环几次?