https://platform.openai.com/docs/guides/prompt-generation
步骤1:安装必要的库
首先,你需要安装OpenAI的Python库。你可以使用pip来安装:
pip install openai
步骤2:设置OpenAI API密钥
在使用OpenAI的API之前,你需要设置你的API密钥。你可以在OpenAI的官方网站上注册并获取API密钥。
import openai
# 设置你的API密钥
openai.api_key = 'your-api-key-here'
步骤3:定义元提示词
元提示词(Meta-Prompt)是用于生成或优化提示词的提示词。你可以根据自己的需求定义一个元提示词。以下是一个示例:
META_PROMPT = """
给定一个任务描述或现有提示词,生成一个详细的系统提示词,以有效地指导语言模型完成任务。
# 指导原则
- 理解任务:抓住主要目标、目标、要求、约束和预期输出。
- 最小改动:如果提供了现有提示词,仅在简单的情况下进行改进。对于复杂的提示词,增强清晰度并添加缺失的元素,而不改变原始结构。
- 先推理后结论:鼓励在得出任何结论之前进行推理步骤。注意!如果用户提供了推理在结论之后的示例,请反转顺序!永远不要以结论开始示例!
- 推理顺序:指出提示词中的推理部分和结论部分(特定字段名称)。对于每个部分,确定其执行的顺序,以及是否需要反转。
- 结论、分类或结果应始终出现在最后。
- 示例:如果有助于理解,包含高质量的示例,使用占位符[在方括号中]表示复杂元素。
- 可能需要包含哪些类型的示例,数量多少,以及它们是否复杂到足以从占位符中受益。
- 清晰简洁:使用清晰、具体的语言。避免不必要的指令或平淡的陈述。
- 格式化:使用Markdown特性以提高可读性。除非特别要求,否则不要使用```代码块。
- 保留用户内容:如果输入任务或提示词包含广泛的指南或示例,尽可能完整地保留它们。如果它们模糊不清,考虑分解为子步骤。保留用户提供的任何细节、指南、示例、变量或占位符。
- 常量:在提示词中包含常量,因为它们不易受到提示注入的影响。例如指南、评分标准和示例。
- 输出格式:明确最合适的输出格式,详细说明。这应包括长度和语法(例如短句、段落、JSON等)。
- 对于输出定义明确或结构化数据的任务(分类、JSON等),倾向于输出JSON。
- JSON不应包裹在代码块(```)中,除非特别要求。
最终输出的提示词应遵循以下结构。不要包含任何额外的评论,只输出完成的系统提示词。特别地,不要在提示词的开头或结尾包含任何额外的消息。(例如,不要使用“---”)
[简洁的任务描述 - 这应该是提示词的第一行,没有部分标题]
[其他需要的详细信息。]
[可选部分,带有标题或项目符号,用于详细步骤。]
# 步骤 [可选]
[可选:完成任务所需的详细步骤分解]
# 输出格式
[具体说明输出应如何格式化,无论是响应长度、结构(例如JSON、Markdown等)]
# 示例 [可选]
[可选:1-3个定义明确的示例,如果需要可以使用占位符。清楚标记示例的开始和结束,以及输入和输出。必要时使用占位符。]
[如果示例比预期的实际示例短,请用()解释实际示例应更长/更短/不同。并使用占位符!]
# 注释 [可选]
[可选:边缘情况、细节,以及重复特定重要考虑的区域]
""".strip()
步骤4:编写生成提示词的函数
接下来,编写一个函数,使用OpenAI的API根据任务描述生成提示词。
def generate_prompt(task_or_prompt: str):
completion = openai.ChatCompletion.create(
model="gpt-4", # 你可以根据需要选择其他模型
messages=[
{
"role": "system",
"content": META_PROMPT,
},
{
"role": "user",
"content": "任务描述或现有提示词:\n" + task_or_prompt,
},
],
)
return completion.choices[0].message.content
步骤5:测试生成提示词的函数
现在,你可以测试生成提示词的函数,看看它是否能根据任务描述生成合适的提示词。
# 测试生成提示词
task_description = "生成一篇关于人工智能的文章摘要。"
prompt = generate_prompt(task_description)
print(prompt)
完整代码示例
以下是完整的代码示例,包括所有步骤:
import openai
# 设置你的API密钥
openai.api_key = 'your-api-key-here'
META_PROMPT = """
给定一个任务描述或现有提示词,生成一个详细的系统提示词,以有效地指导语言模型完成任务。
# 指导原则
- 理解任务:抓住主要目标、目标、要求、约束和预期输出。
- 最小改动:如果提供了现有提示词,仅在简单的情况下进行改进。对于复杂的提示词,增强清晰度并添加缺失的元素,而不改变原始结构。
- 先推理后结论:鼓励在得出任何结论之前进行推理步骤。注意!如果用户提供了推理在结论之后的示例,请反转顺序!永远不要以结论开始示例!
- 推理顺序:指出提示词中的推理部分和结论部分(特定字段名称)。对于每个部分,确定其执行的顺序,以及是否需要反转。
- 结论、分类或结果应始终出现在最后。
- 示例:如果有助于理解,包含高质量的示例,使用占位符[在方括号中]表示复杂元素。
- 可能需要包含哪些类型的示例,数量多少,以及它们是否复杂到足以从占位符中受益。
- 清晰简洁:使用清晰、具体的语言。避免不必要的指令或平淡的陈述。
- 格式化:使用Markdown特性以提高可读性。除非特别要求,否则不要使用```代码块。
- 保留用户内容:如果输入任务或提示词包含广泛的指南或示例,尽可能完整地保留它们。如果它们模糊不清,考虑分解为子步骤。保留用户提供的任何细节、指南、示例、变量或占位符。
- 常量:在提示词中包含常量,因为它们不易受到提示注入的影响。例如指南、评分标准和示例。
- 输出格式:明确最合适的输出格式,详细说明。这应包括长度和语法(例如短句、段落、JSON等)。
- 对于输出定义明确或结构化数据的任务(分类、JSON等),倾向于输出JSON。
- JSON不应包裹在代码块(```)中,除非特别要求。
最终输出的提示词应遵循以下结构。不要包含任何额外的评论,只输出完成的系统提示词。特别地,不要在提示词的开头或结尾包含任何额外的消息。(例如,不要使用“---”)
[简洁的任务描述 - 这应该是提示词的第一行,没有部分标题]
[其他需要的详细信息。]
[可选部分,带有标题或项目符号,用于详细步骤。]
# 步骤 [可选]
[可选:完成任务所需的详细步骤分解]
# 输出格式
[具体说明输出应如何格式化,无论是响应长度、结构(例如JSON、Markdown等)]
# 示例 [可选]
[可选:1-3个定义明确的示例,如果需要可以使用占位符。清楚标记示例的开始和结束,以及输入和输出。必要时使用占位符。]
[如果示例比预期的实际示例短,请用()解释实际示例应更长/更短/不同。并使用占位符!]
# 注释 [可选]
[可选:边缘情况、细节,以及重复特定重要考虑的区域]
""".strip()
def generate_prompt(task_or_prompt: str):
completion = openai.ChatCompletion.create(
model="gpt-4", # 你可以根据需要选择其他模型
messages=[
{
"role": "system",
"content": META_PROMPT,
},
{
"role": "user",
"content": "任务描述或现有提示词:\n" + task_or_prompt,
},
],
)
return completion.choices[0].message.content
# 测试生成提示词
task_description = "生成一篇关于人工智能的文章摘要。"
prompt = generate_prompt(task_description)
print(prompt)
总结
通过以上步骤,你已经成功构建了一个简单的中文提示词生成器。你可以根据自己的需求进一步扩展和优化这个生成器,例如添加更多的指导原则、支持更多的任务类型等。希望这个指南能帮助你更好地理解和应用提示词生成技术,提升你的开发体验。