吴恩达 Prompt 工程课精讲②:写出高可靠 Prompt 的2大黄金法则

吴恩达 Prompt 工程课精讲②:写出高可靠 Prompt 的2大黄金法则(附 Python 工程代码)

"如果你只记住两件事,请记住:1. 指令要清晰具体;2. 复杂任务要分步思考。"

------ 吴恩达《ChatGPT Prompt Engineering for Developers》

上一篇我们讲了"为什么开发者要学提示词工程"。

今天,我们进入实战核心 :如何写出高准确率、可工程化的提示词?

吴恩达在课程第2章《Guidelines for Prompting》中,只强调了两个原则,却覆盖了 90% 的高质量 prompt 场景:

  1. 清晰具体的指令(Be Specific and Clear)
  2. 思维链推理(Use Chain-of-Thought)

本文不仅详解原理,更提供可直接运行的 Python 代码,教你如何将这两个原则落地到真实项目中。


🧱 法则一:清晰具体的指令 ------ 让模型"无法误解你"

❌ 为什么模糊指令会失败?

python 复制代码
# Bad Prompt 示例
prompt = "写点关于健康的内容。"

模型可能返回:

  • 一篇 2000 字医学论文
  • 一条"多喝水"的微博
  • 一段健身教练的推销话术

问题 :你没告诉模型:写给谁?写多长?聚焦什么?用什么语气?

✅ 正确姿势:四维明确法

吴恩达建议,一个好指令应包含:

  • What:任务目标
  • How:格式/长度/语气
  • For Whom:目标受众
  • Constraints:禁忌或边界
🧪 代码示例:生成结构化用户回复
python 复制代码
from openai import OpenAI
from pydantic import BaseModel, ValidationError
import json

client = OpenAI()

class CustomerResponse(BaseModel):
    reply: str
    tone: str  # "polite" or "urgent"

def generate_customer_reply(user_complaint: str) -> CustomerResponse:
    prompt = f"""
    你是一名电商客服。请根据以下用户投诉,生成一条回复。
    
    要求:
    - 用中文,语气礼貌且专业
    - 回复不超过 60 字
    - 不要承诺具体处理时间
    - 表达"我们已收到并正在处理"
    
    用户投诉:
    "{user_complaint}"
    
    请以 JSON 格式输出,包含字段:reply(字符串)、tone("polite")。
    不要包含任何其他文字。
    """
    
    response = client.chat.completions.create(
        model="gpt-4-turbo",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.0  # 降低随机性
    )
    
    try:
        output = json.loads(response.choices[0].message.content)
        return CustomerResponse(**output)
    except (json.JSONDecodeError, ValidationError) as e:
        raise ValueError(f"模型输出格式错误: {e}")

# 测试
complaint = "订单三天了还没发货,急着用!"
result = generate_customer_reply(complaint)
print(result.reply)  # → "您好,您的反馈我们已收到,正在加急处理中,感谢您的耐心!"

💡 关键点 :通过 Pydantic 强制校验输出结构,确保程序可消费。

🧠 法则二:思维链(Chain-of-Thought)------ 让模型"慢下来思考"

❌ 为什么直接问答案会出错?

复制代码
问题:一个班级30人,20人喜欢数学,15人喜欢语文,8人两科都喜欢,多少人两科都不喜欢?

模型可能直接答:"5人"(错误!正确是 3 人)。

原因:模型跳过了"去重"步骤。

✅ 正确姿势:强制分步推理

吴恩达指出: "对于任何需要推理的任务,加上'请一步步思考'能显著提升准确率。"

🧪 代码示例:带 CoT 的数学推理 + 结果提取
python 复制代码
import re

