乐于分享
好东西不私藏

技术提案、架构设计、实现设计:三类设计文档如何区分

技术提案、架构设计、实现设计:三类设计文档如何区分

AI生成文档已经很容易了,但是AI生成的到底是哪一类文档,最好还是能界定下,否则很容易混用。

很多团队会把 PEP、RFC、架构图、API 文档、协议说明、状态机、表结构都笼统地叫成“设计文档”。这会带来一个实际问题:大家在不同阶段讨论不同粒度的事情,却以为自己在讨论同一件事。

更清晰的分法是把它们拆成三个术语:

  • 技术提案:这个变化该不该做?

  • 架构设计:系统整体怎么组织?

  • 实现设计:模块具体怎么落地?

三类设计文档在开发中的位置

这三个术语不是“写得粗还是写得细”的区别,而是决策层级不同。技术提案决定方向,架构设计决定结构,实现设计决定落地。

三类设计文档的决策层级差异(不是“详略”差异)

一、三个术语的定义

1. 技术提案

首先,技术提案是面向团队、社区或标准组织的决策型文档,用来论证一个重要技术变化是否应该被接受。

它回答的问题是:

  • 为什么要做?

  • 解决什么问题?

  • 影响范围多大?

  • 是否破坏兼容?

  • 有哪些替代方案?

  • 为什么选择这个方案?

  • 谁需要达成共识?

典型产物包括:

  • PEP

  • RFC

  • IETF Internet-Draft

  • Kubernetes KEP

  • Go proposal

  • Rust RFC

  • GitHub proposal issue

经典例子:

  • Python PEP 831: Frame Pointers Everywhere

    • https://peps.python.org/pep-0831/

  • Rust RFC Book

    • https://rust-lang.github.io/rfcs/

  • IETF Internet-Draft: IPv8

    • https://www.ietf.org/archive/id/draft-thain-ipv8-00.html

  • Go Proposal Process

    • https://github.com/golang/proposal

  • Kubernetes Enhancements / KEPs

    • https://github.com/kubernetes/enhancements

技术提案不是单纯的“怎么写代码”。它的核心是**论证与共识**。一份技术提案可以包含架构设计和实现设计片段,但它最重要的任务是回答:

> 这个变化是否值得进入项目、语言、协议或生态?

例如 Rust RFC 流程明确要求重大语言、库、编译器变化通过 RFC 达成共识。Go proposal 流程也把“brief issue → 讨论 → 必要时 design doc → 接受/拒绝 → 实现”作为重要变化的路径。

2. 架构设计

其次,架构设计是系统级设计文档,用来描述系统由哪些核心部分组成,以及这些部分如何协作、部署、扩展和演进。

它回答的问题是:

  • 系统分成哪些组件?

  • 组件之间如何通信?

  • 控制流和数据流是什么?

  • 哪些组件承担核心职责?

  • 部署拓扑是什么?

  • 如何满足可用性、扩展性、安全性和可维护性?

典型产物包括:

  • 系统架构图

  • 组件图

  • 部署图

  • 数据流图

  • 控制平面 / 数据平面说明

  • 高层模块边界说明

经典例子:

  • Kubernetes Cluster Architecture

    • https://kubernetes.io/docs/concepts/architecture/

  • GitLab Architecture Overview

    • https://docs.gitlab.com/development/architecture/

  • PostgreSQL Architectural Fundamentals 

    • https://www.postgresql.org/docs/current/tutorial-arch.html

  • PostgreSQL Internals Overview

    • https://www.postgresql.org/docs/current/overview.html

最新/热门项目例子:

  • OpenClaw Gateway Architecture

    • https://docs.openclaw.ai/architecture

  • OpenClaw Architecture Overview

    • https://clawdocs.org/architecture/overview/

  • opencode Architecture Overview

    • https://deepwiki.com/sst/opencode/1.2-architecture-overview

架构设计的重点是边界、职责和连接关系。它不应该试图替代每个模块的实现设计。好的架构设计让读者能快速建立系统地图:哪里是入口,哪里是状态存储,哪里做调度,哪里负责执行,哪里承担扩展点。

3. 实现设计

最后,实现设计是模块级或功能级设计文档,用来描述某个具体能力如何被编码实现、验证和交付。

