吴恩达 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 踩坑经历!

相关推荐
阿祖zu32 分钟前
芝士就是力量!开源私有化部署与 GitHub 双向同步的个人知识笔记 App
前端·后端·ios
不才不才不不才42 分钟前
Spring 源码系列(16): doDispatch 全流程——一次请求的主干链路
java·后端·spring
IT_陈寒1 小时前
SpringBoot自动配置失效?这个隐藏配置坑了我一整晚
前端·人工智能·后端
搜狐技术产品小编20231 小时前
告别“黑盒”与误判:如何用“多智能体对抗辩论”重构内容安全审核系统
后端·多agent
DantyWei1 小时前
controller注册及调用时机
后端
edwarddamon2 小时前
Spring Cloud 配置热更新与 Bean 代理机制梳理
java·后端
码事漫谈2 小时前
我用 Seed Evolving 做了个 AI 小说写作工具
后端
Raas1002 小时前
MAIGateway,魔芋企业级AI网关的FinAPI成本竞争力设计
java·后端·网关·api网关·魔芋ai·finapi·mai gateway
计算机魔术师3 小时前
传统基础架构 - 微服务
大数据·后端·微服务·架构·开发工具·编程语言
DantyWei3 小时前
kube-controller-manager的leader选举流程和策略
后端