PromptWizard
PromptWizard 是一个专注于提升 AI 提示(prompt)效果的开源框架,通过让大语言模型(LLM)自主生成、评估和优化提示内容,实现更高效的任务执行。它采用一种自适应机制,使模型在不断迭代中改进自身提示和示例,从而提高任务完成的质量与准确性。
传统提示工程往往需要人工反复调整和测试,效率较低且难以覆盖所有可能的优化方向。PromptWizard 解决了这一问题,通过自动化的方式持续优化提示内容,同时还能生成多样化的示例,帮助模型更好地理解任务需求。其独特之处在于结合了反馈驱动的优化流程、多样化示例的生成以及自我生成的推理步骤,使得提示优化更加系统和高效。
PromptWizard 适合研究人员和开发者使用,特别是那些希望提升模型性能、探索提示工程方法或进行大规模实验的用户。对于需要定制化提示优化方案的团队来说,它提供了一个灵活且强大的工具选择。
使用场景
某电商公司内容运营团队正在为一个智能客服系统设计和优化用户问题解析的提示词(prompt),以提高客服机器人对用户意图识别的准确率,从而提升客户满意度和处理效率。
没有 PromptWizard 时
- 团队需要手动编写和调整提示词,耗时且难以覆盖所有可能的用户提问场景。
- 提示词效果依赖于经验判断,缺乏系统性优化方法,导致不同任务下的表现参差不齐。
- 难以生成多样化的上下文示例,使得模型在面对新问题时泛化能力较弱。
- 调整提示词后,无法快速评估其效果,只能通过人工测试或大量样本验证,效率低下。
使用 PromptWizard 后
- 通过自动化迭代机制,PromptWizard 可持续生成、评估并优化提示词,显著减少人工干预和调试时间。
- 框架能够根据任务特性自动调整指令与示例,使模型在不同场景下保持高一致性与准确性。
- 支持生成多样化、任务感知的合成示例,增强模型对复杂或边缘情况的适应能力。
- 提供反馈驱动的优化流程,可实时评估提示词改进效果,加快迭代速度并提升整体性能。
PromptWizard 通过自适应优化机制,帮助团队高效提升智能客服系统的意图识别能力,实现更精准、更稳定的用户体验。
运行环境要求
- Linux
- macOS
- Windows
未说明
未说明

