Skip to content

撰写员 (Writer)

专业级别: 专家级 | 匹配度评分: 95% | 平均完成时间: 1-3小时

撰写员是 Claude Code 的技术文档和内容创作专家,专门负责创建高质量的技术文档、用户指南、API文档和代码注释。作为沟通技术与用户之间的桥梁,撰写员具备深度的技术理解能力和卓越的文字表达技巧。

核心优势

  • 文档质量: 生成的技术文档获得98%的用户满意度评价
  • 创作效率: 相比传统文档编写,效率提升300%以上
  • 多样性: 支持15+种文档类型,覆盖技术文档全场景
  • 国际化: 支持多语言文档创作,确保全球用户可访问性

最佳协作组合

协作模式推荐组合成功率使用场景
文档创作铁三角撰写员 + 架构师 + 产品经理98%技术产品文档
API文档专家组撰写员 + 执行器 + 调试器96%接口文档编写
用户体验团队撰写员 + UI/UX设计师 + 产品经理94%用户指南制作
知识管理组合撰写员 + 数据分析师 + 审查员92%知识库建设

核心职责

主要能力

  • 技术文档: 创建清晰、准确的技术说明
  • API文档: 生成完整的接口文档
  • 用户指南: 编写易懂的使用教程
  • 代码注释: 提供规范的代码说明

专业领域

  • Markdown 文档编写
  • API 规范文档
  • 用户体验文档
  • 开发者文档

使用场景

何时使用写作者

适合的场景

bash
# 文档编写
"为这个新功能写一份用户指南"

# API文档
"生成这个REST API的完整文档"

# 代码注释
"为这个复杂函数添加详细注释"

# README文件
"创建一个专业的项目README"

不适合的场景

bash
# 代码实现 (应使用执行器)
"实现一个登录功能"

# 代码调试 (应使用调试器)
"这个函数为什么不工作"

# 系统设计 (应使用架构师)
"设计一个微服务架构"

文档类型

1. 技术文档

README.md 示例

markdown
# ProjectName

[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Version](https://img.shields.io/npm/v/project-name.svg)](https://npmjs.com/package/project-name)
[![Build Status](https://img.shields.io/travis/username/project-name.svg)](https://travis-ci.org/username/project-name)

> 一句话描述你的项目功能

## 特性

- **高性能**: 基于现代框架构建
- **安全可靠**: 完整的安全机制
- **响应式**: 支持多设备访问
- **国际化**: 多语言支持

## 快速开始

### 环境要求

- Node.js >= 16.0.0
- npm >= 8.0.0
- 数据库 (MySQL/PostgreSQL)

### 安装步骤

```bash
# 克隆项目
git clone https://github.com/username/project-name.git

# 进入目录
cd project-name

# 安装依赖
npm install

# 配置环境
cp .env.example .env

# 启动项目
npm run dev

基本使用

javascript
import { ProjectName } from 'project-name';

const app = new ProjectName({
  apiKey: 'your-api-key',
  endpoint: 'https://api.example.com'
});

// 基本用法
const result = await app.process(data);
console.log(result);

文档

贡献

我们欢迎任何形式的贡献!请阅读 贡献指南 了解详情。

开发流程

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启 Pull Request

如有问题,请联系 your-email@example.com

2. API 文档

REST API 文档示例

markdown
# API 参考文档

## 基础信息

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

## 认证

### 获取访问令牌

```http
POST /auth/token
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "your-password"
}

响应示例:

json
{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "refresh_token_here"
}

使用令牌

所有API请求都需要在请求头中包含访问令牌:

http
Authorization: Bearer {access_token}

用户管理

获取用户列表

获取系统中的用户列表,支持分页和筛选。

http
GET /users?page=1&limit=20&role=admin

请求参数:

参数类型必需描述
pageinteger页码,默认为1
limitinteger每页数量,默认为20,最大100
rolestring用户角色筛选
statusstring用户状态: active, inactive

响应示例:

json
{
  "success": true,
  "data": {
    "users": [
      {
        "id": 1,
        "name": "张三",
        "email": "zhangsan@example.com",
        "role": "admin",
        "status": "active",
        "created_at": "2024-01-15T10:00:00Z",
        "updated_at": "2024-01-16T15:30:00Z"
      }
    ],
    "pagination": {
      "current_page": 1,
      "per_page": 20,
      "total": 150,
      "total_pages": 8
    }
  }
}

错误响应:

json
{
  "success": false,
  "error": {
    "code": "INVALID_PARAMETER",
    "message": "页码必须是正整数",
    "details": {
      "field": "page",
      "value": "-1"
    }
  }
}

创建用户

创建新的用户账户。

http
POST /users
Content-Type: application/json

{
  "name": "李四",
  "email": "lisi@example.com", 
  "password": "secure-password-123",
  "role": "user"
}

请求体参数:

参数类型必需描述验证规则
namestring用户姓名长度2-50字符
emailstring邮箱地址有效的邮箱格式
passwordstring用户密码最少8位,包含字母和数字
rolestring用户角色admin, user, guest

成功响应 (201 Created):

json
{
  "success": true,
  "data": {
    "user": {
      "id": 151,
      "name": "李四",
      "email": "lisi@example.com",
      "role": "user",
      "status": "active",
      "created_at": "2024-01-20T14:30:00Z"
    }
  },
  "message": "用户创建成功"
}

错误响应 (400 Bad Request):

json
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "输入数据验证失败",
    "details": [
      {
        "field": "email",
        "message": "邮箱地址已被使用"
      },
      {
        "field": "password", 
        "message": "密码强度不足"
      }
    ]
  }
}

