目标驱动的编码代理
该项目包含一个使用OpenAI代理SDK构建的简单、完全沙盒、目标驱动的编码代理。该代理旨在通过迭代编写代码、运行测试并根据结果改进其方法来解决编码挑战。
特性
- 自主代理循环: 在明确目标的驱动下,代理自主决定使用哪些工具以及何时完成任务。
- OpenAI代理SDK: 基于官方的OpenAI代理SDK构建,用于管理代理工作流。
- 沙盒环境: 所有文件操作和代码执行都在使用Docker的安全容器化环境中进行。
- MCP(模型上下文协议): 利用MCP实现代理与其沙盒工具(包括文件系统管理器和代码执行器)之间的通信。
- 标杆管理: 包括一套用于根据Polyglot Benchmark练习运行代理以衡量性能的套件。
______________________________________________________________________
设计和架构报告
1.代理设计
代理的核心逻辑是围绕 openai-agents 图书馆,提供主要 Runner.run 循环。代理按照一个简单的迭代“实施-测试-改进”循环进行操作:
- 了解目标: 代理被赋予了一个高级目标,其中包括解决方案文件和测试文件的路径。
- 实施: 代理读取相关文件并写入初始实现。
- 测试: 它执行提供的
pytest沙盒中的命令executor工具。 - 优化: 它分析了
exit_code和stdout从试运行开始。
- 如果 exit_code 是 0,它断定任务已完成并终止其循环。 - 如果 exit_code 不是 0,它分析错误并尝试在下一次迭代中修复它们。
整个循环是自主的;代理本身根据其操作的结果决定是继续迭代还是完成迭代。
2.砂箱
安全性和安全性是通过使用Docker和Docker Compose的基于容器的沙盒方法实现的。该环境由中定义的两个主要服务组成 containers/docker-compose.mcp.yaml:
filesystem-server: 一个可以访问专用隔离目录的容器(sandbox_volumes).它通过MCP端点公开文件管理工具(读取、写入、列出文件)。代理只能在此目录中操作,阻止对主机文件系统的任何访问。executor-server: 第二个提供代码执行功能的容器,也限制在同一个沙盒目录中。它暴露了一个sandbox_run_command可以执行shell命令的工具,例如运行pytest.
这种架构确保代理的整个工作区(包括文件操作和代码执行)严格限制在 sandbox_volumes 目录,提供安全和隔离的环境。
3.MCP集成
代理使用模型上下文协议(MCP)与其沙盒工具进行通信。两台MCP服务器正在监听 http://127.0.0.1:7101 (文件系统)和 http://127.0.0.1:7102 (遗嘱执行人)。代理通过OpenAI代理SDK连接到这些端点,以发现和调用可用的工具。
- 文件系统工具: 代理使用以下工具
sandbox_read_file和sandbox_write_file与代码交互。 - 执行器工具: 代理人使用
sandbox_run_command执行工具pytest套件并验证其实现。
这些工具的结构化输入和输出(例如,包含JSON的 exit_code, stdout, stderr)对于代理分析其行为结果的能力至关重要。
4.基准学习和成果
该代理已针对Polyglot Benchmark的“仿射密码”挑战进行了测试。该过程提供了几个关键见解:
- 初始故障
gpt-4o-mini: 最初的运行与gpt-4o-mini模型不成功。代理取得了进展,但经常陷入“回归循环”——修复问题的一部分会破坏以前工作的代码,代理无法在10圈内恢复。 - 提示歧义: 初始目标提示提供了两种不同的跑步方式
pytest,这导致代理在调试自己的测试命令时感到困惑和浪费时间。 - 成功之路: 通过做出两个关键改变取得了成功:
1. 简化提示: 目标提示被简化,以提供一个单一、明确的 pytest 命令。这消除了代理人的困惑。 1. 使用更强大的模型: 切换到 gpt-4o 该模型提供了必要的推理能力,以克服编码挑战的逻辑复杂性。更强大的模型没有陷入回归循环,能够有效地实现正确的逻辑。
- 最终结果: 有了精炼的提示和
gpt-4o模型,代理能够 一次性解决“仿射密码”基准测试,展示了清晰有效的工作流程。还调试了成功报告机制,以正确反映运行结果。
______________________________________________________________________
设置和安装
按照以下步骤设置和运行代理。
先决条件:
- Python 3.11+
- 码头工人
uv(或pip)用于Python包管理
1.克隆存储库:
git clone git@github.com:GuyOhm/goal-driven-coding-agent.git
cd goal-driven-coding-agent2.设置Python环境: 创建并激活虚拟环境。
python -m venv .venv
source .venv/bin/activate3.安装依赖关系:
uv pip install -r requirements.txt4.配置环境变量: 复制示例 .env 文件并添加您的OpenAI API密钥。
cp .env.example .env
# Now, edit .env and add your OPENAI_API_KEY5.启动沙盒环境: 使用Docker Compose启动沙盒MCP服务器。
docker compose -f containers/docker-compose.mcp.yaml up --build -d这将在后台启动文件系统和执行器容器。
______________________________________________________________________
如何运行代理
完成一个目标
您可以使用以下命令给代理任何编码任务 --goal 争论。
uv run python main.py --goal "Implement a function in `test.py` that returns 'hello world'"运行基准套件
要针对整个Polyglot Benchmark套件运行代理:
uv run python main.py --benchmarks将跑步限制在第一次 N 基准:
uv run python main.py --benchmarks --benchmarks-limit 3使用特定模型(如 gpt-4o):
uv run python main.py --benchmarks --model gpt-4o停止沙盒
完成后,停止Docker容器:
docker compose -f containers/docker-compose.mcp.yaml down