
本节课你将学到
- 理解提示词工程的核心原理
 - 掌握5种实用的Prompt设计模式
 - 学会优化提示词的评估方法
 - 实现一个智能问答系统优化案例
 
开始之前
环境要求
- Python 3.8+
 - 安装包:
pip install openai tiktoken - OpenAI API密钥(免费注册:https://platform.openai.com)
 
前置知识
- GPT模型基础(第36讲内容)
 - 基本的API调用概念
 
核心概念
什么是提示词工程?
提示词工程就像与AI沟通的"魔法语言":
- 传统编程:写精确的代码指令
 - Prompt工程:用自然语言"引导"AI产生预期输出
 
Prompt设计的三层结构
            
            
              markdown
              
              
            
          
          1. **角色设定**(30%效果)
   "你是一位资深机器学习工程师"
2. **任务描述**(50%效果)
   "用通俗易懂的方式解释Transformer架构"
3. **输出规范**(20%效果)
   "分三点说明,每点不超过2句话,使用类比手法"
        五大核心技巧(附案例对比)
技巧1:角色设定
            
            
              python
              
              
            
          
          # ❌ 普通提示
"解释机器学习"
# ✅ 角色设定提示
"""你是一位有10年经验的AI教授,正在给大一新生上课。
用最通俗易懂的方式解释机器学习,要求:
1. 使用生活类比
2. 不超过3句话
3. 最后提一个思考问题"""
        技巧2:分步思考
            
            
              python
              
              
            
          
          # ❌ 直接提问
"巴黎是浪漫之都吗?"
# ✅ 分步推理
"""请按以下步骤分析:
1. 定义'浪漫之都'的标准
2. 列举巴黎符合标准的证据
3. 给出最终结论"""
        技巧3:示例示范
            
            
              python
              
              
            
          
          # ❌ 单纯指令
"生成产品描述"
# ✅ 示例引导
"""按以下格式生成耳机产品描述:
示例1:[产品] 采用[技术],带来[ benefit ]
示例2:...
现在为'无线降噪耳机'生成3个版本"""
        技巧4:负面约束
            
            
              python
              
              
            
          
          # ❌ 开放生成
"写一篇科技文章"
# ✅ 负面约束
"""写一篇关于AI的科普文章,要求:
- 不要使用专业术语
- 不超过300字
- 避免讨论伦理问题"""
        技巧5:格式控制
            
            
              python
              
              
            
          
          # ❌ 自由输出
"总结这篇文章"
# ✅ 格式限定
"""用以下结构总结:
【核心观点】...
【关键数据】3条
【行动建议】..."""
        代码实战
1. 基础API调用
            
            
              python
              
              
            
          
          import openai
import tiktoken
# 配置API密钥
openai.api_key = "你的API密钥"
def count_tokens(text):
    """计算文本的token数量"""
    encoder = tiktoken.get_encoding("cl100k_base")
    return len(encoder.encode(text))
def ask_gpt(prompt, model="gpt-3.5-turbo"):
    """发送Prompt到OpenAI API"""
    response = openai.ChatCompletion.create(
        model=model,
        messages=[{"role": "user", "content": prompt}],
        temperature=0.7,
        max_tokens=500
    )
    return response.choices[0].message.content
# 测试调用
prompt = "用一句话解释量子计算"
print(ask_gpt(prompt))
        2. Prompt优化评估器
            
            
              python
              
              
            
          
          def evaluate_prompt(prompt, test_cases):
    """
    评估Prompt效果的量化工具
    返回平均得分(1-5分)和改进建议
    """
    total_score = 0
    feedback = []
    
    for case in test_cases:
        response = ask_gpt(prompt + "\n" + case["question"])
        score = min(5, case["expected"].lower().count(response.lower()))
        total_score += score
        feedback.append(f"Q: {case['question']}\nA: {response}\nScore: {score}/5")
    
    avg_score = total_score / len(test_cases)
    analysis = f"""评估结果:
平均分:{avg_score:.2f}/5
建议改进方向:
1. {'增加角色设定' if avg_score <3 else '✓'}
2. {'添加示例' if '示例' not in prompt else '✓'}
3. {'明确输出格式' if '格式' not in prompt else '✓'}"""
    
    return avg_score, analysis, "\n\n".join(feedback)
# 测试案例
test_cases = [
    {
        "question": "解释神经网络", 
        "expected": "神经网络就像人脑神经元网络..."
    },
    {
        "question": "Python的lambda是什么",
        "expected": "lambda是匿名函数..."
    }
]
# 评估示例Prompt
sample_prompt = "请回答以下技术问题"
score, analysis, details = evaluate_prompt(sample_prompt, test_cases)
print(f"评估报告:\n{analysis}\n\n详细反馈:\n{details}")
        3. 智能问答系统优化
            
            
              python
              
              
            
          
          class QASystem:
    def __init__(self, knowledge_base):
        self.knowledge = knowledge_base
        self.prompt_template = """基于以下知识库回答问题:
{knowledge}
---
问题:{question}
要求:
1. 如果答案在知识库中,直接引用
2. 否则标注"推测答案"
3. 用中文回答
4. 不超过100字"""
    def answer(self, question):
        prompt = self.prompt_template.format(
            knowledge=self.knowledge,
            question=question
        )
        return ask_gpt(prompt)
# 初始化知识库
ai_knowledge = """
1. 机器学习分为监督学习、无监督学习、强化学习
2. GPT-3有1750亿参数
3. 过拟合是指模型在训练集表现太好但泛化能力差
"""
qa = QASystem(ai_knowledge)
# 测试问答
questions = [
    "什么是过拟合?",
    "GPT-4有多少参数?"  # 知识库中没有的问题
]
for q in questions:
    print(f"Q: {q}\nA: {qa.answer(q)}\n")
        完整项目
项目结构
lesson_37_prompt/
├── prompt_engineer.py    # 主程序
├── evaluator.py         # 评估工具
├── qa_system.py         # 问答系统
├── requirements.txt
└── README.md
        requirements.txt
            
            
              txt
              
              
            
          
          openai==0.27.8
tiktoken==0.4.0
python-dotenv==1.0.0  # 用于管理API密钥
        prompt_engineer.py 完整代码
            
            
              python
              
              
            
          
          import openai
import tiktoken
from dotenv import load_dotenv
import os
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
class PromptOptimizer:
    def __init__(self):
        self.encoder = tiktoken.get_encoding("cl100k_base")
        
    def analyze_prompt(self, prompt):
        """深度分析Prompt问题"""
        analysis_prompt = f"""请分析以下Prompt的问题:
{prompt}
---
按以下格式反馈:
1. 清晰度评分(1-5分):
2. 主要问题:
3. 改进建议:"""
        
        return openai.ChatCompletion.create(
            model="gpt-4",
            messages=[{"role": "user", "content": analysis_prompt}],
            temperature=0
        ).choices[0].message.content
    
    def optimize_prompt(self, prompt, iterations=3):
        """迭代优化Prompt"""
        current_prompt = prompt
        for i in range(iterations):
            print(f"\n优化迭代 {i+1}/{iterations}")
            analysis = self.analyze_prompt(current_prompt)
            print(f"分析结果:\n{analysis}")
            
            optimization_prompt = f"""根据以下分析优化Prompt:
分析:
{analysis}
原Prompt:
{current_prompt}
---
请输出:
1. 优化后的Prompt
2. 优化说明"""
            
            result = openai.ChatCompletion.create(
                model="gpt-4",
                messages=[{"role": "user", "content": optimization_prompt}],
                temperature=0.7
            ).choices[0].message.content
            
            current_prompt = result.split("\n")[1]  # 提取优化后的Prompt
            print(f"优化版本:\n{current_prompt}")
        
        return current_prompt
if __name__ == "__main__":
    optimizer = PromptOptimizer()
    
    sample_prompt = "帮我写一篇关于AI的文章"
    print("原始Prompt:", sample_prompt)
    
    optimized = optimizer.optimize_prompt(sample_prompt)
    print("\n最终优化结果:")
    print(optimized)
        运行效果
优化过程示例
原始Prompt: 帮我写一篇关于AI的文章
优化迭代 1/3
分析结果:
1. 清晰度评分(1-5分):2分
2. 主要问题:主题过于宽泛,缺乏具体方向和要求
3. 改进建议:明确文章类型、目标读者、长度和核心要点
优化版本:
请写一篇面向科技爱好者的800字科普文章,介绍AI在医疗领域的三大应用,要求:
1. 每部分配示意图描述
2. 包含实际案例
3. 使用通俗语言
        问答系统输出
Q: 什么是过拟合?
A: 过拟合是指模型在训练集表现太好但泛化能力差的现象。
Q: GPT-4有多少参数?
A: (推测答案)GPT-4的具体参数规模未公开,但预计比GPT-3的1750亿更多。
        常见问题
Q1: 如何减少API调用费用?
- 使用
max_tokens限制响应长度 - 对相似问题做本地缓存
 - 先用小模型(gpt-3.5-turbo)测试Prompt
 
Q2: 为什么有时响应不符合要求?
- 检查temperature值是否过高(建议0.3-0.7)
 - 确认Prompt中是否有明确的约束条件
 - 尝试用更高级模型(gpt-4)
 
Q3: 如何处理超长上下文?
- 用
tiktoken计算token数 - 关键信息放在Prompt开头
 - 对长文档采用"分块处理+摘要"策略
 
课后练习
- 为你的专业领域设计3个角色Prompt模板
 - 用评估器测试"解释区块链"的5种不同Prompt
 - 扩展问答系统:添加追问功能