提示工程(Prompt Engineering)指南

什么是提示工程?

提示工程是设计和优化AI模型输入提示的技术,目的是获得更好的输出结果。它包括: - 提示词设计 - 上下文管理 - 输出格式控制 - 任务分解 - 错误处理

基础技巧

1. 清晰的指令

python
# 不好的例子 prompt = "写一个故事" # 好的例子 prompt = """ 请写一个短篇故事,要求: 1. 字数在500字以内 2. 主题是关于友情 3. 包含一个转折点 4. 有一个温暖的结局 """

2. 角色设定

python
# 专家角色 prompt = """ 作为一个资深的Python开发者,请: 1. 审查以下代码 2. 指出潜在的问题 3. 提供优化建议 4. 给出改进后的代码 代码: {code} """ # 教学角色 prompt = """ 作为一个耐心的编程教师,请: 1. 解释以下概念:{concept} 2. 提供简单的例子 3. 设计一个练习题 4. 给出详细的解答步骤 """

3. 示例驱动

python
prompt = """ 请按照以下格式总结文章: 示例输入: {sample_text} 示例输出: 标题:xxx 主要观点: 1. xxx 2. xxx 关键词:xxx, xxx, xxx 现在请总结这篇文章: {actual_text} """

高级技巧

1. 链式思考

python
prompt = """ 让我们一步步解决这个问题: 1. 首先,理解问题的关键点: {problem} 2. 分析可能的解决方案: - 方案A:... - 方案B:... - 方案C:... 3. 评估每个方案的优缺点: [请分析每个方案] 4. 选择最佳方案并说明原因: [请给出选择] 5. 详细的实施步骤: [请列出具体步骤] """

2. 格式控制

python
prompt = """ 请以JSON格式回答以下问题: {question} 要求输出格式: { "answer": string, "confidence": number(0-1), "sources": array of strings, "reasoning": string } """

3. 约束条件

python
prompt = """ 请生成一个Python函数,要求: 1. 时间复杂度不超过O(n) 2. 空间复杂度不超过O(1) 3. 必须处理边界情况 4. 包含详细的注释 5. 遵循PEP 8规范 函数需求: {requirement} """

常见应用场景

1. 文本生成

python
# 文章生成 article_prompt = """ 请生成一篇博客文章,要求: 1. 主题:{topic} 2. 风格:{style} 3. 字数:{word_count} 4. 目标读者:{audience} 5. 包含的关键词:{keywords} """ # 代码生成 code_prompt = """ 请生成{language}代码,实现: 1. 功能描述:{feature} 2. 输入参数:{inputs} 3. 返回值:{outputs} 4. 性能要求:{performance} 5. 其他约束:{constraints} """

2. 数据分析

python
analysis_prompt = """ 请分析以下数据集: {data} 分析要求: 1. 描述性统计 2. 关键趋势 3. 异常检测 4. 相关性分析 5. 建议行动 输出格式: 1. 统计摘要: - 均值: - 中位数: - 标准差: 2. 主要发现: - 趋势1: - 趋势2: 3. 异常数据: - 异常1: - 可能原因: 4. 相关性: - 强相关: - 弱相关: 5. 建议: 1) 2) 3) """

3. 对话系统

python
conversation_prompt = """ 角色设定:你是一个专业的{role} 对话历史: {chat_history} 用户问题:{user_input} 回答要求: 1. 保持专业性 2. 语气友好 3. 回答准确 4. 适当提供建议 5. 必要时询问细节 回答格式: 1. 理解确认:[简单复述用户问题] 2. 专业回答:[详细解答] 3. 补充建议:[相关建议] 4. 后续询问:[必要的跟进问题] """

优化技巧

1. 温度控制

python
from openai import OpenAI # 创意写作 - 高温度 creative_response = OpenAI().chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.8 # 更有创意的输出 ) # 事实分析 - 低温度 factual_response = OpenAI().chat.completions.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}], temperature=0.2 # 更确定性的输出 )

2. 提示词模板

python
class PromptTemplate: def __init__(self, template, variables): self.template = template self.variables = variables def format(self, **kwargs): # 验证所有必需变量都已提供 missing = set(self.variables) - set(kwargs.keys()) if missing: raise ValueError(f"Missing variables: {missing}") # 格式化提示词 return self.template.format(**kwargs) # 使用示例 code_review_template = PromptTemplate( template=""" 作为代码审查者,请检查以下{language}代码: 代码: {code} 请关注: 1. 代码质量 2. 潜在问题 3. 性能优化 4. 最佳实践 """, variables=["language", "code"] )

常见问题

  1. 提示词过长
  2. 指令不清晰
  3. 上下文丢失
  4. 格式不一致
  5. 结果不稳定

最佳实践

  1. 提示词设计
  2. 清晰具体
  3. 结构化组织
  4. 适当示例
  5. 明确约束

  6. 错误处理

  7. 输入验证
  8. 结果验证
  9. 回退机制
  10. 异常处理

  11. 性能优化

  12. Token控制
  13. 缓存机制
  14. 批处理请求
  15. 并行处理

工具和资源

  1. 提示词库
  2. 测试工具
  3. 优化框架
  4. 最佳实践指南