这里我建议用“实现设计”,而不是传统说法“详细设计”。“详细设计”容易被误解成“写得很细”,但“实现设计”更准确:它面向编码落地。

它回答的问题是:

  • API 怎么定义?

  • 字段含义是什么?

  • 状态如何流转?

  • 协议消息格式是什么?

  • 数据库表怎么设计?

  • 并发、幂等、错误、重试怎么处理?

  • 测试点在哪里?

典型产物包括:

  • API reference

  • protocol spec

  • schema definition

  • state machine

  • class/function design

  • sequence diagram

  • database schema

  • implementation notes

经典例子:

  • Kubernetes API Conventions

    • https://github.com/kubernetes/community/blob/main/contributors/devel/sig-architecture/api-conventions.md

  • Kubernetes API Reference

    • https://kubernetes.io/docs/reference/

  • PostgreSQL Frontend/Backend Protocol: Message Formats

    • https://www.postgresql.org/docs/current/protocol-message-formats.html

  • GitLab Merge Requests API

    • https://docs.gitlab.com/api/merge_requests/

最新/热门项目例子:

  • OpenClaw Agent Loop

    • https://docs.openclaw.ai/agent-loop

  • OpenClaw Gateway Protocol

    • https://docs.openclaw.ai/gateway/protocol

  • OpenClaw Brain & Hands

    • https://clawdocs.org/architecture/brain-and-hands/

  • opencode Session Management

    • https://deepwiki.com/sst/opencode/8-session-management

  • opencode Tool System

    • https://deepwiki.com/sst/opencode/27-tool-system

  • opencode Provider Architecture

    • https://deepwiki.com/sst/opencode/22-provider-architecture

实现设计不是把代码提前翻译成文字。它的价值是把接口、状态、异常、协议、数据结构和测试约束说清楚,让开发、测试和调用方对“怎么落地”有共同理解。

二、三者的核心差异

总结:

  • 技术提案决定方向。

  • 架构设计决定结构。

  • 实现设计决定落地。

三、开发流程中的顺序

重大变化通常是:

技术提案 → 架构设计 → 实现设计 → 编码实现 → 测试验证 → 发布反馈

普通功能通常是:

架构设计 → 实现设计 → 编码实现

小功能或 bugfix 可能是:

实现设计 → 编码实现

这不是严格瀑布流程,而是逐步收敛。技术提案负责把“不确定的方向”变成“被接受的方向”;架构设计负责把“方向”变成“系统结构”;实现设计负责把“系统结构”变成“可编码任务”。

开发过程中也会反向修正:

  • 实现太复杂 → 回头调整实现设计

  • 模块边界不合理 → 回头调整架构设计

  • 架构假设不成立 → 回头修改或否决技术提案

四、经典案例:Kubernetes

Kubernetes 是最适合说明这三类文档的开源项目之一。

技术提案:

  • Kubernetes Enhancements / KEPs

    • https://github.com/kubernetes/enhancements

架构设计:

  • Kubernetes Cluster Architecture

    • https://kubernetes.io/docs/concepts/architecture/

实现设计:

  • Kubernetes API Conventions

    • https://github.com/kubernetes/community/blob/main/contributors/devel/sig-architecture/api-conventions.md

  • Kubernetes API Reference

    • https://kubernetes.io/docs/reference/

Kubernetes 的架构设计讲的是 control plane、worker node、`kube-apiserver``etcd``kube-scheduler``kube-controller-manager``kubelet``kube-proxy` 和 Pods 之间的关系。它帮助读者理解 Kubernetes 集群由哪些大块组成。

Kubernetes 的实现设计则进入 API 对象层面。例如 API Conventions 讨论 `kind``apiVersion``metadata``spec``status`、REST verbs、defaulting、concurrency control 等具体规则。它不再只是讲“组件如何协作”,而是规定“对象如何表达、如何更新、如何保持一致”。

这组对比很典型:

  • 架构设计:

    • Kubernetes 集群有哪些组件,它们如何协作?

  • 实现设计:

    • 一个 Kubernetes API 对象有哪些字段,这些字段有什么语义?

五、经典案例:PostgreSQL

