---
title: "4.2 从 PRD 到技术文档"
description: "理解产品文档与技术文档的分工"
chapter: "第四章"
priority: "🟢"
---
# 4.2 从 PRD 到技术文档 🟢
> **阅读完本节后,你将会收获:**
>
> - 理解 PRD 与技术文档的明确分工
> - 掌握技术文档的五大组成部分
> - 学会将技术决策记录为文档
> - 理解文档在 AI 开发中的价值
> 在 PRD 迭代到 5 稿、产品方案基本确定后,除了梳理业务逻辑,还需要记录具体的技术实现方案,也就是技术文档。
---
## 引言
PRD 回答了"做什么",但代码不会直接从 PRD 中生长出来。在动手写代码之前,你需要一份**技术文档**——它是 PRD 到代码的桥梁,是 AI 理解你系统结构的"说明书"。
一份完整的技术文档能让 AI 知道:
- 系统有哪些数据,它们之间什么关系
- 前后端通过哪些接口通信
- 系统由哪些组件构成,业务流程怎么走
- 依赖哪些外部服务
没有这些上下文,AI 只能凭空猜测,生成的代码往往与预期不符。
---
## PRD 与技术文档的分工
两者分工明确:PRD 回答"做什么",技术文档回答"怎么做"。
### PRD(产品需求文档)
| 内容 | 说明 |
|------|------|
| 目标用户 | 谁会使用这个产品 |
| 核心功能 | 产品需要实现哪些功能 |
| 用户交互 | 用户如何完成操作 |
| 边缘场景 | 异常情况如何处理 |
| 业务流程 | 完整的用户操作流程 |
### 技术文档
| 内容 | 说明 |
|------|------|
| 数据模型 | 有哪些表、字段、关系 |
| API 设计 | 接口列表和职责分工 |
| 架构/流程图 | 系统组件关系和业务流程 |
| 第三方集成 | 外部服务和接入方式 |
| 技术决策 | 选型理由和关键权衡 |
### 两者的关系
```mermaid
graph LR
A[PRD
做什么] --> B[技术文档
怎么做]
B --> C[代码实现
实际做]
style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#e8f5e9
```
PRD 中的每个业务实体,都应该在数据模型中找到对应;PRD 中的每个功能点,都应该在 API 设计中找到对应接口。这种对应关系是检验技术文档完整性的标准。
---
## 技术文档的五大组成部分
技术文档不是模板填空,而是思考过程的记录。下面五个组成部分覆盖了从数据到接口、从架构到依赖的完整技术视角。它们相互配合,构成 AI 理解系统的上下文基础。
### 1. 数据模型
数据模型是 PRD 业务概念的技术映射。它描述系统存储哪些数据、数据的结构、以及数据之间的关系。
**为什么需要:**
- 它是 AI 生成数据库代码的基础上下文
- 它是前后端对接的数据契约
- 它决定了系统的扩展性
**需要记录:**
- 有哪些表(对应 PRD 中的业务实体)
- 每个表的字段(对应实体的属性)
- 表之间的关系(一对多、多对多)
**示例:**
```markdown
## 数据模型
### 用户表(users)
- id: 主键
- email: 邮箱(唯一)
- name: 昵称
- created_at: 创建时间
### 文章表(posts)
- id: 主键
- title: 标题
- content: 内容
- author_id: 作者ID(外键,关联 users)
- created_at: 创建时间
关系:一个用户可以有多篇文章(一对多)
```
你在 B 站看评论时,点击评论者的头像就能跳转到 ta 的个人主页——评论本身并没有存这个人的全部资料,只存了一个用户 ID,系统顺着这个 ID 去用户表里查出完整信息。`author_id` 就是这样一个"外键":文章表里只记一个作者 ID,需要时顺着它找到对应的用户。
::: tip ORM Schema 即文档
ORM 让你用代码而非 SQL 语句来定义和操作数据库。Schema 就是用代码写的"表格模板"——规定每列叫什么名字、能填什么类型的数据。使用 Drizzle 等 ORM 时,Schema 定义文件本身就是数据模型文档,能直观展示表结构、字段类型和表关系,AI 也能准确理解。
具体的数据库设计和实现,参见第八章。
:::
### 2. API 设计
API 设计定义系统对外提供的接口,是前后端协作的契约。
**为什么需要:**
- 它是前后端分工的边界
- 它是 AI 生成接口代码的依据
- 清晰的 API 定义能减少沟通成本
**需要记录:**
- 接口路径和 HTTP 方法
- 接口职责(做什么)
- 请求参数和返回值(简要说明)
**示例:**
```markdown
## API 设计
### 文章相关
- GET /api/posts - 获取文章列表
- GET /api/posts/:id - 获取单篇文章
- POST /api/posts - 创建文章(需登录)
- PATCH /api/posts/:id - 更新文章(需本人)
- DELETE /api/posts/:id - 删除文章(需本人)
### 评论相关
- GET /api/posts/:id/comments - 获取文章评论
- POST /api/posts/:id/comments - 发表评论(需登录)
```
::: tip 后续学习
HTTP 协议细节、RESTful 规范、状态码含义等内容,在 4.4 API 与 HTTP 基础中详细讲解。
:::
### 3. 架构/流程图
架构图展示系统组件关系,流程图展示业务逻辑的流转。
**为什么需要:**
- 让 AI 快速理解系统整体结构
- 帮助团队成员建立共同认知
- 发现设计中的遗漏或矛盾
**架构图示例:**
```mermaid
graph TB
A[用户浏览器] --> B[Next.js 前端]
B --> C[Next.js API Routes]
C --> D[PostgreSQL 数据库]
C --> E[OpenAI API]
style A fill:#e1f5fe
style B fill:#c8e6c9
style C fill:#fff9c4
style D fill:#ffccbc
style E fill:#f8bbd9
```
**流程图示例(用户下单流程):**
```mermaid
flowchart TD
A[用户提交订单] --> B{库存是否充足}
B -->|是| C[创建订单]
B -->|否| D[提示库存不足]
C --> E[扣减库存]
E --> F[发起支付]
F --> G{支付是否成功}
G -->|是| H[更新订单状态为已支付]
G -->|否| I[取消订单/恢复库存]
```
::: tip 后续学习
前后端分离架构、全栈框架的工作原理,在 4.5 前后端分离概念中详细讲解。
:::
### 4. 第三方集成
记录系统依赖的外部服务和接入方式。
**为什么需要:**
- 外部服务是系统能力的延伸
- 需要记录关键配置和限制(如限流)
- 便于排查集成问题
**需要记录:**
- 使用了哪些外部服务
- 用来做什么
- 关键配置项(环境变量名)
- 限流、超时等限制
**示例:**
```markdown
## 第三方集成
### OpenAI API
- 用途:AI 对话功能
- 环境变量:OPENAI_API_KEY
- 限制:每分钟 60 次请求
### 高德地图
- 用途:地理位置展示
- 环境变量:AMAP_KEY
```
::: tip 后续学习
API 集成的具体步骤、错误处理、安全实践,在 4.6 API 集成实战中详细讲解。
:::
### 5. 技术决策记录
记录关键的技术选型和决策理由。
**为什么需要:**
- 避免日后反复讨论同一问题
- 帮助新成员理解系统为何如此设计
- 为后续重构或扩展提供背景
**需要记录:**
- 技术栈选择(与 4.1 技术栈决策框架衔接)
- 关键权衡(如 Supabase vs Neon)
- 放弃的方案及原因
**示例:**
```markdown
## 技术决策
### 技术栈:Next.js + PostgreSQL
- 决策理由:全栈框架开发效率高,AI 对 Next.js 理解最好
- 备选方案:Vite + Express(放弃原因:需要维护两个项目)
### 数据库托管:Neon
- 决策理由:轻量、无服务器架构、与 Drizzle 配合好
- 备选方案:Supabase(放弃原因:暂时不需要 Auth 等附加功能)
```
---
## AI 时代的文档价值
在 AI 辅助开发的时代,技术文档的价值被放大了。过去,文档主要是给人看的——帮助团队成员理解系统,或是给自己留备忘。现在,它还多了一个重要读者:AI。
AI 需要上下文才能准确工作。当你告诉它"帮我写一个用户登录功能"时,如果没有文档说明用户表有哪些字段、登录接口的返回格式,AI 只能凭空猜测。猜测意味着试错,试错意味着时间浪费。
一份清晰的技术文档,相当于给 AI 提供了一份"系统说明书"。它知道数据结构,就能生成符合你架构的代码;它知道 API 规范,就能写出前后端能对接的接口。文档越清晰,AI 的猜测越少,开发效率越高。
::: tip 文档是 AI 的上下文
技术文档提供了结构化的上下文,让 AI 知道"用什么技术"、"数据结构是什么"、"接口怎么定义"。没有文档,AI 只能从代码中反推,效率更低,错误更多。
:::
---
## 文档与代码同步
技术文档写完了,但工作还没结束。文档最大的敌人是过时——今天写的规范,下周代码变了,文档就成了"历史档案"。保持文档与代码同步,是技术文档发挥价值的前提。
保持同步的诀窍是"变更即更新":每次修改代码时,问自己这个改动是否影响了文档中的描述?如果是,立即更新。这种习惯一旦养成,维护文档的成本远低于处理文档不一致带来的问题。
文档与代码脱节的后果:
- 新成员根据文档理解架构,却发现代码结构完全不同
- AI 依据过时的 API 设计生成代码,导致集成失败
- 几个月后回顾项目,被自己的文档搞得困惑
**建议做法:**
1. 先写文档后写代码 — 文档是思考的过程
2. 变更即更新 — 代码改动后同步更新文档
3. 定期审查 — 检查文档是否与实际代码一致
---
## 简化实践:最小可行文档
对于个人或小团队,不必拘泥于形式,可以将 PRD 和技术文档合并为**项目文档**。但需要清楚区分哪些是产品层面的思考,哪些是技术层面的决策。
**无论项目大小,以下五大组成部分不可省略:**
| 组成部分 | 为什么不可省略 |
|----------|---------------|
| 数据模型 | AI 需要知道存什么数据 |
| API 设计 | 前后端需要知道怎么通信 |
| 架构/流程图 | AI 需要理解系统结构和业务逻辑 |
| 第三方集成 | AI 需要知道外部依赖和配置 |
| 技术决策 | AI 需要理解选型理由,避免偏离方向 |
**可以简化的:**
- 详细程度:小项目可以用表格代替大段文字
- 文档形式:可以用注释、README 代替独立文档
- 图表工具:可以用文字描述代替复杂图表
**简单的组织方式:**
```markdown
# 项目文档
## 1. 产品部分
### 1.1 需求背景
### 1.2 核心功能
### 1.3 用户故事
## 2. 技术部分
### 2.1 技术栈
### 2.2 数据模型
### 2.3 API 设计
### 2.4 架构图
### 2.5 第三方集成
### 2.6 部署方案
```
---
## 常见问题
### Q1: 文档要写到多详细?
以"能让 AI 理解"为标准。数据模型要明确表和字段,API 要列出接口和职责,架构图要展示组件关系。具体实现细节(如 Drizzle 语法、HTTP 状态码)不需要在 4.2 展开,后续章节会讲。
### Q2: 可以让 AI 生成技术文档吗?
可以。在 PRD 确定后,让 AI 根据需求生成技术方案框架,然后人工审核和补充。技术决策部分需要你亲自确认,因为涉及业务理解和权衡。
### Q3: 代码变了,文档忘了更新怎么办?
养成变更即更新的习惯。或者让 AI 帮忙:告诉它"我改了数据模型,帮我更新技术文档"。
### Q4: 架构图和流程图必须用专业工具画吗?
不需要。用文字描述、ASCII 图、或简单的 Mermaid 语法都可以。关键是把系统结构和业务流程表达清楚。
---
## 本节核心要点
- ✅ PRD 回答"做什么",技术文档回答"怎么做"
- ✅ 技术文档五大组成部分:数据模型、API 设计、架构/流程图、第三方集成、技术决策
- ✅ 五大组成部分不可省略,但可以简化详细程度
- ✅ 保持文档与代码同步,避免"过时地图"
- ✅ 文档是 AI 的重要上下文来源
- ✅ 具体实现细节参见后续章节
理解了技术文档的作用和组成,接下来了解编程的基本构件。
---
## 相关内容
- 前置:[3.3 PRD 编写实战](../03-prd-doc-driven/03-prd-template-guide.md)
- 前置:[4.1 技术栈决策框架](./01-tech-stack-decision.md)
- 详见:[4.3 如何读懂 AI 生成的代码](./03-programming-basics.md)
- 详见:[4.4 API 与 HTTP 基础](./04-api-and-http.md)
- 详见:[4.5 前后端分离概念](./05-frontend-backend-separation.md)
- 详见:[4.6 配置文件格式](./06-config-formats.md)
- 详见:[4.7 API 集成实战](./07-api-integration.md)