错误码说明

错误码HTTP状态码描述
INVALID_TOKEN401访问令牌无效或已过期
INSUFFICIENT_PERMISSION403权限不足
RESOURCE_NOT_FOUND404请求的资源不存在
VALIDATION_ERROR400请求参数验证失败
RATE_LIMIT_EXCEEDED429请求频率超过限制
INTERNAL_ERROR500服务器内部错误

速率限制

为了保护API服务,我们对请求频率进行了限制:

  • 认证端点: 每分钟最多5次请求
  • 数据查询: 每分钟最多100次请求
  • 数据修改: 每分钟最多50次请求

超过限制时,API将返回 429 Too Many Requests 状态码。

SDK 和示例

JavaScript SDK

bash
npm install api-client-sdk
javascript
import ApiClient from 'api-client-sdk';

const client = new ApiClient({
  baseURL: 'https://api.example.com/v1',
  token: 'your-access-token'
});

// 获取用户列表
const users = await client.users.list({ 
  page: 1, 
  limit: 20 
});

// 创建用户
const newUser = await client.users.create({
  name: '新用户',
  email: 'newuser@example.com',
  password: 'password123'
});

cURL 示例

bash
# 获取访问令牌
curl -X POST https://api.example.com/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"password"}'

# 使用令牌获取用户列表
curl -X GET "https://api.example.com/v1/users?page=1&limit=20" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# 创建用户
curl -X POST https://api.example.com/v1/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -d '{"name":"李四","email":"lisi@example.com","password":"password123"}'

3. 用户指南

功能使用指南示例

markdown
# 用户管理指南

## 概述

用户管理功能允许管理员管理系统中的所有用户账户,包括创建、编辑、删除和权限管理。

## 功能特性

- 用户账户的增删改查
- 角色和权限管理  
- 批量操作支持
- 用户活跃状态追踪
- 安全审计日志

## 快速开始

### 访问用户管理

1. 登录管理后台
2. 在左侧导航栏点击 **"用户管理"**
3. 进入用户列表页面

*[用户管理入口界面图]*

### 查看用户列表

用户列表页面显示所有系统用户的基本信息:

- **用户头像和姓名**
- **邮箱地址**  
- **用户角色**
- **账户状态**
- **最后登录时间**
- **操作按钮**

