gpt-提示工程师
概述
提示工程有点像炼金术。没有明确的方法可以预测什么会最有效。一切都在于不断尝试,直到找到正确的提示。gpt-prompt-engineer
是一个将这种实验提升到全新水平的工具。
只需输入任务描述和一些测试用例,系统就会生成、测试并对大量提示进行排名,找出表现最佳的提示。
2024年3月20日新增:Claude 3 Opus版本
我添加了一个新版本的gpt-prompt-engineer,充分利用了Anthropic的Claude 3 Opus模型。这个版本可以自动生成测试用例,并允许用户定义多个输入变量,使其更加强大和灵活。试试仓库中的claude-prompt-engineer.ipynb笔记本吧!
2024年3月20日新增:Claude 3 Opus -> Haiku转换版本
这个笔记本使您能够以通常成本的一小部分构建闪电般快速、高性能的AI系统。通过使用Claude 3 Opus建立潜在空间,并使用Claude 3 Haiku进行实际生成,您可以达到惊人的效果。该过程的工作原理是利用Opus生成一系列高质量的示例,然后用这些示例指导Haiku生成可比质量的输出,同时大幅降低延迟和每次生成的成本。试试仓库中的opus-to-haiku-conversion.ipynb笔记本吧!
特点
-
提示生成:使用GPT-4、GPT-3.5-Turbo或Claude 3 Opus,
gpt-prompt-engineer
可以根据提供的用例和测试用例生成各种可能的提示。 -
提示测试:真正的魔力发生在生成之后。系统会针对所有测试用例测试每个提示,比较它们的性能,并使用ELO评级系统对它们进行排名。
-
ELO评级系统:每个提示最初的ELO评级为1200。当它们在生成测试用例的响应时相互竞争时,它们的ELO评级会根据表现而改变。这样,您可以轻松看出哪些提示最有效。
-
分类版本:
gpt-prompt-engineer -- 分类版本
笔记本专门用于处理分类任务。它通过将测试用例与预期输出('true'或'false')匹配来评估其正确性,并提供每个提示的得分表。 -
Claude 3版本:claude-prompt-engineer笔记本专为与Anthropic的Claude 3 Opus模型配合使用而设计。它可以自动生成测试用例,并允许多个输入变量,使其更加强大和灵活。
-
Claude 3 Opus -> Haiku转换版本:旨在为您的用例保留Opus的质量,同时获得使用Haiku的速度和成本优势。
-
Weights & Biases日志记录:可选择将您的配置(如温度和最大令牌数)、每个部分的系统和用户提示、使用的测试用例以及每个候选提示的最终排名ELO评级记录到Weights & Biases。将
use_wandb
设置为True
即可使用。 -
Portkey:可选工具,用于记录和跟踪所有提示链及其响应。将
use_portkey
设置为True
即可使用。
设置
-
在Google Colab中打开笔记本或在本地Jupyter笔记本中打开。对于分类任务,请使用这个笔记本。对于Claude 3版本,请使用这个笔记本。
-
将你的OpenAI API密钥添加到
openai.api_key = "在此处添加你的密钥"
这一行。如果你使用的是Claude 3版本,请将你的Anthropic API密钥添加到ANTHROPIC_API_KEY = "在此处添加你的密钥"
这一行。
使用方法
- 如果你使用的是GPT-4版本,请定义你的用例和测试用例。用例是对你希望AI执行的任务的描述。测试用例是你希望AI回应的具体提示。例如:
description = "给定一个提示,生成一个落地页标题。" # 这种描述风格通常效果较好
test_cases = [
{
'prompt': '推广一款创新的新健身应用Smartly',
},
{
'prompt': '为什么素食对你的健康有益',
},
{
'prompt': '介绍一门新的数字营销在线课程',
},
{
'prompt': '推出一条新的环保服装产品线',
},
{
'prompt': '推广一个专注于预算旅行的新旅游博客',
},
{
'prompt': '宣传一款用于高效项目管理的新软件',
},
{
'prompt': '介绍一本关于掌握Python编程的新书',
},
{
'prompt': '推广一个新的在线语言学习平台',
},
{
'prompt': '宣传一项新的个性化膳食计划服务',
},
{
'prompt': '推出一款新的心理健康和正念应用',
}
]
对于分类版本,你的测试用例应该采用以下格式:
test_cases = [
{
'prompt': '我今天过得很棒!',
'output': 'true'
},
{
'prompt': '我感觉很沮丧。',
'output': 'false'
},
// 在此添加更多测试用例
]
对于Claude 3版本,除了用例描述外,你还可以定义输入变量:
description = "给定一个提示,生成个性化的邮件回复。"
input_variables = [
{"variable": "SENDER_NAME", "description": "发送邮件的人的名字。"},
{"variable": "RECIPIENT_NAME", "description": "接收邮件的人的名字。"},
{"variable": "TOPIC", "description": "邮件的主要话题或主题。一到两句话。"}
]
测试用例将根据用例描述和输入变量自动生成。
-
选择要生成的提示数量。请注意,如果生成大量提示,费用可能会很高。10个是一个不错的起点。
-
调用
generate_optimal_prompt(description, test_cases, number_of_prompts)
来生成潜在提示列表,并测试和评估它们的性能。对于分类版本,只需运行最后一个单元格。对于Claude 3版本,调用generate_optimal_prompt(description, input_variables, num_test_cases, number_of_prompts, use_wandb)
。 -
最终的ELO评分将以表格形式打印,按降序排列。评分越高,提示效果越好。
对于分类版本,每个提示的得分将以表格形式打印(如上图所示)。
欢迎贡献!一些想法:
- 使用多个不同的系统提示生成器,创建不同风格的提示,以覆盖更多领域(例如:示例、详细、简短、Markdown等)
- 自动生成测试用例
- 扩展分类版本,使用tiktoken支持两个以上的类别
许可证
本项目采用MIT许可。
联系方式
Matt Shumer - @mattshumer_
项目链接:https://github.com/mshumer/gpt-prompt-engineer
最后,如果你想尝试比这更酷的东西,可以注册HyperWrite个人助手(我大部分时间都在开发这个)。这基本上是一个能够访问实时信息的AI,它a)在自然写作方面非常出色,b)可以操作你的网络浏览器来完成任务。