共计 1987 个字符,预计需要花费 5 分钟才能阅读完成。
为什么需要提示工程?
在构建基于大语言模型的应用时,我们常常遇到这样的问题:同样的模型,为什么有时能给出专业准确的回答,有时却答非所问?这背后就是提示工程的用武之地。

- 客服对话系统 :一个设计良好的提示可以让模型理解用户意图,提供精准的解决方案;而糟糕的提示可能导致模型忽略关键信息,给出模板化回复。
- 代码生成 :清晰的指令能让模型生成可运行的代码片段,模糊的要求则会产生语法错误或逻辑缺陷。
提示技术对比
不同的提示技术适用于不同场景:
- 零样本提示 :直接给出指令,适合简单明确的任务,如 ” 翻译这句话成法语 ”。优点是直接快速,缺点是对复杂任务效果有限。
- 少样本提示 :提供几个示例,帮助模型理解模式。比如给 2 - 3 个问答对,再让模型回答新问题。适用于需要特定格式或风格的任务。
- 思维链 (CoT):让模型展示推理过程,如 ” 让我们一步步思考 …”。对数学题、逻辑推理等复杂任务效果显著,但会增加响应时间和 token 消耗。
核心设计原则
好的提示模板需要遵循几个关键原则:
- 指令明确 :避免模糊词汇,用具体、可操作的表述。
- 示例精选 :选择有代表性、无歧义的示例。
- 格式控制 :使用清晰的分隔符(如 “`)标记不同部分。
代码示例
基础提示
import anthropic
client = anthropic.Client(api_key="your_api_key")
try:
response = client.completion(
prompt=""" 把以下英文翻译成中文:\"Hello, how can I help you today?\"
""",
max_tokens_to_sample=100
)
print(response['completion'])
except Exception as e:
print(f"API 调用失败: {str(e)}")
带示例提示
try:
response = client.completion(
prompt=""" 以下是几个颜色翻译示例:英文: red | 中文: 红色
英文: blue | 中文: 蓝色
现在请翻译:英文: green | 中文:
""",
max_tokens_to_sample=50
)
print(response['completion']) # 预期输出: 绿色
except Exception as e:
print(f"错误: {str(e)}")
多步推理提示
try:
response = client.completion(
prompt=""" 问题:如果 3 个苹果价格是 6 元,9 个苹果多少钱?让我们一步步思考:1. 先计算单个苹果价格:6 元 ÷ 3 = 2 元 / 个
2. 再计算 9 个苹果总价:9 × 2 元 = 18 元
答案:""",
max_tokens_to_sample=150,
temperature=0.3 # 降低随机性
)
print(response['completion']) # 预期输出: 18 元
except Exception as e:
print(f"计算错误: {str(e)}")
性能优化实践
延迟与 Token 分析
- 简单查询:约 200-300ms,消耗 50-100 tokens
- 复杂推理:可能达 1 - 2 秒,消耗 300-500 tokens
- 每 1000 tokens 成本约为 $0.01-$0.03(不同模型有差异)
缓存策略
- 结果缓存 :对确定性高的查询(如翻译),缓存响应至少 5 分钟
- 向量缓存 :对相似语义的查询,使用嵌入向量做相似度匹配
- 分级缓存 :高频简单查询用内存缓存,低频复杂查询用数据库
from datetime import timedelta
from django.core.cache import cache
# 示例:Django 缓存实现
def get_cached_response(prompt):
cache_key = f"prompt_{hash(prompt)}"
response = cache.get(cache_key)
if not response:
response = client.completion(prompt=prompt)
cache.set(cache_key, response, timeout=timedelta(minutes=5).seconds)
return response
生产环境避坑指南
敏感内容过滤
- 关键词过滤 :维护敏感词列表,对输出做正则匹配
- 二次验证 :让模型自己评估回答是否合适(” 这段话是否包含不当内容?”)
- 人工审核 :高风险领域保留人工复核机制
提示注入防护
- 输入净化 :移除用户输入中的特殊字符和指令关键词
- 角色隔离 :明确区分系统指令和用户输入(如使用 ### 分隔)
- 权限控制 :限制用户可使用的指令集
成本监控
关键指标:
- 每日 / 每月 token 消耗
- 平均每次请求 token 数
- 错误率与重试次数
- 缓存命中率
开放性问题
- 如何设计一个提示模板,既能保证回答质量,又能最小化 token 消耗?
- 对于用户可能输入的恶意提示(如 ” 忽略之前指令 ”),除了基本的过滤外,还有哪些防御策略?
正文完
