大型语言模型是人类级别的提示工程师

论文概述

这项突破性工作引入了自动提示工程师(Automatic Prompt Engineer, APE)框架,能够自动为大型语言模型生成和选择指令。APE将指令视为程序,通过搜索LLM提议的候选指令进行优化,并在另一个LLM上评估零样本性能来选择最佳指令。该方法在24个NLP任务中的19个上超过了人工编写的提示,标志着自动化提示工程过程的重大进展。

论文信息:

  • 发布时间:2022-11-03
  • 作者:Yongchao Zhou, Andrei Ioan Muresanu, Ziwen Han等
  • 机构:University of Montreal, University of Oxford, UC Berkeley等
  • 研究方向:提示工程、LLM推理
  • 核心技术:自动提示工程(APE)

研究背景

提示工程通常需要大量人工尝试和专业知识,这限制了其应用范围和效率。本研究针对以下问题展开:

现有问题

  • 人工设计提示耗时且需要专业知识
  • 提示质量严重影响模型性能,但难以系统化优化
  • 缺乏自动化的提示生成和优化方法

研究动机

本研究旨在开发一种能够自动生成和优化提示的方法,使提示工程过程更加高效和系统化,特别关注提示工程(prompt-engineering)、自动提示生成(automatic-prompt-generation)、指令优化(instruction-optimization)等关键技术。

核心方法

方法概述

APE将指令视为可以优化的”程序”,通过搜索LLM提议的指令候选池来最大化选定的评分函数。所选指令的质量通过另一个LLM在遵循这些指令时的零样本性能来评估。

具体工作流程:

  1. 指令生成:使用LLM(如GPT-3)基于任务示例生成多个候选指令
  2. 指令评分:在验证集上评估每个候选指令的零样本性能
  3. 指令选择:选择得分最高的指令作为最终指令
  4. 可选优化:通过迭代改进进一步优化选定的指令

生成提示示例:

1
2
3
4
5
6
7
我给你一些输入-输出对的例子。请生成一个指令,这个指令能够将输入映射到输出。

输入: ...
输出: ...
[更多示例]

生成的指令:

本方法的核心在于利用LLM自身的能力来生成和评估提示,形成一个自动化的提示优化循环。

关键创新点

创新 1:引入了用于指令生成和选择的自动提示工程师(APE)框架

创新 2:在24个NLP任务中的19个上达到或超过人工编写提示的性能

创新 3:提供了通过基于LLM的搜索进行提示优化的系统方法

创新 4:展示了引导模型提高真实性和信息性的适用性

技术特点

  • 自动化程度高:大幅减少人工提示设计的工作量
  • 性能优越:生成的提示通常优于人工设计的提示
  • 通用性强:适用于各种NLP任务
  • 可扩展性:可以轻松扩展到新任务和模型
  • 迭代优化:支持多轮优化以进一步提升性能

实验结果

Benchmark 性能

在24个NLP任务上进行的实验表明,自动生成的指令在大多数任务上超过了先前的LLM基线。APE工程的提示在添加到标准上下文学习提示之前时,也提高了少样本学习性能。

具体结果:

  • 零样本任务:在19/24任务上超过人工提示
  • 少样本学习:将APE提示与示例结合,性能进一步提升5-10%
  • 真实性提升:在TruthfulQA上显著提高模型回答的真实性
  • 效率提升:自动生成过程仅需数分钟,而人工设计可能需要数小时

性能分析

实验结果表明,APE方法在自动生成高质量提示方面非常有效,在大多数任务上都能达到或超过人类提示工程师的水平。

关键发现

  • LLM理解任务:LLM能够通过少量示例理解任务并生成合适的指令
  • 多样性重要:生成多个候选指令并评估比只生成一个更有效
  • 评估策略:使用执行准确率作为评分函数效果最好
  • 迭代改进:多轮优化可以进一步提升性能,但收益递减

实际应用

适用场景

  • 新任务快速原型:快速为新任务生成有效的提示
  • 提示优化:系统化地优化现有提示
  • 批量任务部署:为多个任务自动生成提示
  • 非专家用户:让没有提示工程经验的用户也能获得高质量提示

实现建议

在实际项目中应用APE时,建议:

  1. 准备示例数据:收集高质量的输入-输出示例用于指令生成
  2. 生成多样化候选:生成足够多的候选指令(建议20-50个)
  3. 设计评估指标:根据任务特点选择合适的评分函数
  4. 迭代优化:对表现最好的指令进行进一步改进

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# APE框架示例实现
class AutomaticPromptEngineer:
def __init__(self, generator_model, executor_model):
self.generator = generator_model
self.executor = executor_model

def generate_instructions(self, examples, num_candidates=20):
"""基于示例生成候选指令"""
prompt = f"""
我给你一些输入-输出对的例子。请生成{num_candidates}个不同的指令,
这些指令能够将输入映射到输出。

{self.format_examples(examples)}

生成的指令:
"""
candidates = self.generator.generate(prompt, n=num_candidates)
return candidates

def evaluate_instructions(self, candidates, validation_set):
"""评估候选指令"""
scores = []
for instruction in candidates:
correct = 0
for example in validation_set:
prompt = f"{instruction}\n\n输入: {example.input}\n输出:"
prediction = self.executor.generate(prompt)
if prediction.strip() == example.output.strip():
correct += 1
scores.append(correct / len(validation_set))
return scores

def find_best_instruction(self, examples, validation_set):
"""找到最佳指令"""
# 生成候选
candidates = self.generate_instructions(examples)

# 评估候选
scores = self.evaluate_instructions(candidates, validation_set)

# 选择最佳
best_idx = scores.index(max(scores))
return candidates[best_idx], scores[best_idx]

相关资源

  • arXiv 论文arXiv:2211.01910
  • 相关论文:Instruction Induction, OPRO, PromptBreeder
© 2025 Generative AI Discovery All Rights Reserved.
Theme by hiero