learn-claude-code(Python 小白版)

7 阅读12分钟

github.com/shareAI-lab…

🤖 AI 智能体版本演进详解 (Python 小白版)

从 s01 到 s12,一步步看懂 Claude Code 是如何构建的


📊 版本总览

s01 ──→ s02 ──→ s03 ──→ s04 ──→ s05 ──→ s06 ──→ s07 ──→ s08 ──→ s09 ──→ s10 ──→ s11 ──→ s12
 │       │       │       │       │       │       │       │       │       │       │       │
基础    工具    任务    子智能  技能    上下文  任务    后台    团队    团队    自主    工作区
循环    系统    规划    体      加载    压缩    系统    任务    协作    协议    智能体  隔离

🎯 s01: 基础循环 - "一切的开始"

代码量: 106 行 | 工具数: 1 个

💡 核心思想

就像打乒乓球一样,AI 和用户来回对话,直到 AI 觉得"我说完了"。

🔑 关键代码(只有 20 行核心逻辑)

def agent_loop(messages):
    while True:  # 无限循环
        # 1. 问 AI:你想干嘛?
        response = client.messages.create(
            model=MODEL, messages=messages, tools=TOOLS
        )
        messages.append({"role": "assistant", "content": response.content})

        # 2. AI 说"我说完了",就退出
        if response.stop_reason != "tool_use":
            return

        # 3. AI 想用工具,执行它
        results = []
        for block in response.content:
            if block.type == "tool_use":
                output = run_bash(block.input["command"])  # 执行命令
                results.append({"type": "tool_result", "content": output})

        # 4. 把结果告诉 AI,继续循环
        messages.append({"role": "user", "content": results})

🎓 小白理解

想象你在和一个助手对话:

  • : "帮我查一下文件"
  • 助手: "我需要用 bash 工具执行 ls 命令"(停止原因 = tool_use)
  • 系统: 执行 ls,得到结果
  • 系统: "这是结果:[文件列表]"
  • 助手: "找到了,有这些文件..."(停止原因 = stop)→ 结束

📈 相比上一个版本

这是第一个版本,没有上一个版本 😄


🛠️ s02: 工具系统 - "给 AI 更多'手脚'"

代码量: 148 行 | 工具数: 4 个 | 新增: +42 行

💡 核心思想

s01 只有 bash 一个工具,太局限了。现在给 AI 添加读写文件的能力。

🔑 新增内容

# 工具调度表:菜名 → 厨师
TOOL_HANDLERS = {
    "bash":       lambda **kw: run_bash(kw["command"]),
    "read_file":  lambda **kw: run_read(kw["path"]),
    "write_file": lambda **kw: run_write(kw["path"], kw["content"]),
    "edit_file":  lambda **kw: run_edit(kw["path"], kw["old_text"], kw["new_text"]),
}

🎓 小白理解

就像给助手配备了更多工具:

  • s01: 只有一把螺丝刀(bash)
  • s02: 多了扳手、锤子、钳子(读、写、改文件)

关键 insight: 循环本身一点没变!只是菜单上多了几道菜。

📈 相比 s01 的改动

方面s01s02变化
工具数14+3
核心循环✅ 完全一样无变化
新增能力只能执行命令能读写文件了质的飞跃

📝 s03: 任务规划 - "让 AI 学会做计划"

代码量: 209 行 | 工具数: 5 个 | 新增: +61 行

💡 核心思想

没有计划的 AI 容易"跑偏"。让 AI 先列 TODO 清单,再执行。

🔑 新增内容

class TodoManager:
    """就像做项目前先写 TODO 清单"""

    def update(self, items: list) -> str:
        # 验证:最多 20 个任务
        # 验证:只能有 1 个 "进行中" 的任务
        # 返回:格式化的任务列表

    def render(self) -> str:
        # 显示:[ ] 待完成  [>] 进行中  [x] 已完成

唠叨提醒: 如果 AI 3 轮都不更新 TODO,系统会提醒它:"Update your todos."

🎓 小白理解

