有效工程-第一部分
在本文中,我将提供有关提示工程的全面教程,重点介绍如何从大型语言模型(LLM),例如OpenAI的ChatGPT中实现最佳和最优结果。
即时提示工程自LLMs问世以来已经获得了相当大的人气和广泛的使用,引领了自然语言处理(NLP)领域的革命。即时提示工程的美妙之处在于它的多功能性,使得来自不同背景的专业人士能够有效利用它,并最大限度地发挥LLMs的潜力。
ChatGPT的基本工作原理
ChatGPT 采用“助手”和“用户”角色的概念来促进互动对话。该模型以来回方式运作,用户提供输入或消息,助手进行相应回应。
用户角色代表参与对话的个人。作为用户,您可以提供指令、查询或任何基于文本的输入给模型——这构成了模型的提示。
助手角色指的是AI语言模型本身,它被设计用来根据用户输入产生回复。该模型处理会话历史记录,包括用户和助手的消息,生成相关且连贯的回复。它考虑到会话历史中提供的上下文和信息以生成更准确和适当的答复。
对话通常以系统消息开始,设置助手的行为,随后是交替的用户和助手消息。通过保持对话背景,模型可以生成更一致和与背景相关的响应。
为了保持上下文的连贯性,在与模型互动时包括相关的对话历史十分重要。这样可以确保模型理解正在进行的对话,并根据给定的上下文提供适当的回应。
提示使用模板
在这个部分,我们将编写一个样板代码,作为全部任务的基础。首先,我们需要从我们的OpenAI帐户生成秘钥。
!pip install openai
import openai
# Generating Secret Key from your OpenAI Account
openai.api_key = ('<OPEN-AI-SECRET-KEY>')
# Template function
def get_completion(prompt, model="gpt-3.5-turbo", temperature = 0):
messages = [{"role": "system", "content": "You are the assistant."},
{"role": "user", "content": prompt}]
response = openai.ChatCompletion.create(
model=model,
messages=messages,
temperature=temperature, # this is the degree of randomness of the model's output
)
reply = response.choices[0].message["content"]
return reply
该函数有三个输入:
- 提示
- 模型(ChatGPT)
- 温度
我们已经介绍了模型和“用户”的角色。现在,让我们转向下两个输入:提示和温度。
提示是提供给模型的文本输入,作为生成响应的指导指令或查询。
温度是另一项超参数,对决定模型输出行为发挥至关重要的作用。不要与现实世界的含义混淆,但这个度量控制生成的响应中的随机性水平。通过调整温度值,我们可以影响模型输出。
当温度设定为更高的数值时,模型会产生更多样化和创意性的响应。相反,较低的温度值会使模型更加专注和确定性,通常会产生更精确但可能输出较少的变化。
选择适当的温度取决于具体的任务和期望的产出。
提示的基础知识
ChatGPT 可以执行许多任务,包括文本摘要,信息提取,问答,文本分类,情感分析和代码生成等等。根据用例,提示可以设计为执行单个或多个任务。
prod_desc = """
3 MODES & ROTATABLE NOZZLE DESIGN- This portable oral irrigator comes with Normal, Soft and Pulse modes which are best for professional use. The 360° rotatable jet tip design allows easy cleaning helping prevent tooth decay, dental plaque, dental calculus, gingival bleeding and dental hypersensitivity.
DUAL WATERPROOF DESIGN- The IPX7 waterproof design is adopted both internally and externally to provide dual protection. The intelligent ANTI-LEAK design prevents leakage and allows the dental flosser to be used safely under the running water.
UPGRADED 300 ML LARGE CAPACITY WATER TANK- The new water tank is the largest capacity tank available and provides continuous flossing for an entire session. The removable full-opening design allows thorough cleaning thus preventing formation of bacteria and limescale deposits.
CORDLESS & QUALITY ASSURANCE- Cordless and lightweight power irrigator comes with a powerful battery that lasts upto 14 days on a single charge
RECHARGEABLE & QUALITY ASSURANCE- Cordless and lightweight power irrigator comes with a powerful battery that lasts upto 14 days on a single charge
"""
prompt = f"""
Your task is to generate a short summary of a product \
description from an ecommerce site.
Summarize the description below, delimited by tags, in at most 50 words.
Review: <tag>{prod_desc}</tag>
Output should be in JSON format with "summary" as key.
"""
response = get_completion(prompt)
print(response)
产出:
“摘要”: “这款便携式口腔冲洗器有3种模式和可旋转的喷嘴设计,可以轻松清洁。它具有双重防水设计和大300毫升水箱。它是无绳、可充电的,并配有一个功能强大的电池,一次充电可持续14天。”
一些从上面代码中推断出来的关键要点
- 在构建提示时,提供清晰具体的指令来引导模型的行为非常重要。这有助于确保生成的输出与您所期望的结果相符。
- 限定输入数据:为了区分提示的指令和实际输入数据,建议使用限定符。限定符可以采用多种形式,例如引号(“ ”),尖括号(),HTML标记( ),冒号(:)或反引号(```)。通过使用限定符,您可以创建帮助解析提示的视觉区别。
- 要求结构化输出:如果你的任务需要模型响应的特定格式或结构,请在提示中明确提出。这样做可以方便我们利用输出。
以下是上述提示的更详细分解。
提示的关键元素包括:指令、任务、约束、输出指示和输入数据。