共计 1902 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点:为什么提示工程总出问题?
开发者在构建 AI Agent 时经常遇到这些头疼问题:

- 歧义提示:比如 ” 总结这篇文章 ”,模型不知道要提取关键点还是生成摘要
- 上下文丢失:多轮对话中,AI 突然忘记前几分钟讨论的内容
- 提示膨胀:不断堆砌要求导致提示词超过 token 限制
- 黑箱调试:模型输出不如预期时,很难定位是提示词哪个部分出了问题
这些问题本质都是缺乏系统的提示工程设计方法。下面分享我们团队在真实项目中验证过的解决方案。
分层提示设计:像搭积木一样构建提示
1. 系统指令层(System Prompt)
这是 AI 的 ” 操作系统 ”,定义 Agent 的基础能力和行为准则。例如:
system_prompt = """
你是一个专业的技术文档助手,需要:1. 用中文回答技术问题
2. 不确定时主动询问澄清
3. 避免主观臆断
"""
2. 用户指令层(User Prompt)
具体任务要求,建议用结构化模板:
task_template = """
请基于以下上下文完成{task_type}:上下文:{context}
要求:{requirements}
输出格式:{format_guidance}
"""
3. 动态上下文层
通过对话历史维护上下文,LangChain 实现示例:
from langchain.schema import AIMessage, HumanMessage
# 维护对话历史
dialog_history = [HumanMessage(content="Python 怎么处理 JSON?"),
AIMessage(content="可以使用 json 模块的 loads()和 dumps()方法")
]
# 添加新问题时自动携带历史
new_query = "请给出具体示例"
contextual_prompt = {
"system": system_prompt,
"task": task_template.format(
task_type="代码示例生成",
context=dialog_history[-3:], # 最近 3 轮对话
requirements="展示 json 读写完整流程",
format_guidance="Markdown 代码块"
)
}
元提示控制:让 AI 自己优化提示
元提示 (Meta-prompt) 是指指导 AI 如何理解和使用提示的提示。例如:
meta_prompt = """
当你收到用户请求时,按以下步骤处理:1. 解析请求类型(查询 / 操作 / 创作)2. 检查是否缺少必要参数
3. 根据上下文推断用户潜在需求
4. 输出前自我验证是否符合所有要求
"""
实际效果对比:
– 普通提示:” 写首诗 ” → 随机风格
– 带元提示:” 写首诗 ” → AI 会反问 ” 您想要什么主题和风格?”
多轮对话 vs 单轮提示
选择策略:
- 单轮提示适用场景
- 简单查询(”Python 的 GIL 是什么?”)
- 独立任务(” 翻译这句话 ”)
-
需要确定性的场景
-
多轮对话优势
- 复杂问题分解(” 帮我设计个电商系统 ”)
- 需要持续记忆的场景(” 继续刚才的讨论 ”)
- 交互式调试(” 不是这种风格,再试一次 ”)
生产环境关键考量
Token 优化技巧
- 使用
tiktoken库预估 token 数 - 对长上下文采用摘要而非全文
- 设置 max_tokens 预留空间
import tiktoken
def estimate_tokens(text):
encoder = tiktoken.get_encoding("cl100k_base")
return len(encoder.encode(text))
安全防护措施
-
输入过滤
import re def sanitize_input(text): return re.sub(r"[<>{}]|(admin|system)", "", text) -
输出校验
def validate_output(response): forbidden = ["密码", "密钥", "跳过验证"] return not any(word in response for word in forbidden)
避坑指南:我们踩过的 5 个坑
- 提示过长综合症
- 现象:2000+token 的提示导致响应质量下降
-
解法:拆分为多个子提示,用 ” 继续 ” 指令串联
-
过度约束
- 现象:同时要求 ” 专业严谨 ” 和 ” 幽默风趣 ”
-
解法:每个提示专注 1 - 2 个核心属性
-
忽略模型特性
- 现象:在 GPT-3.5 上有效的提示在 Claude 上失效
-
解法:建立模型专属提示库
-
魔法数字陷阱
- 现象:” 用 3 点概括 ” 导致重要信息遗漏
-
解法:改用 ” 用关键点概括 ” 等弹性指令
-
测试不充分
- 现象:生产环境出现未测试的边界 case
- 解法:建立提示的单元测试框架
开放思考
在实际项目中,我们发现两个永恒的矛盾:
– 灵活性越高的提示,控制力越弱
– 越详细的约束,泛化能力越差
你是如何平衡这些矛盾的?欢迎在评论区分享你的实战经验。
正文完