就像你要打扫房间,先列个清单:

  1. ☐ 整理书桌
  2. ☐ 扫地
  3. ☐ 倒垃圾

做完一项勾一项,不会遗漏!

📈 相比 s02 的改动

方面s02s03变化
工具数45+1 (todo)
新增能力无规划有 TODO 管理能跟踪进度
智能程度走一步看一步有计划有目标更聪明

👶 s04: 子智能体 - "一个人忙不过来?找帮手"

代码量: 183 行 | 工具数: 5 个 | 新增: -26 行(但功能更强)

💡 核心思想

大任务拆成小任务,每个小任务给一个"干净的"新智能体处理,只返回摘要。

🔑 新增内容

def run_subagent(prompt: str) -> str:
    """创建一个子智能体,给它新的大脑(messages=[])"""
    sub_messages = [{"role": "user", "content": prompt}]

    # 子智能体自己循环最多 30 轮
    for _ in range(30):
        response = client.messages.create(...)
        ...

    # 只返回最终结果,子智能体的"记忆"被丢弃
    return summary

🎓 小白理解

想象你是项目经理:

  • s03: 你自己做所有事,脑子越来越乱
  • s04: 你把任务分给临时工,他们做完给你汇报,你脑子保持清醒

关键 insight: 子智能体有独立的"大脑"(messages),不会污染主智能体的上下文。

📈 相比 s03 的改动

方面s03s04变化
智能体数11+N支持子智能体
上下文越来越长主智能体保持清爽更优雅
任务处理自己扛能外包更灵活

📚 s05: 技能加载 - "按需学习,不要一次性塞太多"

代码量: 225 行 | 工具数: 5 个 | 新增: +42 行

💡 核心思想

不要把所有知识都塞进系统提示词(会太长),而是让 AI 按需加载。

🔑 新增内容

class SkillLoader:
    """两层加载系统"""

    # 第一层:系统提示词里只放技能名称(便宜)
    # "Skills available: pdf, code-review"

    def get_content(self, name: str) -> str:
        # 第二层:AI 调用 load_skill("pdf") 时才加载完整内容
        return f"<skill name='{name}'>{full_content}</skill>"

🎓 小白理解

就像你去图书馆:

  • s04: 把所有书都背在身上(太重了!)
  • s05: 身上只带目录,需要哪本再去拿

关键 insight: 只在需要时加载知识,避免上下文爆炸。

📈 相比 s04 的改动

方面s04s05变化
知识管理技能系统更专业
上下文长度可能很长按需加载更高效
学习方式一次性灌输按需学习更智能

🗜️ s06: 上下文压缩 - "让 AI 能永远工作下去"

代码量: 247 行 | 工具数: 6 个 | 新增: +22 行

💡 核心思想

对话太长会爆,需要三层压缩策略让 AI 能无限工作。

🔑 新增内容

# 三层压缩系统

def micro_compact(messages):
    """第一层:微观压缩
    把旧的工具结果替换成占位符 '[Previous: used bash]'
    """

def auto_compact(messages):
    """第二层:自动压缩
    如果超过 50000 token,保存完整记录到文件,
    然后让 AI 总结,只保留摘要
    """

# 第三层:手动压缩
# AI 可以调用 compact 工具主动触发压缩

🎓 小白理解

就像你写日记:

  • 第一层: 把旧日记收进抽屉,只留最近 3 天的在桌上
  • 第二层: 桌子满了,写个摘要,把详细内容存档案室
  • 第三层: 你觉得该整理了,主动收拾一下

📈 相比 s05 的改动

方面s05s06变化
上下文管理无限增长三层压缩能无限工作
新工具compact主动压缩
持久性会话结束就丢保存到文件可恢复

📋 s07: 任务系统 - "把任务存到硬盘上"

代码量: 247 行 | 工具数: 8 个 | 新增: 0 行(重构)

💡 核心思想

任务要持久化到磁盘,即使上下文压缩了,任务还在。

🔑 新增内容

