游乐游手机版
首页/AI教程/文章详情

从零手写ClaudeCode智能体循环项目实战笔记

时间:2026-05-29 15:38
第一章 智能体循环(Agent Loop)——手写ClaudeCode核心机制 [ s01 ] s02 > s03 > s04 > s05 > s06 | s07 > s08 > s09 > s10 > s11 > s12 一、面临的问题 即便语言模型的推理能力再出色,它也无法直接触碰真实世界——它

第一章 智能体循环(Agent Loop)——手写ClaudeCode核心机制

[ s01 ] s02 > s03 > s04 > s05 > s06 | s07 > s08 > s09 > s10 > s11 > s12

【从零手写ClaudeCode:learn-claude-code 项目实战笔记】(1)The Agent Loop (智能体循环)

一、面临的问题

即便语言模型的推理能力再出色,它也无法直接触碰真实世界——它不能读取文件、无法运行测试、也不会查看报错信息。在没有自动循环机制的情况下,每次调用工具后,你都需要手动将结果粘贴回模型。说白了,你本人就是那个笨重的循环。

二、解决方案

如何突破这一瓶颈?引入一个自动循环,让模型能够持续地思考→行动→观察→再思考,直至任务完成。这就是经典的ReAct(Reasoning and Acting)范式。下面的ASCII图清晰展示了其骨架结构:

+--------++-------++---------+
| User | ---> | LLM | ---> | Tool |
| prompt|| || execute |
+--------++---+---++----+----+
^||
| tool_result|
+----------------+
(loop until stop_reason != "tool_use")

一个简单的退出条件控制着整个流程。循环不断运行,直到模型决定不再调用任何工具。s01_agent_loop.py 所要达到的效果,就是用不到50行代码,把你手动搬砖的那部分工作彻底自动化。

这就是经典的ReAct范式——一种让AI边思考边行动的交互模式,使大语言模型能够像人类一样推理→行动→观察→再推理,从而逐步解决复杂的实际问题。

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Thought │ ──→ │ Action │ ──→ │ Observation │ ──→ │ Thought │
│ (思考) │ │ (行动) │ │ (观察) │ │ (再思考) │
└─────────────┘ └─────────────┘ └─────────────┘ └──────┬──────┘
│
任务完成 ←────────────────────────────┘
给出答案

三、工作原理详解

  1. 将用户的 prompt 作为第一条消息送入对话。
messages.append({"role": "user", "content": query})
  1. 将消息列表和工具定义一起发送给大模型。我们定义的 TOOLS 列表就像一本“工具使用手册”,它作为输入的一部分被喂给大模型。
response = client.messages.create(
model=MODEL, system=SYSTEM, messages=messages,
tools=TOOLS, max_tokens=8000,
)
  1. 追加助手响应,然后检查 stop_reason——如果模型没有调用工具,则循环结束。
messages.append({"role": "assistant", "content": response.content})
if response.stop_reason != "tool_use":
return
  1. 逐一执行每个工具调用,收集返回结果,并以 user 消息的形式追加到对话中。然后回到第2步继续。
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. 将所有步骤组装成一个完整的函数:
def agent_loop(query):
messages = [{"role": "user", "content": query}]
while True:  # 循环开始,理论上可以无限跑
# ... 这里是 LLM 思考的过程 ...
response = client.messages.create(
model=MODEL, system=SYSTEM, messages=messages,
tools=TOOLS, max_tokens=8000,
)
messages.append({"role": "assistant", "content": response.content})
# ... 这里就是那个“唯一的退出条件” ...
if response.stop_reason != "tool_use":
return
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})

不到30行代码,这就是一个完整的智能体核心。后面11个章节都会在这个循环上叠加各种机制——而循环本身始终不变。

四、变更内容一览

组件之前之后
Agent loop(无)while True + stop_reason
Tools(无)bash (单一工具)
Messages(无)累积式消息列表
Control flow(无)stop_reason != "tool_use"