快速开始
PromptWizard 🧙
PromptWizard:任务感知的提示优化框架
Eshaan Agarwal、Joykirat Singh、Vivek Dani、Raghav Magazine、Tanuja Ganu、Akshay Nambi
概述 🌟
PromptWizard框架概述
PromptWizard是一个离散的提示优化框架,采用自进化机制,由大语言模型生成、评估并优化自身的提示与示例,通过迭代反馈与综合不断改进。这种自适应方法通过同时演化指令与上下文学习示例,确保整体优化,从而提升任务表现。
PromptWizard的三大核心组件如下:
- 反馈驱动的优化:大语言模型生成、评估并优化自身的提示与示例,通过迭代反馈与综合不断改进
- 多样化示例的评估与合成:生成鲁棒、多样且任务感知的合成示例,并同步优化提示与示例
- 自主生成思维链(CoT)步骤,结合正面、负面及合成示例
阶段1:指令的迭代优化
阶段2:指令与示例的顺序优化
安装 ⬇️
按照以下步骤设置开发环境并安装软件包:
克隆仓库
git clone https://github.com/microsoft/PromptWizard cd PromptWizard创建并激活虚拟环境
在Windows上
python -m venv venv venv\Scripts\activate在macOS/Linux上:
python -m venv venv source venv/bin/activate以开发模式安装软件包:
pip install -e .
快速入门 🏃
使用PromptWizard主要有三种方式:
- 场景1:在无示例的情况下优化提示
- 场景2:生成合成示例并利用其优化提示
- 场景3:结合训练数据优化提示
注意:请参阅此笔记本,以详细了解每种场景的具体用法。这将作为理解PromptWizard使用方法的起点
使用PromptWizard的高级概览
- 确定您的使用场景
- 设置API调用所需的配置与环境变量
USE_OPENAI_API_KEY="XXXX" # 根据是否使用OPENAI API密钥,将其设置为True或False # 如果第一个变量设为True,则填写以下两项 OPENAI_API_KEY="XXXX" OPENAI_MODEL_NAME ="XXXX" # 如果第一个变量设为False,则填写以下三项 AZURE_OPENAI_ENDPOINT="XXXXX" # 替换为您的Azure OpenAI Endpoint OPENAI_API_VERSION="XXXX" # 替换为您的API版本 AZURE_OPENAI_CHAT_DEPLOYMENT_NAME="XXXXX" # 为模型创建部署,并在此处填写部署名称。 - 运行代码
- 如需在自定义数据集上运行PromptWizard,请跳转至此处
使用训练数据运行PromptWizard(场景3)
- 我们支持GSM8k、SVAMP、AQUARAT以及Instruction_Induction(BBII)数据集
- 请注意,提示优化所需时间取决于数据集。在我们针对上述数据集的实验中,平均耗时约为20至30分钟。
在GSM8k上运行(AQUARAT/SVAMP)
- 请注意,这段代码需要通过API调用访问大语言模型,而我们支持AZURE端点或OPENAI密钥
- 在demos/gsm8k/.env中设置AZURE端点配置
- 按照demos/gsm8k/demo.ipynb中的步骤下载数据、运行提示优化并进行推理。
在BBII上运行
- BBII包含众多数据集,根据具体数据集设置此处的配置
- 在配置中,
task_description、base_instruction和answer_format需根据不同BBII数据集进行调整,其余配置保持不变 - 示例演示见demos/bbh/demo.ipynb
在自定义数据集上运行 🗃️
创建自定义数据集
- 我们的代码要求数据集以
jsonl文件格式提供 - 训练集与测试集均遵循相同格式
- 每个
jsonl文件中的样本应包含两个字段:question:应包含需向大语言模型提出的完整问题answer:应包含真实答案,可以是详尽的或简洁的
在自定义数据集上运行
注意:有关四个数据集的文件夹示例,请参阅 demos 文件夹。每个文件夹中的 .ipynb 文件展示了如何在该特定数据集上运行 PromptWizard。对于新数据集,也可以采用类似的流程。下面将详细说明 .ipynb 文件中的各个组件以及针对特定数据集的文件夹结构。
自定义数据集的操作步骤
每个新数据集都需要包含以下内容:
configs文件夹,用于存放定义优化超参数和设置配置的文件;data文件夹,用于存放经过整理的train.jsonl和test.jsonl文件(详见创建自定义数据集),这些文件将在笔记本中生成;.env文件,用于存储调用 API 所需的环境变量;.py/.ipynb脚本,用于运行代码。
设置超参数,如突变次数、微调步数、上下文示例等。
- 在 promptopt_config.yaml 中设置以下内容:
task_description:当前任务的描述,将作为提示输入。- 对于 GSM8k,可以使用如下描述:
你是一位数学专家。你将收到一道需要解答的数学题。
- 对于 GSM8k,可以使用如下描述:
base_instruction:与数据集相匹配的基础指令。- 常用的基础指令可以是:
让我们一步一步地思考。
- 常用的基础指令可以是:
answer_format:指定答案格式的指令。- 正确设置
answer_format至关重要,以确保def extract_final_answer()能够正确提取答案。 - 答案格式可以是:
最后,仅将你的最终选项用 <ANS_START> 和 <ANS_END> 标签括起来。 - 那么在
def extract_final_answer()中,我们只需编写代码来提取这两个标签之间的字符串即可。
- 正确设置
seen_set_size:用于提示优化的训练样本数量。- 在我们的实验中,将其设置为 25。一般来说,20 到 50 之间的任何数字都可以。
few_shot_count:提示中所需的上下文示例数量。- 根据需求,该值可设为任意正整数。
- 对于生成零样本提示的情况,可将该值设为较小的数字(即 2 到 5),并在最终提示生成后移除上下文示例。我们建议保留一些上下文示例,因为在优化过程中,提示中的指令会借助上下文示例不断细化,因此将其设为较小的数字有助于生成更优质的零样本指令。
generate_reasoning:是否为上下文示例生成推理过程。- 在我们的实验中,我们发现这能整体提升提示效果,因为它提供了逐步推导至最终答案的思路。然而,如果对提示长度或提示标记数量有限制,则可以关闭此功能,以获得更短的提示。
generate_expert_identity和generate_intent_keywords:启用这些功能有助于提升提示的相关性,使提示更加贴合任务需求。
- 请参考 这里 提供的各文件夹中的
promptopt_config.yaml文件,了解 AQUARAT、SVAMP 和 GSM8k 所使用的描述。对于 BBII,请参阅 description.py,其中包含了针对每个数据集的元指令。 - 以下是可根据训练数据的可用性进行设置的全局参数:
run_without_train_examples是一个全局超参数,当没有训练样本且最终提示中不需要上下文示例时可使用。generate_synthetic_examples是一个全局超参数,当没有训练样本且希望生成合成数据用于训练时可使用。use_examples是一个全局超参数,可用于利用训练数据优化提示。
- 在 promptopt_config.yaml 中设置以下内容:
创建一个特定于数据集的类,继承自
class DatasetSpecificProcessing,类似于 demo.ipynb 中的GSM8k(DatasetSpecificProcessing),并在其中定义以下函数:- 在
def extract_answer_from_output()中:这是一个数据集特定的函数,根据数据集提供的answer,应提取并返回简洁形式的答案。需要注意的是,根据数据集的不同,也可以直接返回原始的answer,例如 SVAMP 和 AQUARAT 数据集。 def extract_final_answer():这是一个针对 LLM 输出的函数,根据 LLM 的详细回答,应提取并返回简洁的最终答案。- 定义
def access_answer():该函数接收 LLM 的输出作为输入,然后执行以下操作:- 使用上述定义的
def extract_final_answer()从 LLM 输出中提取简洁答案; - 将提取的答案与真实答案进行比对,并返回:
- LLM 输出的提取答案;
- 一个布尔值,表示答案是否正确;
- 此处的评估是针对特定数据集的。对于 GSM8k、SVAMP 和 AQUARAT 等数据集,由于其最终答案为数字,可以直接比较生成的数字与真实答案;而对于答案为句子或段落的数据集,则更适合采用 LLM 作为评判者的方式,比较生成的段落/句子与真实答案。相关示例可在 this 笔记本中的
def access_answer()中找到。
- 使用上述定义的
- 在
PromptWizard 的工作原理 🔍
- PW 根据问题描述和初始提示指令,通过让 LLM 对指令进行变异来生成多种变体。根据性能表现,选择最优提示。PW 还内置了批评组件,提供反馈,从而在多次迭代中引导并优化提示。
- PW 同时优化上下文示例。PW 从训练数据中选取多样化的示例,根据它们在修改后的提示下的表现,识别出正面和负面示例。负面示例有助于进一步优化提示。
- 示例和指令会依次优化,利用批评结果生成能够弥补当前提示弱点的合成示例,这些示例会被整合进来,以进一步完善提示。
- PW 通过思维链(CoT)生成详细的推理链条,增强提示解决问题的能力。
- PW 通过融入任务意图和专家角色,使提示与人类推理保持一致,从而提升模型性能和可解释性。
配置 ⚙️
在此我们定义了在 promptopt_config.yaml 中找到的提示优化过程中使用的各种超参数。
mutate_refine_iterations:对任务描述进行变异并随后优化指令的迭代次数mutation_rounds:在生成不同风格时要执行的变异轮数refine_task_eg_iterations:对任务描述和上下文示例进行优化的迭代次数style_variation:在提示变异中使用的思维风格变化数量questions_batch_size:在训练步骤中,一次性向 LLM 提问的问题数量min_correct_count:一个提示被认为表现良好所需的正确回答问题的最少批次数量max_eval_batches:我们应对该提示进行评估的最大小批量数量top_n:从评分阶段选出的用于下一阶段的前 n 个最佳提示seen_set_size:用于训练的训练集样本数量few_shot_count:最终提示中所需的上下文示例数量
最佳实践 💡
以下是我们实验过程中遵循的一些最佳实践:
- 关于 promptopt_config.yaml 中的参数:
- 我们发现
mutate_refine_iterations、mutation_rounds和refine_task_eg_iterations的最佳取值为 3 或 5。 - 其他参数已设置为理想值。
seen_set_size可以增加到 50,而few_shot_count则可根据具体用例进行设置。
- 我们发现
- 训练过程结束时生成的提示通常非常详细,但用户监督可以帮助进一步针对手头的任务进行微调。
- 可以尝试同时使用合成的上下文示例和来自训练集的上下文示例这两种配置,以根据具体用例找到最佳提示。
结果 📈
PromptWizard 在各种阈值下均持续优于其他方法,保持最高的 p(τ) 值,表明其在所有任务上都能稳定地接近最佳可能准确率。
- 该图展示了指令诱导任务的性能曲线。性能曲线可视化了不同方法的性能在给定距离内与最佳性能的频率。在这条曲线上,x 轴 (τ) 表示相对于最佳方法的性能比,y 轴 (p(τ)) 则反映某一方法的性能处于该比例范围内的任务占比。因此,对于某一特定方法,这条曲线说明了有多少百分比的任务的性能与最佳性能相差不超过 τ 的距离。
如何贡献: ✋
本项目欢迎贡献与建议。大多数贡献都需要您同意一份贡献者许可协议(CLA),声明您有权且确实授予我们使用您的贡献的权利。详情请访问 https://cla.microsoft.com。 当您提交拉取请求时,CLA 机器人会自动判断您是否需要提供 CLA,并相应地对 PR 进行标注(例如添加标签、发表评论)。您只需按照机器人的指示操作即可。在整个使用我们 CLA 的仓库中,您只需完成一次此操作。 本项目已采用 微软开源行为准则。如需了解更多信息,请参阅 行为准则常见问题解答,或如有任何其他问题或意见,请联系 opencode@microsoft.com。
引用 📝
如果您使用了我们的工作,请引用我们的论文:
@misc{agarwal2024promptwizardtaskawarepromptoptimization,
title={PromptWizard: Task-Aware Prompt Optimization Framework},
author={Eshaan Agarwal and Joykirat Singh and Vivek Dani and Raghav Magazine and Tanuja Ganu and Akshay Nambi},
year={2024},
eprint={2405.18369},
archivePrefix={arXiv},
primaryClass={cs.CL},
url={https://arxiv.org/abs/2405.18369},
}
责任AI考量
有关责任AI的指南与最佳实践,请参阅我们的 责任AI指南。
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。