PromptWizard: 基于反馈与自我进化的 prompt 优化 | 客服服务营销数智化洞察_晓观点
       

PromptWizard: 基于反馈与自我进化的 prompt 优化

Blog: PromptWizard: The future of prompt optimization through feedback-driven self-evolving prompts – Microsoft Research

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生成、批评和改进自己的提示和示例,确保通过迭代反馈和综合不断改进。这种自适应方法通过优化指令和上下文学习示例,确保任务性能显著提升。一下是具体的使用步骤,

二、安装步骤:

  1. 克隆仓库
  2. 创建并激活虚拟环境
    1. 在Windows上:
    2. 在macOS/Linux上:
  3. 开发模式下安装包

三、快速入门:

PromptWizard有三种主要使用方式:

  1. 优化没有示例的提示
  2. 生成合成示例并使用它们优化提示
  3. 使用训练数据优化提示

四、使用PromptWizard的高级概述:

  1. 决定使用场景
  2. 配置API调用的环境变量
    1. 使用promptopt_config.yaml设置配置。
    2. 使用.env文件设置环境变量,例如:
  1. 运行代码
    1. 要在自定义数据集上运行PromptWizard,请参考这里

五、运行PromptWizard与训练数据(场景3):

  • 支持的数据集包括GSM8k、SVAMP、AQUARAT和Instruction_Induction(BBII)。
  • 提示优化所需时间取决于数据集。在我们的实验中,上述数据集的优化时间平均为20-30分钟。

六、运行GSM8k(AQUARAT/SVAMP):

  • 需要通过API调用访问LLM,使用AZURE端点。
  • .env文件中设置AZURE端点配置。
  • 按照demo.ipynb中的步骤下载数据,运行提示优化并进行推理。

七、运行BBII:

  • BBII包含多个数据集,根据数据集设置配置。
  • 在配置中,task_descriptionbase_instructionanswer_format需要根据不同的数据集进行更改,其余配置保持不变。
  • demo.ipynb中展示了一个示例。

八、在自定义数据集上运行:

  1. 创建自定义数据集
    1. 数据集应为.jsonl文件格式。
    2. 训练集和测试集遵循相同格式,每个样本应包含两个字段:
      • question:包含要问LLM的完整问题。
      • answer:包含详细或简洁的地面真值答案。
  1. 运行自定义数据集
    1. 参考demos文件夹中的示例,了解如何在特定数据集上运行PromptWizard。
    2. 每个新数据集需要以下配置:
      • configs文件夹:存储定义优化超参数和设置配置的文件。
      • data文件夹:存储train.jsonltest.jsonl
      • .env文件:用于API调用的环境变量。
      • .py/.ipynb脚本:运行代码。
  1. 设置超参数
    1. promptopt_config.yaml中设置任务描述、基础指令和答案格式等。
    2. 设置训练样本数量、上下文示例数量等。

九、最佳实践:

  • 在实验中,我们发现mutate_refine_iterationsmutation_roundsrefine_task_eg_iterations的最佳值为3或5。
  • 其他参数已设置为理想值。
  • 生成的提示通常非常详细,但用户监督可以进一步调整以适应任务需求。
免费试用 更多热门智能应用                        
(0)
算法研发工程师-周明杰算法研发工程师-周明杰
上一篇 2024年12月22日
下一篇 2024年12月22日

相关推荐