class TaskManager:
    """任务存到 .tasks/task_1.json 文件里"""

    def create(self, subject: str) -> str:
        # 创建 task_1.json

    def update(self, task_id: int, status: str):
        # 更新状态,支持依赖关系

    def _clear_dependency(self, completed_id: int):
        # 任务 A 完成了,解除任务 B 的阻塞

依赖关系: 任务 B 被任务 A 阻塞,A 完成后 B 才能开始。

🎓 小白理解

就像项目管理系统:

  • s06: 任务只在脑子里,忘了就没了
  • s07: 任务写在白板上,谁都能看到,不会丢

📈 相比 s06 的改动

方面s06s07变化
任务存储内存(易失)磁盘文件(持久)更可靠
依赖管理支持 blockedBy/blocks更强大
任务工具1 个 (todo)4 个 (CRUD)更完善

⏳ s08: 后台任务 - "让 AI 能'多线程'工作"

代码量: 233 行 | 工具数: 6 个 | 新增: -14 行(但功能更强)

💡 核心思想

慢操作(比如编译)不应该阻塞 AI,让它们在后台跑。

🔑 新增内容

class BackgroundManager:
    """后台任务管理器"""

    def run(self, command: str) -> str:
        # 启动新线程执行命令
        # 立即返回 task_id,不等待

    def drain_notifications(self) -> list:
        # 在每次 LLM 调用前,检查完成的任务
        # 把结果注入到对话中

🎓 小白理解

就像你做饭:

  • s07: 你站在锅前等水烧开(浪费时间)
  • s08: 你让水在后台烧,同时切菜,水开了通知你

📈 相比 s07 的改动

方面s07s08变化
执行方式同步阻塞异步非阻塞更高效
并发能力单线程多线程并行处理
新工具任务管理background_run/check后台执行

👥 s09: 团队协作 - "一个人干不完,组个队"

代码量: 405 行 | 工具数: 9 个 | 新增: +172 行

💡 核心思想

多个智能体同时工作,通过"邮箱"(JSONL 文件)通信。

🔑 新增内容

class MessageBus:
    """消息总线:每个智能体有自己的 .team/inbox/alice.jsonl"""

    def send(self, sender: str, to: str, content: str):
        # 往 alice.jsonl 追加一条消息

    def read_inbox(self, name: str) -> list:
        # 读取并清空邮箱

class TeammateManager:
    """队友管理器"""

    def spawn(self, name: str, role: str, prompt: str):
        # 创建新线程运行子智能体
        # 子智能体持久存在,不是用完即弃

🎓 小白理解

就像办公室协作:

  • s08: 你一个人干所有活
  • s09: 你招了几个员工(alice、bob),每人一个邮箱,你给他们在邮箱里派活

关键区别: s04 的子智能体是"临时工",用完就走;s09 的队友是"正式员工",一直在。

📈 相比 s08 的改动

方面s08s09变化
智能体数1N团队协作
通信方式JSONL 邮箱异步通信
生命周期单次持久长期协作

📜 s10: 团队协议 - "团队需要规矩"

代码量: 486 行 | 工具数: 12 个 | 新增: +81 行

💡 核心思想

队友之间需要标准协议:优雅关闭、计划审批。

🔑 新增内容

# 两种协议,都用 request_id 关联

# 1. 优雅关闭协议
shutdown_request -> shutdown_response
# 队长请求关闭 -> 队友同意/拒绝

# 2. 计划审批协议
plan_approval -> plan_approval_response
# 队友提交计划 -> 队长批准/拒绝

🎓 小白理解

就像公司流程:

  • s09: 大家各自干活,有点乱

  • s10:

    • 你想下班?先打申请,老板批准才能走
    • 要做大项目?先写计划,老板批准才能做

📈 相比 s09 的改动

方面s09s10变化
协议shutdown + plan approval有规矩
消息类型3 种5 种更丰富
控制能力可管理

🤖 s11: 自主智能体 - "让 AI 自己找活干"

代码量: 578 行 | 工具数: 14 个 | 新增: +92 行

💡 核心思想

队友不用等派活,空闲时自己扫描任务板,认领任务。

