💬 Claude Code 入门完全指南 三(整合版):提示词与代码生成

0 阅读16分钟

前置知识


📋 目录

  1. 为什么提示词决定代码质量
  2. 提示词核心技巧
  3. 代码生成的正确姿势
  4. 代码修改深度指南
  5. 从提示词到代码的完整工作流
  6. 实战案例:完整的 TODO 应用开发
  7. 最佳实践与常见问题

一、为什么提示词决定代码质量

1.1 提示词是需求的翻译器

当你对 Claude Code 说出「帮我写个排序算法」时,AI 必须猜测你的意图:

你说的Claude Code 需要推断
「帮我写个排序算法」什么语言?Python?JavaScript?Go?
什么类型?快速排序?归并排序?冒泡排序?
数据规模多大?100条?100万条?
需要稳定排序吗?
原位排序还是需要额外空间?
有什么性能要求?
边界情况如何处理?

模糊的提示词 → 猜测性的输出 → 需要大量修改

1.2 好的提示词 = 精准的需求文档

✅ 精准提示词示例:
用 JavaScript 实现一个针对 10 万条数据的排序算法,要求:
1. 时间复杂度 O(n log n)
2. 稳定排序
3. 支持自定义比较函数
4. 处理 null、undefined、NaN 等边界值
5. 包含单元测试

Claude Code 收到的完整信息:

信息项内容
语言JavaScript
场景10万条大数据
算法快速排序/归并排序(O(n log n))
稳定性需要
比较支持自定义
边界明确列出
交付物代码 + 测试

精准的提示词 → 符合预期的输出 → 最小化修改

1.3 提示词与代码生成的映射关系

提示词质量AI 理解生成代码你的工作量
❌ 模糊猜测各种可能性基础框架,需大量补充
⚠️ 一般理解主要意图基本可用,需部分完善
✅ 清晰精准理解接近生产级代码
⭐ 优秀理解深层需求超出预期,考虑周全极低

二、提示词核心技巧

2.1 提示词三要素

任何一个好的提示词都应该包含三个核心要素:

要素作用示例
🎯 目标明确要做什么「写一个用户认证中间件」
📋 规格详细的功能要求「使用 JWT,支持刷新令牌」
🔧 上下文相关背景和约束「Node.js + Express 项目」

2.2 基础提示词模式

模式一:简单任务型

适用场景:需求明确简单的任务

示例说明
"写一个 Hello World 程序"最简单的需求
"创建一个 CSS 按钮样式"单一组件
"写一个冒泡排序算法"基础算法
"用 Python 读取 CSV 文件并打印前 10 行"完整的需求描述

使用技巧

对于简单明确的任务,直接描述需求即可。AI 能够理解常见的编程概念,不需要过多解释。

模式二:详细规格型

适用场景:复杂功能开发,需要详细规格说明

示例 - 文件加密工具

用 Python 写一个文件加密工具,要求:

【功能需求】
- 使用 AES-256-GCM 加密算法
- 支持命令行参数:-e 加密文件,-d 解密文件
- 输入:文件路径、密码(至少 8 位)
- 输出:加密生成 .enc 文件,解密还原原文件

【错误处理】
- 文件不存在:提示 "文件不存在"
- 密码强度不足:提示 "密码强度不足,需要至少 8 位"
- 加密/解密失败:提示具体错误信息

【代码规范】
- 使用 argparse 解析命令行参数
- 使用 type hints 类型注解
- 包含完整的 docstring 文档
- 遵循 PEP 8 规范

输出效果

#!/usr/bin/env python3
"""
文件加密工具
支持 AES-256-GCM 加密和解密
"""

import argparse
import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.hazmat.backends import default_backend


def derive_key(password: str) -> bytes:
    """从密码派生 256 位密钥"""
    ...


def encrypt_file(file_path: str, password: str) -> str:
    """加密文件"""
    ...


def decrypt_file(file_path: str, password: str) -> str:
    """解密文件"""
    ...


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="文件加密工具")
    parser.add_argument("-e", "--encrypt", help="加密文件")
    parser.add_argument("-d", "--decrypt", help="解密文件")
    parser.add_argument("-p", "--password", required=True, help="密码")
    args = parser.parse_args()
    ...

模式三:问答解释型

适用场景:学习知识、理解概念、解释代码

