规格驱动开发,写规格文档(Spec),让规格 = 一等公民,代码只是规格的可执行表达。
SDD 开发过程:
写 Spec 文档 → 从 Spec 提取测试 → 按测试写代码
优势:规格可版本化、可校验、可被 AI 读取
铁律:没有先失败的测试,就没有生产代码。
红-绿-重构循环:
| 阶段 | 做什么 | 验证 |
|---|---|---|
| RED 红灯 | 写一个最小的失败测试 | 运行测试,看到 FAILED |
| GREEN 绿灯 | 写最少的代码让测试通过 | 运行测试,看到 PASSED |
| REFACTOR 重构 | 在测试保持绿灯的前提下优化代码 | 运行测试,仍然 PASSED |
核心:在看到一个失败的测试之前,你不能写任何生产代码。这个失败是扳机,确认你正在解决一个真实存在的问题,而不是臆想。
Agent = Model(模型) + Harness(缰绳)
Harness 是模型之外的一切,即:约束系统、反馈回路、工具环境、验证机制。
人类设计约束 → AI 写代码 → 机器执行(工程师的产出从代码变成了约束系统)
工程演进:
| 年份 | 阶段 |
|---|---|
| 2023 | Prompt Engineering 提示词工程 |
| 2025 | Context Engineering 上下文工程 |
| 2026 | Harness Engineering 驭缰工程 |
linters/check_report_structure.pyvalidate_report() + pytest 测试套件一切决策、规范、计划都必须以版本化的文件提交到仓库。
Spec 文档(
spec/research_spec.md)就是这个记录系统的体现。报告的输出格式、约束条件 C1-C7、API 依赖——全部写在仓库里,而不是在脑子里。
| 门禁 | 内容 |
|---|---|
| 第一道门 | 结构 Lint 检查 |
| 第二道门 | 单元测试 |
| 第三道门 | 集成测试 |
Ralph = 一个 Bash 脚本编排器,反复启动 AI Agent,每次迭代清空上下文,让 Agent 在循环中自主完成任务。
人类唯一要做的就是写一份 PROMPT.md(任务描述文件),然后坐等结果。
| 信条 | 原文 | 含义 |
|---|---|---|
| 信条1 | Fresh Context Is Reliability | 新鲜的上下文就是可靠性 |
| 信条2 | Backpressure Over Prescription | 用背压代替处方 |
| 信条3 | The Plan Is Disposable | 计划是用完即弃的 |
| 信条4 | Disk Is State, Git Is Memory | 磁盘是状态,Git 是记忆 |
| 信条5 | Steer With Signals, Not Scripts | 用信号引导,不用脚本控制 |
| 信条6 | Let Ralph Ralph | 让 Ralph 做 Ralph 的事 |
每轮迭代只让 Agent 戴一顶帽子,专注做一件事:
Planner 规划者(拆解任务) → Builder 构建者(写测试+写代码) → Critic 审查者(独立验证) → Finalizer 终结者(确认完成)
| 迭代 | 角色 | 任务 |
|---|---|---|
| 迭代1 | Planner 规划者 | 读取 PROMPT.md,拆解任务为具体步骤,把计划写入 scratchpad.md(便签本),然后交给下一轮 |
| 迭代2 | Builder 构建者 [TDD] | 严格遵循 TDD |
| 迭代3 | Critic 审查者 | 独立重跑 pytest |
| 迭代4 | Finalizer 终结者 | 确认所有 PROMPT.md 中的需求都已满足,输出 LOOP_COMPLETE 信号,循环终止 |
接到任务 → 加载相关 Skill → 执行任务 → 自动创建新 Skill → 持久化记忆
| 特性 | 说明 |
|---|---|
| 自主创建技能 | 处理完复杂任务后,自动生成可复用的 Skill 文件 |
| 技能自我改进 | 每次使用 Skill 时,如果发现可以优化的地方,自动更新 Skill 内容 |
| 持久化记忆 | SQLite 数据库存储对话历史和研究成果,支持语义搜索,跨会话调用 |
| 技能 | 对应支柱 | 说明 |
|---|---|---|
| test-driven-development | TDD | 任务遵循 TDD |
| writing-plans | Inform | 任务开始前生成一份详细的实现计划 |
| systematic-debugging | Verify | 强制执行四阶段流程:先找根因,再动手修 |
| subagent-driven-development | 编排循环 | 每个步骤分配独立子 Agent,干净上下文,双阶段审查 |
| 概念 | 定位 | 说明 |
|---|---|---|
| Harness Engineering | 方法论(道) | 告诉你该怎么设计约束系统 |
| Ralph | 编排器(骨架) | 让 Agent 在循环中自主工作 |
| Hermes Agent | 完整产品(器) | 集编排、学习、记忆、多平台于一体 |
| 概念 | 定位 | 对应产物 |
|---|---|---|
| SDD 规格驱动 | 什么是对的 | spec/research_spec.md |
| TDD 测试驱动 | 证明它是对的 | tests/test_reporter.py |
| Harness 驭缰工程 | 保证它一直对 | AGENTS.md + linters/ |
| Agent 编排 | AI 自己做对 | Ralph / Hermes |
| 维度 | Harness Engineering | Ralph | Hermes Agent | Stock Research |
|---|---|---|---|---|
| 告知层 Inform | AGENTS.md | PROMPT.md | Skills 技能系统 | AGENTS.md + Spec |
| 约束层 Constrain | 自定义 Linter | 帽子系统(角色隔离) | 工具白名单 | check_report_structure.py |
| 验证层 Verify | 自动化测试 | Critic 独立审查 | 约 3000 个测试 | 85 个测试 + CI/CD |
| 学习能力 | -- | -- | 自动创建/改进 Skill | -- |
我想撰写一个软件SPEC,需求是: 输入一个股票代码(如 "600519"),自动从多个维度联网搜索信息, 通过 Qwen 大模型进行分析,生成结构化深度研究报告。 使用到 akshare 方便后续进行测试和代码生成,给我SPEC即可
Step1,撰写一个SPEC Step2,撰写测试用例 这里有C1-C7的约束,帮我先撰写测试代码(我打算用TDD的模式驱动开发,先不用开发) 测试代码放到 tests文件夹中,到时候实际代码会放到 src文件夹中 Step3,运行测试用例 运行测试用例,使用TDD 红-绿-重构循环 Step4,@research_spec.md 基于这个SPEC文档完成完整的项目,这里会用到 akshare 和 qwen大模型(可以使用环境变量中的 DASHSCOPE_API_KEY)
pytest| 文件 | 说明 |
|---|---|
stock-research/spec/research_spec.md | Spec 文档 |
stock-research/AGENTS.md | Harness 路标 AGENTS.md |
stock-research/ralph_demo.py | Mini Ralph |
| Ralph 官方库 | Ralph 官方仓库 |
| Hermes Agent 官方库 | Hermes Agent 官方仓库 |
本文作者:NewBoy
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!