共计 1641 个字符,预计需要花费 5 分钟才能阅读完成。
在 AI 对话系统开发中,提示词设计直接决定了意图理解的准确率和响应质量。典型问题包括:模糊指令导致多次澄清(如 ” 帮我找资料 ” 未指定领域)、超长上下文丢失关键信息(超过 4K tokens 时历史记录被截断)、以及安全过滤失效引发违规内容泄露。这些问题可能造成 40% 以上的额外调试成本,而系统的提示词工程能显著改善这些缺陷。

一、基础结构设计
Claude 的提示词需要严格遵循 <system><user><assistant> 三段式结构,比 GPT 多出 20% 的格式约束。基础模板应包含:
def build_basic_prompt(system_role: str, user_query: str) -> str:
"""
构建符合 Claude 规范的提示词结构
:param system_role: 系统角色定义(需包含安全声明):param user_query: 用户输入(自动进行 HTML 转义):return: 符合 API 要求的 prompt 字符串
"""
import html
return f"""
<system>
{system_role}
安全准则:拒绝生成涉及暴力、隐私、歧视的内容
</system>
<user>
{html.escape(user_query)}
</user>
"""
二、进阶上下文管理
实现滑动窗口加权需注意 3 个要点:
1. 最近 3 轮对话权重提升 30%
2. 关键实体(如产品名)持久化存储
3. Token 压缩采用 Tiktoken 库优先保留名词短语
def sliding_window(contexts: list[str], weights: list[float]) -> str:
"""
上下文滑动窗口加权算法
:param contexts: 历史对话列表(由旧到新):param weights: 对应权重系数(总和为 1):return: 优化后的上下文字符串
"""assert len(contexts) == len(weights)," 长度不一致 "weighted = [f"{w:.1f}*{ctx}" for w, ctx in zip(weights, contexts)]
return "\n".join(weighted[-5:]) # 保留最近 5 条
三、生产级安全策略
敏感词过滤应实施三级防护:
1. 前置关键词黑名单(实时拦截)
2. 中置语义分析(检测隐含违规)
3. 后置输出扫描(Claude 内置审核)
class SafetyFilter:
BLACKLIST = {"暴力", "毒品", "仇恨言论"}
@staticmethod
def check(text: str) -> bool:
"""返回 True 表示存在风险"""
import re
# 一级检查:精确匹配
if any(word in text for word in SafetyFilter.BLACKLIST):
return True
# 二级检查:正则模式
patterns = [
r"杀 \\w* 人", # 匹配 "杀人" 衍生词
r"[0-9]{4}元" # 匹配金额泄露
]
return any(re.search(p, text) for p in patterns)
四、关键避坑指南
- 状态机维护:
- 错误:未重置对话状态导致跨会话污染
-
正确:每个 session 独立存储 DialogState 对象
-
温度系数影响:
- creative 任务(如写作)建议 temperature=0.7-1.0
- 精确任务(如客服)应设为 0.1-0.3
- 临界值测试显示:>1.2 时结果不可控率增加 5 倍
五、实践与延伸
尝试回答以下问题:
1. 如何设计跨轮次实体指代消解方案?
2. 当用户说 ” 忘记之前说的了 ” 时该如何重置上下文?
3. 敏感词过滤是否会影响正常业务用语?(如医疗术语)
测试 API 的快速命令:
curl -X POST https://api.claude.ai/v1/complete \
-H "Content-Type: application/json" \
-d '{"prompt":"<system> 你是有礼貌的助手 </system><user> 你好 </user>","max_tokens": 50}'
正文完
