共计 2756 个字符,预计需要花费 7 分钟才能阅读完成。
为什么提示词工程如此重要
提示词工程(Prompt Engineering)是对话模型开发的核心技能。好的提示词能显著提升模型响应质量,减少无效交互。掌握这项技能可以让你用 20% 的精力获得 80% 的效果提升。

糟糕提示词 vs 优化提示词对比
| 问题类型 | 糟糕示例 | 优化后示例 | 改进点 |
|---|---|---|---|
| 开放性提问 | “ 说说 AI” | “ 用 200 字简介 AI 发展史,重点说明 2010 年后的突破 ” | 限定范围和格式 |
| 角色设定 | “ 回答我的问题 ” | “ 你是一位资深 AI 研究员,用通俗语言解释 transformer 架构 ” | 明确角色定位 |
| 多轮对话 | “ 继续 ” | “ 根据我们刚才讨论的 CNN 原理,现在请对比说明 RNN 的优缺点 ” | 保持上下文连贯 |
5 个必须掌握的核心技能
1. 上下文窗口管理(Context Window Management)
Claude- 2 的上下文窗口为 100K tokens,但实际使用需注意:
- 重要信息放在对话开头和结尾(首因效应和近因效应)
- 每轮对话后主动清理无效历史(如用户说 ” 重来 ” 时重置上下文)
- 长文档处理时使用摘要技术(Summary Token 占比建议 <15%)
2. 角色人格设定(Role Persona)
有效的 system prompt 模板:
system_prompt = """ 你是一个 [角色名称],具有[特征 1]、[特征 2] 的专业背景。你的对话风格是[风格描述]。回答时请:1. 保持[特定语气]
2. 避免[禁忌事项]
3. 当遇到 [某类问题] 时按 [处理方式] 响应 """
3. 输出格式控制(Output Formatting)
结构化输出示例:
请按以下格式回答:** 核心观点 **:[1- 2 句总结]
** 论据支持 **:- 第一点
- 第二点
** 延伸思考 **:[可选补充]
4. 多轮对话设计(Multi-turn Flow)
对话状态机示意图:
graph LR
A[开始] --> B{用户意图识别}
B -->| 查询类 | C[知识检索]
B -->| 操作类 | D[确认参数]
C --> E[生成回答]
D --> E
E --> F{是否需要细化}
F -->| 是 | B
F -->| 否 | G[结束]
5. 敏感内容过滤(Safety Filter)
三层过滤机制:
- 前置提示词约束(明确禁止领域)
- API 参数设置(filter_profanity=True)
- 后处理正则匹配(如过滤特定关键词)
Python 实战代码示例
基础对话实现
import anthropic
client = anthropic.Client(api_key="your_api_key")
response = client.completion(prompt=f"{anthropic.HUMAN_PROMPT}如何学习提示词工程?{anthropic.AI_PROMPT}",
model="claude-2",
max_tokens_to_sample=300,
temperature=0.7 # 控制创造性
)
print(response['completion'])
带上下文的对话流
dialog_history = []
def add_to_history(role, text):
dialog_history.append(f"{anthropic.HUMAN_PROMPT if role =='user'else anthropic.AI_PROMPT}{text}")
# 第一轮
add_to_history('user', '推荐 Python 入门书')
response = client.completion(prompt=''.join(dialog_history),
model="claude-2",
max_tokens_to_sample=200
)
add_to_history('assistant', response['completion'])
# 第二轮
add_to_history('user', '这些书适合零基础吗?')
response = client.completion(prompt=''.join(dialog_history),
model="claude-2",
max_tokens_to_sample=250
)
结构化输出解析
import re
prompt = """ 列出 3 个常用的 Python 数据可视化库,按以下格式返回:名称:<lib_name>
特点:<key_features>
适合场景:<use_cases>
---"""
response = client.completion(prompt=prompt, ...)
# 使用正则提取结构化数据
pattern = r"名称:(.*?)\n 特点:(.*?)\n 适合场景:(.*?)(?:\n---|$)"
matches = re.findall(pattern, response['completion'], re.DOTALL)
for lib in matches:
print(f"Library: {lib[0]}")
print(f"Features: {lib[1]}")
print(f"Use Cases: {lib[2]}\n")
生产环境注意事项
Token 消耗优化
- 使用
anthropic.count_tokens()监控用量 - 长文本先进行分块处理(建议每块 <5K tokens)
- 设置
max_tokens_to_sample时预留 20% 缓冲
超时处理
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 safe_completion(prompt):
try:
return client.completion(
prompt=prompt,
timeout=30 # 秒
)
except Exception as e:
print(f"Error: {e}")
raise
错误重试机制
- 429 状态码:指数退避重试(建议初始延迟 2s)
- 500 错误:记录日志后跳过当前请求
- 网络中断:自动切换到备用 API 端点
进阶思考题
- 如何设计提示词让 Claude 自动检测并修正自身回答中的事实性错误?
- 当用户连续提出无关问题时,应该用什么策略保持对话连贯性?
- 怎样利用 temperature 参数实现 ” 严谨模式 ” 和 ” 创意模式 ” 的快速切换?
关键参数深度解析
temperature 的影响
- 0.1-0.3:事实性回答(适合知识查询)
- 0.4-0.7:平衡模式(日常对话推荐)
- 0.8-1.0:创意生成(故事写作等)
注意:高于 1.0 可能导致输出混乱
实践建议
从简单场景开始,逐步迭代优化你的提示词。建议先实现:
- 基础问答功能
- 添加角色设定
- 引入多轮对话管理
- 最后处理边界情况和异常流
记住:好的提示词设计是 90% 的明确需求加上 10% 的调试优化。
正文完
