代码生成与辅助 #

场景概述 #

编程场景的 Prompt Engineering #

text
┌─────────────────────────────────────────────────────────────┐
│                  编程场景应用范围                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  代码生成                                                    │
│  ├── 函数/类实现                                            │
│  ├── API 接口开发                                           │
│  ├── 测试用例编写                                           │
│  └── 文档生成                                               │
│                                                             │
│  代码审查                                                    │
│  ├── 代码质量检查                                           │
│  ├── 安全漏洞扫描                                           │
│  ├── 性能问题分析                                           │
│  └── 最佳实践建议                                           │
│                                                             │
│  代码调试                                                    │
│  ├── Bug 定位                                               │
│  ├── 错误分析                                               │
│  ├── 修复方案                                               │
│  └── 预防措施                                               │
│                                                             │
│  代码重构                                                    │
│  ├── 代码优化                                               │
│  ├── 架构改进                                               │
│  ├── 设计模式应用                                           │
│  └── 代码简化                                               │
│                                                             │
└─────────────────────────────────────────────────────────────┘

代码生成 #

函数生成 #

text
场景:根据需求描述生成函数实现

提示词模板:
─────────────────────────────────────────────────
# 角色
你是一位经验丰富的 [语言] 开发者,注重代码质量和可读性。

# 任务
请实现以下函数:

# 需求描述
[功能描述]

# 要求
- 语言版本:[版本]
- 添加类型注解
- 添加文档字符串
- 遵循 [风格指南]
- 处理边界情况
- 时间复杂度要求:[要求]

# 输出格式
1. 函数实现
2. 使用示例
3. 复杂度分析
─────────────────────────────────────────────────

示例:
─────────────────────────────────────────────────
# 角色
你是一位经验丰富的 Python 开发者,注重代码质量和可读性。

# 任务
请实现一个函数,判断字符串是否为回文。

# 要求
- 语言版本:Python 3.10+
- 添加类型注解
- 添加文档字符串
- 遵循 PEP 8
- 处理边界情况(空字符串、大小写)
- 时间复杂度 O(n)

# 输出格式
1. 函数实现
2. 使用示例
3. 复杂度分析

输出:
─────────────────────────────────────────────────

## 1. 函数实现

def is_palindrome(s: str) -> bool:
    """判断字符串是否为回文
    
    回文是指正读和反读都相同的字符串。
    此函数忽略大小写差异。
    
    Args:
        s: 待判断的字符串
    
    Returns:
        如果是回文返回 True,否则返回 False
    
    Examples:
        >>> is_palindrome("Aba")
        True
        >>> is_palindrome("hello")
        False
    """
    # 处理边界情况
    if not s:
        return True
    
    # 转换为小写并移除非字母数字字符
    cleaned = ''.join(c.lower() for c in s if c.isalnum())
    
    # 双指针比较
    left, right = 0, len(cleaned) - 1
    while left < right:
        if cleaned[left] != cleaned[right]:
            return False
        left += 1
        right -= 1
    
    return True

## 2. 使用示例

# 基本示例
print(is_palindrome("racecar"))  # True
print(is_palindrome("A man a plan a canal Panama"))  # True
print(is_palindrome("hello"))  # False
print(is_palindrome(""))  # True (空字符串)

## 3. 复杂度分析

时间复杂度:O(n)
- 清理字符串:O(n)
- 双指针比较:O(n/2) ≈ O(n)

空间复杂度:O(n)
- 存储清理后的字符串
─────────────────────────────────────────────────

API 接口生成 #

text
场景:根据需求生成 RESTful API 接口

提示词模板:
─────────────────────────────────────────────────
# 角色
你是一位后端开发工程师,擅长 RESTful API 设计。

# 任务
请设计并实现以下 API 接口:

# 需求
[API 需求描述]

# 技术栈
- 框架:[框架名称]
- 数据库:[数据库类型]