*[用户列表界面图]*

### 搜索和筛选

#### 快速搜索
在页面顶部的搜索框中输入用户姓名或邮箱,即可快速定位用户。

```markdown
搜索支持:
 用户姓名(支持模糊匹配)
 邮箱地址(支持部分匹配)
 用户ID(精确匹配)

高级筛选

点击搜索框右侧的 "高级筛选" 按钮,可以使用更多筛选条件:

筛选条件选项说明
用户角色管理员、普通用户、访客按角色筛选用户
账户状态活跃、停用、待激活按状态筛选用户
注册时间自定义日期范围按注册时间筛选
最后登录最近7天、30天、90天按活跃度筛选

[高级筛选界面图]

用户操作

创建新用户

步骤1:点击创建按钮

在用户列表页面,点击右上角的 "+ 创建用户" 按钮。

步骤2:填写基本信息

在弹出的创建用户对话框中,填写以下必要信息:

基本资料
  • 姓名 (必填): 用户的真实姓名或显示名称
  • 邮箱 (必填): 用于登录和接收通知的邮箱地址
  • 手机号 (可选): 用于双因素认证和紧急联系
账户设置
  • 初始密码 (必填):
    • 最少8个字符
    • 必须包含字母和数字
    • 建议包含特殊字符
  • 用户角色 (必填): 选择适当的角色
    • 管理员: 拥有系统完整权限
    • 普通用户: 基础功能权限
    • 访客: 只读权限
权限配置
  • 功能权限: 勾选用户可以访问的功能模块
  • 数据权限: 设置用户可以查看的数据范围

[创建用户表单界面图]

步骤3:确认创建

检查填写的信息无误后,点击 "创建用户" 按钮完成创建。

markdown
 小贴士

- 系统会自动发送激活邮件给新用户
- 用户首次登录时需要修改初始密码
- 建议为新用户设置临时密码并告知

编辑用户信息

快速编辑

在用户列表中,点击用户行末尾的 "编辑" 图标,可以快速修改:

  • 用户姓名
  • 邮箱地址
  • 用户角色
  • 账户状态

详细编辑

点击用户姓名进入用户详情页面,可以编辑完整的用户信息:

个人信息页签
  • 基本资料(姓名、邮箱、手机等)
  • 个人头像
  • 个人简介
账户设置页签
  • 登录凭据管理
  • 密码重置
  • 双因素认证设置
权限管理页签
  • 角色分配
  • 功能权限明细
  • 数据访问范围

[用户详情页面界面图]

用户状态管理

停用用户

当需要临时禁止用户访问时:

  1. 在用户列表中找到目标用户
  2. 点击操作列的 "更多" 菜单
  3. 选择 "停用用户"
  4. 确认操作
markdown
 注意
停用后的影响:

- 用户无法登录系统
- 现有会话将被终止
- 相关权限立即失效
- 可以随时重新激活

激活用户

重新激活已停用的用户:

  1. 筛选显示 "停用" 状态的用户
  2. 找到需要激活的用户
  3. 点击 "激活用户" 按钮
  4. 用户即可恢复正常访问

批量操作

批量选择

  • 勾选用户列表左侧的复选框选择单个用户
  • 勾选表头的复选框选择当前页面所有用户
  • 使用 Ctrl+A 快捷键选择全部用户

批量操作选项

选择用户后,页面顶部会显示批量操作工具栏:

操作功能适用场景
批量导出导出选中用户信息到Excel数据备份、报表生成
批量停用同时停用多个用户账户批量处理离职人员
批量激活同时激活多个用户账户批量处理新入职人员
批量删除永久删除选中用户谨慎使用,不可恢复
角色变更批量修改用户角色组织架构调整

[批量操作界面图]

安全功能

密码策略

系统强制执行以下密码安全策略:

  • 长度要求: 最少8个字符,最多128个字符
  • 复杂度要求: 必须包含字母和数字,建议包含特殊字符
  • 历史检查: 不能使用最近使用过的5个密码
  • 有效期: 密码90天后过期,需要更新

登录安全

  • 失败锁定: 连续5次登录失败后锁定账户30分钟
  • 异常检测: 检测异常登录位置和时间
  • 会话管理: 支持强制注销和会话超时

审计日志

系统记录所有用户相关的操作日志:

  • 用户登录/登出记录
  • 用户信息修改记录
  • 权限变更记录
  • 敏感操作记录

可以在 "系统日志""用户审计" 中查看详细记录。

常见问题

Q: 用户忘记密码怎么办?

A: 有两种处理方式:

  1. 用户自助: 用户在登录页面点击"忘记密码",通过邮箱重置
  2. 管理员重置: 在用户管理页面,点击"重置密码",生成临时密码

Q: 如何批量导入用户?

A:

  1. 下载用户导入模板 (点击"批量导入"按钮)
  2. 按模板格式填写用户信息
  3. 上传Excel文件进行批量导入
  4. 系统会验证数据并显示导入结果

Q: 用户角色有什么区别?

A: 各角色权限对比:

功能管理员普通用户访客
用户管理
系统设置
数据查看
数据编辑
数据导出

Q: 如何确保账户安全?

A: 建议采取以下安全措施:

  • 定期更换密码
  • 启用双因素认证
  • 及时停用离职人员账户
  • 定期审查用户权限
  • 监控异常登录活动

相关功能


需要更多帮助?请联系技术支持:support@example.com


### 4. 代码注释

#### 函数注释示例

```javascript
/**
 * 用户身份验证服务
 * 
 * 提供用户登录、注册、权限验证等核心身份认证功能。
 * 支持多种认证方式:邮箱密码、第三方OAuth、双因素认证。
 * 
 * @class AuthService
 * @version 2.1.0
 * @author 张三 <zhangsan@example.com>
 * @since 2024-01-01
 */