PostgreSQL 适合说明架构设计和实现设计在粒度上的差异。

架构设计:

  • PostgreSQL Architectural Fundamentals

    • https://www.postgresql.org/docs/current/tutorial-arch.html

  • PostgreSQL Internals Overview

    • https://www.postgresql.org/docs/current/overview.html

实现设计:

  • PostgreSQL Frontend/Backend Protocol: Message Formats

    • https://www.postgresql.org/docs/current/protocol-message-formats.html

PostgreSQL 的架构文档讲 client/server 模型、多进程模型、server process、client frontend、backend process,以及查询如何经过 parser、rule system、planner/optimizer、executor。

而协议消息格式文档直接到字节级别:`AuthenticationOk``StartupMessage``Query``DataRow` 等消息由 `Byte1``Int32``String`、长度字段等组成。

这组对比可以这样理解:

  • 架构设计:

    • PostgreSQL 客户端和服务端如何协作,查询如何被处理。

  • 实现设计:

    • 客户端和服务端之间每一个协议消息的字节格式是什么。

如果你想看更直观的 PostgreSQL 内部进程架构图,可以参考 Hironobu Suzuki 的非官方但很经典的资料:

  • The Internals of PostgreSQL: Process Architecture

    • https://www.interdb.jp/pg/pgsql02/01.html

六、经典案例:GitLab

GitLab 适合产品工程团队理解“系统组件图”和“业务 API 文档”的区别。

架构设计:

  • GitLab Architecture Overview

    • https://docs.gitlab.com/development/architecture/

实现设计:

  • GitLab Merge Requests API

    • https://docs.gitlab.com/api/merge_requests/

GitLab 的架构文档讲 NGINX、GitLab Workhorse、Puma、Sidekiq、Redis、PostgreSQL、Gitaly、GitLab Shell、GitLab Pages、Registry 等组件之间如何连接。

Merge Requests API 文档则进入具体业务接口:路径、请求参数、响应字段、错误码、分页、字段废弃和版本演进。

这组对比是:

  • 架构设计:

    • GitLab 这个产品由哪些服务组成,服务之间怎么通信。

  • 实现设计:

    • Merge Request 这个业务能力有哪些 API,参数和返回字段是什么。

七、最新热门项目:opencode

opencode 是一个开源 coding agent 项目。它的官方文档更偏使用、配置和扩展,架构图不算多;但 DeepWiki 对源码做了索引,能快速看到系统架构和内部模块结构。使用 DeepWiki 时要注意:它不是项目官方设计文档,而是源码索引生成的分析材料,适合辅助理解,需要和官方文档、源码互相验证。

架构设计:

  • opencode Architecture Overview

    • https://deepwiki.com/sst/opencode/1.2-architecture-overview

  • OpenCode Official Docs

    • https://opencode.ai/docs/

实现设计:

  • opencode Session Management

    • https://deepwiki.com/sst/opencode/8-session-management

  • opencode Tool System

    • https://deepwiki.com/sst/opencode/27-tool-system

  • opencode Provider Architecture

    • https://deepwiki.com/sst/opencode/22-provider-architecture

  • opencode Permission and Question System

    • https://deepwiki.com/sst/opencode/12-permission-and-question-system

a)opencode 的系统架构可以概括为:

这属于架构设计,因为它说明的是主要组件、通信路径和系统分层。

b)opencode 的实现设计则关注更具体的问题:

  • 一次用户 prompt 如何进入 session?

  • agent loop 如何推进?

  • tool call 如何被权限系统拦截或批准?

  • provider/model 如何解析?

  • 事件如何同步给 UI?

  • 消息如何持久化?

这些问题已经进入编码落地层面。

八、最新热门项目:OpenClaw

OpenClaw 是一个 self-hosted agent / personal assistant 项目。它很适合说明现代 agent 项目中的“系统架构”和“内核/实现流程”的区别。

架构设计:

  • OpenClaw Gateway Architecture

    • https://docs.openclaw.ai/architecture

  • OpenClaw Community Architecture Overview

    • https://clawdocs.org/architecture/overview/

