跳转至

高级Prompt技术

1. Self-Consistency(自一致性)

1.1 核心思想

Self-Consistency通过多次采样不同推理路径,然后对最终答案进行多数投票(majority vote),以提高推理准确性。

1.2 工作流程

问题 → [CoT推理路径1 → 答案A]
     → [CoT推理路径2 → 答案B]
     → [CoT推理路径3 → 答案A]
     → [CoT推理路径4 → 答案A]
     → [CoT推理路径5 → 答案C]

多数投票 → 答案A(3/5)✓

1.3 实现方式

import openai
from collections import Counter

def self_consistency(prompt, n_samples=5, temperature=0.7):
    """使用Self-Consistency进行多次采样投票"""
    answers = []
    for _ in range(n_samples):
        response = openai.chat.completions.create(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=temperature
        )
        # 从推理过程中提取最终答案
        answer = extract_final_answer(response.choices[0].message.content)
        answers.append(answer)

    # 多数投票
    counter = Counter(answers)
    return counter.most_common(1)[0][0]

1.4 适用场景与局限

适用: 数学题、逻辑推理、选择题等有明确答案的任务

局限:

  • 成本较高(多次API调用)
  • 对开放式生成任务效果有限
  • 需要可靠的答案提取机制

2. Tree of Thoughts (ToT)

2.1 核心思想

Tree of Thoughts将推理过程组织为树状结构,在每个节点生成多个"思考"分支,并通过评估选择最优路径。

2.2 与CoT的区别

方面 CoT ToT
推理结构 线性链 树状分支
探索方式 单一路径 多路径并行
回溯 支持
评估 仅最终结果 中间步骤可评估

2.3 实现框架

class TreeOfThoughts:
    def __init__(self, model, evaluator):
        self.model = model
        self.evaluator = evaluator

    def solve(self, problem, max_depth=3, branch_factor=3):
        """BFS方式的ToT求解"""
        root = ThoughtNode(problem, depth=0)
        current_level = [root]

        for depth in range(max_depth):
            next_level = []
            for node in current_level:
                # 生成多个思考分支
                thoughts = self.generate_thoughts(node, branch_factor)
                for thought in thoughts:
                    # 评估每个思考的前景
                    score = self.evaluator.evaluate(thought)
                    child = ThoughtNode(thought, depth=depth+1, score=score)
                    node.add_child(child)
                    next_level.append(child)

            # 选择最有前景的节点继续扩展
            next_level.sort(key=lambda x: x.score, reverse=True)
            current_level = next_level[:branch_factor]

        # 返回最优叶节点
        return max(current_level, key=lambda x: x.score)

2.4 Prompt示例

问题:{problem}

请生成3个不同的解题思路(只写第一步):

思路1:
思路2:
思路3:

对每个思路评估其可行性(1-10分):

2.5 适用场景

  • 创意写作(探索不同叙事方向)
  • 数学证明(尝试不同证明策略)
  • 规划问题(探索不同行动方案)
  • 代码设计(比较不同架构方案)

3. RAG增强Prompt

3.1 基本模式

将检索到的上下文注入Prompt中,增强LLM的知识:

基于以下参考资料回答问题。如果资料中没有相关信息,请如实说明。

参考资料:
---
{retrieved_context_1}
---
{retrieved_context_2}
---
{retrieved_context_3}

问题:{user_question}

请引用参考资料中的具体内容来支持你的回答。

3.2 高级RAG Prompt模式

多步推理RAG:

基于以下资料,请:
1. 首先总结每条资料的要点
2. 分析各资料之间的关联
3. 综合回答用户问题
4. 指出可能需要补充的信息

资料:{contexts}
问题:{question}

带置信度的RAG:

基于提供的资料回答问题。对每个论点标注置信度:
- [高]: 资料中有直接支持
- [中]: 资料中可以推断
- [低]: 资料支持有限,部分基于一般知识

资料:{contexts}
问题:{question}

3.3 与记忆系统的结合

RAG可以作为AI Agent的外部记忆系统,详见 RAG增强记忆

4. DSPy:程序化Prompt优化

4.1 DSPy概述

DSPy(Declarative Self-improving Python)是一个将Prompt工程转化为编程问题的框架,通过声明式方式定义LLM程序,自动优化Prompt。

4.2 核心概念

  • Signature: 定义输入输出的类型签名
  • Module: 可组合的LLM操作模块
  • Teleprompter/Optimizer: 自动优化Prompt的算法
  • Metric: 评估Prompt质量的指标

4.3 基本用法

import dspy

# 配置LLM
lm = dspy.OpenAI(model="gpt-4", max_tokens=300)
dspy.settings.configure(lm=lm)

# 定义Signature
class SentimentClassification(dspy.Signature):
    """Classify sentiment of a text."""
    text = dspy.InputField(desc="Text to classify")
    sentiment = dspy.OutputField(desc="positive, negative, or neutral")

# 使用Module
classify = dspy.Predict(SentimentClassification)
result = classify(text="This product exceeded my expectations!")
print(result.sentiment)  # "positive"