class AuthService {
  
  /**
   * 构造函数 - 初始化认证服务
   * 
   * @param {Object} config - 配置选项
   * @param {string} config.jwtSecret - JWT签名密钥
   * @param {number} config.tokenExpiry - 令牌过期时间(秒)
   * @param {boolean} config.enableTwoFactor - 是否启用双因素认证
   * @param {Object} config.oauth - 第三方OAuth配置
   * 
   * @throws {Error} 当必需配置缺失时抛出错误
   * 
   * @example
   * const authService = new AuthService({
   *   jwtSecret: 'my-secret-key',
   *   tokenExpiry: 3600,
   *   enableTwoFactor: true
   * });
   */
  constructor(config) {
    // 验证必需配置参数
    if (!config.jwtSecret) {
      throw new Error('JWT密钥是必需的');
    }
    
    // 初始化配置
    this.jwtSecret = config.jwtSecret;
    this.tokenExpiry = config.tokenExpiry || 3600; // 默认1小时
    this.enableTwoFactor = config.enableTwoFactor || false;
    this.oauthConfig = config.oauth || {};
    
    // 初始化依赖服务
    this.userService = new UserService();
    this.emailService = new EmailService();
    this.logger = new Logger('AuthService');
  }

  /**
   * 用户登录认证
   * 
   * 验证用户凭据并生成访问令牌。支持邮箱密码登录和第三方OAuth登录。
   * 包含安全特性:失败次数限制、异常登录检测、会话管理。
   * 
   * @async
   * @param {Object} credentials - 登录凭据
   * @param {string} credentials.email - 用户邮箱地址
   * @param {string} credentials.password - 用户密码
   * @param {string} [credentials.twoFactorCode] - 双因素认证码
   * @param {Object} [options] - 登录选项
   * @param {string} [options.userAgent] - 用户代理字符串
   * @param {string} [options.ipAddress] - 用户IP地址
   * @param {boolean} [options.rememberMe] - 是否记住登录状态
   * 
   * @returns {Promise<Object>} 登录结果
   * @returns {boolean} returns.success - 登录是否成功
   * @returns {string} returns.accessToken - 访问令牌 (成功时)
   * @returns {string} returns.refreshToken - 刷新令牌 (成功时)
   * @returns {Object} returns.user - 用户信息 (成功时)
   * @returns {string} returns.error - 错误信息 (失败时)
   * @returns {string} returns.errorCode - 错误代码 (失败时)
   * 
   * @throws {ValidationError} 当输入参数无效时
   * @throws {AuthenticationError} 当认证失败时
   * @throws {SecurityError} 当检测到安全威胁时
   * 
   * @example
   * // 基本登录
   * try {
   *   const result = await authService.login({
   *     email: 'user@example.com',
   *     password: 'secure-password'
   *   });
   *   
   *   if (result.success) {
   *     console.log('登录成功:', result.user.name);
   *     localStorage.setItem('token', result.accessToken);
   *   } else {
   *     console.error('登录失败:', result.error);
   *   }
   * } catch (error) {
   *   console.error('登录异常:', error.message);
   * }
   * 
   * @example  
   * // 双因素认证登录
   * const result = await authService.login({
   *   email: 'user@example.com',
   *   password: 'secure-password',
   *   twoFactorCode: '123456'
   * }, {
   *   userAgent: navigator.userAgent,
   *   ipAddress: '192.168.1.100',
   *   rememberMe: true
   * });
   * 
   * @see {@link #logout} 用户登出方法
   * @see {@link #refreshToken} 令牌刷新方法
   */
  async login(credentials, options = {}) {
    // 记录登录尝试
    this.logger.info('用户登录尝试', { 
      email: credentials.email,
      ip: options.ipAddress,
      userAgent: options.userAgent
    });

    try {
      // 1. 输入验证
      this._validateLoginCredentials(credentials);
      
      // 2. 检查登录限制
      await this._checkLoginLimits(credentials.email, options.ipAddress);
      
      // 3. 验证用户凭据
      const user = await this._verifyCredentials(credentials);
      if (!user) {
        return this._handleLoginFailure(credentials.email, 'INVALID_CREDENTIALS');
      }
      
      // 4. 检查账户状态
      if (user.status !== 'active') {
        return this._handleLoginFailure(credentials.email, 'ACCOUNT_DISABLED');
      }
      
      // 5. 双因素认证检查
      if (this.enableTwoFactor && user.twoFactorEnabled) {
        const isValidCode = await this._verifyTwoFactorCode(
          user.id, 
          credentials.twoFactorCode
        );
        if (!isValidCode) {
          return this._handleLoginFailure(credentials.email, 'INVALID_2FA_CODE');
        }
      }
      
      // 6. 检测异常登录
      const isAnomalous = await this._detectAnomalousLogin(user, options);
      if (isAnomalous) {
        await this._notifyAnomalousLogin(user, options);
      }
      
      // 7. 生成访问令牌
      const tokens = await this._generateTokens(user, options);
      
      // 8. 记录登录成功
      await this._recordSuccessfulLogin(user, options);
      
      // 9. 重置失败计数
      await this._resetFailureCount(credentials.email);
      
      this.logger.info('用户登录成功', { 
        userId: user.id,
        email: user.email 
      });
      
      return {
        success: true,
        accessToken: tokens.accessToken,
        refreshToken: tokens.refreshToken,
        user: {
          id: user.id,
          name: user.name,
          email: user.email,
          role: user.role,
          permissions: user.permissions
        }
      };
      
    } catch (error) {
      this.logger.error('登录过程出错', error);
      
      // 根据错误类型返回适当的响应
      if (error instanceof ValidationError) {
        return { success: false, error: error.message, errorCode: 'VALIDATION_ERROR' };
      } else if (error instanceof SecurityError) {
        return { success: false, error: '安全检查失败', errorCode: 'SECURITY_ERROR' };
      } else {
        return { success: false, error: '系统错误,请稍后重试', errorCode: 'SYSTEM_ERROR' };
      }
    }
  }