示例说明
"什么是 Python 的装饰器?请举例说明"概念学习
"解释一下 React 的 useEffect 生命周期"框架理解
"JavaScript 的 var、let、const 有什么区别?"语法对比
"这段代码在做什么?请逐行解释"代码解释

模式四:调试排错型

适用场景:Bug 排查、错误修复

❌ 低效提问✅ 高效提问
"我的代码报错了,帮我看看""这个 Python 代码运行报错:NameError: name 'x' is not defined
代码:
def calculate():
result = x + 1
return result
calculate()
请分析错误原因并提供修复方案"

2.3 进阶提示词技巧

技巧一:指定编程语言和框架

❌ 模糊写法✅ 明确写法
"写一个 Web 服务器""用 Node.js + Express 写一个 REST API 服务器"
"用 Flask 写一个简单的后端服务"
"用 Go + Gin 框架写一个 HTTP 服务"

为什么重要?

不同语言和框架有截然不同的语法、库和最佳实践。明确指定可以让 AI 选择最适合的实现方式。

技巧二:指定代码风格和规范

用 Python 写一个函数,要求:

【代码规范】
- 使用类型注解(Type Hints)标注参数和返回值类型
- 遵循 PEP 8 规范(使用 Black 格式化)
- 包含 Google 风格的 docstring 文档
- 使用 Python 3.10+ 现代语法(match-case、walrus operator 等)

【示例风格】
def process_data(data: list[int]) -> dict[str, int]:
    '''处理数据并返回统计结果。
    
    Args:
        data: 输入的整数列表
        
    Returns:
        包含统计信息的字典
    '''
    return {"sum": sum(data), "count": len(data)}

技巧三:提供参考代码风格

参考以下代码风格,帮我写一个新的工具类:

【现有代码风格】
class FileHandler:
    """文件处理工具类"""
    
    def __init__(self, path: str):
        self.path = Path(path)
        
    def read(self) -> str:
        """读取文件内容"""
        if not self.path.exists():
            raise FileNotFoundError(f"文件不存在: {self.path}")
        return self.path.read_text(encoding='utf-8')
        
    def write(self, content: str) -> None:
        """写入文件内容"""
        self.path.parent.mkdir(parents=True, exist_ok=True)
        self.path.write_text(content, encoding='utf-8')

【要求】
- 保持相同的命名规范(驼峰命名)
- 使用相同的错误处理方式(抛出具体异常)
- 保持相同的文档风格
- 添加类似的验证逻辑

请帮我写一个 ConfigLoader 工具类

技巧四:分步骤请求

第一步:
"帮我设计一个用户数据结构,包含:用户名、邮箱、密码、注册时间、最后登录时间"

第二步:
"基于这个数据结构,写一个用户注册函数,需要:
- 验证邮箱格式
- 验证密码强度(至少 8 位,包含数字和字母)
- 密码使用 bcrypt 加密存储
- 返回用户 ID"

第三步:
"添加登录验证功能:
- 验证邮箱和密码
- 密码正确则返回 JWT token
- 记录最后登录时间
- 连续失败 5 次锁定账户 30 分钟"

注意

  • 避免一次性提出过多要求
  • 每一步确认后再进行下一步
  • 可以用 /branch 创建分支尝试不同方案

技巧五:使用约束条件

JavaScript 写一个深拷贝函数,要求:

【功能要求】
1. 支持嵌套对象(任意层级深度)
2. 处理循环引用(防止无限递归)
3. 保持原始类型(DateRegExpMapSet 等)

【约束条件】
- 不使用第三方库(如 lodash)
- 使用 ES6+ 语法
- 包含 JSDoc 文档
- 时间复杂度 O(n)

【测试用例】
    const obj = {
      date: new Date(),
      regex: /test/i,
      map: new Map([['key', 'value']]),
      nested: {
        a: 1,
        b: { c: 2 }
      }
    };
    // 测试深拷贝

技巧六:明确输出格式

用 Python 写一个数据处理脚本,要求:

【输入】
- 读取 data/input.csv 文件
- CSV 包含列:name, age, city, salary

【输出】
- 生成 data/output.json 文件
- JSON 格式:
    {
      "summary": {
        "total_people": 100,
        "average_salary": 50000,
        "cities": ["北京", "上海", "深圳"]
      },
      "people": [
        {"name": "张三", "age": 30, "city": "北京", "salary": 60000}
      ]
    }