实现设计:

  • OpenClaw Agent Loop

    • https://docs.openclaw.ai/agent-loop

  • OpenClaw Gateway Protocol

    • https://docs.openclaw.ai/gateway/protocol

  • OpenClaw Brain & Hands

    • https://clawdocs.org/architecture/brain-and-hands/

OpenClaw 的系统架构以 Gateway 为中心。Gateway 是长期运行的进程,连接聊天渠道、CLI、Web UI、移动节点、插件和 agent runtime。

这张图表达的是架构设计层面的问题:

  • 哪些外部入口会进入系统?

  • Gateway 承担什么职责?

  • LLM、工具、记忆、心跳和插件分别放在哪里?

  • 系统如何被组织成一个可运行整体?

OpenClaw 的实现设计则可以看 Agent Loop 和 Gateway Protocol。

Agent Loop 讲的是一次 agent run 如何被执行:输入进入、上下文组装、模型推理、工具执行、流式回复、状态持久化。Gateway Protocol 则讲 WebSocket 传输、`connect` 握手、request/response/event framing、roles、scopes、auth、pairing、versioning 等协议细节。

这张图表达的是实现设计层面的问题:

  • 一次输入如何变成模型调用?

  • 模型如何触发工具?

  • 工具结果如何被持久化?

  • 回复如何流式返回?

所以同一个项目里可以同时存在两类图:

  • 系统架构图:

    • 看 Gateway、渠道、节点、Brain、Hands、Memory 如何组成系统。

  • 实现流程图:

    • 看 Agent Loop 内部如何把一条消息变成动作和回复。

九、如何判断一份文档属于哪一类

可以用关键词判断。

如果文档主要出现这些内容:

motivation, proposal, alternatives, drawbacks, compatibility, consensus

它多半是:技术提案

如果文档主要出现这些内容:

architecture, component, control plane, data flow, deployment, service, node

它多半是:架构设计

如果文档主要出现这些内容:

API, schema, field, message format, state, protocol, endpoint, error code

它多半是:实现设计

更简单的判断公式是:

  • 问“该不该做” → 技术提案

  • 问“整体怎么组织” → 架构设计

  • 问“具体怎么实现” → 实现设计

十、它们在团队开发中的实际作用

技术提案的作用:

  • 避免未经论证的大改动

  • 记录背景、权衡和反对意见

  • 帮助团队或社区达成共识

  • 给后续架构设计设定目标和约束

架构设计的作用:

  • 统一系统理解

  • 明确模块边界

  • 降低跨团队协作成本

  • 提前暴露扩展性、安全性、部署和性能风险

实现设计的作用:

  • 把架构拆成可开发任务

  • 降低接口歧义

  • 指导开发和测试

  • 减少返工

  • 让代码评审有依据

一个很实用的判断是:

  • 如果团队在技术提案阶段争论字段名,说明讨论过细。

  • 如果团队在实现设计阶段还在争论是否要做这个方向,说明前置决策缺失。

  • 如果团队编码时才发现模块边界不清,说明架构设计不足。

十一、常见误区

误区一:技术提案就是架构设计。

纠正:技术提案可以包含架构设计,但它的核心是论证和共识。

误区二:架构设计越详细越好。

纠正:架构设计应该明确边界和关键决策,不应该替代实现设计。

误区三:实现设计就是把代码提前写成文档。

纠正:实现设计不是代码翻译,而是把接口、状态、异常、协议和测试点说清楚。

误区四:所有功能都需要三份文档。

纠正:小变更可以只做实现设计,甚至直接编码;重大变更才需要技术提案。

十二、总结

三者的区别可以压缩成三句话:

  • 技术提案解决“为什么做、该不该做”。

  • 架构设计解决“系统由什么组成、如何协作”。

  • 实现设计解决“具体接口、流程、状态和协议如何落地”。

它们不是文档模板的区别,而是决策层级的区别。

一个成熟项目通常会同时需要这三类文档:

  • 技术提案保证方向可被接受。

  • 架构设计保证系统结构可演进。

  • 实现设计保证代码实现可交付。

读开源项目文档时,如果能分清这三类,你就不容易被“设计文档”这个大词混淆。你能知道当前文档是在讨论方向、结构,还是落地;也能判断一个团队到底缺的是共识、架构,还是实现细节。

–end–