共计 1884 个字符,预计需要花费 5 分钟才能阅读完成。
开篇:开发者常见的提示工程痛点
在使用 ChatGPT API 时,许多开发者都会遇到一些共性问题:

- 意图表达模糊 :提问方式过于宽泛(如“帮我写代码”),导致输出结果不符合预期
- 上下文断裂 :多轮对话中历史信息丢失,AI“忘记”之前讨论的内容
- 输出不可控 :相同提示词在不同时间得到差异巨大的回复
- 格式混乱 :需要结构化数据时,AI 返回自由文本难以解析
这些问题往往源于对提示工程(Prompt Engineering)基础概念的理解不足。接下来我们将从技术原理到实战代码,逐步拆解解决方案。
技术核心:提示策略的三大关键
1. 零样本 vs 少样本提示(Zero-shot vs Few-shot)
-
零样本提示 :直接给出任务指令,依赖模型预训练知识
"""将以下文本分类为正面 / 负面情绪:\n\n 产品很好用,但物流太慢了"""适用场景:简单明确的分类 / 生成任务
-
少样本提示 :提供 1 - 5 个示例演示任务模式
""" 示例 1:味道不错 -> 正面 示例 2:包装破损 -> 负面 待分类:客服态度很差 -> """适用场景:需要特定输出格式的复杂任务
2. 系统消息(System Message)设计原则
- 角色定义 :明确 AI 的职能边界
{"role": "system", "content": "你是一位精通 Python 的代码助手,只回复与编程相关的内容"} - 风格控制 :指定输出语气(专业 / 通俗)
- 安全限制 :内置内容过滤规则
3. 温度参数(Temperature)调控
- 范围:0(确定性最高)~2(随机性最强)
- 推荐设置:
- 代码生成:0.2-0.5
- 创意写作:0.7-1.0
- 事实问答:0
代码实战:从基础到进阶
多轮对话上下文维护
import openai
conversation = [{"role": "system", "content": "你是一位技术文档撰写助手"}
]
def chat(user_input):
try:
conversation.append({"role": "user", "content": user_input})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=conversation,
temperature=0.5
)
ai_reply = response.choices[0].message.content
conversation.append({"role": "assistant", "content": ai_reply})
return ai_reply
except Exception as e:
print(f"API 错误: {str(e)}")
return "服务暂时不可用"
关键点:
1. 始终维护完整的对话历史列表
2. 每次调用包含 system/user/assistant 全部消息
3. 添加基础异常处理
结构化输出模板
template = """
请以 JSON 格式返回以下信息:{
"summary": "不超过 20 字的摘要",
"keywords": ["关键词 1", "关键词 2"],
"sentiment": "positive/neutral/negative"
}
待分析文本:{user_input}
"""
# 调用时使用 response_format 参数强制 JSON 输出
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": template.format(user_input="体验很棒但价格偏高")}],
response_format={"type": "json_object"}
)
生产环境最佳实践
安全防护
- 提示注入防御 :
- 用户输入检测(如特殊字符过滤)
-
设置 system message 明确拒绝执行危险指令
-
敏感内容过滤 :
- 使用 Moderation API 前置检查
- 后处理正则表达式匹配关键词
成本优化
- Token 监控 :
print(f"本次消耗 token 数: {response.usage.total_tokens}") - 策略建议 :
- 对长文本先进行摘要再处理
- 缓存频繁使用的提示结果
开放实验建议
尝试调整以下参数组合,观察输出变化:
1. 固定 temperature= 0 时,比较少样本提示与零样本提示的准确性差异
2. 逐渐增大 temperature 值,观察创意类任务的多样性变化
3. 测试不同 system message 强度对输出控制的影响(如“你必须”“你应当”等措辞)
提示工程更像是一门艺术而非纯技术,最佳策略往往需要通过大量实验来发现。建议建立自己的提示案例库,持续迭代优化。
正文完
