共计 2421 个字符,预计需要花费 7 分钟才能阅读完成。
背景:传统对话系统与 LLM 提示工程的差异
传统基于规则的对话系统依赖预定义的流程和固定模板,开发周期长且难以应对复杂场景。相比之下,LLM 提示工程通过自然语言指令动态引导模型行为,具有以下优势:

- 灵活性 :无需硬编码所有可能路径,通过上下文学习适应新场景
- 可扩展性 :同一模型通过不同提示词服务多种业务需求
- 开发效率 :迭代周期从周级缩短至小时级
Anthropic Claude 的提示词设计特点
相比通用 LLM,Anthropic Claude 系列模型在以下方面具有独特设计:
- 结构化指令响应 :支持 XML 标签划分对话角色(如
<assistant>,<user>) - 安全层内置 :自动过滤有害内容,减少额外防护代码
- 长上下文优化 :支持 100K token 上下文窗口的稳定记忆
核心实现:多轮对话管理系统
环境准备
import anthropic
from typing import List, Dict, Optional
client = anthropic.Anthropic(api_key="YOUR_API_KEY")
对话状态管理类
class DialogueManager:
def __init__(self, system_prompt: str, max_tokens: int = 4096):
self.history: List[Dict[str, str]] = [{"role": "system", "content": system_prompt}
]
self.max_tokens = max_tokens
def add_message(self, role: str, content: str) -> None:
self.history.append({"role": role, "content": content})
self._truncate_history()
def _truncate_history(self) -> None:
current_length = sum(len(msg["content"]) for msg in self.history)
while current_length > self.max_tokens and len(self.history) > 1:
removed = self.history.pop(1) # 保留系统提示
current_length -= len(removed["content"])
完整对话流程示例
def run_chat():
manager = DialogueManager(
system_prompt="你是一个专业的客服助手,回答请简明扼要",
max_tokens=3000
)
while True:
user_input = input("用户:")
if user_input.lower() == 'exit':
break
manager.add_message("user", user_input)
try:
response = client.messages.create(
model="claude-3-opus-20240229",
messages=manager.history,
temperature=0.7,
max_tokens=500
)
print(f"助手: {response.content[0].text}")
manager.add_message("assistant", response.content[0].text)
except anthropic.APIError as e:
print(f"API 错误: {e}")
效果验证指标体系
设计可量化的评估维度:
- 意图识别准确率 :随机采样 100 条对话,人工标注预期意图与实际响应的匹配度
- 响应相关性 :使用 BERT 模型计算用户问题与 AI 回答的语义相似度
- 安全合规率 :通过敏感词库检测违规内容出现频率
常见问题解决方案
提示词注入防范
-
输入预处理:
def sanitize_input(text: str) -> str: forbidden = ["ignore", "previous", "system"] return ''.join(char for char in text if char not in forbidden) -
上下文隔离:为不同功能模块创建独立的 DialogueManager 实例
长上下文优化
- 关键信息摘要:定期生成对话摘要替换原始历史
- 向量检索:只保留与当前话题最相关的历史片段
RAG 架构集成方案
graph LR
A[用户问题] --> B{是否需要领域知识?}
B -->| 是 | C[向量库检索]
B -->| 否 | D[直接生成]
C --> E[知识增强提示]
E --> F[生成最终回答]
实现代码片段:
from sentence_transformers import SentenceTransformer
import numpy as np
retriever = SentenceTransformer('all-MiniLM-L6-v2')
def retrieve_relevant_info(query: str, knowledge_base: List[str], top_k: int=3) -> List[str]:
query_embedding = retriever.encode(query)
doc_embeddings = retriever.encode(knowledge_base)
similarities = np.dot(doc_embeddings, query_embedding)
top_indices = np.argsort(similarities)[-top_k:]
return [knowledge_base[i] for i in top_indices]
总结与进阶方向
掌握提示词工程需要平衡三个维度:模型特性理解(如 Claude 的 XML 偏好)、业务需求转化(将场景需求拆解为指令结构)、工程实践能力(上下文管理和评估体系)。建议后续探索:
- 基于用户反馈的在线学习机制
- 多模态提示词设计
- 成本控制与延迟优化
正文完
发表至: 人工智能
近三天内
