---
name: tech-documentation
description: 技术文档编写技能，涵盖 API 文档、架构文档、部署指南和各种技术写作最佳实践。使用此技能创建技术文档、编写 API 文档、创建架构设计文档，或需要部署和运维手册模板时使用。
---

# 技术文档编写技能

技术文档编写技能库，提供全面的技术文档写作方法论和模板。

## 概述

这是一个专注于技术文档编写的综合性技能模块，涵盖各类技术文档的编写规范、模板和最佳实践，帮助团队产出高质量、易理解、易维护的技术文档。

## 核心能力

### 1. API文档
- **OpenAPI/Swagger规范**
- **RESTful API文档**
- **GraphQL文档**
- **gRPC接口文档**
- **API变更日志**
- **认证授权说明**

### 2. 架构文档
- **架构设计文档** (Architecture Design Document)
- **架构决策记录** (Architecture Decision Records, ADR)
- **系统架构图** (C4模型、UML)
- **技术选型报告**
- **架构演进路线图**

### 3. 详细设计文档
- **模块设计文档**
- **数据库设计文档**
- **接口设计文档**
- **算法设计说明**
- **时序图/流程图**

### 4. 部署运维文档
- **部署手册**
- **运维手册**
- **故障处理手册**
- **监控告警配置**
- **性能优化指南**
- **备份恢复流程**

### 5. 用户手册
- **产品使用手册**
- **快速开始指南**
- **常见问题FAQ**
- **故障排查指南**
- **最佳实践**

### 6. 开发者文档
- **贡献指南** (CONTRIBUTING.md)
- **代码规范**
- **开发环境搭建**
- **测试指南**
- **发布流程**

### 7. 项目管理文档
- **项目计划**
- **需求文档**
- **测试计划**
- **发布说明** (Release Notes)
- **变更日志** (CHANGELOG)

### 8. 知识库文档
- **技术博客**
- **案例分析**
- **问题总结**
- **学习笔记**

## 文档编写原则

### 1. 5C原则
- **Clear (清晰)**: 语言简洁，逻辑清晰
- **Concise (简洁)**: 避免冗余，直击要点
- **Complete (完整)**: 信息全面，覆盖所需
- **Correct (正确)**: 内容准确，经过验证
- **Consistent (一致)**: 风格统一，术语规范

### 2. 读者导向
- 了解目标读者（开发者、运维、产品、用户）
- 使用读者熟悉的语言和概念
- 提供不同层次的信息（概览→详细）
- 包含实际示例和最佳实践

### 3. 结构化
- 清晰的层次结构
- 统一的格式和风格
- 目录和导航
- 交叉引用

### 4. 可维护性
- 版本控制
- 变更记录
- 定期审查和更新
- 反馈机制

## 文档模板

### API文档模板

````markdown
# API文档

## 概述
简要描述API的用途和功能

## 基础信息
- **Base URL**: `https://api.example.com/v1`
- **认证方式**: Bearer Token
- **数据格式**: JSON
- **字符编码**: UTF-8

## 认证

### 获取Token
```http
POST /auth/token
Content-Type: application/json

{
  "username": "user@example.com",
  "password": "password"
}
```

**响应**:
```json
{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "token_type": "Bearer",
  "expires_in": 3600
}
```

## 接口列表

### 用户管理

#### 创建用户

**请求**:
```http
POST /users
Authorization: Bearer {token}
Content-Type: application/json

{
  "email": "user@example.com",
  "name": "John Doe",
  "role": "user"
}
```

**请求参数**:

| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| email | string | 是 | 用户邮箱，需唯一 |
| name | string | 是 | 用户姓名 |
| role | string | 否 | 用户角色，默认user |

**响应**: `201 Created`
```json
{
  "id": 123,
  "email": "user@example.com",
  "name": "John Doe",
  "role": "user",
  "created_at": "2024-12-16T10:00:00Z"
}
```

**错误响应**:
- `400 Bad Request` - 参数错误
- `401 Unauthorized` - 未认证
- `409 Conflict` - 邮箱已存在

```json
{
  "error": {
    "code": "EMAIL_EXISTS",
    "message": "Email already registered",
    "field": "email"
  }
}
```

## 错误码

| 错误码 | HTTP状态 | 说明 |
|--------|----------|------|
| EMAIL_EXISTS | 409 | 邮箱已注册 |
| INVALID_TOKEN | 401 | Token无效 |
| RATE_LIMIT_EXCEEDED | 429 | 请求过于频繁 |

