How to work with the GPT⑶5-Turbo and GPT⑷ models – Azure OpenAI Service(openai openai.chat
I. 介绍OpenAI及ChatCompletion API
OpenAI是一个机器学习研究实验室,专注于开发和提供强大的语言模型和自然语言处理技术,以推动人工智能在各个领域的利用。
ChatCompletion API是OpenAI提供的一种用于对话生成的API。它使用了先进的GPT模型(Generative Pre-trained Transformer),该模型经过大量的训练,能够生成联贯、自然的对话回复。
II. 设置OpenAI库和访问Secret Key
要使用OpenAI的ChatCompletion API,首先需要安装并配置OpenAI的Python库。
安装OpenAI库的方法:
- 使用pip命令安装:pip install openai
- 在环境中导入OpenAI库:import openai
访问ChatCompletion API需要使用Secret Key。下面是获得和配置Secret Key的步骤:
- 访问OpenAI的网站,创建一个OpenAI账户。
- 生成API密钥:登录OpenAI账户,导航到API密钥设置页面,生成一个新的密钥。
- 将密钥配置到Python环境中:在代码中使用openai.Secrets.get()方法或直接设置openai.api_key变量来配置密钥。
III. 创建openai.chatcompletion.create函数
为了使用OpenAI的ChatCompletion API进行对话生成,可以编写一个自定义的openai.chatcompletion.create函数,简化API调用的进程。
A. 函数的输入参数
- message (string) – 传递给ChatCompletion API的消息内容。
- 其他可能的参数(可选)
B. 函数的输出结果
- 返回ChatCompletion API的响应结果。
- 解析响应结果并提取生成的对话回复。
C. 示例代码
下面是使用openai.chatcompletion.create函数进行对话生成的示例代码:
import openai
def create_chat_completion(message):
response = openai.ChatCompletion.create(
model="gpt⑶.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": message}
]
)
reply = response["choices"][0]["message"]["content"]
return reply
message = "What's the weather like today?"
reply = create_chat_completion(message)
print("Assistant: " + reply)
以上示例代码创建了一个名为create_chat_completion的函数,接受一个消息作为输入,将其传递给ChatCompletion API,并返复生成的对话回复。
IV. 使用区别的Chat模型
OpenAI提供了区别的Chat模型,包括gpt⑶.5-turbo和gpt⑷等。这些模型具有区别的功能和性能。
要使用区别的Chat模型,只需在调用ChatCompletion API时指定相应的模型名称便可。
V. 格式化对话输入
为了正确使用ChatCompletion API,需要将对话格式化为API所需的输入格式。
可使用以下步骤对消息进行分割和标记,以构建对话上下文:
- 将对话消息分割为多个部份。
- 为每一个部份设置一个角色(例如:系统、用户、助手)。
- 为每一个部份的内容添加具体的消息。
- 将角色和内容以对象的情势组织在一个列表中,构成对话的消息序列。
VI. ChatCompletion.create函数的详细参数
A. 模型参数
- model – 定义要使用的Chat模型。
- 其他可能的模型相关参数(可选)。
B. 消息参数
- messages – 定义对话的消息序列。
- 其他可能的消息相关参数(可选)。
VII. ChatCompletion.create函数的最好实践
以下是一些关于使用openai.chatcompletion.create函数的最好实践建议:
- 选择适合的模型和参数,以满足利用的需求。
- 在模型参数值之间寻觅最好平衡点,使生成的对话回复到达最好性能。
openai openai.chatcompletion.create的进一步展开说明
**目录**
– 概述
– 在Azure OpenAI中的两种交互方式
– Chat Completion API
– Completion API with Chat Markup Language(ChatML)
– 使用GPT⑶5-Turbo和GPT⑷模型
– 基本用法
– 模型版本更新
– 使用Chat Completion API
– 对话的格式
– 系统角色
– 消息
– 示例
– 利用Chat Completion进行非对话场景
– 创建对话循环
– 管理对话
– 下一步
—
# GPT⑶5-Turbo和GPT⑷模型的使用指南
## 概述
GPT⑶5-Turbo和GPT⑷模型是针对对话界面优化的语言模型,与旧版的GPT⑶模型有所区别。以往的模型是以文本输入和文本输出为基础的,即接受输入的提示文本并返回补充到提示文本的完成内容。但是,GPT⑶5-Turbo和GPT⑷模型是以对话输入和消息输出为基础的。这些模型要求以特定的聊天式传递格式进行输入,并返回表示模型编写的聊天消息的完成内容。虽然这类格式专为多轮对话而设计,但你会发现它在非对话情形下也能很好地发挥作用。
在Azure OpenAI中,有两种与这类模型进行交互的区别选项:
– Chat Completion API
– 具有聊天标记语言(ChatML)的完成API
Chat Completion API是一种与GPT⑶5-Turbo和GPT⑷模型进行交互的新的专用API。这是访问这些模型的首选方法,也是访问新的GPT⑷模型的唯一方式。
ChatML使用了与其他模型(如text-davinci-002)使用的完成API相同的完成API,它需要一种称为聊天标记语言(ChatML)的唯一令牌基础提示格式。它提供了比专用的Chat Completion API更低级别的访问权限,但需要额外的输入验证,仅支持gpt⑶5-turbo模型,并且底层格式更有可能随着时间的推移而更改。
本文将为你介绍怎么开始使用GPT⑶5-Turbo和GPT⑷模型,并重点介绍使用这些模型以取得最好结果的技能。如果你尝试以与旧模型系列相同的方式与模型进行交互,模型通常会产生冗杂且无用的回复。
## 在Azure OpenAI中的两种交互方式
在Azure OpenAI中,你可使用以下两种区别的方法与GPT⑶5-Turbo和GPT⑷模型进行交互。
### Chat Completion API
Chat Completion API是一种新的专用API,用于与GPT⑶5-Turbo和GPT⑷模型进行交互。这个API是访问这些模型的首选方法,也是访问新的GPT⑷模型的唯一方式。
### 使用ChatML的Completion API
ChatML是一种使用与其他模型(如text-davinci-002)相同的完成API的令牌基础提示格式,它需要一种称为聊天标记语言(ChatML)的独特令牌基础格式。这提供了比专用Chat Completion API更低级别的访问权限,但也需要额外的输入验证,仅支持gpt⑶5-turbo模型,并且底层格式更有可能随着时间的推移而产生更改。
## 使用GPT⑶5-Turbo和GPT⑷模型
以下代码片断显示了使用Chat Completion API和GPT⑶5-Turbo和GPT⑷模型最基本的方式。如果这是你第一次以编程的方式使用这些模型,建议你从我们的GPT⑶5-Turbo & GPT⑷快速入门开始。
“`python
import os
import openai
openai.api_type = “azure”
openai.api_version = “2023-05⑴5”
openai.api_base = os.getenv(“OPENAI_API_BASE”) # Your Azure OpenAI resource’s endpoint value.
openai.api_key = os.getenv(“OPENAI_API_KEY”)
response = openai.ChatCompletion.create(
engine=”gpt⑶5-turbo”, # 你部署GPT⑶5-Turbo或GPT⑷模型时选择的部署名称。
messages=[
{“role”: “system”, “content”: “Assistant is a large language model trained by OpenAI.”},
{“role”: “user”, “content”: “Who were the founders of Microsoft?”}
]
)
print(response)
print(response[‘choices’][0][‘message’][‘content’])
“`
**注意:** GPT⑶5-Turbo和GPT⑷模型不支持以下参数:logprobs、best_of和echo。如果设置了这些参数,你将收到一个毛病。每一个响应都包括一个finish_reason,finish_reason的可能值有:stop:API返回完全的模型输出,length:由于max_tokens参数或令牌限制问题,模型输出不完全,content_filter:由于我们的内容过滤器标记而省略的内容,null:API响应仍在进行中或不完全。建议将max_tokens设置为稍高于正常值的值,例如300或500。这样可以确保模型在到达消息结尾之前不会停止生成文本。
### 模型版本更新
注意,gpt⑶5-turbo与OpenAI的gpt⑶.5-turbo模型是等价的。与之前的GPT⑶和GPT⑶.5模型区别,gpt⑶5-turbo模型和gpt⑷和gpt⑷⑶2k模型将继续更新。在创建这些模型的部署时,你还需要指定一个模型版本。你可以在我们的模型页面上找到这些模型的停用日期。
## 使用Chat Completion API
OpenAI训练了GPT⑶5-Turbo和GPT⑷模型以接受对话格式的输入。messages参数接受一个由角色组织的对话消息对象数组。当使用Python API时,使用列表和字典。基本聊天完成的格式以下:
“`python
{ “role”: “system”, “content”: “提供一些上下文和/或对模型的唆使” },
{ “role”: “user”, “content”: “用户的消息内容” }
“`
包括一个示例回答和问题的对话将以下所示:
“`python
{ “role”: “system”, “content”: “提供一些上下文和/或对模型的唆使” },
{ “role”: “user”, “content”: “用户的消息内容” },
{ “role”: “assistant”, “content”: “回答内容” },
{ “role”: “user”, “content”: “实际回应的第一个问题/消息” }
“`
### 系统角色
系统角色,也称为系统消息,包括在数组的开头。该消息向模型提供初始唆使。系统角色可以提供各种信息,包括:
– 助理的扼要描写
– 助理的个性特点
– 您希望助理遵守的唆使或规则
– 模型所需的数据或信息,例如FAQ中的相关问题
你可以根据你的用例自定义系统角色,或只包括基本的唆使。系统角色/消息是可选的,但强烈建议最少包括一个基本的系统角色,以取得最好结果。
### 消息
在系统角色以后,你可以包括一系列用户和助手之间的消息。例如:
“`python
{ “role”: “user”, “content”: “热力学是甚么?” }
“`
为了触发模型的响应,你应当以一个用户消息结束,表示助手回答的时间。你还可以在用户和助手之间添加一系列示例消息,作为一种进行少许训练的方式。
### 示例
以下示例展现了可以在GPT⑶5-Turbo和GPT⑷模型中使用的不一样式的提示。这些示例只是一个出发点,你可以尝试区别的提示来定制自己的使用情况。
– 基本示例:如果你希望GPT⑶5-Turbo模型的行动与chat.openai.com类似,你可使用一个基本的系统消息,如 “Assistant is a large language model trained by OpenAI.”:
“`python
{ “role”: “system”, “content”: “Assistant is a large language model trained by OpenAI.” },
{ “role”: “user”, “content”: “Who were the founders of Microsoft?” }
“`
– 包括唆使的示例:对某些场景,你可能希望为模型提供额外的唆使,以定义模型的能力范围。
“`python
{ “role”: “system”, “content”: “Assistant is an intelligent chatbot designed to help users answer their tax related questions. Instructions: – Only answer questions related to taxes. – If you’re unsure of an answer, you can say ‘I don’t know’ or ‘I’m not sure’ and recommend users go to the IRS website for more information.” },
{ “role”: “user”, “content”: “When are my taxes due?” }
“`
– 使用数据进行语境设置:你还可以在系统消息中包括相关的数据或信息,以便为对话提供额外的上下文。如果只需要包括少许信息,可以将其硬编码到系统消息中。如果你有大量的数据需要模型了解,可使用嵌入或Azure Cognitive Search等产品在查询时检索最相关的信息。
“`python
{ “role”: “system”, “content”: “Assistant is an intelligent chatbot designed to help users answer technical questions about Azure OpenAI Serivce. Only answer questions using the context below and if you’re not sure of an answer, you can say ‘I don’t know’. Context: – Azure OpenAI Service provides REST API access to OpenAI’s powerful language models including the GPT⑶, Codex and Embeddings model series. – Azure OpenAI Service gives customers advanced language AI with OpenAI GPT⑶, Codex, and DALL-E models with the security and enterprise promise of Azure. Azure OpenAI co-develops the APIs with OpenAI, ensuring compatibility and a smooth transition from one to the other. – At Microsoft, we’re committed to the advancement of AI driven by principles that put people first. Microsoft has made significant investments to help guard against abuse and unintended harm, which includes requiring applicants to show well-defined use cases, incorporating Microsoft’s principles for responsible AI use.” },
{ “role”: “user”, “content”: “What is Azure OpenAI Service?” }
“`
### 利用Chat Completion进行非对话场景
Chat Completion API设计用于多轮对话,但在非对话场景下也能够很好地工作。例如,对一个实体抽取场景,你可使用以下提示:
“`python
{ “role”: “system”, “content”: “You are an assistant designed to extract entities from text. Users will paste in a string of text and you will respond with entities you’ve extracted from the text as a JSON object. Here’s an example of your output format: { “name”: “”, “company”: “”, “phone_number”: “” }” },
{ “role”: “user”, “content”: “Hello. My name is Robert Smith. I’m calling from Contoso Insurance, Delaware. My colleague mentioned that you are interested in learning about our comprehensive benefits policy. Could you give me a call back at (555) 346⑼322 when you get a chance so we can go over the benefits?” }
“`
### 创建对话循环
前面的示例展现了与Chat Completion API进行交互的基本机制。下面的示例演示了怎样创建一个对话循环:
“`python
import os
import openai
openai.api_type = “azure”
openai.api_version = “2023-05⑴5”
openai.api_base = os.getenv(“OPENAI_API_BASE”) # Your Azure OpenAI resource’s endpoint value .
openai.api_key = os.getenv(“OPENAI_API_KEY”)
conversation = [{“role”: “system”, “content”: “You are a helpful assistant.”}]
while True:
user_input = input()
conversation.append({“role”: “user”, “content”: user_input})
response = openai.ChatCompletion.create(
engine=”gpt⑶.5-turbo”, # 你部署GPT⑶5-Turbo或GPT⑷模型时选择的部署名称。
messages=conversation
)
conversation.append({“role”: “assistant”, “content”: response[“choices”][0][“message”][“content”]})
print(“
” + response[‘choices’][0][‘message’][‘content’] + “
”)
“`
当你运行以上代码时,你将得到一个空白的控制台窗口。在窗口中输入你的第一个问题,然后按回车键。一旦返回响应,你可以重复这个进程,不断发问问题。
### 管理对话
前面的示例将一直运行,直到到达模型的令牌限制。每次提出新问题时,对话转录将随着最新问题一起发送,其实不断增长。gpt⑶5-turbo的令牌限制为4096个令牌,而gpt⑷和gpt⑷⑶2k的令牌限制分别为8192和32768个令牌。这些限制包括发送的消息列表的令牌计数和模型响应的令牌计数。消息列表的令牌数加上max_tokens参数的值一定要保持在这些限制之下,否则你将收到一个毛病。你需要确保提示和完成在令牌限制内。这意味着对较长的对话,你需要追踪令牌计数,并仅发送落入限制范围内的提示给模型。
请注意,即便发现可以超越限制,我们强烈建议始终保持在文档中记录的输入令牌限制范围内。
以下代码示例展现了一个简单的对话循环示例,通过一种处理4096个令牌数的技术来处理。
“`python
import tiktoken
import openai
import os
# Your Azure OpenAI resource’s endpoint value .
openai.api_base = os.getenv(“OPENAI_API_BASE”)
openai.api_key = os.getenv(“OPENAI_API_KEY”)
# Your Azure OpenAI resource’s endpoint value .
openai.api_type = ‘azure’
openai.api_version = ‘2023-05⑴5’
system_message = {“role”: “system”, “content”: “You are a helpful assistant.”}
max_response_tokens = 250
token_limit = 4096
conversation = []
conversation.append(system_message)
def num_tokens_from_messages(messages):
encoding = tiktoken.get_encoding(“cl100k_base”) # model to encoding mapping
num_tokens = 0
for message in messages:
num_tokens += 4 # every message follows
for key, value in message.items():
num_tokens += len(encoding.encode(value))
if key == “name”: # if there’s a name, the role is omitted
num_tokens += ⑴ # role is always required and always 1 token
num_tokens += 2 # every reply is primed with
return num_tokens
while True:
user_input = input(“”)
conversation.append({“role”: “user”, “content”: user_input})
conv_history_tokens = num_tokens_from_messages(conversation)
while conv_history_tokens + max_response_tokens >= token_limit:
del conversation[1]
conv_history_tokens = num_tokens_from_messages(conversation)
response = openai.ChatCompletion.create(
engine=”gpt⑶5-turbo”, # 你部署GPT⑶5-Turbo或GPT⑷模型时选择的部署名称。
messages=conversation,
temperature=0.7,
max_tokens=max_response_tokens,
)
conversation.append({“role”: “assistant”, “content”: response[‘choices’][0][‘message’][‘content’]})
print(“
” + response[‘choices’][0][‘message’][‘content’] + “
”)
“`
在上面的示例中,一旦到达令牌计数,对话转录中最早的消息将被删除。为了提高效力,使用del关键字而不是pop()方法,我们从索引1开始,以便只保存系统消息并删除用户/助手消息。
随着时间的推移,这类管理对话的方法可能会致使对话的质量降落,由于模型会渐渐失去之前对话部份的上下文。另外一种方法是将对话延续时间限制为最大令牌长度或一定数量的回合。一旦到达最大令牌限制并且如果你允许对话继续,模型将丢失上下文,你可以提示用户需要开始一个新对话并清除消息列表以开始全新的对话,并使用完全的令牌限制。
## 下一步
– 了解更多关于Azure OpenAI的信息。
– 使用GPT⑶5-Turbo快速入门来开始使用GPT⑶5-Turbo模型。
– 查看Azure OpenAI样例的GitHub存储库,获得更多示例。
openai openai.chatcompletion.create的常见问答Q&A
问题1:怎样在Python中使用OpenAI的Chat Completion API?
答案:要在Python中使用OpenAI的Chat Completion API,可以依照以下步骤进行操作:
- 首先,需要安装OpenAI的官方Python库。你可使用pip命令来安装它,比如:pip install openai。
- 导入openai库,然后使用你的OpenAI密钥进行身份验证。你可使用openai模块的authenticate()函数来完成这一步骤。
- 接下来,创建一个Python函数来调用openai.ChatCompletion.create()方法,该方法可以将你的消息作为参数传入。你可以定义这个函数来接受一个字符串类型的消息参数,并在函数内部调用openai.ChatCompletion.create()方法来处理该消息。
- 最后,可以在你的代码中调用这个函数,并传入你要处理的消息。openai.ChatCompletion.create()方法将返回一个包括模型的响应。你可以根据需要进一步处理这个响应。