使用 Python接入 OpenAI API,实现简单的对话

利用OpenAI 的API 可以做好多事情,今天就用简单的代码来解密一下,如何使用Python 来对接OpenAI 的API,实现一些简单的文本对话生成的功能,学习完OpenAI的API对接方法,以后遇到其他对话大模型的时候就可以触类旁通了。

前言

参考官方文档:

platform.openai.com/docs/guides…

今天对接文档中的OpenAI的文本生成模型(Text generation models),就是著名的ChatGPT系列。

需要提前安装两个Python第三方包

1
复制代码pip install openai python-dotenv

再新建一个.env文件填写自己的API Key

1
markdown复制代码OPENAI_API_KEY=sk-******************IQV

同目录下新建一个Python文件,最简单的实现方式,核心代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ini复制代码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) # 打印的是一个具体的回复的内容
1
2
python复制代码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格式响应内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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官网的传输

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ini复制代码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中的角色和函数调用,敬请期待~

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%