Auto Prompt 是一个旨在提升和完善您的提示以适应现实世界用例的提示优化框架。
该框架自动生成针对用户意图量身定制的高质量、详细的提示。它采用了一种细化(校准)过程,通过迭代构建一个具有挑战性边缘案例的数据集并相应地优化提示。这种方法不仅减少了提示工程中的人工工作量,而且有效解决了常见问题,例如提示敏感性
和固有的提示模糊性
问题。
我们的使命:利用大型语言模型(LLMs)的力量,使用户能够生成高质量、稳健的提示。
•提示工程挑战:LLMs 的质量在很大程度上取决于所使用的提示。即使是微小的变化也可能显著影响它们的性能。•基准测试挑战:为生产级提示创建基准往往既费力又耗时。•可靠的提示:Auto Prompt 生成稳健的高质量提示,使用最少的数据和注释步骤提供精确度和性能提升。•模块化和适应性:Auto Prompt 以模块化为核心,可以与 LangChain、Wandb 和 Argilla 等流行的开源工具无缝集成,并可用于包括数据合成和提示迁移在内的多种任务。
系统针对现实世界场景设计,如审核任务,这些任务通常受到不平衡数据分布的挑战。系统实施了基于意图的提示
校准方法。过程从用户提供的初始提示和任务描述开始,可选地包括用户示例。细化过程通过迭代生成多样化样本、通过用户/LLM 注释它们并评估提示性能,之后 LLM 会建议一个改进的提示。
通过首先设计一个排名提示,然后使用这个学习到的排名进行提示优化,可以将优化过程扩展到内容生成任务。优化在达到预算或迭代限制时结束。
这种联合合成数据生成和提示优化方法在需要最少的数据和迭代次数的同时,优于传统方法。在我们的论文《基于意图的提示校准:通过合成边界案例增强提示优化
》(E. Levi 等人,2024)中了解更多。
使用 GPT-4 Turbo,这种优化通常在几分钟内完成,成本不到 1 美元。为了管理与 GPT-4 LLM 的令牌使用相关的成本,框架允许用户设置优化的预算限制,以美元或令牌计数表示,如此处所示。
•如何安装(安装说明)•提示优化示例(用例:电影评论分类、生成和聊天审核)•工作原理(管道解释)•架构指南(主要组件概览)
•📝 以最少的数据和注释步骤提高提示质量。•🛬 为生产用例(如审核、多标签分类和内容生成)设计。•⚙️ 使提示能够在模型版本或LLM提供商之间无缝迁移。•🎓 支持提示挤压。将多个规则组合成一个高效的提示。
git clone git@github.com:Eladlev/AutoPrompt.git
cd AutoPrompt
根据您的偏好使用 Conda 或 pip。使用 Conda:
conda env create -f environment_dev.yml
conda activate AutoPrompt
使用 pip:
pip install -r requirements.txt
通过更新配置文件 config/llm_env.yml
设置您的 OpenAI API 密钥。
如果您需要帮助找到您的 API 密钥,请访问此链接[1]。
我们推荐使用 OpenAI 的 GPT-4 作为 LLM。我们的框架还支持其他提供商和开源模型,详情请参阅此处[2]。
为您的项目选择一个注释方法。我们建议从人类参与循环方法开始,使用 Argilla。按照 Argilla 的设置说明配置您的服务器。或者,您可以按照这些配置步骤设置 LLM 作为您的注释器。
默认的预测器 LLM(用于估计提示性能的 GPT-3.5)在 config/config_default.yml
的 predictor 部分配置。
使用 max_usage
参数在输入配置 yaml 文件中定义您的预算。对于 OpenAI 模型,max_usage
设置最大支出(美元)。对于其他 LLM,它限制最大令牌数。
首先,通过编辑 config/config_default.yml
配置您的标签:
dataset:
label_schema: ["Yes", "No"]
对于分类管道,请在适当的工作目录中的终端中使用以下命令:
> python run_pipeline.py
如果未直接作为输入提供初始提示和任务描述,将引导您提供这些详细信息。或者,将它们指定为命令行参数:
> python run_pipeline.py \
--prompt "Does this movie review contain a spoiler? answer Yes or No" \
--task_description "Assistant is an expert classifier that will classify a movie review, and let the user know if it contains a spoiler for the reviewed movie or not." \
--num_steps 30
您可以使用 W&B
仪表板跟踪优化进度,设置说明请参阅这里[3]。
生成管道 要运行生成管道,请使用以下示例命令:
> python run_generation_pipeline.py \
--prompt "Write a good and comprehensive movie review about a specific movie." \
--task_description "Assistant is a large language model that is tasked with writing movie reviews."
有关更多信息,请参考我们的生成任务示例[4]。
享受结果。完成这些步骤将产生一个为您的任务量身定制的精炼(校准)提示,以及一个包含具有挑战性样本的基准,存储在默认转储
路径中。
在优化过程中,提示的准确性可能会波动。为了识别最佳提示,我们建议在初始生成基准后进行持续的细化。使用 --num_steps
设置优化迭代次数,并通过在数据集部分指定 max_samples
来控制样本生成。例如,设置 max_samples: 50
和 --num_steps 30
将基准限制为 50 个样本,假设每次迭代 10 个样本,允许 25 次额外的细化迭代。
该框架支持检查点,以便从最后保存的状态轻松恢复优化。它会自动将最新的优化状态保存在转储路径中。使用 --output_dump
设置此路径,并使用 --load_path
从检查点恢复。
迭代包括对 LLM 服务的多次调用,其中长提示和对 LLM 生成相对较多的令牌的请求。这可能需要一些时间(尤其是在生成任务中)大约 1 分钟,请耐心等待。
如果 Argilla 服务器连接/错误出现问题,请尝试重新启动空间。
您为识别电影剧透编写了一个提示:
审查提供的内容,并指出是否包含任何重要的情节揭示或关键点,这些揭示或关键点可能揭示故事的重要元素或结果。如果包含此类剧透或关键见解,请回答“是”,如果不揭示关键故事元素,请回答“否”。
使用 GPT-4 LLM,该提示在您的基准上得分为 81。然后,您进行了轻微的修改:
审查文本并确定它是否提供了有关故事的重要揭示或关键细节,这些细节构成了剧透。对于剧透的存在,请回答“是”,对于它们的缺席,请回答“否”。
令人惊讶的是,第二个提示得分为 72,准确性下降了 11%。这说明了需要进行仔细的提示工程过程。
AutoPrompt 项目是在“原样”基础上提供的,没有任何明示或暗示的保证或担保。
关于提示优化和使用的我们的观点:
AutoPrompt 的核心目标是通过迭代校准过程精炼和完善提示,以实现高质量结果。这有助于减少错误并提高 LLM 的性能。然而,该框架并不能保证在每个实例中都绝对正确或无偏见的结果。
AutoPrompt 旨在提高提示的可靠性并缓解敏感性问题,但它并不声称完全消除此类问题。
本文翻译并整理自:https://github.com/Eladlev/AutoPrompt,如果您喜欢,请点赞、关注、转发。
[1]
此链接: https://openai.com/api/keys
[2]
此处: https://github.com/Eladlev/AutoPrompt
[3]
这里: https://docs.wandb.ai/guides/track
[4]
生成任务示例: https://github.com/Eladlev/AutoPrompt