面向普通用户和开发者的ChatGPT Prompt Engineering 终极指南
你准备好发掘 ChatGPT 的全部潜力了吗?想象一下拥有一个AI工具,它能在很多方面帮助你 — — 从回答问题和创作有趣内容到提供个性化建议。这就是「Prompt Engineering」的用武之地 — — 一种有效且强大的方法,通过精心创建Prompt和指导,让 ChatGPT 的工作更出色。
在这篇文章中,我们将探索令人兴奋的Prompt Engineering世界,涵盖其基础、技巧、最佳实践和高级策略,甚至还能用来创建一个聊天机器人。如果你对语言模型的潜力感兴趣,这篇文章将成为你使用 ChatGPT 并获得最大收益的指南。
准备好揭开Prompt Engineering的秘密,改变你使用 ChatGPT 的方式了吗?让我们开始吧!
Prompt Engineering基础知识
想必我们无需再多介绍ChatGPT了, 如果您对ChatGPT还不了解的话, 请看之前的相关文章:
使用ChatGPT来帮助我们学习: 如何使用ChatGPT来学习任何你想要的知识
我们都听说ChatGPT正在彻底改变教育。但是,要充分发掘其潜力,需要了解它可以用来做什么以及如何使用它。为了帮助您实现这一目标,我们收集了使用ChatGPT进行学习的最佳实践(和Prompt)。
medium.com
作为程序员, 我如何使用ChatGPT来帮我写代码
从快速学习到调试程序, 甚至将繁琐的工作自动化。
medium.com
如何有效地使用ChatGPT帮助软件开发第二弹 — 释放代码的潜力
如果您不知道还有第一部分, 推荐先阅读之前篇
medium.com
Prompt Engineering对于最大化 OpenAI 的语言模型 ChatGPT 的实用性至关重要。在这部分中,我们将介绍提示工程的基本概念,包括其定义、提示在与 ChatGPT 交互中的作用,以及影响提示选择的众多因素。
什么是Prompt Engineering?
一种通过ChatGPT获取想要的相关结果的交互过程被称为Prompt Engineering。它涉及一系列创建指令和输入,来控制模型的行为,塑造生成输出的质量和相关性。在一些场景下, 我们可以理解为Prompt是一种输入参数, 来控制模型的输出。
Prompt Engineering的重要性在于它可以提高ChatGPT的能力,并调整其对特定活动或目标的响应。用户可以通过提供精心设计的Prompt,最大化地解释他们的意图,并从模型中获得准确和与上下文相关的信息。这就像控制一台高性能汽车, 在熟悉这辆车的车上上, 能发挥这辆车的最大效能。
为什么Prompt对于ChatGPT的交互至关重要?
Prompt在用户和ChatGPT之间的交互中非常重要。它们为模型提供所需的上下文,使其能够创建相关的回答,并作为对话的起点。用户可以通过清晰准确的指令来引导ChatGPT朝着期望的结果发展。
根据研究,Prompt Engineering对语言模型的性能有着相当大的影响。精心设计的Prompt可以帮助防止有害或偏见的输出,提高生成回答的准确性,并对模型的行为有更多的控制。OpenAI在增强语言模型的Prompt Engineering方面进行的研究证明了这一点。
接下来我们来看下面两个查询及其相应的ChatGPT回复:
Prompt 1:
Prompt 2:
第二个Prompt产生了一个更具体和有意义的回答。
这个例子突显了提示工程中准确性和清晰性的重要性。
什么是Prompt类别?
Prompt是与AI语言模型进行无缝交流的重要工具。
为了创建高质量的提示,你首先需要了解它们是如何分类的。这样可以让你有效地构建它们,从而专注于特定的目标回答。
主要的提示类别包括:
1.信息检索的Prompt
这些提示旨在通过提出“What”和“How”问题来收集信息。它们非常适合从AI模型中提取具体细节或事实。例如:
- 素食有哪些健康益处?
- 我怎样才能提高工作效率?
2.基于指令的Prompt
基于指令的Prompt是指引AI模型执行特定任务的提示。这些提示类似于我们与Siri、Alexa或Google助手等语音助手进行交互的方式。例如:
- 下周二上午10点预约牙医。
- 找到通往机场最快的路线。
3. 提供上下文信息的Prompt
这些Prompt为AI模型提供上下文信息,帮助它更好地理解用户所期望的回答。通过提供背景信息,你可以从AI获得更准确和相关的答案。例如:
- 我对园艺一窍不通。有哪些适合初学者的容易种植的植物?
- 我想为我的女朋友策划一个浪漫的晚餐。你能提供一些建议和烘托氛围的Idea吗?
4. 比较型Prompt
比较型Prompt用于评估或比较不同的选项,帮助用户做出明智的决策。在权衡不同选择的利弊时,它们特别有帮助。例如:
- 租房和购房各有哪些利与弊?
- 电动车和传统汽油车的性能。
5. 寻求观点的Prompt
这些Prompt引导AI就给定话题发表意见或观点。它们有助于产生创意思路或进行发人深省的讨论。例如:
- AI对就业市场可能产生什么潜在影响?
- 如果Teleportation(隔空传送)技术成为现实,世界可能会如何变化?
6. 反思型Prompt
反思型Prompt帮助个人更深入地了解自己、自己的信念和行为。它们经常根据特定话题或个人经历鼓励自我成长和内省。你可能需要提供一些背景信息来获得理想的回答。例如:
- 我该如何建立自信,克服自我怀疑?
- 我可以采取哪些策略来保持健康的工作与生活平衡?
影响Prompt选择的因素有哪些?
在创建有效的Prompt时,需要考虑许多因素,这些因素影响着ChatGPT回答的质量、相关性和准确性。重要的因素包括:
- 模型知识:了解ChatGPT的优势和劣势。即使是像ChatGPT这样的尖端模型,在特定任务上可能需要帮助,或者会产生错误的数据。这种了解有助于创建利用模型优势、最小化缺陷的提示。
- 用户意图:理解用户的意图以生成相关的回答至关重要。提示应该清楚地反映用户的期望,让ChatGPT提供相关和正确的信息。
- 清晰明确:确保提示清晰明确,以减少歧义或不确定性,这样可以避免产生糟糕的回答。
- 领域特定性:在处理高度专业化的领域时,考虑使用领域特定的词汇或上下文,以引导模型得到预期的回答。增加上下文或示例有助于模型产生更准确、相关的结果。
- 限制条件:确定是否需要任何限制(如回答长度或格式)来产生期望的结果。可以明确指定限制条件,比如字符限制或结构化格式,以帮助模型生成符合特定需求的回答。
考虑这些因素进行Prompt Engineering可以提高ChatGPT的功效,并确保生成的回答与期望的目标密切匹配。
值得注意的是,Prompt Engineering是一个持续的研究课题,不断地进行改进和完善,以增强语言模型(如ChatGPT)的互动性和实用性。
总结一下:
主要的提示步骤:
- 确定问题或目标:清楚地说明你希望ChatGPT协助你的目的,以及你期望的回答类型。
示例:为面向时尚行业年轻专业人士的营销活动生成吸引人的标题。 - 添加相关关键词和短语:在Prompt中包含最相关的行业特定和主题相关术语,以帮助引导ChatGPT生成期望的输出。
示例:为我们的运动鞋撰写有说服力的营销文案,重点关注舒适性、耐用性和性能。面向健身爱好者和运动员。包含诸如“性能”、“舒适性”、“耐用性”和“运动员”等关键词。 - 撰写提示:用之前步骤中确定的关键词和短语构建简洁的Prompt,有效传达所需的信息和任务。
示例:“创建一个引人注目的社交媒体帖子,突出我们新推出的有机护肤品系列的优势,强调‘天然’、‘滋养’、‘环保’和‘光滑肌肤’等成分。” - 测试、评估和迭代:使用ChatGPT生成回答,评估结果,并根据需要修改Prompt以获得期望的输出。重复这个过程,直到你创建了一个成功的Prompt,能够始终产生预期的回答。
优秀Prompt的要素:
优秀的输出主要取决于训练数据、模型参数和有效的Prompt。作用用户我们只能影响其中一个因素,那就是Prompt, 以下是构成一个好的Prompt的要素:
- 清晰简明的语言,直截了当,没有歧义。
- 为ChatGPT分配的角色,即你希望它在提示中扮演的角色。
- 你提供的信息和示例,即你的输入。(ChatGPT可以参考之前的聊天历史中的信息和示例)
- 你请求ChatGPT完成的具体任务,即你期望的输出。
- 在收到初始回答后根据需要进行调整,即迭代,直到获得期望的输出。
Prompt Engineering技巧
这个章节,我们将探索几种Prompt技巧,可以用来优化Prompt Engineering,最大化与ChatGPT的交互效果。让我们深入了解这些技巧,理解它们的重要性。
清晰明确的指令
清晰明确的指令是有效Prompt Engineering的基础。通过提供明确的指导,用户可以提高ChatGPT回答的质量。OpenAI的研究表明,定义清晰的Prompt显著影响语言模型的性能。
Prompt 1:
Prompt 2:
使用明确的限制条件
在Prompt中加入明确的限制条件可以引导ChatGPT的思考过程,确保更准确、有理有据的回答。限制条件作为额外的指令,可以塑造模型的行为,提高生成输出的相关性。
例如,当寻求逐步指导时,加入限制条件,比如“请提供详细的、顺序的过程”,有助于ChatGPT生成连贯、易于遵循的指导。OpenAI的研究表明,使用明确的规则可以获得更可控、更符合预期的输出。
通过尝试不同的上下文和示例
上下文在Prompt Engineering中扮演着至关重要的角色。通过在Prompt中提供相关的上下文和示例,用户可以增强ChatGPT的理解能力,并引导它生成更准确、与上下文相关的回答。
例如,将相关的上下文融入提示中,在询问关于特定主题的信息时,能够帮助ChatGPT提供更有见地的答案。
Prompt 1:
Prompt 2:
充满上下文的Prompt可以引导ChatGPT生成与特定兴趣领域相一致的回答。
运用 System 1和System 2 问题
System 1和System 2 问题提供了一个平衡的Prompt Engineering方法。System 1问题引发快速、本能的回答,而System 2问题需要深思熟虑、详细的回答。将这两种类型的问题结合起来,可以为与ChatGPT的交互增添多样性和深度。
因此,在Prompt Engineering中运用System 1和System 2问题是一种影响ChatGPT给出回答类型的方法。
用户可以通过在Prompt中包含System 1和System 2问题,指导ChatGPT生成满足他们需求的回答。考虑以下示例来说明这个概念:
示例:旅行建议AI助手
Prompt: “作为一个旅游推荐助理,您的目标是为用户提供个性化和明智的旅游建议。请使用System 1 和System 2 问题来生成相关回复。System 1 问题应侧重于快速建议,而System 2 问题应探讨建议背后的原因。
System 1 问题 “巴黎有哪些热门旅游景点?
System 2 问题 “你能解释埃菲尔铁塔的历史意义及其建筑特点吗?
在这个示例中,System 1问题促使ChatGPT快速提供巴黎主要旅游景点的推荐。寻求简短旅行行程建议的用户将从简洁易懂的信息中受益。回答可能包括卢浮宫博物馆、巴黎圣母院和香榭丽舍大街等景点。
而System 2问题鼓励ChatGPT探索特定景点的历史重要性和建筑方面,比如埃菲尔铁塔。这样的回答对于想要更好地了解和深入了解该景点的用户非常有帮助。回答可能包括塔楼为1889年世界博览会而建的历史背景,居斯塔夫·埃菲尔的设计以及其著名的铁格子结构。
通过包含System 1和System 2问题,用户可以获得快速的推荐和更详细的解释。这使得旅行建议助理能够适应不同用户的口味,提供实用的建议,同时也满足对景点历史和建筑特色感兴趣的用户的好奇心。
控制输出长度
控制ChatGPT回答的长度是快速Prompt Engineering的一个关键组成部分。它使用户能够控制生成输出的详细程度和长度。考虑以下示例,看看如何管理输出的长度:
Prompt 1:
Prompt 2:
在这个回答中,ChatGPT展示了很强的冗长度,提供了详细的逐步食谱。它包含了额外的解释和建议,帮助用户完成烘焙过程。这种深度对于那些需要详细指导的人来说是合适的,特别是对于新手烘焙者或喜欢更全面方法的人来说。
这样,ChatGPT可以适应多样化的用户偏好,通过调节回答的冗长度来优化对话体验,使聊天机器人能够为用户的需求提供相关的答案,并加强与用户的联系。
Prompt Engineering 最佳实践
Prompt Engineering是一个动态的过程,需要充分的思考和实验,以获得最佳结果。在本节中,我们将看看Prompt Engineering的最佳实践,帮助用户在与ChatGPT的交互中获得最大的收益。让我们来了解这些实践,并看看它们的效果如何。
持续测试和改进
有效的Prompt Engineering在很大程度上依赖于持续测试和改进。用户可以通过定期Review输出并相应地调整Prompt来不断完善指令,提高ChatGPT回答的质量。
迭代 1:
迭代 2:
迭代 3:
意图与创意之间的平衡
在Prompt Engineering中,平衡用户的意图和模型本身创造力也至关重要。请看下面的提供写作灵感聊天机器人,它努力在促进创造力的同时提供适当的Prompt:
ChatGPT通过平衡匹配用户意图和提升模型创造力,给出了合适的Prompt,鼓励想象力,同时保持与用户的写作目标一致。
整合外部资源和API
利用外部资源和API是Prompt Engineering中的一项强大技术,它使得ChatGPT能够利用额外的信息并增强其回答能力。让我们通过一个示例来了解如何使用外部资源和API:
示例:天气信息助理
Prompt: “As a weather information chatbot, harness external resources and APIs to provide accurate and up-to-date weather data to users.”
User query: “Shanghai今天天气如何?”
这个聊天机器人可以与外部的天气API(比如Weather.com)进行整合,从而提供准确的天气信息。通过调用API,聊天机器人可以获取指定地点的实时天气数据。
API 集成
import requests
def get_weather(city):
api_key = "YOUR_API_KEY"
url = f"https://api.weatherapi.com/v1/current.json?key={api_key}&q={city}"
response = requests.get(url)
data = response.json()
return data["current"]["condition"]["text"], data["current"]["temp_c"]
上面的get_weather()函数演示了与WeatherAPI的集成示例,它返回给定城市的天气状况和摄氏温度。
回答模版:
city = "Shanghai"
weather_condition, temperature = get_weather(city)
response = f"The weather in {city} today is {weather_condition}. The temperature is {temperature}°C."
回答结果:
“The weather in Shanghai today is partly cloudy. The temperature is 22°C.”
通过利用外部资源和API,聊天机器人可以检索准确的天气信息,并将其融入到回答中。这为用户提供了适合其指定地点的实时天气更新。
与外部资源和API的集成使得ChatGPT能够获取超出其训练数据的大量信息,从而为用户的查询提供更有价值和可靠的回答。
OpenAI API 示例
OpenAI API允许开发人员将ChatGPT集成到他们的应用程序、产品或服务中。以下是一个示例,展示了如何使用OpenAI API:
import openai
# Set up your OpenAI API credentials
openai.api_key = 'YOUR_API_KEY'
# Define a function for interacting with ChatGPT
def ask_chatbot(question, chat_history=None):
if chat_history is None:
chat_history = []
# Format the input for the API call
input_text = '\n'.join(chat_history + [f'User: {question}'])
# Call the OpenAI API to generate a response
response = openai.Completion.create(
engine='text-davinci-003',
prompt=input_text,
max_tokens=50,
temperature=0.7,
n=1,
stop=None,
temperature=0.7
)
# Extract the generated response from the API response
answer = response.choices[0].text.strip()
# Append the user's question and the chatbot's answer to the chat history
chat_history.append(f'User: {question}')
chat_history.append(f'Chatbot: {answer}')
return answer
# Example usage
chat_history = []
user_question = "What is the capital of France?"
response = ask_chatbot(user_question, chat_history)
print(response)
在这个示例中,我们定义了ask_chatbot()函数,它接收用户的问题和一个可选的聊天历史作为输入。该函数对聊天历史和用户问题进行格式化,然后使用openai.Completion.create()方法向OpenAI API发起API调用。
API的响应包含来自ChatGPT生成的回答。我们从响应中提取出答案,并将用户的问题和聊天机器人的回答添加到聊天历史中。最后,生成的答案被返回。
借助ChatGPT OpenAI API,开发人员可以将ChatGPT的功能集成到他们的应用程序中,使用户可以与聊天机器人进行交互,并根据他们的查询接收回答。
避开任何偏见和在道德准则下使用
ChatGPT必须在道德和无偏见的前提下使用。以下是一个重要实例:
示例:AI辅助的求职者筛选
想象一下,有一个可以使用ChatGPT来分析面试回答, 并筛选求职者的AI系统。筛选过程必须是有道德的和没有偏见的。
以下步骤可以减少偏见,确保公平性:
- 训练数据多元化:使用各种种族、性别和族裔的数据来优化ChatGPT。从一开始就解决训练数据的偏见是至关重要的,因为它可能导致偏见。
- 偏见评估:定期评估模型的回答,以人工的方式识别和减少偏见。使用平衡和平等机会来查看模型的建议是否具备平衡因素(如性别或种族)的影响。进行调整以减少偏见。
- 透明的准则:向人类审查人员和开发者传达系统准则。这些准则应强调公正、道德和避免偏见。明确指示在筛选过程中避免偏袒或歧视特定群体。
- 人工干预审查:让人类分析系统的回答。这一步骤有助于发现任何模型的偏见,并确保人类可以考虑上下文并做出公平的决定。
- 持续监控和反馈:持续监测系统的性能,并从用户和审阅员那里收集反馈。检查系统输出是否存在偏见和意外效果。反馈循环有助于迅速解决问题。
- 多元化的审阅员团队:确保负责审查和优化系统输出的团队成员来自不同的背景。多样化的团队可以发现和解决同质团体可能忽略的偏见。
这些做法有助于AI辅助的求职者筛选系统避免偏见,根据求职者的技能和资格进行评估。
进阶的Prompt Engineering策略
Prompt Engineering可以更提升一步,包括创新策略,以进一步优化ChatGPT的性能和适应性。本节将介绍一些高级的Prompt Engineering策略,如温度和Token控制、多轮对话的提示链接、针对特定领域应用的提示修改以及处理混淆或矛盾的用户输入。
Temperature和Token管理
Temperature和Token控制是调整ChatGPT行为的有效方法。用户可以通过Temperature控制改变生成输出的随机性。较低的Temperature,如0.2,会产生更加聚焦和确定性的回答,而较高的Temperature,如1.0,会产生更多变化和探索性的结果。这个值也代表了控制模型的创造力和理性。
OpenAI的研究揭示了Temperature控制对ChatGPT回答多样性的影响。通过尝试不同的Temperature设置,用户可以在提供易懂的答案和将新特性融入生成的回答之间达到理想的平衡。
Prompt 1:
Prompt 2:
Token控制则需要指定最大Token数,以限制答案的长度。这使得用户可以控制ChatGPT输出的冗长程度,得到简洁明了的回答。通过设定适当的Token限制,用户可以确保ChatGPT提供与他们期望的回答长度相对应的答案。
Prompt Chain和多轮对话
Prompt Chain和多轮对话可以实现更加交互式和动态的ChatGPT交流。用户可以将多个Prompt链接在一起,形成连续的对话流程。每个提示可以引用之前的输入或ChatGPT先前的回答,从而实现丰富上下文的对话。
通过使用Prompt Chain,用户可以创建更加对话式的体验,并与ChatGPT进行反复的互动。这种技术适用于需要多步指令或进行详细讨论的任务。
为特定领域的应用调整Prompt
为特定领域的应用调整Prompt是Prompt Engineering的重要方法。它涉及将Prompt量身定制给特定行业或领域,以确保回答相关准确。让我们通过一个示例来说明如何为特定领域的应用调整Prompt:
示例:医疗诊断AI助理
提示:“为医疗诊断AI助理设计一个Prompt,帮助用户评估他们的症状并提供初步建议。”
为医疗诊断AI助理调整Prompt需要加入相关的医学术语、症状和诊断考虑因素。
Prompt:“请描述您的症状和医疗历史,AI助理将根据提供的信息提供初步评估。请注意,此评估不能替代专业医疗建议。如果您遇到医疗紧急情况,请立即联系急救服务。”
用户:“我头痛、发烧和喉咙痛。”
调整后的Prompt考虑了用户的症状,并告知他们评估的局限性。AI助理生成的回答可以根据提供的信息提供初步建议:
回答:“根据您头痛、发烧和喉咙痛的症状,可能表明您患了普通的病毒感染,比如流感,或者可能是喉炎。请咨询医疗专业人员进行确切诊断和适当治疗非常重要。在此期间,您可以休息,保持水分,服用非处方止痛药缓解症状。如果您的症状加剧或持续,请寻求医疗救助进行进一步评估。”
通过将Prompt调整为医疗诊断AI助理,回答与特定领域的应用相符,并提供了初步建议,同时强调了专业医疗建议的重要性。
模糊处理或解决矛盾的用户输入
Prompt Engineering需要处理一些模糊的概念或矛盾的用户输入。ChatGPT必须仔细处理此类输入并做出有意义的回答。让我们通过一个示例来说明如何实现:
示例:餐厅推荐聊天机器人
Prompt:“作为餐厅推荐聊天机器人,处理模糊或矛盾的用户输入,以确保准确和有帮助的回答。”
用户:“我想找一家在城里有素食和牛排选项的餐厅。”
在这种情况下,用户希望有牛排和素食选项。聊天机器人可以进行澄清:
回答:“是的!我很乐意帮您找到一家餐厅。您更倾向于素食为主的餐厅,还是希望有多种选择,包括牛排?”
聊天机器人请求澄清以更好地理解用户的请求并提供更准确的推荐。
用户:“我喜欢一家有素食和牛排菜肴的餐厅。”
用户明确了他们的偏好后,聊天机器人可以回答:
回答:“太好了!我推荐“The Grill House”餐厅,因为他们提供素食和牛肉菜肴。他们在丰富的菜单上提供美味的素食和牛肉菜肴。祝您用餐愉快!”
通过积极与用户互动并寻求澄清,聊天机器人处理了初始查询的模糊性,理解了用户的意愿,并推荐了符合他们要求的餐厅。
处理矛盾的用户输入也是类似的。聊天机器人可以澄清用户的目标,并在用户希望获得价格便宜但奢华的餐厅时
案例:真实世界中的Prompt Engineering
在实际应用中,Prompt Engineering产生了积极的效果。我们来看看在不同领域的几个Prompt Engineering案例:
客户支持聊天机器人
客户支持聊天机器人提升客户服务和响应速度。Prompt Engineering可以提高聊天机器人的准确性和效率,增强客户体验。
Prompt Engineering帮助聊天机器人学习并回应客户输入,使交互更加个性化和有效。
案例:HubSpot Chatbot Builder,可以预约会议、链接到KB,并与工单系统集成。
内容创作和编辑
内容创作和编辑也需要Prompt Engineering。ChatGPT帮助用户撰写优秀的博客文章、电子邮件和创意作品。
通过提供具体详细的Prompt,用户可以帮助ChatGPT开发符合他们风格、语调和目标的文本。提示可以提供背景信息、示例或明确的限制,以确保生成的内容满足要求。
OpenAI进行了Prompt Engineering的研究,以提高内容的连贯性和相关性,通过尝试不同的Prompt和节省编辑时间,使用户生成更有吸引力和主题相关的文本。
特定领域知识检索
Prompt Engineering可以高效地检索特定领域的知识。ChatGPT可以训练大量的特定领域数据,以提供准确和相关的主题信息。
用户可以通过定制Prompt和添加关键词或上下文来引导ChatGPT检索特定领域的知识。在医疗、法律、金融和技术等行业,准确的信息至关重要。
Prompt Engineering策略促进了特定领域知识的检索,为用户提供准确和最新的信息。
交互式故事叙述和游戏
Prompt Engineering使交互式故事叙述和游戏变得更加有趣。ChatGPT根据用户的输入作出回应并推动故事发展。
我之前发了一篇文章在
ChatGPT在游戏行业中的应用: 增强的叙事功能和互动性
随着游戏行业的不断发展,用于为玩家创造沉浸式互动体验的工具和技术也在不断发展。最近在业界掀起波澜的这样一个工具是ChatGPT,这是一个由OpenAI开发的强大语言模型。在这篇文章中,我们将仔细研究ChatGPT是如何被用来增强游戏世界中的…
medium.com
用户可以使用Prompt构建沉浸式的故事和游戏,引入故事元素、用户选择或游戏机制。Prompt Chain和多回合对话实现了丰富的叙事和游戏交互。
案例:OpenAI的AI Dungeon展示了Prompt Engineering如何改变交互式故事叙述和游戏。AI Dungeon允许用户通过提示共同参与动态的叙事。
ChatGPT Prompt Engineering对开发人员的意义
Deep Learning AI最近推出了一门名为“ChatGPT Prompt Engineering for Developers”的课程,由Isa Fulford和Andrew Ng(吴恩达)主讲。
Short Courses
Take your generative AI skills to the next level with short courses from DeepLearning.AI. Enroll today to learn…
www.deeplearning.ai
在课程中,他们强调作为开发人员工具的大语言模型(LLMs)的潜力,利用API调用LLMs来进行快速软件应用开发,这一点目前还未得到足够的重视。他们的目标是分享有效利用LLMs的可能性和最佳实践。课程涵盖了软件开发的提示最佳实践,以及日常使用案例,如摘要、推理、转换和扩展,并演示了如何使用LLM构建聊天机器人。
课程中主要使用OpenAI的ChatGPT模型,特别是GPT 3.5 Turbo,并使用Python(尤其在Jupyter Notebook中)进行演示。
以下是一些学到的内容:
两个原则:
原则1:写清晰明确的指令
表达清晰明确的指令至关重要,可以有效地引导模型,并减少出现无关或错误的回答的可能性。避免将清晰的提示与简短的提示混淆,因为较长的提示通常会提供更多的清晰度和上下文,从而得到详细和相关的输出。
- 策略1:使用分隔符来指示输入的不同部分,例如三引号(’’’),三个反引号(’*’),三个短划线(’ — -’),尖括号(‹ ›),或XML标签(‹tag› ‹/tag›)。分隔符还有助于防止Prompt Injection(提示注入),即前后矛盾的用户指令可能会误导模型。
text = f"""
You should express what you want a model to do by \
providing instructions that are as clear and \
specific as you can possibly make them. \
This will guide the model towards the desired output, \
and reduce the chances of receiving irrelevant \
or incorrect responses. Don't confuse writing a \
clear prompt with writing a short prompt. \
In many cases, longer prompts provide more clarity \
and context for the model, which can lead to \
more detailed and relevant outputs.
"""
prompt = f"""
Summarize the text delimited by triple backticks \
into a single sentence.
```{text}```
"""
- 策略2:请求结构化输出,例如HTML或JSON格式,以便更轻松地解析模型的回答。这样可以使得模型的回答更易于处理和提取信息。
prompt = f"""
Generate a list of three made-up book titles along \ with their authors and genres.
Provide them in JSON format with the following keys: book_id, title, author, genre.
"""
response = get completion (prompt)
print (response)
- 策略3:验证任务前提是否满足。首先Prompt模型检查这些前提条件,并指出任何未满足的条件,而不需要尝试完整的任务完成。考虑潜在的边缘情况,确保模型可以适当地处理它们,避免出现意外错误或结果。这样可以增加模型的可靠性和鲁棒性。
- 策略4:利用few-shot提示,在要求模型执行所需任务之前,提供已成功执行任务的示例。通过示例,让模型了解如何处理类似的任务,并为其提供必要的指导。这样可以加速模型的学习和适应性,使其更容易理解用户的意图并生成准确的响应。
prompt = f"""
Your task is to answer in a consistent style.
<child>: Teach me about patience.
<grandparent>: The river that carves the deepest \ valley flows from a modest spring; the \ grandest symphony originates from a single note; \ the most intricate tapestry begins with a solitary thread.
<child>: Teach me about resilience.
"""
response = get completion (prompt)
print (response)
原则2:给模型足够的思考时间
允许模型有足够的时间来思考和推理问题,以防止推理错误和过早的结论。复杂的任务可能需要逐步指导或一系列相关的推理步骤,然后模型才能提供最终的答案。
- 策略1:明确任务的完成步骤,特别是当直接回答困难时。就像人类解决问题一样,要求模型在提供最终解决方案之前进行一系列适当的推理步骤。这样可以确保模型在生成答案之前进行充分的思考和推理,从而提高其响应的准确性和合理性。
prompt 2 = f"""
Your task is to perform the following actions:
1 - Summarize the following text delimited by <> with 1 sentence.
2 - Translate the summary into French.
3 - List each name in the French summary.
4 - Output a json object that contains the following keys: french_ summary, num names.
Use the following format:
Text: <text to summarize>
Summary: <summary>
Translation: <summary translation>
Names: <list of names in Italian summary>
Output JSON: <ison with summary and num names>
Text: <{text!>
response = get_completion (prompt_2)
print "InCompletion for prompt 2:")
print (response)
- 策略2:指示模型在得出结论之前找到解决方案。明确地指示模型在提供答案之前进行推理和思考通常会产生更好的结果。这种方法可以让模型有足够的时间来处理和得出准确的响应。
通过遵循这些原则和策略,开发人员可以优化他们对LLM的使用,并在软件开发中实现预期的结果。这样可以提高模型的性能和灵活性,从而更好地满足用户的需求。
迭代式Prompt开发:
迭代式Prompt开发的过程类似于编程实践。它涉及尝试不同的方法,根据需要进行改进和重试。以下是涉及的步骤:
- 尝试一个解决方案。
- 分析结果,找出与预期结果不符的地方。
- 澄清说明并给予更多时间进行思考。
- 使用一批示例来优化Prompt。
- 重复这个过程。
在课程示例中,教师们提出了一个案例研究,涉及从产品说明书中生成营销文案。他们通过在每一步中优化Prompt来迭代式地解决了三个关键问题:
问题1:文本过长 -> 解决方案:将文本限制在最多50个字以内。
问题2:关注不相关的细节 -> 解决方案:加入目标受众,比如“描述适用于家具零售商…”
问题3:缺少尺寸表 -> 解决方案:将所有内容格式化为HTML。
具备的能力:
阅读总结:
大型语言模型已被广泛用于文本摘要。您可以通过提供具体的Prompt来请求关于价格和价值的摘要。
prompt = f"""
Your task is to generate a short summary of a product \
review from an ecommerce site to give feedback to the \
pricing deparmtment, responsible for determining the \
price of the product.
Summarize the review below, delimited by triple
backticks, in at most 30 words, and focusing on any aspects \
that are relevant to the price and perceived value.
Review: ```{prod_review}```
"""
而且您还可以编写一个循环来对多个文本进行总结:
reviews = [review_1, review_2, review_3, review_4]
for i in range(len(reviews)):
prompt = f"""
Your task is to generate a short summary of a product \
review from an ecommerce site.
Summarize the review below, delimited by triple \
backticks in at most 20 words.
Review: ```{reviews[i]}```
"""
response = get_completion(prompt)
print(i, response, "\n")
推理:
大型语言模型可以在没有特定训练的情况下推断出各种方面。它们可以确定情感、情绪,提取产品和公司名称,找出主题等等。
转换:
大型语言模型在文本转换任务方面表现出色,包括语言翻译、拼写和语法检查、语气调整以及格式转换。
prompt = f"""
Translate the following text to French and Spanish and English pirate: \
```I want to order a basketball```
"""
response = get completion (prompt)
print response
扩展:
大型语言模型可以生成根据每位客户的评价定制的个性化客户服务电子邮件。
prompt = f"""
You are a customer service AI assistant.
Your task is to send an email reply to a valued customer.
Given the customer email delimited by ```,\
Generate a reply to thank the customer for their review.
If the sentiment is positive or neutral, thank them for \
their review.
If the sentiment is negative, apologize and suggest that \
they can reach out to customer service.
Make sure to use specific details from the review.
Write in a concise and professional tone.
Sign the email as `AI customer agent`.
Customer review: ```{review}```
Review sentiment: (sentiment}
"""
response = get completion (prompt, temperature=0.7)
print(response)
开发聊天机器人:
利用大型语言模型的其中一个令人着迷的方面是可以轻松创建定制的聊天机器人。ChatGPT的网页界面提供了一个由强大的语言模型支持的对话平台。然而,真正令人兴奋的是利用大型语言模型的能力来构建自己的聊天机器人,比如用于餐厅的AI客服代理或AI点餐机器人。
在这个案例中,我们将这个聊天机器人称为“OrderBot”。目标是自动收集用户提示和助手回应,以构建这个高效的“OrderBot”。主要步骤是定义一个实用函数。该函数帮助收集用户消息,消除手动输入的需要。从用户界面收集的提示然后被添加到一个名为“context”的列表中。随后,对于每一次交互,使用这个上下文来调用模型。
模型的回应被加入到上下文中,确保模型和用户的消息都被保留,有助于上下文的不断增长。这些信息的积累使得模型能够确定适当的行动。
最后,设置和执行用户界面来显示OrderBot。上下文中包含系统消息,其中包含菜单,它在与语言模型的每次交互中保持一致。随着更多的交互发生,上下文不断发展,保持全面的对话记录。
总结
Prompt Engineering对于ChatGPT来说是一个Game-Changer。通过掌握这一技巧,您可以塑造和引导语言模型的回应,以满足您的特定需求。
Prompt Engineering的未来前景一片光明,持续的研究和合作推动着该领域的创新。随着语言模型的不断发展,Prompt Engineering将在发掘它们的全部潜力方面发挥关键作用。
ChatGPT的Prompt Engineering开启了无限的可能性。通过实施有效的技巧和探索先进的策略,我们可以改变与语言模型的互动方式。Prompt Engineering改变了客户服务聊天机器人、内容开发和游戏,促进了AI与人类的协作。
FAQ
什么是提Prompt Engineering?
Prompt Engineering是设计有效的Prompt和指令,用于将用户意图传达给像ChatGPT这样的语言模型的过程。它有助于从模型获取准确、相关和有用的响应。
为什么Prompt Engineering对ChatGPT很重要?
Prompt Engineering对于最大化ChatGPT的效果至关重要。通过设计精心制作的Prompt,用户可以引导模型生成更准确、相关的输出,使其成为各种应用的有价值的工具。
优秀的Prompt Engineering技巧有哪些?
优秀的Prompt Engineering技巧包括:
- 提供明确和具体的指示
- 使用明确的约束条件
- 尝试使用上下文和示例
- 利用System 1和System 2问题
- 控制输出的冗长程度
如何改进我的Prompt以获得更好的效果?
为了改进您的Prompt,您可以:
- 进行反复测试和调整
- 平衡用户意图和模型创意
- 使用外部资源和API增强ChatGPT的能力
- 确保在提示和输出中避免偏见
这里还有一个ChatGPT Prompt Cheat Sheet,可以帮助您编写更好的Prompt。
高级的Prompt Engineering策略有哪些?
高级的Prompt Engineering策略包括:
- 通过控制temperature和token设置来调整随机性和响应长度
- 通过Prompt Chain创建多轮对话
- 将Prompt调整为特定领域的应用
- 处理模糊概念或前后矛盾的用户输入
后记
感谢您的阅读, 本文很长, 我也知道, 您能读到这里, 说明您意识到Prompt Engineering的重要性, 并希望能掌握它的技巧, 本人不才, 也在学习中, 作为一名开发人员, 可能更容易理解和掌握工程的技巧, 例如迭代、链式(Chain)和控制参数。 这边文章大部分是翻译自下面这篇文章
https://www.imaginarycloud.com/blog/chatgpt-prompt-engineering/
非常感谢原文作者, 我从中学习到了很多, 我也用原文中的很多Prompt的技巧, 来完成了本文中的一些示例。 如果你想交流Prompt Engineering和Prompt的技巧, 欢迎与我联系。