共计 2550 个字符,预计需要花费 7 分钟才能阅读完成。
背景痛点:智能 Agent 开发中的提示词困境
在构建智能 Agent 时,开发者常遇到几个典型问题:

- 意图歧义:相同的用户输入可能对应多种意图(例如 ” 重启服务 ” 可能是命令也可能是咨询操作步骤)
- 上下文断裂:多轮对话中 Agent 难以保持长期记忆(比如用户第 5 次提问时忘记之前约定的筛选条件)
- 响应不可控:生成结果可能包含无关内容或安全隐患(如自动补全敏感信息)
技术方案对比
1. 规则模板
最传统的方案,适合简单场景:
def rule_based_response(user_input):
if "天气" in user_input:
return "请问您想查询哪个城市?"
elif "预约" in user_input:
return "请选择预约日期:"
优点:确定性高,响应速度快
缺点:维护成本随场景增加呈指数上升
2. Few-shot Learning
通过示例引导模型行为:
prompt = """
示例对话:用户:推荐适合新手的 Python 书
AI:《Python 编程:从入门到实践》很适合初学者
当前对话:用户:我想学机器学习
AI:"""
优点:比纯规则更灵活
缺点:示例质量直接影响效果
3. 思维链(CoT)
要求模型展示推理过程:
请按步骤思考:1. 识别用户意图:查询订单状态
2. 验证必需参数:订单号缺失
3. 生成响应:请您提供订单号
优点:显著提升复杂任务准确率
缺点:增加 token 消耗
核心实现
动态提示词生成(Python 示例)
import logging
from typing import Dict, Optional
logger = logging.getLogger(__name__)
class DynamicPromptGenerator:
def __init__(self, template_db: Dict[str, str]):
self.templates = template_db
def generate(self, intent: str, context: Optional[Dict] = None) -> str:
"""
根据意图和上下文生成动态提示词
:param intent: 识别的意图类型
:param context: 对话上下文字典
:return: 组装后的提示词字符串
"""
try:
base_prompt = self.templates.get(intent, "")
if not base_prompt:
logger.warning(f"未找到意图'{intent}'对应的模板")
return ""
# 动态插入上下文变量
if context and "{user_name}" in base_prompt:
return base_prompt.format(**context)
return base_prompt
except Exception as e:
logger.error(f"提示词生成失败: {str(e)}", exc_info=True)
raise
上下文记忆实现
通过向量数据库维护对话历史:
from sentence_transformers import SentenceTransformer
import numpy as np
class ContextManager:
def __init__(self):
self.encoder = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
self.memory = [] # 存储 (embedding, text) 对
def add_context(self, text: str):
"""将文本编码后存入记忆"""
emb = self.encoder.encode(text)
self.memory.append((emb, text))
def get_relevant_context(self, query: str, top_k=3) -> list:
"""检索最相关的历史对话"""
query_emb = self.encoder.encode(query)
similarities = [np.dot(query_emb, emb) / (np.linalg.norm(query_emb) * np.linalg.norm(emb))
for emb, _ in self.memory
]
sorted_indices = np.argsort(similarities)[-top_k:][::-1]
return [self.memory[i][1] for i in sorted_indices]
性能优化策略
Token 消耗控制
- 摘要历史对话:用 LLM 对长上下文生成摘要
- 关键信息提取:只保留命名实体、数字等核心信息
- 压缩提示词:删除示例中不影响效果的描述词
延迟敏感场景
- 预生成常见响应:高频问答对提前生成缓存
- 流式传输:分块返回首 token 延迟小于 200ms
- 模型蒸馏:用小模型处理简单意图
生产环境避坑指南
1. 提示词注入攻击
现象:用户输入包含恶意指令如 ” 忽略之前提示 …”
防御方案:
def sanitize_input(text: str) -> str:
forbidden_phrases = ["忽略之前", "忘记前面", "现在开始"]
for phrase in forbidden_phrases:
text = text.replace(phrase, "[REDACTED]")
return text
2. 上下文污染
现象:历史对话包含过期 / 错误信息
解决方案:
– 设置 TTL 自动清除旧消息
– 实现置信度打分过滤低质量上下文
3. 敏感信息泄露
防护措施:
– 在提示词模板中明确禁止返回:
重要规则:- 绝不透露手机号 / 身份证等个人信息
- 遇到财务咨询必须要求二次验证
开放式思考题
- 当需要处理超长文档(如 100 页 PDF)时,如何设计提示词体系才能既保持理解深度又控制成本?
- 在多 Agent 协作场景中,提示词工程应该如何适配不同 Agent 的专长领域?
实践心得
经过多个项目的迭代验证,我们发现提示词工程没有银弹方案。最佳实践是:
- 分阶段验证:先用少量示例测试核心逻辑
- 监控迭代:收集 bad case 持续优化模板
- 平衡艺术:在确定性和灵活性之间找到适合业务的平衡点
建议每两周做一次提示词效果 review,重点关注用户真实对话中的边缘案例。记住:好的 Agent 不是一次设计出来的,而是在持续优化中成长起来的。
正文完
