基于Claude Code与Codex构建AI Agent循环:从提示词到自主编程实践
1. 从“提示词”到“Agent循环”,到底解决了什么问题
如果你还在用“一次性提示词”去驱动大模型写代码,那很可能已经过时了。现在更值得关注的,是让模型自己思考、自己执行、自己修正的 Agent 循环。这不仅仅是换个说法,而是从“你问它答”的单次交互,升级为“你定目标,它来执行”的持续协作。
这篇文章要聊的,就是如何用 Claude Code 和 Codex 这类具备代码执行能力的模型,来构建一个能真正跑起来的 Agent 循环。核心价值在于:把复杂的、多步骤的编程任务,拆解成模型能自主推进的迭代过程。比如,你不是直接问“给我写个爬虫”,而是告诉它“目标是获取某网站前十页的标题,请分步执行,遇到错误自己尝试修复”。
这适合两类人看:一是已经熟悉基础提示词,但感觉模型输出不稳定、复杂任务一步到位很难的开发者;二是想探索如何将大模型更深度地集成到自动化工作流或工具链里的工程师。最关键的能力,是让模型具备了“执行-观察-调整”的闭环思维,而不仅仅是“生成”。
2. 理解 Agent 循环:不只是聊天,而是赋予“行动”与“反思”能力
在传统的提示词工程里,我们和模型的对话往往是线性的:用户输入问题 -> 模型输出答案 -> 结束。这种模式对于定义清晰、一步就能完成的任务(例如“将这段 Python 代码转换成 Java”)很有效。但面对“开发一个具有某某功能的脚本”这类开放任务时,单次生成的结果质量波动很大,且难以处理过程中的意外(如依赖缺失、API变化、解析错误)。
Agent 循环的核心思想,是引入 工具(Tools)、记忆(Memory) 和 规划(Planning) 能力,让模型成为一个可以自主行动的智能体。一个典型的循环包含以下几个阶段:
2.1 规划阶段:拆解任务与制定策略
模型接收到一个高层目标(例如:“分析这个 GitHub 仓库最近一个月 issue 的情绪倾向”)。它不会直接生成最终代码,而是先进行规划:
- 任务拆解:将大目标分解为可执行的子任务。例如:1. 克隆仓库;2. 获取 issue 列表;3. 提取 issue 文本;4. 调用情感分析 API;5. 汇总结果并可视化。
- 工具选择:决定每个子任务需要使用什么工具(如:
git命令、requests库、textblob库、matplotlib)。 - 策略制定:考虑可能的风险和备用方案(如:GitHub API 有速率限制,需要分页或添加延迟)。
2.2 执行与观察阶段:运行代码并获取反馈
这是与传统提示词最大的不同。模型生成代码(或命令)后,系统会真正执行这段代码。
- 执行:在一个安全的沙箱环境(如 Docker 容器、受限的本地环境)中运行模型生成的代码。
- 观察:捕获执行的所有输出:标准输出(stdout)、标准错误(stderr)、返回值、生成的文件等。这些反馈是模型进行下一步决策的关键输入。
2.3 评估与调整阶段:基于结果进行迭代
模型收到执行反馈后,对其进行评估:
- 成功判断:子任务是否完成?输出是否符合预期?
- 错误诊断:如果执行失败(抛出异常、返回错误码、输出为空),模型需要分析错误信息(stderr),判断原因(是语法错误、逻辑错误、依赖问题还是环境问题?)。
- 计划调整:根据评估结果,决定下一步行动。是重试当前步骤(可能修改代码),还是跳过,或者调整后续计划?
这个“规划 -> 执行 -> 观察 -> 评估 -> 再规划”的循环会持续进行,直到最终目标达成或达到迭代上限。
2.4 为什么 Claude Code 和 Codex 适合做这件事?
- 代码生成与理解能力强:它们专精于代码,生成的代码片段可执行性高,也能很好地理解执行错误信息。
- 支持长上下文:Agent 循环会产生大量的交互历史(用户指令、模型生成的代码、执行输出)。Claude 等模型的长上下文窗口能很好地记住整个对话和任务状态。
- 对工具使用的描述能力:它们能理解如何调用系统命令、Python 库、REST API 等常见“工具”。
3. 实战环境搭建:安全第一,隔离执行环境
在开始写循环之前,最要紧的不是设计多么精巧的提示词,而是搭建一个安全、可控、可观察的执行环境。让模型生成的代码随意在你的主机上运行是极其危险的。我建议的路径是:先本地模拟,再用容器隔离。
3.1 基础环境准备
你需要一个 Python 环境(建议 3.8+)和必要的库。核心是能与大模型 API 交互,并能执行子进程。
3.2 创建安全的代码执行器
这是 Agent 循环的“手”和“眼睛”。你需要一个函数,它接受一段代码(字符串),在受控环境中运行,并返回结果、错误和状态。
方案一:使用 subprocess 运行独立脚本(简单,适用于命令行任务)
方案二:使用 Docker 容器(推荐,更安全) 为每个任务启动一个干净的、无网络(或受限网络)的 Docker 容器,代码在容器内执行。这能有效防止对宿主机的破坏。
注意:生产环境务必考虑更完善的沙箱方案,如使用
gVisor、Firecracker或专门的代码执行服务。这里 Docker 方案是向安全迈进了一大步。
3.3 初始化你的 AI 助手
以 Claude 和 OpenAI Codex 为例,你需要设置 API 密钥和客户端。
4. 构建核心 Agent 循环:一个可运行的 Python 示例
现在,我们把环境、执行器和模型组合起来。下面是一个简化但完整的 Agent 循环实现,它尝试完成一个具体任务:“获取 Python 官方博客(https://blog.python.org/)的最新文章标题”。
4.1 定义系统提示词(设定 Agent 角色与规则)
系统提示词是 Agent 的“宪法”,它定义了行为准则、可用工具和输出格式。这是成功的关键。
4.2 实现主循环函数
这个函数负责维护对话历史,调用模型,执行代码,并将结果反馈给模型。
4.3 运行并观察
调用这个函数,看看 Agent 如何工作。
运行后,你会在控制台看到类似这样的迭代过程:
提取到代码...
执行结果 - 成功: True
标准输出: (打印出网页的HTML结构)
=== 迭代 2 ===
助手回复:
我看到了HTML结构。文章标题似乎位于 <h2 class=‘entry-title’> 标签内的 <a> 链接里。我来调整代码提取标题。
...