---
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<br/>做什么] --> B[技术文档<br/>怎么做]
    B --> C[代码实现<br/>实际做]

    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: 创建时间

关系：一个用户可以有多篇文章（一对多）
```

<DataModelER />

你在 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)