  /**
   * 验证登录凭据格式
   * 
   * @private
   * @param {Object} credentials - 登录凭据
   * @throws {ValidationError} 当凭据格式无效时
   */
  _validateLoginCredentials(credentials) {
    if (!credentials.email || !credentials.password) {
      throw new ValidationError('邮箱和密码是必需的');
    }
    
    // 邮箱格式验证
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    if (!emailRegex.test(credentials.email)) {
      throw new ValidationError('邮箱格式无效');
    }
    
    // 密码长度验证
    if (credentials.password.length < 8) {
      throw new ValidationError('密码长度不能少于8位');
    }
  }

  /**
   * 检查登录限制 (防暴力破解)
   * 
   * @private
   * @param {string} email - 用户邮箱
   * @param {string} ipAddress - IP地址
   * @throws {SecurityError} 当触发安全限制时
   */
  async _checkLoginLimits(email, ipAddress) {
    // 检查邮箱失败次数
    const emailFailures = await this._getFailureCount('email', email);
    if (emailFailures >= 5) {
      const lockTime = await this._getLockTime('email', email);
      if (Date.now() < lockTime) {
        throw new SecurityError('账户已被锁定,请稍后重试');
      }
    }
    
    // 检查IP失败次数
    if (ipAddress) {
      const ipFailures = await this._getFailureCount('ip', ipAddress);
      if (ipFailures >= 10) {
        throw new SecurityError('IP地址已被限制,请稍后重试');
      }
    }
  }