【处理逻辑】
- 计算平均工资
- 提取所有城市列表(去重)
- 按工资从高到低排序

2.4 经典提示词模板库

模板一:代码生成

用 [语言] 写一个 [功能描述],要求:

【功能列表】

  1. [具体功能点1]
  2. [具体功能点2]
  3. [具体功能点3]

【约束条件】

  • [约束条件1]
  • [约束条件2]

【可选】参考现有代码:
[粘贴参考代码]

完整示例:

JavaScript 写一个深拷贝函数,要求:

【功能列表】
1. 支持嵌套对象(任意层级深度)
2. 处理循环引用(防止无限递归)
3. 保持原始类型(DateRegExpMapSetError 等)
4. 处理函数(可选复制或保持引用)

【约束条件】
- 不使用第三方库(如 lodash、rfdc)
- 使用 ES6+ 语法
- 包含 JSDoc 类型注解
- 时间复杂度 O(n)

【测试用例】
    const original = {
      date: new Date('2024-01-01'),
      regex: /test/gi,
      map: new Map([['key', {nested: 'value'}]]),
      set: new Set([1, 2, 3]),
      nested: { a: 1, b: { c: [1, 2, {d: 4}] } },
      circular: {}
    };
    original.circular = original; // 循环引用
    
    const cloned = deepClone(original);

模板二:代码审查

请审查以下代码:

【代码】
[粘贴代码]

【审查要求】

  1. 性能问题分析
  2. 安全风险检查
  3. 代码规范问题
  4. 潜在 Bug 预警
  5. 改进建议(按优先级排序)

【可选】我关注的重点:

  • [重点1]
  • [重点2]

模板三:重构优化

请重构以下代码,使其:

  1. 更易读(清晰的命名和结构)
  2. 更高效(优化性能瓶颈)
  3. 更安全(修复安全漏洞)
  4. 符合最佳实践

【原始代码】
[粘贴代码]

【重构要求】

  • 保持原有功能不变
  • 尽量减少代码行数
  • 添加必要的注释
  • 如果有测试用例,请一并提供

模板四:Bug 修复

代码报错:【错误信息】

【代码】
[粘贴代码]

【请执行】

  1. 分析错误原因
  2. 提供修复方案(首选方案 + 备选方案)
  3. 解释为什么会出现这个错误
  4. 说明如何避免类似问题

模板五:技术方案设计

设计一个 [系统/功能],要求:

【需求描述】

  • [需求1]
  • [需求2]
  • [需求3]

【技术约束】

  • 技术栈:[如 Node.js + PostgreSQL + Redis]
  • 性能要求:[如 QPS > 1000, 延迟 < 100ms]
  • 扩展要求:[如支持水平扩展]

【请提供】

  1. 系统架构图(文字描述)
  2. 核心数据结构设计
  3. API 接口设计
  4. 关键实现逻辑
  5. 潜在风险和应对方案

三、代码生成的正确姿势

3.1 生成流程

需求分析 → 提示词构建 → 代码生成 → 代码审查 → 迭代优化
   1️⃣          2️⃣          3️⃣          4️⃣          5️⃣

3.2 生成示例:从零开始

# 交互式模式
$ claude

> 用 React 写一个天气查询应用,要求:
> - 输入城市名称查询天气
> - 显示温度、天气状况、湿度
> - 使用 OpenWeatherMap API
> - 包含加载状态和错误处理

生成的代码结构

import React, { useState } from 'react';
import './App.css';

function App() {
  const [city, setCity] = useState('');
  const [weather, setWeather] = useState(null);
  const [loading, setLoading] = useState(false);
  const [error, setError] = useState('');

  const fetchWeather = async () => {
    // API 调用逻辑
  };

  return (
    // JSX 界面
  );
}

export default App;

3.3 代码生成最佳实践

实践一:指定完整的项目结构

创建一个 Node.js 项目结构,包含:
- src/
    controllers/    # 控制器
    models/        # 数据模型
    routes/       # 路由
    services/     # 业务逻辑
    utils/        # 工具函数
- tests/          # 测试文件
- config/         # 配置文件

每个文件需要基础的代码框架

