用 Claude Agent SDK 搭了个自动修 Bug 的 AI Agent,20 行 Python 搞定(附踩坑记录)

42 阅读1分钟

用 Claude Agent SDK 搭了个自动修 Bug 的 AI Agent,20 行 Python 搞定(附踩坑记录)

如果你最近在做 AI Agent 相关的项目,大概率被 Anthropic 昨天发的 Claude Managed Agents 刷屏了——$0.08/小时跑一个云端 Agent,Notion、Sentry、Rakuten 都已经在用了。

但今天我不聊 Managed Agents 这个托管服务,我聊它底下那个更实用的东西:Claude Agent SDK

这个 SDK 是 Claude Code 的底层引擎,Anthropic 把它开源了。你用 Python 写 20 行代码,就能搭一个能读文件、改代码、跑命令的 AI Agent。不需要定义状态机,不需要画 DAG 图,不需要 LangGraph 那套复杂的编排。

我用它做了个自动修 Bug 的 Agent,跑了一下午,记录下过程和踩的坑。

装环境:3 分钟搞定

# 创建项目
mkdir bugfix-agent && cd bugfix-agent
python3 -m venv .venv && source .venv/bin/activate

# 装 SDK,就一个包
pip install claude-agent-sdk

# 配 API Key
echo "ANTHROPIC_API_KEY=你的key" > .env

SDK 依赖很轻,不会像 LangChain 那样拉一堆包。装完直接能用。

需要 Python 3.10+,如果你还在用 3.8,先升级。

写一个有 Bug 的文件

先准备一个故意写了 Bug 的 Python 文件,让 Agent 来修:

# utils.py
def calculate_average(numbers):
    total = 0
    for num in numbers:
        total += num
    return total / len(numbers)  # 空列表会 ZeroDivisionError

def get_user_name(user):
    return user["name"].upper()  # user 是 None 会炸

def parse_config(config_str):
    pairs = config_str.split(",")
    result = {}
    for pair in pairs:
        key, value = pair.split("=")  # 没有 = 号的项会 ValueError
        result[key] = value
    return result

三个函数,三个边界条件没处理。这种 Bug 在 code review 里天天见。

核心代码:20 行 Agent

# agent.py
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

async def main():
    async for msg in query(
        prompt="Review utils.py for bugs that would cause crashes on edge cases. Fix all issues you find.",
        options=ClaudeAgentOptions(
            allowed_tools=["Read", "Edit", "Glob"],
            permission_mode="acceptEdits",
        ),
    ):
        if isinstance(msg, AssistantMessage):
            for block in msg.content:
                if hasattr(block, "text"):
                    print(block.text)
                elif hasattr(block, "name"):
                    print(f"[Tool] {block.name}")
        elif isinstance(msg, ResultMessage):
            print(f"\n✅ Done: {msg.subtype}")

asyncio.run(main())

跑一下:

python agent.py

Agent 会自动执行这几步:

  1. Glob 找到 utils.py
  2. Read 读文件内容
  3. 分析代码,找出边界条件问题
  4. Edit 直接改文件,加上防御性代码

整个过程大概 15 秒。跑完打开 utils.py,三个函数都被加上了边界检查:

# Agent 修复后的 utils.py
def calculate_average(numbers):
    if not numbers:
        return 0
    total = 0
    for num in numbers:
        total += num
    return total / len(numbers)

def get_user_name(user):
    if user is None:
        return ""
    return user.get("name", "").upper()

def parse_config(config_str):
    if not config_str or not config_str.strip():
        return {}
    pairs = config_str.split(",")
    result = {}
    for pair in pairs:
        if "=" not in pair:
            continue
        key, value = pair.split("=", 1)
        result[key.strip()] = value.strip()
    return result

不只是加了 if 判断,还把 split("=") 改成了 split("=", 1) 防止值里有等号的情况。这个细节我自己 review 都不一定能想到。

它和 LangChain/LangGraph 有什么区别

用过 LangGraph 的都知道,搭一个能改文件的 Agent 至少要:定义 State、写 Node 函数、配 Tool Schema、画 Graph、处理路由逻辑。一套下来几百行代码。

Claude Agent SDK 的思路完全不同:你只管描述任务,Claude 自己决定用什么工具、按什么顺序执行。

对比项LangGraphClaude Agent SDK
编排方式手动定义状态图模型自主决策
搭一个文件修复 Agent200+ 行20 行
工具路由你写路由逻辑模型根据 prompt 判断
模型支持任意模型仅 Claude
适合场景需要精确控制流程任务目标明确,执行路径灵活

简单说:流程固定选 LangGraph,目标明确但路径灵活选 Claude Agent SDK。

踩坑记录

坑 1:permission_mode 没设对,Agent 每步都要你确认

第一次跑的时候,Agent 每读一个文件都弹确认提示,改一行代码也要确认。原因是默认的 permission_mode"default",所有写操作都需要人工批准。

改成 "acceptEdits" 就好了——自动批准文件编辑,但其他危险操作(比如跑 shell 命令)还是会拦住。

# ❌ 默认模式,每步都要确认
options=ClaudeAgentOptions(allowed_tools=["Read", "Edit", "Glob"])

# ✅ 自动批准编辑
options=ClaudeAgentOptions(
    allowed_tools=["Read", "Edit", "Glob"],
    permission_mode="acceptEdits",
)

坑 2:项目目录下文件太多,Agent 会迷路

我一开始在一个有 200 多个文件的项目里跑,Agent 花了 30 秒用 Glob 扫描目录结构,然后读了一堆不相关的文件,token 消耗飙到 5 万。

解决办法:在 prompt 里直接指定文件路径,别让它自己找。

# ❌ 让 Agent 自己找
prompt="Review the project for bugs"

# ✅ 直接告诉它看哪个文件
prompt="Review utils.py for bugs that would cause crashes. Fix all issues."

坑 3:API Key 不能用 Claude.ai 的账号

SDK 只认 API Key,不能用 Claude.ai 的消费者账号登录。去 console.anthropic.com 申请 API Key,充值后才能用。

这个坑文档里其实写了,但很多人(包括我)第一反应是拿 Claude.ai 的账号试。

进阶:加个 system_prompt 让它更专业

默认的 Agent 修 Bug 风格比较保守。你可以加 system_prompt 让它按你的代码规范来:

options=ClaudeAgentOptions(
    system_prompt="You are a senior Python developer. When fixing bugs: 1) Add type hints 2) Add docstrings 3) Use early returns 4) Follow PEP 8",
    allowed_tools=["Read", "Edit", "Glob"],
    permission_mode="acceptEdits",
)

加了这个之后,Agent 修完的代码会带上类型注解和文档字符串,质量明显提升。

实际成本

跑一次大概 3000-8000 tokens,按 Sonnet 的价格算不到 0.01。用ManagedAgents托管跑额外加0.01。用 Managed Agents 托管跑额外加 0.08/小时,空闲不计费。在 CI/CD 里跑代码审查这种按需场景,费用基本可以忽略。

最后

我觉得这个 SDK 最大的价值是把 Agent 开发的门槛拉低了——不用学 LangGraph 那套编排概念,直接写 Python 就行。但它也有明显的局限:只能用 Claude,不支持其他模型;复杂工作流还是得靠 LangGraph 这类框架。

SDK 开源的,pip install claude-agent-sdk 就能装,感兴趣可以拿自己项目里的代码试试。

你在项目里用过 AI Agent 自动修 Bug 吗?效果怎么样?评论区聊聊。