Prompt工程:不是玄学是工程
很多人觉得Prompt工程就是”跟AI聊天”,写得好不好全凭感觉。实际上,经过系统化的Prompt设计,可以让大模型输出的稳定性从60%提升到95%以上。
技巧一:角色设定要具体
不要写”你是一个助手”,要写”你是一个有10年经验的Python后端工程师,熟悉FastAPI、SQLAlchemy和PostgreSQL”。
角色越具体,模型的输出越专业。原理是角色设定激活了模型参数空间中与该领域相关的知识。
技巧二:输出格式要显式定义
不要说”给我一个JSON”,要给出完整的格式示例:
请按以下JSON格式输出:
{
"summary": "一句话摘要",
"key_points": ["要点1", "要点2"],
"sentiment": "positive/negative/neutral",
"confidence": 0.0-1.0
}
只输出JSON,不要任何其他文字。
加上”只输出JSON”这句话,可以避免模型在JSON前后加多余的解释文字。
技巧三:用Few-Shot示例代替抽象描述
与其描述”把复杂句子简化为简单句子”,不如直接给3个示例:
输入:尽管面临宏观经济下行压力,公司依然实现了营收同比增长。 输出:公司营收逆势增长。 输入:该方案在实施过程中遇到了一些预料之外的困难。 输出:方案实施遇到意外困难。
Few-Shot比抽象描述有效10倍。模型从示例中学习模式比从描述中理解规则容易得多。
技巧四:Chain-of-Thought链式推理
对于复杂推理任务,不要让模型直接给答案,而是要求它一步步推理:
请按以下步骤分析: 1. 提取关键事实 2. 识别因果关系 3. 列出可能的结论 4. 评估每个结论的证据强度 5. 给出最终结论
强制分步推理可以减少”幻觉”,让推理过程可检查、可调试。
技巧五:设置防御性约束
告诉模型”不要做什么”和”要做什么”一样重要:
约束: - 不要编造数据,信息不足时明确说"信息不足" - 不要输出与任务无关的内容 - 不要使用"可能"、"也许"等模糊词 - 引用数据必须标注来源
技巧六:系统Prompt和用户Prompt分离
系统Prompt放不变的角色设定、格式要求、约束条件。用户Prompt放每次变化的输入内容。
好处:系统Prompt可以被模型缓存(如Anthropic的Prompt Caching),后续请求成本降低90%,延迟降低80%。
技巧七:评估和迭代
Prompt不是一次写好的,需要评估和迭代:
- 准备20-50个测试用例
- 用当前Prompt跑一遍,记录输出
- 人工评估每个输出的质量(1-5分)
- 分析低分输出的原因,修改Prompt
- 重新跑测试,看分数是否提升
- 重复直到平均分>4.5
常见问题
Prompt工程和调参有什么区别?
Prompt工程不改模型参数,是通过设计输入文本来引导模型输出。微调是修改模型参数。90%的场景用Prompt工程即可解决,不需要微调。
不同大模型的Prompt写法一样吗?
核心原则一致,但细节有差异。GPT-4o对系统Prompt的遵循度高于Claude,Claude对长文本的理解更强。建议针对主力模型优化,切换时微调。
Prompt能缓存吗?
Anthropic的Prompt Caching支持系统Prompt缓存,后续请求成本降低90%。OpenAI的自动缓存机制也会缓存相同前缀。把固定内容放在Prompt开头可以触发缓存。