## 限流规则
- 每用户 100 请求/分钟
- 超限返回 429 状态码

## 变更日志

### v1.1.0 (2024-12-16)
- 新增用户角色管理接口
- 优化Token过期机制

### v1.0.0 (2024-12-01)
- 初始版本发布
````

### 架构设计文档模板

````markdown
# 架构设计文档

## 文档信息
- **项目名称**: [项目名]
- **文档版本**: 1.0
- **编写日期**: 2024-12-16
- **作者**: [姓名]
- **审阅者**: [姓名]

## 1. 概述

### 1.1 背景
[项目背景和目标]

### 1.2 目标读者
- 开发团队
- 架构师
- 运维团队

### 1.3 术语表
| 术语 | 说明 |
|------|------|
| API | Application Programming Interface |
| QPS | Queries Per Second |

## 2. 需求分析

### 2.1 功能性需求
1. [需求1]
2. [需求2]

### 2.2 非功能性需求
- **性能**: API响应时间 < 200ms
- **可用性**: 99.9% SLA
- **扩展性**: 支持水平扩展

### 2.3 约束条件
- 预算: $10,000/月
- 时间: 3个月开发周期
- 团队: 5人开发团队

## 3. 架构设计

### 3.1 架构风格
选择微服务架构，原因：
- 独立部署需求
- 不同模块有不同的扩展需求
- 多团队并行开发

### 3.2 系统架构图

```
┌─────────┐
│  Client │
└────┬────┘
     │
     ↓
┌─────────────┐
│ API Gateway │
└──────┬──────┘
       │
   ┌───┴───┬─────────┐
   ↓       ↓         ↓
┌─────┐ ┌─────┐  ┌─────┐
│Svc A│ │Svc B│  │Svc C│
└──┬──┘ └──┬──┘  └──┬──┘
   ↓       ↓         ↓
┌─────┐ ┌─────┐  ┌─────┐
│ DB  │ │Cache│  │ MQ  │
└─────┘ └─────┘  └─────┘
```

### 3.3 组件说明

#### API Gateway
- **技术**: Kong
- **职责**: 
  - 请求路由
  - 认证授权
  - 限流
- **部署**: 2个实例

## 4. 技术选型

| 组件 | 技术 | 理由 |
|------|------|------|
| 后端框架 | Spring Boot | 团队熟悉，生态完善 |
| 数据库 | PostgreSQL | 需要ACID，复杂查询 |
| 缓存 | Redis | 高性能，持久化选项 |

## 5. 数据设计

### 5.1 数据模型
```sql
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    email VARCHAR(255) UNIQUE NOT NULL,
    name VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

### 5.2 数据流
```
Write: Client → Service → DB → Cache (async)
Read:  Client → Service → Cache → DB (if miss)
```

## 6. 接口设计

### 6.1 内部接口
- gRPC用于服务间通信
- Protocol Buffers定义接口

### 6.2 外部接口
- RESTful API
- OpenAPI 3.0规范

## 7. 安全设计

### 7.1 认证授权
- OAuth 2.0 + JWT
- RBAC权限模型

### 7.2 数据安全
- TLS 1.3传输加密
- AES-256存储加密

## 8. 部署架构

### 8.1 环境规划
- Dev: 单节点
- Test: 小规模集群
- Prod: 多AZ部署

### 8.2 容器化
- Docker容器
- Kubernetes编排

## 9. 监控运维

### 9.1 监控指标
- 系统指标: CPU, Memory, Disk
- 应用指标: QPS, 响应时间, 错误率
- 业务指标: 订单量, 活跃用户

### 9.2 日志
- ELK Stack
- 日志保留30天

## 10. 风险评估

| 风险 | 概率 | 影响 | 应对措施 |
|------|------|------|----------|
| 性能瓶颈 | 中 | 高 | 压测验证，缓存优化 |
| 安全漏洞 | 低 | 高 | 安全审计，渗透测试 |

## 11. 架构演进

### Phase 1: MVP (2个月)
- 核心功能
- 单region部署

### Phase 2: 优化 (1个月)
- 性能优化
- 监控完善

### Phase 3: 扩展
- 多region
- 高级功能

## 附录

### A. 参考文档
- [技术选型报告](./tech-selection.md)
- [API文档](./api-docs.md)

### B. 变更记录

| 版本 | 日期 | 变更内容 | 作者 |
|------|------|----------|------|
| 1.0 | 2024-12-16 | 初始版本 | John |
````

### 部署文档模板

````markdown
# 部署文档

## 概述
本文档描述 [系统名] 的部署流程和配置说明。

## 环境要求

### 硬件要求
- CPU: 4核及以上
- 内存: 8GB及以上
- 磁盘: 100GB SSD

### 软件要求
- 操作系统: Ubuntu 20.04 LTS
- Docker: 20.10+
- Kubernetes: 1.25+
- Helm: 3.10+

## 部署步骤

### 1. 准备工作

#### 1.1 创建命名空间
```bash
kubectl create namespace myapp-prod
```

#### 1.2 配置镜像仓库密钥
```bash
kubectl create secret docker-registry regcred \
  --docker-server=registry.example.com \
  --docker-username=user \
  --docker-password=password \
  -n myapp-prod
