我构建了一个构建事物的东西:Tres Comas Scrum
I’m happy to translate the article for you, but I’ll need the full text of the post (excluding the source link you already provided). Could you please paste the article’s content here? Once I have it, I’ll translate it into Simplified Chinese while preserving the original formatting, markdown, and any code blocks.
设置
架构极其简单:
- CEO 持有产品待办事项,规划冲刺,审查交付并决定项目何时“完成”。
- Coder 接收任务单,阅读现有代码库,并以 XML 格式交付代码。
- Tester 每隔 4 个冲刺醒来一次,检查已构建的内容,并根据出现的缺陷或缺失生成新的故事。
每次交付都会在隔离的沙箱环境(Linux 上的 bwrap)中进行测试,然后才写入磁盘。如果测试失败,Coder 会收到错误信息并重新尝试——最多 3 次。
就是这样。没有编排框架,没有 LangChain,也没有 AutoGen。只有一个 SQLite 数据库、几百行 Python 代码,以及大量 time.sleep(4) 来保持在速率限制之内。
什么出了问题(精彩回顾)
- Coder一直在 XML 标签内写 ````python`。 每个冲刺。我们添加了正则去除 markdown 反引号,然后在系统提示中加入了可视示例,但仍偶尔出现。
code.py是保留名称。 我们的测试运行器名为code.py,Python 一直导入标准库的code模块。将其重命名为test_runner.py,解决了两小时的调试。sys.exit()让 bwrap 生气。 沙箱拦截了 pytest 的退出调用并抛出异常。移除sys.exit()包装后立即解决。- Coder 交付了 0 个文件且测试通过。 没有交付 = 没有测试文件 = 运行器返回
success: True。添加检查:“无文件 = 失败” 和 “无测试文件 = 失败”。自此 Coder 稍微有点动力了。 argparse不在 stdlib 导入列表中。 我们的系统在将代码内联到测试运行器前会剥除外部导入。我们忘记了许多 stdlib 模块。添加了argparse、subprocess、random、zipfile、gzip、statistics、decimal等,并根据需要扩展列表。
做得好的地方
-
CEO 自己找到了正确的构建顺序。它先从基础(Agent、LLM、Memory、Tools)开始,然后是运行循环,再是代理间通信,然后是工具库,最后是文档。这正是资深开发者会做的事,且没有任何明确指示。
-
测试员在 Sprint 8 的反馈真的很有用:
“测试通过,但实际上无法使用框架。总线模式已实现,但代理没有使用它。没有 CLI,没有示例,没有错误处理。”
CEO 将其转化为六个可执行的故事,全部在 Sprint 12 前修复。
-
到 Sprint 12 时,生成的框架已经具备:
- 一个带有
run()和run_autonomous()的Agent类 - 一个在代理之间进行发布/订阅的
MessageBus - 带搜索和标签功能的持久化
Memory - 一个包含 16 个预配置工具的
Tools注册表 - 在 LLM 提供者中的错误处理
- 一个从 YAML 加载代理的
ConfigManager - 一个 README
对于最初零行代码的项目来说,已经相当不错。
- 一个带有
元概念
这个实验的全部目的在于看看代理是否能够构建你用来构建代理的框架。他们大多做到了。生成的代码到处都有 Pydantic V2 警告,并且 Message 没有继承 BaseModel,因此在生产环境中调用 model_dump() 会崩溃——但整体架构是可靠的。
下一步是使用 该框架 来重写 此构建器:由它们自身创建的代理进行编排,在本地使用 qwen3:8b 运行于 Ollama。层层递进的乌龟式结构。
试一试
项目在 GitHub 上: Tres Comas Scrum
你需要 Linux(用于沙箱的 bwrap)、Python 3.10+,以及 OpenRouter API 密钥。免费层足以运行完整构建——只需将模型设置为 arcee-ai/trinity-large-preview:free 并等待。
温馨提示:这会花费几小时,Coder 有时会返回空的 XML,你也会在某个时刻盯着一个莫名其妙的 IndentationError。这也是体验的一部分。
名字来源于硅谷的 Tres Comas 龙舌兰酒。三个代理,三个逗号。Russ Hanneman 可能不会印象深刻,但他大概还是会尝试投资。