共计 1924 个字符,预计需要花费 5 分钟才能阅读完成。
糟糕提示词设计的灾难现场
最近接手了一个电商客服 AI 的优化项目,刚上线就收到两大投诉:

-
场景一:深夜突然推销
用户凌晨 3 点咨询退货政策,系统突然开始推荐当季新品(后来发现是提示词里混入了促销指令) -
场景二:多轮对话失忆
用户问 ” 预算 5 千能买哪款手机?”,筛选后追问 ” 续航最强的呢?”,AI 却重新询问预算(对话历史未正确保留)
这些看似简单的 bug,背后都是提示词工程的不规范导致的系统性风险。下面分享我们团队在 Claude 模型上的实战经验。
Claude 提示词结构解析
角色分工的黄金法则
Claude 的对话结构由三个核心角色组成:
-
System:模型的 ” 操作系统 ”
定义 AI 的底层行为准则,例如:{ "role": "system", "content": "你是一个严谨的金融顾问,绝对不推荐未经验证的投资产品" } -
Assistant:AI 的历史回应
用于维持对话一致性,例如记录之前的筛选条件 -
User:最新用户输入
需要特别处理可能包含攻击性语句的情况
三种提示策略对比
| 策略类型 | 适用场景 | 示例代码片段 |
|---|---|---|
| Zero-shot | 简单明确的指令 | {"指令": "翻译这段文字为法语"} |
| Few-shot (3-shot) | 需要示范的复杂任务 | 提供 3 个完整问答对作为范例 |
| Chain-of-Thought | 需要推理步骤的数学问题 | 要求 AI 先展示计算过程再给出最终答案 |
工业级提示词管理实践
YAML 模板引擎
我们使用以下结构管理提示词模板:
# conversation_templates/refund.yaml
meta:
version: 1.2
author: QA_Team
variables:
- name: product_type
type: string
required: true
- name: purchase_date
type: date
validation: past_date
template: |
[系统角色] 你是一个专业的售后顾问,严格遵守三包政策
[用户输入] 我想退货 {{product_type}},购买日期是 {{purchase_date}}
[响应要求] 分步骤说明退货流程,标注法律依据条款
变量注入安全机制
def render_prompt(template_path, variables):
# 类型校验层
for var in template['variables']:
if var['required'] and var['name'] not in variables:
raise MissingVariableError(var['name'])
# 敏感词过滤(前置处理)sanitized_vars = security_filter(variables)
# 使用 Jinja2 安全渲染
return Template(template['content']).render(sanitized_vars)
性能优化关键指标
成本控制公式
我们发现 API 成本与 token 数量的关系为:
总成本 = (输入 token 数 * 0.002 + 输出 token 数 * 0.004) / 1000
实测一个典型对话回合:
– 原始提示词:输入 387tokens → $0.000774
– 优化后版本:输入 215tokens → $0.000430
(通过删除冗余说明实现)
敏感词过滤架构
推荐在三个位置部署过滤层:
1. 用户输入预处理阶段(尽早拦截)
2. 变量渲染过程中(防范注入攻击)
3. AI 输出后处理阶段(最终兜底)
避坑指南精华版
幻觉防御清单
在 system 指令中添加:
当遇到以下关键词时,必须回答 "不了解该信息":- "未来预测"
- "未公开数据"
- "其他 AI 系统"
- 任何涉及政治的内容
对话历史压缩算法
def compress_history(messages, keep_ratio=0.6):
# 计算每句话的 TF-IDF 权重
tfidf = TfidfVectorizer().fit_transform([msg['content'] for msg in messages])
# 保留权重最高的 60% 内容
sorted_indices = np.argsort(-tfidf.sum(axis=1).flatten())
keep_count = int(len(messages) * keep_ratio)
return [messages[i] for i in sorted_indices[:keep_count]]
留给读者的思考题
- 当用户持续输入乱码字符时,应该完全切断对话还是尝试引导?如何设计引导策略?
- 在多语言混合输入的场景下(如中英混杂),提示词应该如何优化?
- 如何检测提示词被恶意注入导致 AI 行为异常?需要监控哪些指标?
提示词工程就像教 AI 说话的艺术,既需要严谨的技术方案,也要保留应对人性化需求的灵活性。希望这些实战经验能帮你少走弯路。
正文完
发表至: 未分类
近三天内