```

### 2. 数据库部署

#### 2.1 部署MySQL
```bash
helm install mysql bitnami/mysql \
  --set auth.rootPassword=secretpassword \
  --set primary.persistence.size=50Gi \
  -n myapp-prod
```

#### 2.2 初始化数据库
```bash
kubectl exec -it mysql-0 -n myapp-prod -- \
  mysql -uroot -psecretpassword < schema.sql
```

### 3. Redis部署

```bash
helm install redis bitnami/redis \
  --set auth.password=redispassword \
  --set replica.replicaCount=2 \
  -n myapp-prod
```

### 4. 应用部署

#### 4.1 部署配置
创建 `values.yaml`:
```yaml
image:
  repository: registry.example.com/myapp
  tag: v1.0.0
  pullPolicy: IfNotPresent

replicaCount: 3

resources:
  limits:
    cpu: 1000m
    memory: 1Gi
  requests:
    cpu: 500m
    memory: 512Mi

env:
  - name: SPRING_PROFILES_ACTIVE
    value: prod
  - name: DB_HOST
    value: mysql.myapp-prod
  - name: REDIS_HOST
    value: redis-master.myapp-prod
```

#### 4.2 执行部署
```bash
helm install myapp ./helm-chart \
  -f values.yaml \
  -n myapp-prod
```

### 5. 配置Ingress

```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: myapp-ingress
  namespace: myapp-prod
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
  tls:
  - hosts:
    - api.example.com
    secretName: myapp-tls
  rules:
  - host: api.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: myapp
            port:
              number: 80
```

```bash
kubectl apply -f ingress.yaml
```

## 配置说明

### 环境变量
| 变量名 | 说明 | 默认值 |
|--------|------|--------|
| SPRING_PROFILES_ACTIVE | Spring Profile | prod |
| DB_HOST | 数据库地址 | localhost |
| REDIS_HOST | Redis地址 | localhost |

### 配置文件
应用配置文件位于 `/app/config/application.yml`

```yaml
server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://${DB_HOST}:3306/myapp
    username: ${DB_USER}
    password: ${DB_PASSWORD}
```

## 验证部署

### 检查Pod状态
```bash
kubectl get pods -n myapp-prod
```

预期输出:
```
NAME                     READY   STATUS    RESTARTS   AGE
myapp-6d4f7b5c9-abc12    1/1     Running   0          2m
myapp-6d4f7b5c9-def34    1/1     Running   0          2m
myapp-6d4f7b5c9-ghi56    1/1     Running   0          2m
```

### 健康检查
```bash
curl https://api.example.com/actuator/health
```

预期响应:
```json
{
  "status": "UP"
}
```

### 查看日志
```bash
kubectl logs -f deployment/myapp -n myapp-prod
```

## 升级部署

### 滚动更新
```bash
helm upgrade myapp ./helm-chart \
  --set image.tag=v1.0.1 \
  -n myapp-prod
```

### 回滚
```bash
# 查看历史
helm history myapp -n myapp-prod

# 回滚到上一版本
helm rollback myapp -n myapp-prod

# 回滚到指定版本
helm rollback myapp 3 -n myapp-prod
```

## 监控配置

### Prometheus
```yaml
apiVersion: v1
kind: ServiceMonitor
metadata:
  name: myapp
  namespace: myapp-prod
spec:
  selector:
    matchLabels:
      app: myapp
  endpoints:
  - port: metrics
    interval: 30s
