共计 2517 个字符,预计需要花费 7 分钟才能阅读完成。
提示词工程的决定性作用
提示词质量直接影响 AI 对话系统的准确率和用户体验。典型 bad case 包括:歧义指令导致执行错误(如 ” 打开文件 ” 未指定路径)、超长上下文丢失关键信息(超过 4K token 时历史记录被截断)、敏感内容未经过滤引发合规风险。根据实测数据,优化后的提示词可使任务完成率提升 40% 以上。

核心步骤实现
1. 基础结构设计
Claude 相比 GPT 对提示词格式有更严格的要求:
- 必须使用 Markdown 语法明确分隔系统指令和用户输入
- 角色定义需放在首行(如
[System]:) - 多轮对话需标注
[Turn N]序号
基础模板示例:
def build_basic_prompt(system_msg: str, user_query: str) -> str:
"""
构建基础提示词结构
:param system_msg: 系统角色定义和初始指令
:param user_query: 用户当前输入
:return: 格式化后的完整提示词
"""return f"""[System]: {system_msg}
[Turn 1]:
用户: {user_query}
"""
2. 上下文窗口优化
实现滑动加权上下文管理(采用最近对话优先原则):
class ContextManager:
def __init__(self, max_tokens=4000):
self.history = []
self.max_tokens = max_tokens
def add_context(self, text: str, weight=1.0):
"""
添加上下文记录,权重越高保留优先级越高
:param weight: 0.0-1.0 之间的重要性系数
"""self.history.append({'text': text,'weight': weight,'tokens': len(text.split()) * 1.33 # 近似估算
})
self._compress()
def _compress(self):
"""Token 超出限制时按权重淘汰"""
total = sum(item['tokens'] for item in self.history)
if total <= self.max_tokens:
return
# 按权重升序排序后删除
self.history.sort(key=lambda x: x['weight'])
while total > self.max_tokens and self.history:
removed = self.history.pop(0)
total -= removed['tokens']
3. 安全过滤策略
三级过滤机制实现:
- 基础关键词过滤(黑名单匹配)
- 语义检测(使用 embedding 相似度)
- 输出结果复核(二次验证)
from transformers import pipeline
class SafetyFilter:
def __init__(self):
self.keywords = [...] # 敏感词列表
self.classifier = pipeline(
"text-classification",
model="bert-base-uncased"
)
def check(self, text: str) -> bool:
# 第一级检查
if any(kw in text.lower() for kw in self.keywords):
return False
# 第二级检查
result = self.classifier(text[:512]) # 截断长文本
if result[0]['label'] == 'UNSAFE':
return False
return True
生产级优化
模板生成函数(带监控)
import time
from dataclasses import dataclass
@dataclass
class PromptMetrics:
build_time: float
token_count: int
safety_check: bool
def build_pro_prompt(
system_msg: str,
user_input: str,
context: list[str]
) -> tuple[str, PromptMetrics]:
start = time.time()
# 安全检查
sf = SafetyFilter()
if not all(sf.check(t) for t in [system_msg, user_input] + context):
raise ValueError("包含不安全内容")
# 构建提示词
parts = [f"[System]: {system_msg}",
*[f"[Context {i}]: {t}" for i, t in enumerate(context)],
f"[User]: {user_input}"
]
prompt = "\n\n".join(parts)
return prompt, PromptMetrics(build_time=time.time() - start,
token_count=len(prompt.split()) * 1.33,
safety_check=True
)
避坑指南
对话状态机维护
常见错误模式:
- 未处理用户突然切换话题(应检测意图变化)
- 过度依赖历史导致认知偏差(需定期重置部分上下文)
- 未考虑多模态交互(如图片描述应转为文本标记)
Temperature 调参
不同业务场景推荐值:
- 客服对话:0.2-0.5(高确定性)
- 创意生成:0.7-1.0(多样性优先)
- 数据分析:0.1-0.3(精确性第一)
实践与思考
尝试回答以下问题:
- 如何设计跨会话的长期记忆机制?
- 当用户连续发送修正指令时(如 ” 不对,应该是 …”),如何优化上下文更新策略?
- 针对金融 / 医疗等专业领域,应该如何扩展安全过滤规则?
测试 API 示例:
curl https://api.anthropic.com/v1/complete \
-H "Content-Type: application/json" \
-d '{"prompt":"[System]: 你是一个客服助手 \n\n[User]: 我的订单为什么延迟了?","model":"claude-2","max_tokens": 200
}'
[注] 实际使用时需替换为有效的 API 密钥和最新端点
正文完
发表至: 未分类
近两天内