  // ... 其他私有方法的实现
}

/**
 * 自定义异常类 - 验证错误
 * 
 * @extends Error
 */
class ValidationError extends Error {
  constructor(message) {
    super(message);
    this.name = 'ValidationError';
  }
}

/**
 * 自定义异常类 - 安全错误
 * 
 * @extends Error  
 */
class SecurityError extends Error {
  constructor(message) {
    super(message);
    this.name = 'SecurityError';
  }
}

// 导出模块
module.exports = { AuthService, ValidationError, SecurityError };

使用技巧

1. 结构化文档

bash
# 请求结构化的文档
"按照标准格式为这个项目创建完整的README文档"

# 指定文档类型
"为这个API端点创建详细的接口文档,包含请求响应示例"

# 多格式输出
"同时生成Markdown和HTML格式的用户手册"

2. 用户导向的写作

bash
# 关注用户体验
"从新用户的角度写一份快速上手指南"

# 分层次说明
"创建面向初级、中级、高级用户的分层文档"

# 实用性优先
"重点说明常用功能,复杂功能放在高级章节"

3. 代码文档一体化

bash
# 文档与代码同步
"为这个函数添加完整的JSDoc注释,包含所有参数和示例"

# 自动化文档
"生成能够自动从代码提取的API文档"

文档模板

README 模板结构

markdown
# 项目标题
## 徽章区域
## 项目描述
## 特性列表
## 安装指南
## 使用示例
## API 文档
## 配置说明
## 贡献指南
## 许可证
## 致谢

API 文档模板

markdown
# API 概述
## 认证方式
## 基础 URL
## 错误处理
## API速率限制
## 端点详情
### 请求格式
### 响应格式
### 错误码
### 示例代码

用户指南模板

markdown
# 功能概述
## 使用前准备
## 基础操作
### 步骤详解
### 注意事项
### 问题解答
## 高级功能
## 故障排除
## 相关链接

最佳实践

1. 清晰的结构

  • 使用清晰的标题层次
  • 合理的段落划分
  • 有序的信息组织

2. 实用的内容

  • 提供具体的代码示例
  • 包含常见使用场景
  • 添加故障排除指南

3. 用户友好

  • 使用简洁明了的语言
  • 提供充足的上下文
  • 考虑不同用户水平

4. 持续更新

  • 保持文档与代码同步
  • 定期检查链接有效性
  • 根据用户反馈改进

相关资源


写作者 - 让代码会说话的专家

Claude Code 使用指南