# 要求
- 遵循 RESTful 规范
- 添加输入验证
- 添加错误处理
- 添加 API 文档注释

# 输出格式
1. API 设计说明
2. 代码实现
3. 请求/响应示例
─────────────────────────────────────────────────

示例:
─────────────────────────────────────────────────
# 角色
你是一位后端开发工程师,擅长 RESTful API 设计。

# 任务
请设计并实现用户管理 API。

# 需求
- 用户注册
- 用户登录
- 获取用户信息
- 更新用户信息

# 技术栈
- 框架:FastAPI
- 数据库:PostgreSQL

# 要求
- 遵循 RESTful 规范
- 添加输入验证
- 添加错误处理
- 添加 API 文档注释

输出:
─────────────────────────────────────────────────

## 1. API 设计说明

| 方法 | 路径 | 描述 |
|------|------|------|
| POST | /api/users/register | 用户注册 |
| POST | /api/users/login | 用户登录 |
| GET | /api/users/{user_id} | 获取用户信息 |
| PUT | /api/users/{user_id} | 更新用户信息 |

## 2. 代码实现

from fastapi import FastAPI, HTTPException, Depends
from pydantic import BaseModel, EmailStr
from typing import Optional

app = FastAPI(title="用户管理 API")

# 数据模型
class UserRegister(BaseModel):
    username: str
    email: EmailStr
    password: str

class UserLogin(BaseModel):
    email: EmailStr
    password: str

class UserUpdate(BaseModel):
    username: Optional[str] = None
    email: Optional[EmailStr] = None

class UserResponse(BaseModel):
    id: int
    username: str
    email: str

# 用户注册
@app.post("/api/users/register", response_model=UserResponse)
async def register(user: UserRegister):
    """
    用户注册
    
    - **username**: 用户名(必填)
    - **email**: 邮箱地址(必填)
    - **password**: 密码(必填)
    """
    # 检查用户是否已存在
    # 实际项目中需要查询数据库
    
    # 创建用户
    # 实际项目中需要保存到数据库
    
    return UserResponse(
        id=1,
        username=user.username,
        email=user.email
    )

# 用户登录
@app.post("/api/users/login")
async def login(user: UserLogin):
    """
    用户登录
    
    返回 JWT token 用于后续认证
    """
    # 验证用户
    # 实际项目中需要查询数据库并验证密码
    
    return {"token": "jwt_token_here"}

# 获取用户信息
@app.get("/api/users/{user_id}", response_model=UserResponse)
async def get_user(user_id: int):
    """
    获取用户信息
    
    - **user_id**: 用户 ID
    """
    # 查询用户
    # 实际项目中需要查询数据库
    
    return UserResponse(
        id=user_id,
        username="example",
        email="example@test.com"
    )

# 更新用户信息
@app.put("/api/users/{user_id}", response_model=UserResponse)
async def update_user(user_id: int, user: UserUpdate):
    """
    更新用户信息
    
    - **user_id**: 用户 ID
    """
    # 更新用户
    # 实际项目中需要更新数据库
    
    return UserResponse(
        id=user_id,
        username=user.username or "example",
        email=user.email or "example@test.com"
    )

## 3. 请求/响应示例

### 注册请求
POST /api/users/register
{
    "username": "testuser",
    "email": "test@example.com",
    "password": "password123"
}

### 注册响应
{
    "id": 1,
    "username": "testuser",
    "email": "test@example.com"
}
─────────────────────────────────────────────────

代码审查 #

代码质量审查 #

text
场景:对代码进行全面的质量审查

提示词模板:
─────────────────────────────────────────────────
# 角色
你是一位资深的代码审查专家,注重代码质量和最佳实践。

# 任务
请对以下代码进行全面审查:

