利用OpenAI 的API 可以做好多事情,今天就用简单的代码来解密一下,如何使用Python 来对接OpenAI 的API,实现一些简单的文本对话生成的功能,学习完OpenAI的API对接方法,以后遇到其他对话大模型的时候就可以触类旁通了。
前言
参考官方文档:
platform.openai.com/docs/guides…
今天对接文档中的OpenAI的文本生成模型(Text generation models),就是著名的ChatGPT系列。
需要提前安装两个Python第三方包
pip install openai python-dotenv
再新建一个.env文件填写自己的API Key
OPENAI_API_KEY=sk-******************IQV
同目录下新建一个Python文件,最简单的实现方式,核心代码为:
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
client = OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Who won the world series in 2020?"},
{"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
{"role": "user", "content": "Where was it played?"}
]
)
print(response) # 打印的是一个对象
print(response.choices[0].message.content) # 打印的是一个具体的回复的内容
ChatCompletion(id='chatcmpl-9HtS3CKCgSyOjyxhTfuY8TEjEOUAG', choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='The World Series in 2020 was played at Globe Life Field in Arlington, Texas.', role='assistant', function_call=None, tool_calls=None))], created=1714051759, model='gpt-3.5-turbo-0125', object='chat.completion', system_fingerprint='fp_c2295e73ad', usage=CompletionUsage(completion_tokens=18, prompt_tokens=53, total_tokens=71))
The World Series in 2020 was played at Globe Life Field in Arlington, Texas.
在可以增加model="gpt-3.5-turbo",后增加一行response_format={ "type": "json_object" }, 可以返回json格式响应内容:
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"role": "assistant",
"content": "The World Series in 2020 was played at Globe Life Field in Arlington, Texas."
}
}
],
"created": 1714051759,
"id": "chatcmpl-6p9XYPYSTTRi0xEviKjjilqrWU2Ve",
"model": "gpt-3.5-turbo-0125",
"object": "chat.completion",
"usage": {
"prompt_tokens": 18,
"completion_tokens": 54,
"total_tokens": 72
}
}
OpenAI API 响应可以看作是一个 JSON 对象,包含以下主要字段:
-
choices: 模型生成的回复列表,通常只有一个元素,但可以通过参数
n进行控制。每个元素包含以下信息:-
finish_reason: 回复结束的原因,例如
stop表示模型已经生成完整回复。 -
index: 当前回复在 choices 数组中的索引。
-
message: 回复内容,包含以下两种类型:
-
role = "user": 用户输入的内容。
-
role = "assistant": 模型生成的回复。
- content: 文本内容。
- function_call: 未来可能支持的函数调用,目前保留。
-
-
-
created: 回复生成的时间戳。
-
id: OpenAI 内部使用的标识符。
-
model: 使用的模型名称。
-
object: 固定值为 "chat.completion"。
-
usage: 本次请求消耗的 token 数,用于计费。
-
prompt_tokens: 输入 prompt 中的 token 数。
-
completion_tokens: 模型生成回复中的 token 数。
-
total_tokens: 总 token 数,等于
prompt_tokens+completion_tokens。
-
也可以模仿OpenAI官网的传输
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
client = OpenAI()
stream = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=True,
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
最后
注意的一点的是对接OpenAI的API需要相应的网络环境,下一期会继续研究OpenAI API的其他功能,讲一下API中的角色和函数调用,敬请期待~