实践二:生成完整的 CRUD API

用 Express + MongoDB 写一个用户管理的 RESTful API:
- GET /api/users        # 获取所有用户
- GET /api/users/:id    # 获取单个用户
- POST /api/users       # 创建用户
- PUT /api/users/:id   # 更新用户
- DELETE /api/users/:id # 删除用户

要求:中间件、错误处理、输入验证

实践三:生成测试代码

为以下函数生成单元测试:

    function sum(a, b) {
      return a + b;
    }

要求:
- 使用 Jest 框架
- 覆盖正常情况
- 覆盖边界情况
- 覆盖异常情况

3.4 快速代码生成命令

Claude Code 命令行用法

# 单次执行(最常用)
claude "帮我写一个排序算法"

# 指定模型执行
claude --model opus-4-6 "分析整个代码库"

# 指定项目目录
claude /path/to/project "审查代码"

# 打印结果到 stdout
claude -p "生成一个 React 组件"

# 最小化执行(跳过 hooks、插件)
claude --bare -p "快速生成"

# 设置会话名称
claude -n "my-session" "开始工作"

# 查看帮助
claude --help

常用生成命令一览

命令功能
claude "新建一个 React 组件"生成基础组件模板
claude "写一个 Python 爬虫"生成爬虫框架代码
claude "创建数据库模型"生成 ORM 模型
claude "写一个算法"生成算法实现
claude "生成表单验证"生成验证逻辑

实际使用示例

# 生成 React 组件
$ claude "生成一个 Modal 弹窗组件,包含:
- 标题、内容、底部按钮区域
- 显示/隐藏动画
- 点击遮罩关闭
- ESC 键关闭"

# 生成 Python 数据处理
$ claude "用 pandas 读取 CSV 文件,计算:
- 每列的平均值
- 每列的最大最小值
- 生成统计报告"

# 生成 SQL 查询
$ claude "写一个复杂的 SQL 查询:
- 三个表关联
- 多条件过滤
- 分页和排序"

# 批量操作
$ claude "把所有 .js 文件改成 .tsx"

3.5 代码生成质量对比

写法生成的代码质量
❌ "写个排序"随机选择排序算法,可能不符合场景
⚠️ "写排序算法"能工作,但无优化
✅ "用 JavaScript 写一个针对大数据集的排序,需要考虑性能"会选择适合的算法,包含优化
⭐ "写排序,对 100 万条数据排序,需要稳定排序且尽可能快"选择合适的算法,包含性能优化和多线程考虑

四、代码修改深度指南

4.1 代码续写

当你想在现有代码基础上添加功能:

User: 在这个函数里添加参数验证

Claude Code: ✅ 已添加参数验证:

function createUser(name, email, age) {
  // 新增:参数验证
  if (!name || typeof name !== 'string') {
    throw new Error('Name is required and must be a string');
  }
  if (!email || !email.includes('@')) {
    throw new Error('Valid email is required');
  }
  if (age !== undefined && (typeof age !== 'number' || age < 0)) {
    throw new Error('Age must be a positive number');
  }
  
  // 原有的创建逻辑...
}

4.2 代码修复

遇到 bug 时,直接贴上错误信息:

User: 这个代码报错 TypeError: Cannot read property 'map' of undefined

Claude Code:
问题分析:

  • 数据未加载时就尝试遍历
  • 缺少空值检查

修复方案:
✅ 已添加防御性检查:

// 添加条件渲染
{users && users.length > 0 ? (
  users.map(user => <UserCard key={user.id} user={user} />)
) : (
  <p>暂无数据</p>
)}

4.3 代码重构

User: 把这个 class 组件改成函数式组件

Claude Code: ✅ 重构完成:

原 class 组件:
class Counter extends React.Component {
state = { count: 0 };
render() {
return

{this.state.count}

;
}
}

重构为函数式组件:
function Counter() {
const [count, setCount] = useState(0);
return

{count}

;
}

4.4 同时修改多个文件

User: 在所有 API 路由中添加统一的错误处理中间件

Claude Code: ✅ 已修改以下文件:

  • routes/users.js
  • routes/products.js
  • routes/orders.js
  • routes/auth.js

每个文件都添加了:

  • try-catch 块
  • 错误响应格式化
  • 统一的错误码

