llm-coding-agent 教程:200 行 Python 搭一个 Claude Code 风格的编码 Agent(附完整代码)

TL;DR
Simon Willison 用 Claude Fable 5 从零搭建了一个 Claude Code 风格的 Python 编码 Agent,已发布到 PyPI。本文拆解它的核心架构——5 个工具、一个 Agent 主循环、以及不到 200 行就能跑起来的完整实现,附上可直接运行的代码和踩坑提示。
1. 背景:为什么还要自己搭一个 Coding Agent?
Claude Code、Codex、Cursor——市面上的 AI 编码工具已经够多了。但 Simon Willison 决定自己动手,理由很直接:他的 LLM 库 已经演化成一个 Agent 框架,他想验证它能不能支撑一个完整的 coding agent。更重要的是,自己搭意味着你能理解每一行代码在做什么——这恰好呼应了 Geoffrey Litt 在 AIE 大会上说的"理解才能参与"。
他用 Claude Fable 5 写了 spec、实现了所有代码、跑了测试、写了文档,最后发布到 PyPI。你可以这样安装:
uvx --prerelease=allow --with llm-coding-agent llm code
2. 核心架构:五个工具 + 一个主循环
llm-coding-agent 的架构极其简洁。它只有 5 个工具,每个工具就是一个 Python 函数:
| 工具 | 功能 | 对应 Claude Code 的哪个能力 |
|---|---|---|
edit_file |
精确字符串替换(old_string → new_string) | Edit 工具 |
execute_command |
在项目根目录执行 shell 命令 | Bash 工具 |
list_files |
按 glob 模式列出文件 | Glob 工具 |
read_file |
读取文件,返回 cat -n 格式的行号输出 | Read 工具 |
write_file |
创建或覆盖文件(自动创建父目录) | Write 工具 |
Fable 还贴心地加了一个 search_files 工具做正则搜索——这其实是 Simon 没要求的,但 Fable 自己判断应该加上。
Agent 主循环和 Claude Code 一样:读用户指令 → 调用工具 → 拿结果 → 继续调用工具 → 返回最终结果。关键区别在于,llm-coding-agent 把这个循环暴露为 Python API:
from llm_coding_agent import CodingAgent
agent = CodingAgent(
model="gpt-5.5", # 也可以用 claude-sonnet-5-20250914
root="/path/to/project",
approve=True # False 就是 --yolo 模式
)
agent.run("Fix the failing test in tests/test_parser.py")
3. 上手实操:5 分钟搭起来
第一步,确保有 Python 3.10+ 和 uv:
# 安装 uv(如果没有)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 安装 llm-coding-agent(预发布版)
uvx --prerelease=allow --with llm-coding-agent llm code
第二步,配置 API key。llm-coding-agent 复用了 LLM 库的配置,所以如果你已经配过 llm keys set openai,直接就能用。没有的话:
pip install llm --break-system-packages
llm keys set openai
# 粘贴你的 OpenAI API key
第三步,跑起来:
# 交互模式(需要你审批每个操作)
llm code
# --yolo 模式(自动执行,适合小任务)
llm code --yolo
# 只允许特定命令
llm code --allow "pytest*" --allow "git diff*"
试试让它写个 ASCII 艺术时钟:
llm code --yolo
> mkdir /tmp/demo && cd /tmp/demo && create a simple Python CLI app for telling the time in ascii art
Simon 实测的结果——GPT-5.5 生成了一个完整的 Swift 命令行 ASCII 时钟。你的体验取决于模型,但核心循环是一样的。
4. 踩坑提示
工具权限控制是重点。 --yolo 模式会让 Agent 自动执行所有命令,包括 rm -rf。建议日常使用 --allow 白名单:
llm code --allow "pytest*" --allow "git*" --allow "python*"
模型选择影响很大。 Fable 5 和 GPT-5.5 在编码任务上表现最好,但成本也最高。Simon 在 7 月 3 日的笔记里分享了一个技巧:告诉 Agent “对小任务用 Sonnet/Haiku 做子代理,自己判断”——这能省不少 token。
这个项目还在 alpha 阶段。 功能远不如 Claude Code 完善,但代码量极少(核心不到 500 行),非常适合学习和魔改。
5. 这意味着什么
llm-coding-agent 的意义不在于"又一个编码工具",而在于它证明了 coding agent 的核心循环可以压缩到几百行 Python。当你能看懂每一行代码时,你对 AI 写代码这件事的掌控力就完全不同了——你不会再盲目信任,而是能精确判断它哪里可能出错。
正如 Armin Ronacher 在 7 月 4 日的文章里指出的,即使是 Opus 4.8 这样的顶级模型,在自定义工具调用上也可能出错。理解工具层的实现细节,能帮你更快定位问题。
6. 参考资料
更多推荐

所有评论(0)