共计 1650 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:为什么需要 Prompt 工程?
在构建对话系统时,开发者常遇到三个典型问题:

- 指令歧义 :比如用户说 ” 帮我写封信 ”,但未说明是辞职信还是感谢信
- 上下文丢失 :在多轮对话中,AI 经常忘记之前的讨论内容
- 幻觉输出 :AI 会自信地编造不存在的事实,比如虚构书籍引用
这些问题的本质,都是因为当前的 AI 模型仍需要人类通过 Prompt 来明确任务边界和期望输出格式。
技术对比:三种 Prompt 策略
吴恩达课程中重点对比了三种方法:
- 零样本 Prompt(Zero-shot)
- 直接给出指令,依赖模型已有知识
-
适合简单任务,如 ” 翻译这段文字 ”
-
小样本 Prompt(Few-shot)
- 提供 3 - 5 个输入输出示例
-
适合需要特定格式的任务,如 JSON 生成
-
思维链 (Chain-of-Thought)
- 要求模型展示推理步骤
- 适合数学题等需要逻辑推导的场景
核心实现:三步构建高效 Prompt
1. 系统消息设定角色
system_message = """
你是一名专业的医疗助手,回答健康咨询时:1. 仅基于权威医学指南
2. 对非紧急情况建议就医
3. 用中文回答并标注信息来源
"""
2. 三步法 Prompt 结构
prompt_template = """
# 指令
{instruction}
# 上下文
{context}
# 格式要求
{format_requirements}
"""
3. 完整 API 调用示例
import openai
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
def chat_completion(prompt):
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "system", "content": system_message},
{"role": "user", "content": prompt}
],
temperature=0.7,
top_p=0.9
)
return response.choices[0].message.content
except Exception as e:
print(f"API 调用失败: {str(e)}")
raise
生产环境优化建议
对话状态管理
- 全历史模式 :存储所有对话记录,消耗大但精度高
- 滑动窗口 :只保留最近 N 轮对话,平衡性能与效果
- 摘要模式 :用 AI 自动生成对话摘要,适合长会话
敏感词过滤
blacklist = ["暴力", "色情", "政治敏感词"]
def contains_sensitive_text(text):
return any(word in text for word in blacklist)
延迟优化
- 设置合理的 max_tokens 限制
- 使用流式响应 (stream=True)
- 对长响应先返回摘要
避坑指南:5 大常见错误
- 模糊指令
- 反例:” 写点有趣的东西 ”
-
修正:” 生成 3 个关于 AI 的冷笑话,每个不超过 20 字 ”
-
信息过载
- 反例:在单个 Prompt 中塞入 10 个要求
-
修正:拆分为多个子任务
-
忽略格式
- 反例:不指定输出格式导致解析困难
-
修正:明确要求 Markdown/JSON 等结构化输出
-
温度悖论
- 反例:所有任务都用 temperature=0
-
修正:创意任务用 0.7-1.0,事实查询用 0 -0.3
-
缺少护栏
- 反例:未防范越狱指令
- 修正:系统消息中添加 ” 拒绝回答与角色不符的请求 ”
动手实验
尝试优化以下问题 Prompt:
原始版:” 告诉我怎么学习 AI”
进阶要求:
1. 指定目标人群(如大学生 / 在职者)
2. 给出学习路径时间框架
3. 要求按难度分级推荐资源
推荐 Prompt 模板仓库:
awesome-chatgpt-prompts
实际测试发现,通过结构化 Prompt 能使回答相关性提升 40% 以上。关键是要像指导新人一样明确:要做什么、参考什么信息、按什么格式交付。
正文完
