跳转到主要内容

用于生成和评估GPT的提示工具包,适用于大规模

项目描述

💡 ¡promptimize! 💡

License PyPI version

Promptimize是一个提示工程 评估测试 工具包。

它通过信心加速并围绕大规模提示工程提供结构,将测试驱动开发(TDD)背后的某些想法引入提示工程。

使用promptimize,您可以

  • 将您的“提示案例”(类似于“测试案例”,但特定于评估提示)定义为代码,并将其与评估函数关联
  • 动态生成提示变体
  • 在不同的引擎/模型/温度/设置中执行和排名提示测试套件,并比较结果,将超参数调整思维带到提示工程
  • 在迭代过程中获得您提示的性能报告。回答有关不同提示套件如何相互比较的问题。哪些单独的案例或案例类别改进了?退步了?
  • 最小化API调用!只重新评估您更改的内容
  • 如果需要,进行人工检查,检查失败的案例,覆盖错误的否定

本质上,promptimize提供了一种在Python中程序化执行和微调您提示和评估函数的方法,使您能够快速、有信心地进行迭代。

你好世界 - 最简单的提示示例

更多示例在GitHub上

# Brining some "prompt generator" classes - note that you can derive and extend those
from promptimize.prompts import PromptCase

# Bringing some useful eval function that help evaluating and scoring responses
# eval functions have a handle on the prompt object and are expected
# to return a score between 0 and 1
from promptimize import evals

# Promptimize will scan the target folder and find all Prompt objects
# and derivatives that are in the python modules
simple_prompts = [

    # Prompting "hello there" and making sure there's "hi" or "hello"
    # somewhere in the answer
    PromptCase("hello there!", lambda x: evals.any_word(x, ["hi", "hello"])),
    PromptCase(
        "name the top 50 guitar players!", lambda x: evals.all_words(x, ["frank zappa"])
    ),
]

CLI的 run 命令

$ promptimize run --help
Usage: promptimize run [OPTIONS] PATH

  run some prompts

Options:
  -v, --verbose             Trigger more verbose output
  -f, --force               Force run, do not skip
  -h, --human               Human review, allowing a human to review and force
                            pass/fail each prompt case
  -r, --repair              Only re-run previously failed
  -x, --dry-run             DRY run, don't call the API
  --shuffle                 Shuffle the prompts in a random order
  -s, --style [json|yaml]   json or yaml formatting
  -m, --max-tokens INTEGER  max_tokens passed to the model
  -l, --limit INTEGER       limit how many prompt cases to run in a single
                            batch
  -t, --temperature FLOAT   max_tokens passed to the model
  -e, --engine TEXT         model as accepted by the openai API
  -k, --key TEXT            The keys to run
  -o, --output PATH
  -s, --silent

让我们运行这些示例并生成一个报告 ./report.yaml

$ promptimize run examples/ --output ./report.yaml
💡 ¡promptimize! 💡
# ----------------------------------------
# (1/2) [RUN] prompt: prompt-115868ef
# ----------------------------------------
key: prompt-115868ef
user_input: hello there!
prompt_hash: 115868ef
response: Hi there! How are you doing today?
execution:
  api_call_duration_ms: 883.8047981262207
  run_at: '2023-04-25T02:21:40.443077'
  score: 1.0

# ----------------------------------------
# (2/2) [RUN] prompt: prompt-5c085656
# ----------------------------------------
key: prompt-5c085656
user_input: name the top 10 guitar players!
prompt_hash: 5c085656
response: |-
  1. Jimi Hendrix
  2. Eric Clapton
  {{ ... }}
  11. Carlos Santana
weight: 2
execution:
  api_call_duration_ms: 2558.135747909546
  run_at: '2023-04-25T02:21:43.007529'
  score: 0.0

# ----------------------------------------
# Suite summary
# ----------------------------------------
suite_score: 0.3333333333333333
git_info:
  sha: 2cf28498ba0f
  branch: main
  dirty: true

问题 + 观点

目前,数千名产品构建者正在努力弄清楚如何将AI的力量引入他们正在构建的产品和体验中。LLMs的概率性(通常是半随机、有时是混乱的)性质使得这成为一个挑战。

提示工程是正确完成这项工作的巨大一部分,尤其是在模型调整的复杂性、风险和缺点方面。

我们相信产品构建者需要通过适当的、严格的 提示工程 来驯服AI。这可以使AI的概率性更具确定性,或更可预测,并使构建者能够将超参数调整类型的思维和方法应用于提示工程。

