共计 2545 个字符,预计需要花费 7 分钟才能阅读完成。
提示词工程的核心价值
- 提示词工程是对话模型的 ” 方向盘 ”,直接决定了 AI 输出的质量和方向性
- 优秀的提示词可以节省 80% 的调试时间,让模型输出更符合预期
- 在相同模型能力下,提示词质量会造成效果表现的指数级差异
提示词优化前后对比
| 问题类型 | 糟糕示例 | 优化后示例 | 改进点分析 |
|---|---|---|---|
| 开放提问 | “ 说说 AI” | “ 用 200 字简介 AI 发展史,侧重 2010 年后的突破 ” | 限定范围 + 明确长度 + 时间聚焦 |
| 指令执行 | “ 写个诗 ” | “ 创作七言绝句,主题秋天,含‘枫叶’意象 ” | 格式要求 + 主题限定 + 关键词约束 |
| 逻辑推理 | “1+ 1 等于几 ” | “ 分步骤证明 1 +1=2,用皮亚诺公理体系解释 ” | 解题方法 + 理论框架指定 |
五大核心技能详解
1. 上下文窗口管理(Context Window Management)
- 分块处理:当对话超过 4096 token 时自动切分会话
- 关键记忆 :用
<memory>标签标记必须保留的上下文 - 清理策略:每 5 轮对话后移除最早的非必要历史
# 上下文压缩示例
history = [{"role": "user", "content": "推荐北京餐馆"},
{"role": "assistant", "content": "<memory> 用户偏好川菜 </memory>"}
]
2. 角色人格设定(Role Persona)
- 基础模板:
你是一位资深厨师,有 20 年川菜经验 回答时:1. 使用专业术语但解释含义 2. 给出 3 个备选方案 3. 最后补充营养建议 - 语气控制:通过形容词调节(严谨 / 活泼 / 权威)
3. 输出格式控制(Output Formatting)
- 结构化标记:
按 JSON 格式回答:{ "recommendations": [{"name": "","reason":""} ], "tips": "" } - 视觉优化:要求使用 Markdown 表格呈现比较数据
4. 多轮对话设计(Multi-turn Flow)
stateDiagram
[*] --> 初始询问
初始询问 --> 细节澄清: 需补充信息
细节澄清 --> 方案生成: 信息完整
方案生成 --> 满意度确认
满意度确认 --> [*]: 用户满意
满意度确认 --> 细节澄清: 需要修改
5. 敏感内容过滤(Safety Filter)
- 显式声明:” 拒绝回答涉及机密信息的问题 ”
- 二次确认:当检测到敏感词时要求用户验证意图
- 替代方案:对危险询问提供无害化建议(如用理论代替实操)
Python 实战示例
基础对话实现
import anthropic
client = anthropic.Client("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"])
带上下文的对话流
def chat_with_context(history, new_query):
prompt = "\n".join([f"{anthropic.HUMAN_PROMPT if msg['role']=='user'else anthropic.AI_PROMPT}{msg['content']}"
for msg in history
]) + f"{anthropic.HUMAN_PROMPT}{new_query}{anthropic.AI_PROMPT}"
return client.completion(
prompt=prompt,
model="claude-2",
max_tokens_to_sample=500
)
结构化输出解析
# 要求模型返回可解析格式
structured_prompt = """
请用以下 JSON 格式回答:{"ingredients": ["名称", "用量"], "steps": ["步骤描述"]}
问题:如何制作卡布奇诺?"""
response = client.completion(prompt=f"{anthropic.HUMAN_PROMPT}{structured_prompt}{anthropic.AI_PROMPT}",
model="claude-2"
)
import json
recipe = json.loads(response["completion"].split('```json')[1].split('```')[0])
生产环境注意事项
Token 消耗优化
- 使用
tiktoken库预先计算 token 数 - 对长文本采用摘要式上下文(如 ” 用户之前询问过咖啡机选购 ”)
超时处理
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_api_call(prompt):
try:
return client.completion(
prompt=prompt,
model="claude-2",
timeout=10 # 秒
)
except Exception as e:
print(f"API 调用失败: {str(e)}")
raise
错误重试机制
- 对 429/503 错误自动延迟重试
- 维护请求队列避免突发流量
进阶思考题
- 如何设计提示词让 Claude 在回答法律问题时自动标注法条出处?
- 当用户连续三次追问同类问题时,提示词应该怎样动态调整?
- 怎样利用 temperature 参数实现 ” 严谨模式 ” 和 ” 创意模式 ” 的切换?
关键参数解析
- temperature:
- 0.2-0.5:确定性回答(适合事实查询)
- 0.6-0.8:平衡模式(日常对话)
-
0.9-1.2:高创造性(写作场景)

-
system prompt 设计:
- 位置:必须在对话最开头
- 有效写法:” 你是 XX 专家,你的任务是 …,必须避免 …”
- 禁忌:不要在 system prompt 中放具体问题
在实际项目中,我们发现最有效的提示词往往经过 50+ 次迭代。建议建立测试用例集,用 A / B 测试对比不同提示词版本的效果。记住:好的提示词工程师不是语法专家,而是最懂业务需求的人。
正文完
发表至: 未分类
近两天内

