Learn-Claude-Code(1)——Agent Loop
它们不能读取你的文件,不能运行你的测试,不能检查你的错误。想象一下,你被关在一个透明的玻璃房间里。你能看到外面的一切,能分析一切,但就是摸不到。当你第一次使用Claude或ChatGPT时,你可能会惊叹于它们的推理能力与质量。这是 整个循环的灵魂。不到 30 行代码,一个完整的 Agent 就诞生了。我们可以推广到更加复杂的Agent上,但核心循环永远不变。用户:(复制命令) (粘贴到终端) (查
一、LLM的能力与局限
当你第一次使用Claude或ChatGPT时,你可能会惊叹于它们的推理能力与质量。但很快你会发现一个致命缺陷: 它们无法接触现实世界 。
它们不能读取你的文件,不能运行你的测试,不能检查你的错误。每次你想让 AI 执行一个操作,都需要手动复制粘贴结果。想象一下,你被关在一个透明的玻璃房间里。你能看到外面的一切,能分析一切,但就是摸不到。这就是LLM的处境。
LLM的能力:
理解代码逻辑
生成代码片段
分析问题原因
LLM的局限:
不能读取文件系统
不能执行测试用例
不能检查运行时错误
不能调用外部 API
二、解决方法
传统的解决方案是什么?Human-in-the-loop—— 人工充当循环:
用户:"帮我修改这个文件"
LLM:"好的,这是修改后的代码..."
用户:(复制代码) (粘贴到文件) (保存)
用户:"运行一下测试"
LLM:"测试命令是pytest..."
用户:(复制命令) (粘贴到终端) (查看结果)
用户:"测试失败了,错误是..."
LLM:"让我修复..."
看到了吗? 你在做搬运工的工作 ,你成了那个循环。
解决方案:Agent Loop
核心思想极其简单:
def agent_loop(query):
messages = [{"role": "user", "content": query}]
while True:
# 1. 发送给 LLM
response = client.messages.create(
model="claude-3-opus",
system=SYSTEM_PROMPT,
messages=messages,
tools=TOOLS,
max_tokens=8000,
)
# 2. 保存 AI 回复
messages.append({"role": "assistant", "content": response.content})
# 3. 检查是否还需要调用工具
if response.stop_reason != "tool_use":
return # AI 说完了,退出循环
# 4. 执行工具调用,结果反馈给 AI
results = []
for block in response.content:
if block.type == "tool_use":
output = run_bash(block.input["command"])
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": output,
})
messages.append({"role": "user", "content": results})
# 循环回到步骤 1
这就是全部。 不到 30 行代码,一个完整的 Agent 就诞生了。
三、逐步拆解
第一步:用户输入成为对话起点
messages = [{"role": "user", "content": "创建一个 hello.py 文件"}]
这就像你第一次跟 AI 说话。
第二步:LLM 决定行动
LLM 收到消息后,会返回两种内容:
文本回复:"好的,我来创建文件"
工具调用:run_bash("touch hello.py")
第三步:检查停止条件
if response.stop_reason != "tool_use":
return
这是 整个循环的灵魂 。当 AI 不再需要调用工具时(任务完成),循环自动退出。
第四步:执行并反馈
工具执行结果被包装成新的"用户消息"反馈给 AI:
messages.append({
"role": "user",
"content": [{"type": "tool_result", "content": "文件已创建"}]
})
然后循环继续,AI 根据结果决定下一步行动。
四、关键设计决策
1. 为什么只有一个 Bash 工具?
简单就是力量。一个 Bash 工具可以做任何事情:
创建文件: echo "print('hello')" > hello.py
运行测试: pytest tests/
查看目录: ls -la
安装依赖: pip install requests
一个工具 = 无限可能
2. 为什么用 while True?
因为循环次数不可预测。有时 AI 一步就能完成,有时需要多次尝试:
用户:"修复这个 bug"
→ AI 读取文件
→ AI 分析问题
→ AI 修改代码
→ AI 运行测试(失败)
→ AI 重新修改
→ AI 再次测试(成功)
→ AI 完成任务
3. 消息累积的意义
每次循环, messages 列表都在增长,这意味着:
AI记得 之前的操作
AI能从错误中学习
AI有完整的上下文
五、总结
AI Agent 的核心并不复杂。记住这个最简公式:
一个循环 + 一个工具 = 一个 Agent
上述30行循环是所有高级Agent的基础:
基础循环 (本文)
↓
+ 多工具支持 (文件读写、网络请求、数据库)
↓
+ 错误处理与重试机制
↓
+ 记忆系统 (长期记忆、向量检索)
↓
+ 多 Agent 协作
↓
+ 人类监督与干预
我们可以推广到更加复杂的Agent上,但核心循环永远不变。
更多推荐



所有评论(0)