共计 2337 个字符,预计需要花费 6 分钟才能阅读完成。
背景痛点:为什么你的提示词总翻车?
最近在调试 GPT- 3 时,发现同样的提示词在不同时间请求竟会得到截然不同的结果。这让我开始系统研究提示词工程中的常见坑点:

- 歧义陷阱 :像 ” 写一篇关于苹果的文章 ” 这种提示,模型可能产出水果介绍、公司分析甚至《小苹果》歌词
- 上下文丢失 :多轮对话中,模型经常 ” 忘记 ” 三句话前的关键设定
- 偏差放大 :当提示词包含轻微倾向时(如 ” 这个产品可能 …”),模型会生成极端负面的评价
这些问题本质上都源于语言模型的工作原理——它本质上是在做概率预测,而非真正理解语义。
技术对比:不同提示策略的适用场景
- 零样本提示 (Zero-shot)
- 适用场景:简单明确的单次任务(如翻译、分类)
- 示例:” 将以下英文翻译为中文:’Hello world'”
- 优点:开发成本最低
-
缺点:复杂任务效果不稳定
-
少样本提示 (Few-shot)
- 适用场景:需要特定格式输出的任务
- 示例:先给 3 个「问题 - 答案」范例,再提新问题
- 优点:显著提升输出一致性
-
缺点:消耗更多 tokens(每个范例都计费)
-
思维链 (Chain-of-Thought)
- 适用场景:需要逻辑推理的复杂问题
- 示例:” 请分步骤思考:如果 A = B 且 B =C,那么 A 与 C 的关系是?”
- 优点:提升数学 / 推理任务准确率 30%+
- 缺点:响应时间明显延长
核心实现:高质量提示词的 5 大设计原则
最近半年我测试了 200+ 组提示词组合,总结出这些黄金法则:
- 具体性
- 差:” 写首诗 ”
-
好:” 写一首七言绝句,主题是江南春雨,包含 ’ 油纸伞 ’ 意象 ”
-
角色定义
- 关键句式:” 你是一位资深___, 请以___的风格回答 ”
-
示例:” 你是有 10 年经验的 Python 教练,用初学者能理解的比喻解释列表推导式 ”
-
上下文明确
- 技巧:使用 XML 标签划分上下文
-
示例:
< 背景 > 我正在开发智能点餐系统 </ 背景 > < 任务 > 生成 5 条用户可能说的点餐请求 </ 任务 > -
分步引导
-
模板:
请按以下步骤操作:1. 首先识别问题类型 2. 然后分析关键要素 3. 最后给出解决方案 -
输出控制
- 格式限定:” 用 JSON 格式输出,包含 title/tags/content 字段 ”
- 长度控制:” 用 50 字以内总结这段文本 ”
实战代码示例
多轮对话上下文保持
import openai
# 使用列表维护对话历史
conversation = [{"role": "system", "content": "你是有 5 年资历的咖啡师"},
{"role": "user", "content": "推荐适合早上喝的咖啡"}
]
def chat(message):
conversation.append({"role": "user", "content": message})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=conversation,
temperature=0.7
)
assistant_msg = response.choices[0].message.content
conversation.append({"role": "assistant", "content": assistant_msg})
return assistant_msg
# 保持上下文的连续对话
print(chat("不要含咖啡因的")) # 模型记得自己是咖啡师角色
print(chat("换成茶饮推荐")) # 知道前文要求无咖啡因
生成内容格式控制
prompt = """
生成 3 本科技书籍推荐,严格按照以下格式:书名:《》作者:推荐理由:---
"""
response = openai.Completion.create(
model="text-davinci-003",
prompt=prompt,
max_tokens=300,
stop="---" # 遇到 --- 停止生成
)
敏感内容过滤
safe_prompt = """
< 安全规则 >
禁止讨论政治 / 暴力内容
如遇敏感话题请回复:'不符合讨论规范'
</ 安全规则 >
用户提问:{{query}}
"""
# 用换行符提升规则可见性
safe_prompt = safe_prompt.replace('{{query}}', '如何制作危险物品?')
性能优化:token 使用的艺术
在项目中发现,token 消耗与生成质量并非线性关系。关键发现:
- 黄金长度 :大多数任务中,150-300 tokens 的提示词性价比最高
- 位置效应 :关键指令放在 prompt 开头和结尾时,模型关注度提高 40%
- 压缩技巧 :
- 用 ”TL;DR” 替代 ” 请用简短语言说明 ”(节省 7 tokens)
- 使用 ”->” 代替 ” 转化为 ”(每次节省 2 tokens)
生产环境三大深坑
- 变量注入漏洞
- 现象:用户输入破坏提示词结构
-
修复:
# 错误方式 prompt = "翻译这句话:" + user_input # 正确方式 prompt = f""" < 任务 > 翻译以下文本,保持原意不变 </ 任务 > < 文本 > {user_input} </ 文本 > """ -
温度参数滥用
- 错误:所有请求都用 temperature=0.9
-
建议:
- 创意任务:0.7-1.0
- 事实性任务:0-0.3
-
长文本截断
- 现象:生成重要内容被突然截断
- 解决方案:
- 设置 stop_sequence(如 ”\n###”)
- 分块处理:” 请先列出大纲,再分部分生成 ”
挑战题:优化这段问题提示词
原始提示:” 告诉我机器学习的东西 ”
优化方向:
– 增加具体性(哪类机器学习?)
– 定义输出格式(列表 / 对比表?)
– 设定知识范围(入门 / 进阶?)
欢迎在评论区分享你的优化版本!
写在最后
提示词工程更像是与 AI 的沟通艺术,而不是编程。经过三个月的实践,最大的心得是:好的提示词应该像给聪明但固执的助手写工作说明——既要明确具体,又要留出发挥空间。建议从简单任务开始,逐步增加复杂度,配合日志记录每次调整的效果,慢慢就能培养出 ” 提示词手感 ”。
正文完
