向蓝 发表于 2023-7-13 12:34:23

openAI官方教你写prompt:生成 LLM 提示的首要原则

在提倡大型语言模型(LLM)时,产品经理应该记住两个关键原则。首先,提供明确、具体的指示。其次,给模型时间来处理和生成响应。学习提示的首要原则可以成为帮助产品经理推动新功能和产品的宝贵技能。出处:下面的许多见解和代码片段直接取自 DeepLearning.AI 和 OpenAI.ai 的 ChatGPT Prompt Engineering for Developers。如果这篇文章引起了您的兴趣,请查看上面链接中 Andrew Ng 和 Isa Fulford 强烈推荐的课程。两人都是该领域的思想领袖,并提供了大量的见解。
促进LLM专家的首要原则摘要:原则 1:编写清晰且具体的说明      
[*]策略 1:使用分隔符以保持清晰
[*]策略 2:要求结构化输出
[*]策略 3:要求模型检查条件
[*]策略 4:提供示例(“少镜头”提示)
原则 2:给模型时间“思考”      
[*]策略 1:指定步骤
[*]策略 2:让模型找出自己的解决方案

作为产品经理,了解我们正在使用的工具至关重要,尤其是在涉及人工智能和机器学习等尖端技术时。了解大型语言模型 (LLM) 的潜力并优化对 LLM 的提示和 API 调用以实现快速软件开发对于产品经理来说非常重要,因为我们可以利用这项技术来推动包含 AI 的新功能或产品,从而在市场上提供竞争优势。让我们从提示开始。
需要牢记两个关键原则。第一个原则是写出清晰具体的说明。第二个原则是给模型时间思考。让我们深入探讨我们的首要原则,即编写清晰且具体的说明。您应该通过提供尽可能清晰和具体的说明来表达您希望模型执行的操作。
注意:代码片段假设您对代码有基本的了解。如果没有,请不要担心,这些原则仍然为使用标准 chatGPT 接口进行快速工程提供了有用的策略。所以继续吧!
原则 1:编写清晰且具体的说明使用语言模型时,提供清晰、具体的指令来指导模型实现所需的输出并避免不相关的响应至关重要。较长的提示,充满上下文和细节,通常会产生更准确的结果。策略 1:使用分隔符以保持清晰为了清晰起见,一个关键策略是使用分隔符。这些符号将输入的不同部分分开,明确模型应该关注的内容。除了清晰之外,分隔符还有助于防止“即时注入”,即用户添加的输入可能会给出相互冲突的指令,从而导致模型误入歧途。通过使用分隔符,我们可以确保模型专注于我们的预期任务,而不是将用户输入误解为新指令。文本 = f"""
多伦多是安大略省的省会,
是安大略湖西北岸的加拿大主要城市。
这是一个充满活力的大都市,核心是高耸的摩天大楼,
与标志性的独立式加拿大国家电视塔相比,一切都显得相形见绌。
多伦多也有许多绿色空间,从有序的椭圆形
皇后公园至 400 英亩的 High Park 及其步道、体育设施
和动物园。
”“”
提示=f"""
总结由三个反引号 \ 分隔的文本
变成一个句子。
``{文本}````
”“”
响应= get_completion(提示)
打印(响应)
这会生成以下响应:
多伦多是一座繁华的城市,拥有摩天大楼、绿地和位于安大略湖西北岸的标志性加拿大国家电视塔。
策略 2:要求结构化输出下一个策略是要求结构化输出。与 AI 模型交互时,使用 HTML 或 JSON 等结构化输出可以使解析输出变得更加容易。例如,当要求模型生成包含作者和流派的虚构书籍标题列表时,指示它提供 JSON 格式的输出(带有书籍 ID、标题、作者和流派等键)可以整齐地生成格式化、易于解析的输出,可以直接读入 Python 字典或列表。提示=f"""
沿着 \ 生成三个虚构书名的列表
及其作者和流派。
使用以下键以 JSON 格式提供它们:
book_id、书名、作者、流派。
”“”
响应= get_completion(提示)
打印(响应)

这会生成以下响应:

策略 3:要求模型检查条件下一个策略是要求模型检查条件是否满足。在 AI 模型交互中纳入条件检查有助于确保准确完成任务。如果任务依赖于某些条件,则要求模型首先检查和验证这些条件可以防止有缺陷的输出。例如,可以提示模型重写文本中给出的一系列指令。在这种情况下:如果文本包含指令序列,则提供步骤。文本_1 = f"""
多伦多是一座世界级城市。如果你搬到这里了
要成为真正的多伦多人,您需要做一些基本的事情。
首先,您需要选择一支运动队。接下来,你需要享受失败。
之后,你就不得不抱怨天气,尤其是下雪。
从那时起,您需要掌握堵车的艺术。
最后,您需要喜欢排队参加过度宣传和价格过高的活动。
记得自拍一张发ins。熟能生巧!
”“”
提示=f"""
您将收到由三个反引号分隔的文本。
如果它包含一系列指令,
按以下格式重写这些指令:
步骤1 - ...
第2步 - ...
步骤 N - ...
如果文本不包含一系列指令,
然后只需写“未提供步骤。”
``{text_1}````
”“”
响应= get_completion(提示)
print("文本 1 的补全:")
打印(响应)
这会生成以下响应:但是,如果提供的文本不包含一系列指令,则模型应返回“未提供步骤”。text_2 = f"""
多伦多是安大略省的省会,是加拿大的主要城市
沿着安大略湖的西北岸。这是一座充满活力的大都市
以高耸的摩天大楼为核心,与标志性的独立式建筑相比,一切都显得相形见绌
加拿大国家电视塔。多伦多也有许多绿色空间,从有序的椭圆形
皇后公园 (Queen's Park) 到占地 400 英亩的高地公园 (High Park) 及其步道、体育设施和动物园。
”“”
提示=f"""
您将收到由三个反引号分隔的文本。
如果它包含一系列指令,
按以下格式重写这些指令:
步骤1 - ...
第2步 - ...
步骤 N - ...
如果文本不包含一系列指令,
然后只需写“未提供步骤。”
``{text_2}````
”“”
响应= get_completion(提示)
print("文本 1 的补全:")
打印(响应)
这会生成以下响应:


这种方法允许模型处理潜在的边缘情况并防止意外错误,从而增强模型输出的可靠性。策略 4:提供示例(“少镜头”提示)最后的策略是少量提示。这是一种在执行类似任务之前向模型提供成功完成任务的示例的技术。提示=f"""
你的任务是以一致的风格回答。
<孩子>:教我如何善良。
<祖父母>:“善良是指路的灯塔,
闪耀着让人们团结起来度过人生风暴的“”。
<child>:教我如何分享。
”“”
响应= get_completion(提示)
打印(响应)
这会生成以下响应:
在指示模型保持一致的风格后,当要求模型教授分享时,它成功地模仿了隐喻语气。这四种策略构成了我们的首要原则:为模型提供清晰具体的指示。我们的第二个原则强调给模型足够的时间进行深思熟虑的重要性。原则 2:给模型时间“思考”第二条规则是给模型足够的时间来解决问题。如果模型因为匆忙而犯错误,你应该以不同的方式提出问题,这样模型就可以在给出最终答案之前逐步思考。这就像要求某人解决一道困难的数学问题,却没有给他们足够的时间思考;他们可能会弄错。同样,您可以告诉模型花更多的时间来思考一个棘手的问题,这意味着它会更加努力地完成任务。策略 1:指定步骤我们的第一个策略是指定完成任务所需的步骤。此提示中的说明告诉模型执行一系列非常具体的操作。首先,将课文概括为一句话。其次,将摘要翻译成法语。第三,列出法语摘要中的每个名字。第四,输出包含特定键的 JSON 对象。文本 = f"""
在一个迷人的村庄里,杰克和吉尔兄妹踏上了“
从山顶取水的任务\
出色地。他们一边攀登,一边欢快地歌唱,不幸的事\
击中了——杰克被石头绊倒并摔倒了\
下了山,吉尔也跟着下了山。\
尽管受到了轻微的打击,两人还是回到了家。
安慰的拥抱。尽管发生了事故,\
他们的冒险精神丝毫未减,他们\
满心欢喜地继续探索。
”“”
提示=f"""
您的任务是执行以下操作:
1 - 总结以下由 分隔的文本
<>有1句话。
2 - 将摘要翻译成法语。
3 - 列出法语摘要中的每个名字。
4 - 输出一个包含以下内容的 json 对象
以下键:french_summary、num_names。
使用以下格式:
文本:<总结文本>
摘要:<摘要>
翻译:<摘要翻译>
姓名:<意大利语摘要中的姓名列表>
输出 JSON:<带有摘要和 num_names 的 json>
文本:<{文本}>
”“”
响应= get_completion(提示)
print("\n提示完成:")
打印(响应)
这会生成以下响应:
策略 2:让模型找出自己的解决方案我们将探索的下一个策略是敦促模型在得出结论之前制定自己的解决方案。有时,如果我们在得出任何结论之前明确引导模型推导出自己的解决方案,结果会显着改善。这与我们之前讨论过的想法密切相关,即给模型足够的时间彻底检查问题,然后仓促决定答案是正确还是错误,类似于人类处理问题的方式。在下面的示例中,模型的任务是评估学生的回答是否正确。在这里,我们提出一个数学问题,然后是学生提出的解决方案。然而,如果学生的回答是错误的(例如使用 100x 而不是 10x),模型可能无法捕获错误。发生这种情况是因为,经过表面检查,学生的解决方案可能看起来似乎合理。该模型可能与学生的解决方案一致,因为它只是浏览了一下。为了纠正这个问题,我们可以指导模型首先开发自己的解决方案,然后将其与学生的解决方案进行比较。在下面的提示中,我们概述了模型确定学生解决方案准确性的任务。它包括以下步骤: 首先,创建您自己的问题解决方案。其次,将你的解决方案与学生的解决方案进行比较,最后评估学生解决方案的正确性。我们强调模型必须首先解决问题本身,然后再决定学生解决方案的正确性。运行此命令后,模型首先执行自己的计算,得出正确的答案。将此与学生的解决方案进行比较,模型发现了差异,并正确地宣布学生的解决方案不正确。这个例子强调了提示模型本身解决问题并花时间将任务解构为可管理步骤的好处,从而产生更准确的响应。提示=f"""
您的任务是确定学生的解决方案是否\
正确与否。
要解决该问题,请执行以下操作:
- 首先,找出你自己的问题解决方案。
- 然后将您的解决方案与学生的解决方案进行比较\
并评估学生的解决方案是否正确。
直到学生的解决方案是否正确才决定
你自己已经解决了这个问题。
使用以下格式:
问题:
```
在这里提问
```
学生的解决方案:
```
学生的解决方案在这里
```
实际解决方案:
```
制定解决方案的步骤以及您的解决方案请参见此处
```
学生的解与实际解是否相同\
刚刚计算:
```
是还是不是
```
学生年级:
```
正确或不正确
```
问题:
```
我正在建造太阳能发电装置,我需要帮助 \
制定财务报表。
- 土地成本 100 美元/平方英尺
- 我可以以 250 美元/平方英尺的价格购买太阳能电池板
- 我协商了一份维护合同,费用为\
我每年固定 10 万美元,另外每平方 10 美元 \

第一年运营的总成本是多少\
作为平方英尺数的函数。
```
学生的解决方案:
```
设 x 为安装尺寸(以平方英尺为单位)。
费用:
1.土地成本:100x
2.太阳能电池板成本:250x
3.维护成本:100,000 + 100x
总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
```
实际解决方案:
”“”
响应= get_completion(提示)
打印(响应)
最后的想法理解和掌握为大型语言模型 (LLM) 编写清晰且具体的指令的原则对于产品经理至关重要。当我们深入研究人工智能和机器学习的世界时,通过优化的提示和 API 调用来利用法学硕士的潜力成为快速软件开发的强大工具。遵循两个关键原则 1) 编写清晰具体的说明,2) 让模型有时间思考,为有效利用LLM奠定基础。通过准确表达我们的意图,我们可以最大限度地发挥模型的功能并推动我们产品的创新。
页: [1]
查看完整版本: openAI官方教你写prompt:生成 LLM 提示的首要原则