Prompt Engineering 提示工程
与 LLM 高效沟通的艺术——好的 Prompt 可以让模型输出质量提升数倍。
基础 Prompt 策略
零样本 Prompt(Zero-shot)
- 直接给出任务描述,无示例
- 适合简单的分类、问答任务
- 格式指导:清晰的任务说明 + 期望输出格式
少样本 Prompt(Few-shot)
- 在 Prompt 中给出 2-5 个示例
- 帮助模型理解任务格式和期望
- 示例选择:多样且代表性强
- 示例格式一致性很重要
思维链(Chain-of-Thought, CoT)
标准 CoT
- 让模型在输出答案前显式展示推理过程
- "Let's think step by step" 触发推理
- 显著提升数学/逻辑推理任务
Zero-shot CoT
- 不加示例,仅添加"Let's think step by step"
- 简单有效
Few-shot CoT
- 提供包含推理过程的示例
- 如 GSM8K 数学题示例
自动 CoT(Auto-CoT)
- 自动生成推理链示例
- 减少人工标注成本
思维树(Tree-of-Thought, ToT)
概念
- 在推理过程中探索多条路径
- 分步评估每条路径的可行性
- 搜索(BFS/DFS)找到最佳推理链
应用场景
- 需要规划和探索的任务
- 数学证明、创意写作
结构化 Prompt
System Prompt
- 设定模型角色和行为准则
- 放置于用户消息之前
- 典型内容:角色定义、行为约束、输出格式、安全规则
User Prompt 设计
- 清晰具体的指令
- 结构化格式(列表、表格、JSON)
- 约束条件明确(长度、格式、风格)
复杂任务分解
- 将复杂任务拆分为多个步骤
- 分步 Prompt 链(Prompt Chaining)
- 每步结果作为下一步输入
高级技巧
角色扮演
- "你是一个资深的 Java 工程师"
- "你是我 5 岁女儿的老师"
输出格式化
- 指定输出 JSON/XML/Markdown
- "请以 JSON 格式输出,包含 label 和 score 字段"
反事实 Prompt
- "如果 xxx 会怎样?"
- 激发模型的推理能力
对抗性 Prompt
- 测试模型的边界
- 检查安全对齐效果
常见 Prompt 模式对比表
| 模式 | 核心思想 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|---|
| Zero-shot | 无示例,直接描述任务 | 简单分类、FAQ、翻译 | 简洁、Token 成本低 | 复杂任务效果不稳定 |
| Few-shot | 提供 2-5 个示例 | 格式控制、分类、情感分析 | 任务理解准确、输出格式可控 | 增加 Token 消耗、示例选择依赖经验 |
| CoT | 展示推理步骤后给出答案 | 数学题、逻辑推理、复杂分析 | 推理能力显著提升、结果可解释 | 推理链可能出错、Token 消耗大 |
| Zero-shot CoT | 仅触发推理指令,无示例 | 通用推理任务 | 简单、通用、无需构造示例 | 推理质量不如 Few-shot CoT |
| ToT | 多路径探索 + 评估搜索 | 数学证明、创意写作、规划任务 | 探索更全面、可能找到更优解 | 多次调用 LLM,成本高、延迟大 |
| Role Prompt | 设定角色身份 | 客服、教学、代码审查 | 输出风格稳定、上下文一致性高 | 角色设定不当会限制模型能力 |
| Structured Prompt | 系统指令 + 结构化用户指令 | 复杂业务流程、多步骤任务 | 可复用性高、输出质量稳定 | 设计成本高、灵活性较低 |
提示注入(Prompt Injection)
- 恶意 Prompt 试图覆盖系统指令
- 防御策略:输入过滤、输出验证、Prompt 分隔
总结
Prompt Engineering 是人与 LLM 交互的核心技能。从基础的 Zero-shot / Few-shot,到提升推理能力的 CoT / ToT,再到结构化的 System Prompt 设计,掌握这些技术能显著提高模型输出的质量、准确性和可控性。实际应用中,通常需要根据任务复杂度、成本预算和质量要求,灵活组合多种 Prompt 策略。