🔑 新增内容

def _loop(self, name: str, role: str, prompt: str):
    while True:
        # 1. 工作阶段:正常干活
        for _ in range(50):
            ...
            if idle_requested:
                break  # 进入空闲阶段

        # 2. 空闲阶段:每 5 秒检查一次
        for _ in range(polls):
            time.sleep(5)

            # 检查邮箱有新消息?
            if inbox:
                resume = True
                break

            # 扫描任务板,有未认领任务?
            unclaimed = scan_unclaimed_tasks()
            if unclaimed:
                claim_task(task["id"], name)
                resume = True
                break

        if not resume:
            shutdown  # 60 秒没活干,下班

🎓 小白理解

就像员工从"被动"变"主动":

  • s10: "老板,我干完了,还有啥活?"
  • s11: "老板,我看任务板上有个活没人干,我认领了开始做"

关键 insight: AI 从"被驱动"变成"自驱动"。

📈 相比 s10 的改动

方面s10s11变化
工作模式被动派活主动认领更自主
空闲处理扫描+认领更智能
生命周期手动管理自动关机更省心

🏗️ s12: 工作区隔离 - "各干各的,互不干扰"

代码量: 780 行 | 工具数: 16 个 | 新增: +202 行

💡 核心思想

用 Git Worktree 创建独立工作目录,任务和目录绑定,并行开发不冲突。

🔑 新增内容

class WorktreeManager:
    """Git 工作区管理"""

    def create(self, name: str, task_id: int):
        # git worktree add -b wt/name .worktrees/name
        # 绑定到任务

    def run(self, name: str, command: str):
        # 在指定工作区执行命令

    def remove(self, name: str, complete_task: bool):
        # 删除工作区,可选标记任务完成

class EventBus:
    """事件总线:记录所有操作到 .worktrees/events.jsonl"""

🎓 小白理解

就像软件公司:

  • s11: 大家都在同一个代码库改,容易冲突
  • s12: 每个人在自己的分支(工作区)开发,完成后合并

关键 insight: 任务管目标,工作区管目录,通过 ID 绑定。

📈 相比 s11 的改动

方面s11s12变化
工作目录共享隔离不冲突
版本控制Git Worktree更专业
可追溯性EventBus可审计

📊 完整对比表

版本核心功能代码行工具数关键改进
s01基础循环1061万事开头难
s02工具系统1484能读写文件
s03任务规划2095有 TODO 管理
s04子智能体1835任务外包
s05技能加载2255按需学习
s06上下文压缩2476无限工作
s07任务系统2478持久化存储
s08后台任务2336异步执行
s09团队协作4059多智能体
s10团队协议48612标准流程
s11自主智能体57814自驱动
s12工作区隔离78016完整系统

🎯 学习建议

第一阶段:理解核心(1-2天)

  1. s01 → 搞懂循环是怎么回事
  2. s02 → 理解工具是如何被调度的
  3. s03 → 学会让 AI 做计划

第二阶段:进阶功能(2-3天)

  1. s04-s06 → 子智能体、技能加载、上下文管理
  2. s07-s08 → 任务系统、后台任务

第三阶段:团队协作(3-5天)

  1. s09-s12 → 多智能体协作、工作区隔离

第四阶段:实战

  1. s_full.py → 看所有功能如何整合
  2. 尝试修改代码,添加自己的工具

🌟 一句话总结每个版本

  • s01: "一个循环走天下"
  • s02: "工具多了路好走"
  • s03: "有计划不跑偏"
  • s04: "大事化小,小事外包"
  • s05: "按需学习,不背书包"
  • s06: "忘记该忘的,记住该记的"
  • s07: "好记性不如烂笔头(存硬盘)"
  • s08: "别傻等,干别的去"
  • s09: "人多力量大"
  • s10: "无规矩不成方圆"
  • s11: "主动找活干"
  • s12: "各干各的,最后合并"

现在就开始吧!  从 python agents/s01_agent_loop.py 开始你的 AI 智能体之旅 🚀