Promptim 是一个实验性的 提示 优化 库,旨在帮助您系统地改进您的 AI 系统。
Promptim 自动化了在特定任务上改进提示的过程。您提供初始提示、数据集和自定义评估器(以及可选的人工反馈),promptim
运行一个优化循环,以生成旨在优于原始提示的精细提示。
从评估驱动的开发到提示优化
AI 工程师的核心职责是提示工程。这包括手动调整提示以产生更好的结果。
一种有用的方法是通过 评估驱动的开发。这包括首先创建输入数据集(以及可选的预期输出),然后定义一些评估指标。每次您更改提示时,您都可以针对数据集运行它,然后对输出进行评分。通过这种方式,您可以衡量提示的性能,并确保其正在改进,或者至少没有退步。像 LangSmith 这样的工具可以帮助进行数据集管理和评估。
提示优化背后的想法是使用这些定义明确的数据集和评估指标来自动改进提示。您可以以自动化的方式建议更改提示,然后使用此评估方法对新提示进行评分。像 DSPy 这样的工具已经在一段时间内率先进行了类似的努力。
为什么要进行提示优化?
提示优化有以下几个动机
节省时间:手动提示工程通常是一个耗时的过程。自动化提示优化可以加快提示工程的努力并节省工程时间。
带来严谨性:提示工程有时更像是一门艺术而不是一门科学——因此这为该过程带来了一些严谨性。请注意,总的来说,评估驱动的开发可以帮助实现这一点。
促进模型之间的交换: 不同的模型通常需要不同的提示策略。切换模型提供商不像更改您正在调用的 URL 那么简单;您通常还需要更改提示。提示优化可以加快该过程,因为您可以将大部分精力集中在开发评估(模型无关)而不是提示(模型相关)上。
Promptim 的工作原理
我们很高兴发布我们首次尝试的提示优化。它是一个开源库 (promptim),与 LangSmith 集成(我们使用 LangSmith 进行数据集管理、提示管理、跟踪结果以及(可选)人工标记)。
核心算法如下
- 指定一个 LangSmith 数据集、LangSmith 中的一个提示以及本地定义的评估器。可选地,您可以指定
train
/dev
/test
数据集拆分。 - 我们在
dev
(或完整)数据集上运行初始提示以获得基线分数。 - 然后,我们在
train
(或完整)数据集中的所有示例上循环。我们在所有示例上运行提示,然后对其进行评分。然后,我们将结果(输入、输出、预期输出、分数)传递给 元提示,并要求它建议更改当前提示 - 然后,我们使用新的更新提示再次计算
dev
拆分上的指标。 - 如果指标显示改进,则保留更新后的提示。如果没有改进,则保留原始提示。
- 重复此过程
N
次
可选地,您可以添加一个步骤,您可以在其中留下人工反馈。当您没有良好的自动化指标,或者想要根据超出自动化指标可以提供的反馈来优化提示时,这很有用。这使用了 LangSmith 的注释队列。
提示优化的局限性
尽管我们对提示优化感到兴奋,但我们不认为这是一个万能的解决方案。在这个过程中仍然值得让人工参与进来 - 即使只是为了对最终结果进行健全性检查。这就是我们使用 LangSmith 的提示中心 来存储提示的部分原因 — 这样您就可以在之后轻松查看提示。
Promptim 与 DSPy 的比较
DSPy 是优化领域的领先工具。值得将我们的方法与他们的方法进行比较。
首先,最初的努力集中在仅优化单个提示上。DSPy 专注于优化您的整个“复合 AI 系统”。我们选择暂时专注于单个提示,因为我们认为目前这是一个更易于处理的问题。
其次,我们更侧重于仍然让人工参与进来,而 DSPy 则更多地移除了人工。通过将此与注释队列连接起来以获取人工反馈作为优化过程的一部分,就是一个例子。另一个例子是将这些提示存储在 LangSmith 中,以便事后轻松查看。最后一个例子是在 LangSmith 中跟踪评估结果。
第三,我们专注于仅重写提示,并力求在这方面做得非常好,而 DSPy 提供了更广泛的解决方案来优化您的系统(微调、少样本提示)。
promptim
和 dspy
视为针对不同问题的不同工具。未来的工作
随着基础模型的稳定,我们对提示优化越来越兴奋。我们期待的事情包括
- 进一步推动 动态少样本提示
- 将
promptim
集成到 LangSmith UI 中 - 向
promptim
添加更多优化方法 - 作为一个整体优化 LangGraph 图,而不仅仅是提示(理想情况下通过与 DSPy 集成)
您今天就可以 试用 Promptim:pip install promptim
。查看 此 YouTube 视频 以获得演练,并在 GitHub 或 Twitter 上给我们留言,提供任何反馈。