跳到内容

高级提示词工程技术

本指南介绍了 58 种有研究支持的提示词工程技术,并映射到 Instructor 实现。本指南基于 The Prompt Report(由 Learn Prompting 发布,分析了 1,500 多篇关于提示词工程的学术论文)。

提示词技术地图

下图展示了不同的提示词技术如何相互关联以及何时使用它们

flowchart TD
    A[Choose Prompting Technique] --> B{Have Examples?}

    B -->|No| C[Zero-Shot Techniques]
    B -->|Yes| D[Few-Shot Techniques]

    C --> C1[Role Prompting]
    C --> C2[Emotional Language]
    C --> C3[Style Definition]
    C --> C4[Follow-Up Generation]

    D --> D1[Example Ordering]
    D --> D2[Example Selection]
    D --> D3[Example Generation]

    A --> E{Need Reasoning?}

    E -->|Yes| F[Thought Generation]
    F --> F1[Chain of Thought]
    F --> F2[Step-Back Prompting]
    F --> F3[Thread of Thought]

    A --> G{Complex Problem?}

    G -->|Yes| H[Decomposition]
    H --> H1[Least-to-Most]
    H --> H2[Tree of Thought]
    H --> H3[Plan and Solve]

    A --> I{Need Verification?}

    I -->|Yes| J[Self-Criticism]
    J --> J1[Self-Verification]
    J --> J2[Chain of Verification]
    J --> J3[Self-Refinement]

    A --> K{Want Multiple Perspectives?}

    K -->|Yes| L[Ensembling]
    L --> L1[Self-Consistency]
    L --> L2[Meta-CoT]
    L --> L3[Specialized Experts]

    classDef category fill:#e2f0fb,stroke:#b8daff,color:#004085;
    classDef technique fill:#d4edda,stroke:#c3e6cb,color:#155724;
    classDef decision fill:#fff3cd,stroke:#ffeeba,color:#856404;

    class A,C,D,F,H,J,L category
    class C1,C2,C3,C4,D1,D2,D3,F1,F2,F3,H1,H2,H3,J1,J2,J3,L1,L2,L3 technique
    class B,E,G,I,K decision

何时使用各种技术

目标 推荐技术
提高准确性 思维链, 自我验证, 自洽性
处理复杂问题 分解, 思维树, 从易到难
生成创意内容 角色提示, 情感语言, 风格定义
验证事实正确性 验证链, 自我校准
使用少量示例优化 KNN 示例选择, 主动提示
处理不确定性 不确定性路由思维链, 自洽性

零样本

这些技术无需示例即可提高模型性能

技术 描述 用例
情感语言 在提示词中添加情感色彩 创意写作, 情感共鸣响应
角色分配 为模型指定特定角色 专家知识, 专业视角
风格定义 指定写作风格 具有特定语调或格式的内容
提示词优化 自动优化提示词 结果的迭代改进
视角模拟 让模型采纳不同视角 多方利益相关者分析
模糊性澄清 识别并解决不明确之处 提高响应的精确度
查询重复 要求模型重述任务 更好地理解任务
后续问题生成 生成澄清性问题 深入探索主题

少样本

在提示词中有效使用示例的技术

技术 描述 用例
示例生成 自动创建示例 示例数据有限的领域
示例排序 示例的最优排序 提高模式识别能力
KNN 示例选择 选择与查询相似的示例 领域特定的准确性
Vote-K 选择 高级基于相似性的选择 复杂模式匹配

思维生成

鼓励模型进行类人推理的方法

零样本推理

技术 描述 用例
类比思维链 使用类比生成推理 复杂问题解决
回溯提示 首先考虑更高层次的问题 科学和抽象推理
思维线 鼓励分步分析 生成详细解释
表格思维链 以表格格式构建推理 多因素分析

少样本推理

技术 描述 用例
主动提示 标注不确定示例 提高边缘案例的准确性
自动思维链 选择多样化的示例 广泛的领域覆盖
基于复杂度的思维链 使用复杂示例 具有挑战性的问题类型
对比思维链 包含正确和错误情况 错误检测和避免
思维记忆 使用高确定性示例 关键应用中的可靠性
不确定性路由思维链 选择最确定的推理路径 不确定性下的决策
提示词挖掘 生成模板化提示词 高效的提示词工程

集成

组合多个提示词或响应的技术

技术 描述 用例
一致的、多样化的集合 构建一致的示例集 稳定的性能
批量上下文示例 高效的示例批量处理 性能优化
步骤验证 验证单个步骤 复杂工作流
最大化互信息 信息论优化 信息密集的输出
元思维链 合并多个推理链 复杂问题解决
专业专家 使用不同的“专家”提示词 多领域任务
自洽性 选择最一致的推理 逻辑准确性
通用自洽性 领域无关的一致性 常识任务
任务特定选择 根据任务选择示例 专业领域任务
提示词改写 使用同一提示词的不同变体 稳健的输出

自我批评

模型验证或改进自身响应的方法

技术 描述 用例
验证链 生成验证问题 事实核查, 准确性
自我校准 询问答案是否正确 置信度估计
自我改进 自动生成反馈并改进 迭代改进
自我验证 对多个解决方案评分 质量评估
逆向思维链 重构问题 复杂推理验证
累积推理 生成可能的步骤 彻底分析

分解

分解复杂问题的技术

技术 描述 用例
函数式分解 将子问题实现为函数 模块化问题解决
忠实思维链 使用自然语言和符号语言 数学推理
从易到难 解决越来越复杂的子问题 教育应用
规划与解决 生成结构化计划 项目规划
思维程序 使用代码进行推理 算法问题
递归思维 递归地解决子问题 分层问题
思维骨架 生成大纲结构 写作, 规划
思维树 搜索可能的路径 决策树, 探索

使用 Instructor 实现

所有这些提示词工程技术都可以通过以下方式使用 Instructor 实现:

  1. 定义合适的 Pydantic 模型来捕获预期结构
  2. 在模型的 docstring 或字段描述中加入提示词技术
  3. 将修补后的 LLM 客户端与响应模型一起使用
import instructor
from openai import OpenAI
from pydantic import BaseModel, Field

# Example implementing Chain of Thought with a field
class ReasonedAnswer(BaseModel):
    """Answer the following question with detailed reasoning."""

    chain_of_thought: str = Field(
        description="Step-by-step reasoning process to solve the problem"
    )
    final_answer: str = Field(
        description="The final conclusion after reasoning"
    )

client = instructor.from_openai(OpenAI())

response = client.chat.completions.create(
    model="gpt-4",
    response_model=ReasonedAnswer,
    messages=[
        {"role": "user", "content": "What is the cube root of 27?"}
    ]
)

print(f"Reasoning: {response.chain_of_thought}")
print(f"Answer: {response.final_answer}")

参考资料

* 基于 The Prompt Report: A Systematic Survey of Prompting Techniques