4.5 批量重命名

User: 把项目中所有的 userId 改成 user_id(蛇形命名)

Claude Code:
✅ 已扫描项目:42 个文件
✅ 已修改:28 个文件
✅ 保持不变:14 个文件(已是蛇形命名)

变更详情:

  • src/models/User.js : userId → user_id
  • src/routes/auth.js : userId → user_id
  • src/utils/helpers.js : userId → user_id

4.6 代码优化

User: 优化这段代码的性能

Claude Code: ✅ 优化完成:

原代码:
const users = [];
for (let i = 0; i < data.length; i++) {
if (data[i].active) {
users.push(data[i]);
}
}

优化后:
const users = data.filter(user => user.active);

性能提升:

  • 代码行数:3行 → 1行
  • 时间复杂度:O(n)
  • 可读性大幅提升

五、从提示词到代码的完整工作流

5.1 核心工作流

graph LR
    A[需求分析] --> B[提示词构建]
    B --> C[代码生成]
    C --> D[代码审查]
    D --> E{通过?}
    E -->|否| B
    E -->|是| F[完成]
    
    B -.->|迭代优化| B
    D -.->|修改| C

5.2 步骤详解

步骤一:需求分析

在写提示词之前,先明确以下问题:

问题示例回答
要实现什么功能?用户登录验证
使用什么语言/框架?Node.js + Express
有什么特殊要求?使用 JWT,支持刷新令牌
有什么约束?不使用第三方认证库
输出格式是什么?完整的 Express 中间件

步骤二:提示词构建

使用前文学到的技巧构建提示词:

用 Node.js + Express 写一个用户认证中间件,要求:

【功能需求】
1. 验证用户邮箱和密码
2. 密码使用 bcrypt 加密比对
3. 登录成功返回 JWT token
4. 支持刷新令牌机制
5. 连续失败 5 次锁定账户 15 分钟

【约束条件】
- 不使用 passport.js 等第三方库
- JWT 过期时间设为 1 小时
- 刷新令牌过期时间设为 7 天
- 使用 TypeScript

【错误处理】
- 密码错误:返回 401
- 用户不存在:返回 401(不暴露用户是否存在)
- 账户锁定:返回 429
- 服务器错误:返回 500

步骤三:代码生成

Claude Code 会生成完整的代码。检查是否满足要求:

// 生成的代码示例
import { Request, Response, NextFunction } from 'express';
import bcrypt from 'bcrypt';
import jwt from 'jsonwebtoken';

interface TokenPayload {
  userId: string;
  email: string;
}

const JWT_SECRET = process.env.JWT_SECRET || 'your-secret-key';
const JWT_EXPIRES_IN = '1h';
const REFRESH_TOKEN_EXPIRES_IN = '7d';
const MAX_LOGIN_ATTEMPTS = 5;
const LOCKOUT_DURATION = 15 * 60 * 1000;

const loginAttempts: Map<string, { count: number; lockedUntil?: number }> = new Map();

export const login = async (
  req: Request,
  res: Response,
  next: NextFunction
) => {
  try {
    const { email, password } = req.body;

    const attempt = loginAttempts.get(email);
    if (attempt?.lockedUntil && Date.now() < attempt.lockedUntil) {
      const remainingMinutes = Math.ceil((attempt.lockedUntil - Date.now()) / 60000);
      return res.status(429).json({
        error: `账户已被锁定,请 ${remainingMinutes} 分钟后再试`
      });
    }

    const user = await User.findOne({ email });
    const isValid = user ? await bcrypt.compare(password, user.passwordHash) : false;

    if (!isValid) {
      const currentAttempt = loginAttempts.get(email) || { count: 0 };
      currentAttempt.count += 1;
      if (currentAttempt.count >= MAX_LOGIN_ATTEMPTS) {
        currentAttempt.lockedUntil = Date.now() + LOCKOUT_DURATION;
      }
      loginAttempts.set(email, currentAttempt);
      return res.status(401).json({ error: '邮箱或密码错误' });
    }

    loginAttempts.delete(email);

    const payload: TokenPayload = {
      userId: user!._id.toString(),
      email: user!.email
    };

    const accessToken = jwt.sign(payload, JWT_SECRET, { expiresIn: JWT_EXPIRES_IN });
    const refreshToken = jwt.sign(payload, JWT_SECRET, { expiresIn: REFRESH_TOKEN_EXPIRES_IN });

    res.json({ accessToken, refreshToken, expiresIn: JWT_EXPIRES_IN });
  } catch (error) {
    console.error('Login error:', error);
    res.status(500).json({ error: '服务器错误' });
  }
};