任何将在产品中投入使用的提示生成逻辑都应该经过彻底测试和评估,使用涵盖人们在产品中可能进行的各种操作的“提示案例”。

简而言之,Promptimize 允许您在工业规模上测试提示,这样您就可以自信地在您正在构建的产品中使用它们。

信息架构

  • 提示:提示实例是一个特定的测试案例,一个与一组评估函数相关联的单个提示,用于评估其成功程度。
  • 评估:一个评估函数,读取响应并返回介于 01 之间的成功率。
  • 套件:套件是一组提示的集合;它可以运行任务、累积结果并打印关于其用例集合的报告。
  • 报告:报告是运行特定提示 套件 或一系列套件后生成的编译结果。报告可以被消费、比较和扩展。

原则

  • 将配置作为代码:所有提示案例、套件和评估都定义为代码,这使得动态生成各种用例和套件变得容易。
  • 表达性:一个清晰且直接的 DSL(领域特定语言),即用户提示 + 断言。实际的提示创建逻辑位于 PromptCase 的派生类中,这样我们就可以拥有干净、紧凑的文件,其中包含好的 套件
  • 支持迭代思维:使人们能够尝试事情,从 AI 获得建议,适应、比较并推进。
  • 可扩展性:该工具包被设计成极其可修改和可扩展的。钩子、扩展、高 API 表面。
  • AI 驱动:该框架提供根据现有示例扩展套件的方法。使用 AI 生成更多提示案例!

有趣的功能/事实

以下是一些您应该知道的功能,当您的提示套件变得更大/更复杂时,您可以使用这些功能。

  • 评估函数假定返回介于 0 和 1 之间的值。与单元测试不同,提示案例不是布尔值。
  • 提示可以分配一个 权重(默认 1),这使您可以在报告目的和套件评估中定义哪些提示比其他提示更重要。
  • 提示可以分配一个 类别,这可以在报告中使用。这有助于了解哪些类别表现更好,或者受迭代影响最大。
  • 如果需要后处理,可以在 Prompt 类中使用 pre_runpost_run 钩子。例如,如果您执行一个期望 GPT 生成代码的提示,并且您想真正运行该代码并测试它。在我们的 SQL 实现中,我们将 SQL 运行到数据库中,例如,并返回一个 pandas 数据框,允许在数据框本身上进行断言。

入门

要安装 Promptimize 包,请使用以下命令

pip install promptimize

首先您需要一个 openai API 密钥,让我们将其设置为环境变量

export OPENAI_API_KEY=sk-{{ REDACTED }}

下面找到的示例执行 这里

# Clone the repo
git clone git@github.com:preset-io/promptimize.git
cd promptimize

# NOTE: CLI is `promptimize`, but `p9e` is a shorter synonym, can be used interchangibly
# First let's run some of the examples
p9e run ./examples

# Now the same but with verbose output
p9e run ./examples --verbose --output ./report.yaml

Langchain

promptimize 如何与 langchain 相关?

我们认为 langchain 非常棒,promptimize 在内部使用 langchain 与 openai 交互,并与 langchain 集成(请参阅 LangchainPromptCase、即将到来的 LangchainChainPromptCaseLangchainAgntPromptCase)。虽然您不必使用 langchain,也可以在 Python 提示生成上使用 promptimize,无论它是另一个库还是一些自制的工具。

上下文

《promptimize》从哪里来?!我是(Maxime Beauchemin)一位初创公司创始人,在Preset公司工作,致力于将AI应用于BI(数据探索和可视化)。在Preset公司,我们使用《promptimize》根据自然语言生成复杂的SQL语句,并为用户推荐图表。我们创建了《SimpleQuery》类,使其适应我们自己在提示工程仓库中的特定用例。作为《Apache Superset》(https://github.com/apache/superset/)和《Apache Airflow》(https://github.com/apache/airflow/)的创建者,这并非我的第一个开源项目。

贡献

本项目目前处于0.2.0版本,处于非常初级的阶段,欢迎贡献者、贡献者和维护者的加入。虽然这是一个加入项目并影响其方向的好时机,但项目仍在快速演变。要参与其中,请打开GitHub问题或提交拉取请求!

链接

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

promptimize-0.2.3.tar.gz (29.9 kB 查看哈希值)

上传时间: 源代码

构建分发

promptimize-0.2.3-py3-none-any.whl (22.9 kB 查看哈希值)

上传时间: Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面