4.4 自动优化

from dspy.teleprompt import BootstrapFewShot

# 准备训练数据
trainset = [
    dspy.Example(text="Great product!", sentiment="positive"),
    dspy.Example(text="Terrible experience.", sentiment="negative"),
    # ...更多样本
]

# 定义评估指标
def accuracy_metric(example, pred, trace=None):
    return example.sentiment == pred.sentiment

# 自动优化
teleprompter = BootstrapFewShot(metric=accuracy_metric, max_bootstrapped_demos=4)
optimized_classify = teleprompter.compile(classify, trainset=trainset)

4.5 DSPy的优势

  • 可编程: Prompt逻辑用代码表达,可测试、可版本化
  • 自动优化: 无需手动调试Prompt
  • 可组合: 模块化设计,支持复杂Pipeline
  • 与LLM解耦: 更换模型时自动适配Prompt

5. 自动Prompt优化

5.1 APE (Automatic Prompt Engineer)

自动搜索最优Prompt的方法:

1. 给定任务描述和评估数据集
2. 使用LLM生成候选Prompt
3. 在评估集上测试每个Prompt
4. 选择表现最好的Prompt
5. 迭代改进

5.2 OPRO (Optimization by PROmpting)

利用LLM本身作为优化器:

以下是一些Prompt及其表现分数:

Prompt: "Classify the sentiment" → Score: 0.72
Prompt: "Determine if positive or negative" → Score: 0.78
Prompt: "Analyze the emotional tone" → Score: 0.75

请根据以上信息,生成一个可能表现更好的新Prompt。

5.3 实践中的Prompt优化流程

1. 定义评估指标和测试集
2. 编写初始Prompt
3. 在测试集上评估
4. 分析失败案例
5. 修改Prompt(手动 + 自动)
6. 重复3-5直到满足要求
7. A/B测试上线

6. Meta-Prompting(元Prompt)

6.1 概念

使用LLM来生成、评估和改进Prompt。本质上是"写Prompt的Prompt"。

6.2 Prompt生成器

你是一个Prompt工程专家。用户会描述一个任务,你需要:

1. 分析任务的关键要素
2. 生成3个不同风格的Prompt
3. 评估每个Prompt的优劣
4. 推荐最优Prompt

任务描述:{task_description}

请生成适合GPT-4使用的Prompt。

6.3 Prompt评估器

请评估以下Prompt的质量:

Prompt: {prompt_to_evaluate}
目标任务: {task_description}

评估维度:
1. 清晰度(1-10):指令是否明确无歧义
2. 完整性(1-10):是否覆盖所有必要信息
3. 格式化(1-10):输出格式是否清晰
4. 鲁棒性(1-10):对异常输入的处理能力
5. 效率(1-10):token使用效率

综合评分和改进建议:

6.4 Prompt迭代器

当前Prompt: {current_prompt}
评估结果: {evaluation_results}
失败案例: {failure_cases}

请基于以上信息改进Prompt,具体改进:
1. 修复导致失败案例的问题
2. 保留原Prompt的优点
3. 提高整体鲁棒性

改进后的Prompt:

7. 高级技巧汇总

7.1 Prompt链(Prompt Chaining)

将复杂任务分解为多个Prompt的链式调用:

Step 1: 分析 → 提取关键信息
Step 2: 规划 → 制定行动计划
Step 3: 执行 → 生成最终输出
Step 4: 审查 → 检查并修正

7.2 角色扮演增强

让3位专家分别分析这个问题:
- 专家A(数据科学家):从数据角度分析
- 专家B(产品经理):从用户需求角度分析
- 专家C(安全工程师):从安全角度分析

然后综合3位专家的意见给出最终建议。

7.3 约束递减法

当LLM输出不符合要求时,逐步增加约束:

# 第一次
总结这篇文章。

# 第二次(增加约束)
用3个要点总结这篇文章,每个要点不超过20字。

# 第三次(进一步约束)
用3个要点总结这篇文章,每个要点不超过20字。
格式:
- 要点1: [内容]
- 要点2: [内容]
- 要点3: [内容]
只输出要点,不要添加任何其他内容。

8. 总结

技术 核心思想 适用场景 复杂度
Self-Consistency 多次采样+投票 数学/逻辑推理
Tree of Thoughts 树状探索+评估 规划/创意/复杂推理
RAG增强Prompt 检索+注入上下文 知识密集型任务
DSPy 程序化Prompt定义 需要自动优化的Pipeline 中高
APE/OPRO 自动搜索最优Prompt 大规模Prompt优化
Meta-Prompting LLM生成/评估Prompt Prompt开发过程 低中

参考资料

  • Wang et al., "Self-Consistency Improves Chain of Thought Reasoning in Language Models", 2023
  • Yao et al., "Tree of Thoughts: Deliberate Problem Solving with Large Language Models", 2023
  • Khattab et al., "DSPy: Compiling Declarative Language Model Calls into Self-Improving Pipelines", 2023
  • 思维链与推理模式 — Agent中的推理技术
  • Prompt设计基础 — 基础Prompt技术

评论 #