步骤四:代码审查

生成代码后,自己审查或让 Claude Code 审查:

请审查刚才生成的代码,重点关注:

  1. 安全性问题
  2. 性能考虑
  3. 代码规范
  4. 边界情况处理

步骤五:迭代优化

根据审查结果进行迭代:

User: 刚才的代码有一个问题:用户不存在时也会进行 bcrypt 耗时比对,这会导致时序攻击。

Claude Code: ✅ 已修复:

const isValid = await bcrypt.compare(
  password,
  user?.passwordHash || '$2b$10$dummyhashfortimingattack'
);

这样无论用户是否存在,比对耗时都相同


5.3 提示词质量检查清单

在发送提示词之前,检查以下项目:

检查项✓/✗说明
语言明确指定了编程语言
框架明确指定了使用的框架
功能清晰列出所有需要的功能
约束说明说明了限制条件
输出格式明确了期望的输出
错误处理说明了错误处理要求
代码规范指定了代码风格
测试要求是否需要包含测试

六、实战案例:完整的 TODO 应用开发

6.1 需求描述

做一个 TODO 应用,包含:
- 添加任务
- 标记完成/未完成
- 删除任务
- 页面刷新后数据保留
- 界面简洁美观

技术栈:React + localStorage

6.2 第一轮对话:项目初始化

User: 用 React + localStorage 做一个简单的 TODO 应用,需要:

  • 添加任务
  • 标记完成/未完成
  • 删除任务
  • 页面刷新后数据保留
  • 界面简洁美观

Claude Code: 好的!我来为你创建一个 React TODO 应用。

【技术栈】

  • React 18 + Hooks
  • localStorage 持久化
  • CSS Modules 样式

✅ 已创建文件:

  • src/App.jsx # 主组件
  • src/components/TodoItem.jsx # 任务项组件
  • src/App.css # 样式文件

【项目结构】
src/
├── App.jsx
├── components/
│ └── TodoItem.jsx
├── App.css
└── index.jsx

【功能说明】

  1. 添加任务 - 输入框输入,按 Enter 或点击按钮添加
  2. 完成任务 - 点击任务项切换状态,显示删除线
  3. 删除任务 - 点击删除按钮移除
  4. 数据持久化 - 自动保存到 localStorage

【运行方式】
npm install
npm run dev

6.3 第二轮对话:功能增强

User: 很好!现在添加以下功能:

  1. 添加截止日期字段
  2. 添加优先级字段(高/中/低)
  3. 按优先级和截止日期排序显示

Claude Code: ✅ 已完成功能增强:

【新增功能】

  1. 截止日期:支持选择日期和时间
  2. 优先级:高(红色)、中(黄色)、低(绿色)
  3. 智能排序:优先级高 → 截止日期近 → 按添加顺序

【修改的文件】

  • src/App.jsx # 添加日期选择器、优先级选择器
  • src/components/TodoItem.jsx # 显示优先级标记和截止日期
  • src/App.css # 新增样式

6.4 第三轮对话:代码优化

User: 代码有点乱,请帮我重构,使代码更清晰、组件职责更分离

Claude Code: ✅ 重构完成:

【新的项目结构】
src/
├── App.jsx # 主应用组件
├── components/
│ ├── TodoList.jsx # 任务列表
│ ├── TodoItem.jsx # 单个任务项
│ ├── TodoForm.jsx # 添加/编辑表单
│ ├── TodoFilter.jsx # 筛选和排序
│ └── PriorityBadge.jsx # 优先级徽章
├── hooks/
│ └── useTodos.js # 自定义 Hook
├── utils/
│ └── storage.js # localStorage 工具
└── styles/
└── App.css

【重构要点】

  1. 提取 useTodos Hook 封装状态逻辑
  2. 分离 TodoForm 组件处理输入
  3. 分离 TodoFilter 组件处理筛选
  4. 提取 storage.js 封装存储逻辑

6.5 最终代码审查