五、动手试一试

在运行之前,别忘了先添加 .env 配置文件。

cd learn-claude-code
python agents/s01_agent_loop.py

可以试试以下 prompt(英文提示词对 LLM 效果更好,中文也可以):

  1. Create a file called hello.py that prints "Hello, World!"
  2. List all Python files in this directory
  3. What is the current git branch?
  4. Create a directory called test_output and write 3 files in it

六、补充说明

block 长什么样?

将 block 打印出来,也就是 response.content,它是一个 ToolUseBlock 对象。

ToolUseBlock(
id='bash_0',             # 工具调用唯一标识符
caller=None,             # 调用者信息(教学版中为None)
input={'command': 'echo \'print("Hello, World!")\' > hello2.py'},  # ← 核心参数
name='bash',             # 工具名称
type='tool_use'           # 块类型
)
来源:https://juejin.cn/post/7613332545426653218
上一篇安全生产总结PPT高效生成 AI写作提示词与范文参考 下一篇计算机视觉是什么?核心原理与AI百科知识详解
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
内网RPA离线部署从依赖打包到7×24无人值守踩坑与避坑方案
AI教程 · 2026-07-02

内网RPA离线部署从依赖打包到7×24无人值守踩坑与避坑方案

这三年,内网RPA项目接了不下二十个。每次开局都像闯关——断网、缺依赖、多机同步、定时执行、批量分发、源码保护、AI离线化,八个坑一个比一个深。今天把这些实战经验整理出来,希望能帮正在内网搞自动化的兄弟们少踩点雷。 一、内网无网络环境怎么部署RPA流程:先搞清楚什么叫“真离线” 很多工具宣传“支持本

水利工程师用WorkBuddy写洪水报告效率提升3倍
AI教程 · 2026-07-02

水利工程师用WorkBuddy写洪水报告效率提升3倍

WorkBuddy开发者分享季 水利工程师AI提效实战:用WorkBuddy撰写洪水影响评价报告,效率提升3倍 WorkBuddy 效率 人工智能 开发工具 一、我是谁,为什么需要AI 先介绍一下自己——我是一名水利工程师,在湖南长沙的一家小型水利设计公司任职。当前行业环境不太

日志服务数据加工规则洞察仪表盘使用指南
AI教程 · 2026-07-02

日志服务数据加工规则洞察仪表盘使用指南

数据加工诊断仪表盘 想实时掌握日志服务加工功能的运行状态?直接从加工列表页点击那个“规则洞察”按钮,仪表盘就会立刻呈现出来。入口就在那儿,不绕弯子。 跳转后,你可以按作业名称、实例ID或源LogStore来筛选任务状态。比如下边这张图,展示的是当前实例ID(90c9d47714dbb807d47c1

基于RFID的固定资产管理系统技术架构与工程实践
AI教程 · 2026-07-02

基于RFID的固定资产管理系统技术架构与工程实践

固定资产管理难题是众多企事业单位的普遍困扰,资产数量动辄数千件,且广泛分布于不同部门、楼层乃至园区。传统人工盘点方式在工程维度上始终面临三大关键瓶颈:采集效率低下、数据闭环中断、状态同步滞后。使用条码枪逐一扫描标签,识别距离通常不超过30厘米,操作人员需逐个寻找并扫描,盘点效率完全受限于人力。面对5

WorkBuddy实战用AI搭建A股智能盯盘助手省心高效
AI教程 · 2026-07-02

WorkBuddy实战用AI搭建A股智能盯盘助手省心高效

炒股的朋友们想必都深有体会——每天重复盯盘、查行情、分析板块轮动,这一整套流程下来耗费大量精力。手动翻查数据不仅身心俱疲,还很容易错过关键买卖节点。今天我们就来聊聊如何打造一款趁手的盯盘工具,借助AI替你分担这些重复性工作。 背景:盯盘的核心痛点 股民都有同感——每天不只要查询单只股票的实时行情,还