# 代码
```[语言]
[代码内容]

审查要点 #

  1. 代码质量:可读性、可维护性
  2. 潜在问题:Bug、边界情况
  3. 性能问题:时间/空间复杂度
  4. 安全隐患:注入、泄露风险
  5. 最佳实践:设计模式、编码规范

输出格式 #

总体评价 #

[评价]

问题列表 #

严重程度 问题描述 位置 修复建议

优化建议 #

[建议列表]

改进后代码 #

[语言]
[改进后的代码]

─────────────────────────────────────────────────

示例: ─────────────────────────────────────────────────

角色 #

你是一位资深的代码审查专家,注重代码质量和最佳实践。

任务 #

请对以下代码进行全面审查:

代码 #

python
def process_data(data):
    result = []
    for item in data:
        if item != None:
            if item > 0:
                result.append(item * 2)
    return result

输出: ─────────────────────────────────────────────────

总体评价 #

代码功能基本正确,但存在多处可改进的地方。 整体可读性一般,缺乏文档和类型注解。

问题列表 #

严重程度 问题描述 位置 修复建议
使用 != None 而非 is not None 第 4 行 改为 if item is not None:
嵌套 if 可简化 第 4-6 行 使用 and 合并条件
缺少类型注解 函数定义 添加类型注解
缺少文档字符串 函数定义 添加文档说明
可使用列表推导式 第 3-7 行 使用列表推导式简化

优化建议 #

  1. 使用 is not None 代替 != None
  2. 合并嵌套条件,提高可读性
  3. 添加类型注解和文档字符串
  4. 使用列表推导式简化代码
  5. 考虑添加输入验证

改进后代码 #

from typing import List, Optional

def process_data(data: List[Optional[int]]) -> List[int]: “”"处理数据列表,过滤 None 和负数,并将正数翻倍

Args:
    data: 包含整数或 None 的列表

Returns:
    处理后的整数列表

Examples:
    >>> process_data([1, None, -1, 2])
    [2, 4]
"""
return [item * 2 for item in data if item is not None and item > 0]

─────────────────────────────────────────────────

text

## 代码调试

### Bug 定位与修复

场景:定位并修复代码中的 Bug

提示词模板: ─────────────────────────────────────────────────

角色 #

你是一位经验丰富的调试专家。

任务 #

请分析以下代码中的 Bug 并提供修复方案。

代码 #

[语言]
[代码内容]

问题描述 #

[问题现象描述]

预期行为 #

[预期的正确行为]

输出格式 #

问题分析 #

[分析过程]

根本原因 #

[原因说明]

修复方案 #

[修复方法]

修复后代码 #

[语言]
[修复后的代码]

预防措施 #

[如何避免类似问题] ─────────────────────────────────────────────────

示例: ─────────────────────────────────────────────────

角色 #

你是一位经验丰富的调试专家。

任务 #

请分析以下代码中的 Bug 并提供修复方案。

代码 #

python
def calculate_average(numbers):
    total = 0
    for num in numbers:
        total += num
    return total / len(numbers)

问题描述 #

当传入空列表时程序崩溃

预期行为 #

传入空列表时应返回 0 或抛出有意义的异常

输出: ─────────────────────────────────────────────────

问题分析 #

  1. 错误现象:传入空列表时触发 ZeroDivisionError
  2. 错误位置:return total / len(numbers) 这一行
  3. 触发条件:len(numbers) == 0 时,除数为 0

根本原因 #

代码没有处理空列表的边界情况。当列表为空时:

  • len(numbers) 返回 0
  • total / 0 触发 ZeroDivisionError

修复方案 #

方案 A:返回 0(适合大多数场景) 方案 B:抛出 ValueError(适合需要严格处理的场景)

修复后代码 #

方案 A:

python
from typing import List

def calculate_average(numbers: List[float]) -> float:
    """计算数字列表的平均值
    
    Args:
        numbers: 数字列表
    
    Returns:
        平均值,空列表返回 0
    """
    if not numbers:
        return 0.0
    
    total = sum(numbers)
    return total / len(numbers)

方案 B:

python
from typing import List

def calculate_average(numbers: List[float]) -> float:
    """计算数字列表的平均值
    
    Args:
        numbers: 数字列表(不能为空)
    
    Returns:
        平均值
    
    Raises:
        ValueError: 当列表为空时
    """
    if not numbers:
        raise ValueError("列表不能为空")
    
    total = sum(numbers)
    return total / len(numbers)

预防措施 #

  1. 始终考虑边界情况(空列表、空字符串等)
  2. 添加输入验证
  3. 编写单元测试覆盖边界情况
  4. 使用类型注解明确预期输入 ─────────────────────────────────────────────────
text

## 代码重构

### 性能优化重构

场景:优化代码性能

提示词模板: ─────────────────────────────────────────────────

角色 #

你是一位专注于性能优化的资深开发者。

任务 #

请优化以下代码的性能:

代码 #

[语言]
[代码内容]

性能问题 #

[问题描述]

要求 #

  • 保持功能不变
  • 提高执行效率
  • 降低资源消耗

输出格式 #

性能分析 #

[当前代码的性能分析]

优化方案 #

[优化策略]

优化后代码 #

[语言]
[优化后的代码]

性能对比 #

指标 优化前 优化后 提升
─────────────────────────────────────────────────

示例: ─────────────────────────────────────────────────

角色 #

你是一位专注于性能优化的资深开发者。

任务 #

请优化以下代码的性能:

代码 #

python
def find_duplicates(numbers):
    duplicates = []
    for i in range(len(numbers)):
        for j in range(i + 1, len(numbers)):
            if numbers[i] == numbers[j] and numbers[i] not in duplicates:
                duplicates.append(numbers[i])
    return duplicates

性能问题 #

处理大数据集时速度很慢

输出: ─────────────────────────────────────────────────

性能分析 #

当前代码问题:

  1. 双重循环:O(n²) 时间复杂度
  2. not in duplicates 检查:O(n) 时间复杂度
  3. 总体时间复杂度:O(n³)(最坏情况)

优化方案 #

  1. 使用集合(Set)代替列表存储已见元素
  2. 使用字典统计出现次数
  3. 单次遍历完成统计

优化后代码 #

from typing import List from collections import Counter

def find_duplicates(numbers: List[int]) -> List[int]: “”"找出列表中的重复元素

Args:
    numbers: 数字列表

Returns:
    重复元素的列表(每个重复元素只出现一次)

时间复杂度: O(n)
空间复杂度: O(n)
"""
counter = Counter(numbers)
return [num for num, count in counter.items() if count > 1]

或者使用集合 #

def find_duplicates_v2(numbers: List[int]) -> List[int]: “”“找出列表中的重复元素(使用集合)”“” seen = set() duplicates = set()

for num in numbers:
    if num in seen:
        duplicates.add(num)
    else:
        seen.add(num)

return list(duplicates)

性能对比 #

指标 优化前 优化后 提升
时间复杂度 O(n³) O(n) 显著
空间复杂度 O(n) O(n) 相同
1000个元素 ~1s ~1ms 1000x
10000个元素 ~100s ~10ms 10000x
─────────────────────────────────────────────────
text

## 最佳实践

### 编程场景提示词原则

  1. 明确技术栈 ├── 指定语言版本 ├── 指定框架和库 └── 指定代码风格

  2. 提供上下文 ├── 项目背景 ├── 相关代码 └── 依赖关系

  3. 明确要求 ├── 功能需求 ├── 性能要求 └── 质量标准

  4. 指定输出格式 ├── 代码结构 ├── 文档要求 └── 示例要求

  5. 考虑边界情况 ├── 输入验证 ├── 错误处理 └── 异常情况

text

## 下一步

现在你已经掌握了代码生成与辅助的实战技巧,接下来学习 [文本处理与分析](/docs/prompt-engineering/text-processing),了解文本场景的应用!
最后更新:2026-04-05