def solve_set_problem() -> int:
    prompt = """
    一个班级有30名学生。
    - 20人喜欢数学
    - 15人喜欢语文
    - 8人两科都喜欢
    
    请问有多少人两科都不喜欢?
    
    请一步步推理,并在最后一行以"答案:X人"的格式给出最终结果。
    """
    
    response = client.chat.completions.create(
        model="gpt-4-turbo",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.0
    )
    
    text = response.choices[0].message.content
    print("模型推理过程:\n", text)
    
    # 从最后一行提取答案
    match = re.search(r"答案:(\d+)人", text)
    if match:
        return int(match.group(1))
    else:
        raise ValueError("未找到答案格式")

# 测试
answer = solve_set_problem()
print("最终答案:", answer)  # → 3

🔍 输出示例:

ini 复制代码
喜欢至少一科的人数 = 20 + 15 - 8 = 27  
两科都不喜欢 = 30 - 27 = 3  
答案:3人

💡 工程技巧 :即使模型自动推理,显式要求 CoT 仍可提升准确率 15--30% (尤其在数学/逻辑场景)。

🛠️ 进阶:将两大法则结合到生产系统

在真实项目中,你往往需要同时满足清晰指令 + 结构化输出 + CoT 推理

🌰 场景:金融风险评估
python 复制代码
class RiskAssessment(BaseModel):
    risk_level: str  # "low", "medium", "high"
    reasoning: str   # 简要推理

def assess_loan_risk(income: int, debt: int, history: str) -> RiskAssessment:
    prompt = f"""
    你是一名银行风控专家。请评估以下用户的贷款风险:
    
    - 月收入:{income} 元
    - 月负债:{debt} 元
    - 信用历史:{history}
    
    请按以下步骤分析:
    1. 计算负债收入比(DIR = 负债 / 收入)
    2. 结合信用历史判断还款意愿
    3. 综合给出风险等级(low/medium/high)
    
    最后,以严格 JSON 格式输出,包含:
    - "risk_level": 字符串
    - "reasoning": 不超过 50 字的中文推理
    
    不要包含其他内容。
    """
    
    # ...(调用 API + Pydantic 校验,同上)

✅ 小结:两大黄金法则的工程价值

法则 解决什么问题 工程收益
清晰具体 输出不可控、格式混乱 可解析、可集成、可测试
思维链 复杂任务准确率低 可解释、可 debug、可审计

记住

  • 不要指望模型"猜你心思"
  • 不要跳过"中间步骤"
  • 好 prompt = 明确需求 + 强制约束 + 可验证输出

📌 行动清单(开发者自查)

  • 我的 prompt 是否明确了受众、长度、格式、语气?
  • 复杂任务是否要求"一步步思考"?
  • 输出是否能被程序直接解析(JSON/Pydantic)?
  • 是否设置了 temperature=0 以保证确定性?

下一篇文章预告:《吴恩达 Prompt 工程课精讲③:提示词也要"敏捷开发"?迭代优化实战指南》------我们将用 Git 管理 prompt,像写代码一样迭代优化!


👋 作者:Imnobody | 专注 LLM 应用开发

💬 欢迎在评论区分享你的 prompt 踩坑经历!

相关推荐
PFinal社区_南丞3 小时前
构建可维护的正则表达式系统-pfinal-regex-center设计与实现
后端·php
yuuki2332333 小时前
【C语言】程序的编译和链接(基础向)
c语言·后端
梅小西爱学习3 小时前
线上CPU飙到100%?别慌,这3个工具比top快10倍!
java·后端·cpu
radient3 小时前
属于Agent的课本 - RAG
人工智能·后端·程序员
程序员阿达3 小时前
开题报告之基于SpringBoot框架的路面故障信息上报系统设计与实现
java·spring boot·后端
用户3421674905523 小时前
鱼皮模拟面试,吊打面试官
后端
我是天龙_绍4 小时前
java 中的 Lombok
后端
hwangsy4 小时前
SpringCloud gateway偶发creationTime key must not be null
后端
初见0014 小时前
Spring事务失效的十大陷阱与终极解决方案
后端·架构