拆解但不失全貌:如何在 OpenSpec 中管理复杂 Agent 需求的演进

发布时间:2026/11/3 10:01:53

拆解但不失全貌:如何在 OpenSpec 中管理复杂 Agent 需求的演进 在使用 OpenSpec 驱动复杂 AI Agent如 ChatBI 的多轮澄清、错误修复机制的开发时团队常常会陷入一种进退两难的工程困境大泥球陷阱把整个业务比如整个“WHERE 澄清”的所有分支、重试保护、LLM Prompt 设计全塞进一个 Change变更里。结果导致设计文档长达千行开发周期无限拉长Code Review 根本无从下手代码冲突不断。碎片化陷阱吸取了教训开始拆分把大需求拆成了十几个细小的子模块。但由于拆得太细目录嵌套极深开发者在写代码时“见树不见林”完全不知道当前这个小模块比如 34000 维度消歧的前置依赖是什么以及它为后续哪个功能比如 34100 全量学习做铺垫。如何做到“拆解需求”的同时“不失全貌”核心解法在于用主线 Spec 维护全景图用带前缀的扁平 Change 推进增量用 Proposal 串联故事线。最佳实践 1主干与分支分离 (The Source of Truth)OpenSpec 最重要的一条原则是分离“当前是什么样”与“这次要改成什么样”。主线目录 (openspec/specs/)这是系统的“全景地图”。无论底下拆了多少个 Change当一个变更开发、测试通过并发布后它的契约增量必须合并到这里。新人看这个目录就能了解系统现在的完整能力。变更目录 (openspec/changes/)这是“施工现场”。每一个目录代表一次原子的、可独立验证的交付通常对应一个 PR。切记永远不要在changes/里的某个变更下存放系统的全量规范。变更目录里只存放Delta增量。最佳实践 2使用顺序前缀管理演进 (Sequential Prefixing)当一个大 Epic如 ChatBI 澄清重构被拆散后如果在文件系统中它们只是一堆无序的文件夹逻辑链条就断了。解法为 Change 目录增加两位数的顺序前缀。.agentic/openspec/changes/ ├── 01-foundation-chatbi-clarification/ -- 基础骨架与接口契约 ├── 02-where-clarify-34000-dim-name/ -- 依赖 01处理 34000 分支 ├── 03-where-clarify-34100-full-learning/ -- 依赖 02处理 34100 全量学习 └── 04-where-clarify-retry-guard/ -- 依赖 03增加全局重试保护通过这种方式IDE 的目录树直接变成了一本“目录手册”。谁先谁后、谁是基础谁是进阶一目了然。最佳实践 3让 Proposal 成为故事的串联者在传统开发中需求的依赖关系往往存在于 Jira 或 Jira Ticket 的 Links 里随着代码库的流转这些上下文很容易丢失。在 OpenSpec 中proposal.md不是一个走过场的空文件它的核心职责是声明依赖与边界。每个拆分后的微小 Change都必须在proposal.md中回答三个问题Context (上下文)我在哪例如我是 ChatBI 聚合查询澄清 Epic 的一部分。Dependencies (依赖关系)Depends On: 我依赖谁例如依赖01-foundation提供的 Payload 结构。Blocks: 谁依赖我例如为后续的03-full-learning提供前置的兜底路由。Scope (边界)我这次坚决不做啥防范围蔓延的最强武器。最佳实践 4保持变更目录的扁平化一旦把大需求按逻辑拆成了小的 Change就不需要在 Change 内部再维持复杂的模块嵌套了。错误示范过度嵌套changes/ └── 02-where-clarify-34000-dim-name/ └── designs/ └── chatbi-clarification/ └── where-clarification/ └── 01-design.md正确示范扁平化changes/ └── 02-where-clarify-34000-dim-name/ ├── proposal.md ├── designs/ │ └── 01-dimension-name-ambiguity-34000.md └── tasks/ └── 01-dimension-name-ambiguity-34000.md因为 Change 本身的 Scope 已经足够小其内部的designs和tasks只需要最简单的平铺开发者一眼就能找到今天该干的活。总结OpenSpec 不是为了增加文档负担而是为了把脑海里的隐性上下文变成显性的工程资产。当你发现一个 Change 变得难以描述、设计文档开始写不下去时通常意味着它太大了。果断使用顺序前缀将它拆开用proposal.md拴住它们的关联把最终的拼图放回主线specs。这就是驾驭复杂 Agent 工作流的不二法门。
延伸阅读

更多相关文章

2026/11/3 10:01:53

团队内部 README:在通用项目开发中使用 OpenSpec

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 11:02:35

Design Compiler综合实战:从环境配置到时序收敛的完整闭环

简介:本资源是一份面向数字电路设计初学者与EDA工程师的Design Compiler(DC)中文入门教程,聚焦电路综合核心原理与全流程实操。内容系统讲解综合的转换、优化、映射三阶段机制,深入剖析时序约束设置(如时钟…

2026/11/3 11:02:35

分布式追踪系统设计与实现:从概念到实践

1. 分布式追踪系统设计概述 在现代微服务架构中,一个用户请求往往需要经过多个服务的处理,这就带来了一个关键问题:如何全面追踪一个请求在整个系统中的流转路径?分布式追踪系统正是为解决这个问题而生。它通过记录请求在系统中的…

2026/11/3 11:02:35

Design Compiler综合原理与约束驱动设计实战指南

简介:本资源是一份面向数字电路设计初学者与EDA工程师的Design Compiler(DC)中文入门教程,聚焦电路综合核心原理与全流程实操。内容系统讲解综合的转换、优化、映射三阶段机制,深入剖析时序约束设置(如时钟…

2026/11/3 11:02:35

神经网络池化层原理与PyTorch实战

1. 神经网络中的池化层:为什么我们需要它? 在构建卷积神经网络(CNN)时,池化层(Pooling Layer)是一个不可或缺的组件。MaxPool2d作为最常用的池化操作之一,它的核心作用可以用一个简单的比喻来理解:就像我们看一幅画时&…

2026/11/3 11:02:35

开源法律合规与许可证管理实践指南

1. 开源法律与政策实践的价值解析 开源软件从最初的边缘技术逐渐成为现代IT基础设施的核心组成部分,这一转变使得开源法律与政策问题变得前所未有的重要。2023年GitHub年度报告显示,全球开源项目数量已突破4亿,企业采用开源技术的比例高达99%…

2026/11/3 10:57:33

Windows域信任关系失败:机器账户密码同步与安全通道修复指南

简介:本资源是一份针对Windows域环境中‘工作站和主域间信任关系失败’这一高频故障的实操型排错指南,主要面向企业IT运维人员、系统管理员及虚拟化平台(如VMware、Hyper-V)环境下的技术实践者。文档深入剖析故障成因——域用户在…

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32实战:基于MAX14431数字隔离器的SPI隔离通信方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

工业SPI隔离通信设计:MAX14431BAEE+与STM32L4A6RG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 1:04:48

STM32+NRF24L01无线抢答器:硬件设计、通信协议与低功耗实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/3 7:47:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