Repo: microsoft/PromptWizard: Task-Aware Agent-driven Prompt Optimization Framework
Paper: [2405.18369] PromptWizard: Task-Aware Prompt Optimization Framework
12/17/2024, Microsoft Research Blog 发布了文章 PromptWizard: The future of prompt optimization through feedback-driven self-evolving prompts
.
文章导航
一、简介
这篇文章介绍了PromptWizard(PW),一个自动化和简化提示优化过程的研究框架。PW结合了LLM的迭代反馈和高效的探索与改进技术,在几分钟内创建出高效的提示。PW优化了指令和上下文学习示例,通过自我进化和自我适应机制,确保任务性能显著提升。
文章首先介绍了提示优化的挑战,指出手动方法越来越不可持续。PW通过自动化和简化提示优化过程,解决了这一问题。PW的核心是其反馈驱动的改进机制,LLM生成、批评和改进自己的提示和示例,确保每次迭代都比上一次更好。
PW的三个关键见解包括:反馈驱动的改进、指令和示例的联合优化以及自生成的思维链步骤。PW生成的合成示例不仅具有鲁棒性和多样性,还能有效地解决特定任务需求。通过使用精选的少量示例,PW为每个示例生成详细的推理链,促进细致的逐步解决问题的方法。
PW的工作流程包括两个阶段:提示指令的改进和指令与示例的联合优化。第一阶段生成多个候选指令,使用LLM的反馈进行评估和改进,确保指令达到最佳状态。第二阶段将改进后的提示与精选示例结合,通过批评和综合机制,确保提示和示例的对齐,同时生成新的示例以增强任务性能。
PW在超过45个任务上进行了严格评估,包括通用和特定领域的挑战。与Instinct、InstructZero、APE、PromptBreeder、EvoPrompt、DSPy、APO和PromptAgent等最先进技术相比,PW在准确性、效率和适应性方面始终表现优异。PW不仅在准确性上表现出色,还展示了其计算效率,通过有效平衡探索和利用,显著减少了API调用和计算资源的使用。
PW在有限数据条件下表现出色,使用少量示例即可生成有效提示。在五个不同数据集上,PW在使用五个示例与25个示例时的平均准确性差异仅为5%。此外,PW通过使用较小的LLM进行提示生成,显著降低了资源使用,同时保持了与使用更强大模型相似的性能。
总之,PromptWizard是一个任务感知的提示优化框架,通过自我进化机制,LLM生成、批评和改进自己的提示和示例,确保通过迭代反馈和综合不断改进。这种自适应方法通过优化指令和上下文学习示例,确保任务性能显著提升。一下是具体的使用步骤,
二、安装步骤:
- 克隆仓库:
- 创建并激活虚拟环境:
- 在Windows上:
- 在macOS/Linux上:
- 在Windows上:
- 开发模式下安装包:
三、快速入门:
PromptWizard有三种主要使用方式:
- 优化没有示例的提示。
- 生成合成示例并使用它们优化提示。
- 使用训练数据优化提示。
四、使用PromptWizard的高级概述:
- 决定使用场景。
- 配置API调用的环境变量:
- 使用
promptopt_config.yaml
设置配置。 - 使用
.env
文件设置环境变量,例如:
- 使用
- 运行代码:
- 要在自定义数据集上运行PromptWizard,请参考这里。
五、运行PromptWizard与训练数据(场景3):
- 支持的数据集包括GSM8k、SVAMP、AQUARAT和Instruction_Induction(BBII)。
- 提示优化所需时间取决于数据集。在我们的实验中,上述数据集的优化时间平均为20-30分钟。
六、运行GSM8k(AQUARAT/SVAMP):
- 需要通过API调用访问LLM,使用AZURE端点。
- 在
.env
文件中设置AZURE端点配置。 - 按照
demo.ipynb
中的步骤下载数据,运行提示优化并进行推理。
七、运行BBII:
- BBII包含多个数据集,根据数据集设置配置。
- 在配置中,
task_description
、base_instruction
和answer_format
需要根据不同的数据集进行更改,其余配置保持不变。 demo.ipynb
中展示了一个示例。
八、在自定义数据集上运行:
- 创建自定义数据集:
- 数据集应为
.jsonl
文件格式。 - 训练集和测试集遵循相同格式,每个样本应包含两个字段:
question
:包含要问LLM的完整问题。answer
:包含详细或简洁的地面真值答案。
- 数据集应为
- 运行自定义数据集:
- 参考
demos
文件夹中的示例,了解如何在特定数据集上运行PromptWizard。 - 每个新数据集需要以下配置:
configs
文件夹:存储定义优化超参数和设置配置的文件。data
文件夹:存储train.jsonl
和test.jsonl
。.env
文件:用于API调用的环境变量。.py/.ipynb
脚本:运行代码。
- 参考
- 设置超参数:
- 在
promptopt_config.yaml
中设置任务描述、基础指令和答案格式等。 - 设置训练样本数量、上下文示例数量等。
- 在
九、最佳实践:
- 在实验中,我们发现
mutate_refine_iterations
、mutation_rounds
和refine_task_eg_iterations
的最佳值为3或5。 - 其他参数已设置为理想值。
- 生成的提示通常非常详细,但用户监督可以进一步调整以适应任务需求。