```

### Grafana Dashboard
导入Dashboard ID: 12345

## 故障排查

### Pod无法启动
1. 查看Pod状态: `kubectl describe pod <pod-name> -n myapp-prod`
2. 查看日志: `kubectl logs <pod-name> -n myapp-prod`
3. 常见原因:
   - 镜像拉取失败
   - 配置错误
   - 资源不足

### 数据库连接失败
1. 检查数据库Pod状态
2. 验证网络连接: `kubectl exec -it myapp-xxx -- nc -zv mysql 3306`
3. 检查密码配置

### 服务无法访问
1. 检查Service: `kubectl get svc -n myapp-prod`
2. 检查Ingress: `kubectl get ingress -n myapp-prod`
3. 检查DNS解析
4. 检查证书状态

## 维护操作

### 备份数据库
```bash
kubectl exec mysql-0 -n myapp-prod -- \
  mysqldump -uroot -p$MYSQL_ROOT_PASSWORD myapp > backup.sql
```

### 扩缩容
```bash
kubectl scale deployment myapp --replicas=5 -n myapp-prod
```

### 重启应用
```bash
kubectl rollout restart deployment/myapp -n myapp-prod
```

## 安全检查清单

- [ ] 使用非root用户运行容器
- [ ] 配置资源限制
- [ ] 启用网络策略
- [ ] 敏感信息使用Secret
- [ ] 定期更新镜像
- [ ] 配置RBAC权限
- [ ] 启用Pod安全策略

## 附录

### A. 常用命令
```bash
# 查看所有资源
kubectl get all -n myapp-prod

# 进入容器
kubectl exec -it <pod-name> -n myapp-prod -- /bin/bash

# 端口转发
kubectl port-forward svc/myapp 8080:80 -n myapp-prod

# 查看事件
kubectl get events -n myapp-prod --sort-by='.lastTimestamp'
```

### B. 联系方式
- 技术支持: support@example.com
- 紧急联系: +86-xxx-xxxx-xxxx

### C. 变更记录
| 版本 | 日期 | 变更内容 | 作者 |
|------|------|----------|------|
| 1.0 | 2024-12-16 | 初始版本 | DevOps Team |
````

## 使用场景

### 新项目启动
```
为新项目创建完整的文档体系：
- README.md
- API文档
- 架构设计文档
- 部署文档
- 贡献指南
```

### API设计评审
```
编写API设计文档，包括：
- 接口定义
- 数据模型
- 错误处理
- 安全认证
```

### 系统交付
```
准备系统交付文档包：
- 系统架构文档
- 部署运维手册
- 用户使用手册
- 故障处理手册
```

### 知识沉淀
```
技术方案总结：
- 问题分析
- 解决方案
- 技术决策
- 经验教训
```

## 集成示例

### 在Agent中使用
```json
{
  "agent": "tech-writer",
  "skills": [
    "tech-documentation",
    "system-architecture",
    "api-design"
  ]
}
```

### 在对话中引用
```
@tech-documentation 请为这个API创建完整的文档
```

## 文档质量检查清单

### 内容质量
- [ ] 信息准确完整
- [ ] 逻辑清晰连贯
- [ ] 示例真实可用
- [ ] 术语统一规范

### 可读性
- [ ] 语言简洁明了
- [ ] 结构层次分明
- [ ] 格式统一美观
- [ ] 配图清晰易懂

### 可维护性
- [ ] 版本信息明确
- [ ] 变更记录完整
- [ ] 联系方式准确
- [ ] 定期审查更新

### 可访问性
- [ ] 目录导航清晰
- [ ] 搜索功能完善
- [ ] 链接有效准确
- [ ] 支持多种格式

## 工具推荐

### 文档编写
- **Markdown编辑器**: Typora, VS Code
- **API文档**: Swagger Editor, Postman
- **图表工具**: Draw.io, PlantUML, Mermaid
- **截图工具**: Snipaste, Xnip

### 文档托管
- **静态站点**: GitBook, Docusaurus, VuePress
- **团队协作**: Confluence, Notion
- **版本控制**: Git, GitHub/GitLab

### 文档生成
- **API文档**: Swagger/OpenAPI, ApiDoc
- **代码文档**: JavaDoc, JSDoc, Sphinx
- **README生成**: readme-md-generator

## 学习资源

### 推荐书籍
- 《技术写作手册》
- 《Docs for Developers》
- 《The Documentation Compendium》

### 在线资源
- [Google Developer Documentation Style Guide](https://developers.google.com/style)
- [Microsoft Writing Style Guide](https://docs.microsoft.com/style-guide/)
- [Write the Docs](https://www.writethedocs.org/)

---

**版本**: 1.0.0  
**最后更新**: 2024-12  
**维护者**: MindForge Team