User: 请审查最终的代码,给出改进建议

Claude Code: # 代码审查报告

✅ 做得好的地方

  1. 组件职责清晰 - 每个组件只做一件事
  2. 状态逻辑封装 - useTodos Hook 封装业务逻辑
  3. 数据持久化 - 正确处理了 localStorage

⚠️ 可以改进的地方

优先级问题建议
缺少输入验证添加任务内容长度限制
缺少动画添加过渡动画提升体验
缺少分类功能添加标签/分类功能

七、最佳实践与常见问题

7.1 最佳实践总结

阶段最佳实践具体做法
需求先想清楚明确功能、约束、验收标准
提示词精准描述包含目标 + 规格 + 上下文
生成指定语言框架避免 AI 猜测
审查检查安全性重点看漏洞和性能
修改迭代进行每次改一点,验证一点
测试包含测试让 AI 生成单元测试

7.2 常见问题与解决

Q1:提示词越长越好吗?

Answer

不是! 提示词要简洁但完整,包含必要信息即可。

❌ 过长提示词的问题

  • AI 可能忽略部分信息
  • 增加理解难度
  • 消耗更多 token

✅ 好的提示词

  • 包含必要信息(目标 + 要求 + 上下文)
  • 结构清晰(分点列举)
  • 不过度解释常识

Q2:AI 理解错了我的意思怎么办?

Answer

  1. 明确指出具体问题:"不是这样的,我是说..."
  2. 提供更多上下文:"在 XXX 场景下..."
  3. 拆分任务:分步骤完成复杂任务
  4. 压缩上下文/compact 后重新描述
  5. 尝试分支/branch 创建分支尝试不同方案

Q3:可以连续对话吗?

Answer

当然可以! Claude Code 支持上下文连续对话:

  • 追问细节
  • 让 AI 解释代码
  • 提出修改要求
  • 继续完善功能
  • /resume 恢复之前的工作

Q4:对话太长变慢了怎么办?

Answer

  • /compact - 压缩上下文,保留关键信息
  • /clear - 清除对话历史,开始新对话
  • /branch - 创建分支会话

Q5:生成的代码不符合预期怎么办?

Answer

  1. 检查提示词:是否有歧义或遗漏?
  2. 提供示例:给出期望的输出格式示例
  3. 指定约束:强调必须满足的条件
  4. 分步验证:让 AI 一步步解释它的方案

Q6:生成的代码安全吗?

Answer

不一定! AI 生成的代码需要人工审查:

  • 检查是否有安全漏洞
  • 检查输入验证是否充分
  • 检查是否有 SQL 注入风险
  • 检查密码存储是否安全

重要提醒

永远不要直接使用 AI 生成的代码用于生产环境,必须经过安全审查和测试。


7.3 提示词效果对比

等级提示词示例效果评分
❌ 模糊"写个排序"输出随机,功能不定
⚠️ 一般"写一个排序算法"能工作,但可能不符合需求⭐⭐
✅ 清晰"用 Python 写一个快速排序,要求原地排序、时间复杂度 O(n log n)"精准输出⭐⭐⭐
⭐ 优秀"用 Python 写快速排序,原地排序、O(n log n),包含单元测试和性能对比,参考现有代码风格..."超出预期⭐⭐⭐⭐⭐

7.4 Claude Code 2.1.79 对话命令一览

命令功能示例
/model <model>切换使用的模型/model opus-4-6
/help显示帮助信息/help
/quit退出当前会话/quit
/clear清除对话历史/clear
/compact压缩上下文,释放空间/compact
/context查看当前上下文状态/context
/resume恢复之前的工作/resume
/effort设置任务努力级别/effort high
/plan进入计划模式/plan
/branch创建分支会话/branch
/btw侧边问题回答/btw 顺便问下...

7.5 模型选择建议

任务类型推荐模型原因
简单代码生成Haiku / Sonnet快速且足够
代码审查Sonnet / Opus需要一定推理
复杂架构设计Opus 4.6需要深度分析
超大代码库分析Opus 4.61M token 上下文
学习解释概念Sonnet / Opus需要详细解释

🎉 总结

技能要点
提示词清晰、具体、完整
代码生成指定语言和框架
代码审查检查安全性和性能
迭代优化多次对话完善
测试验证确保代码可运行