怎么通过Python使用OpenAI
代码
from openai import OpenAI
# 基本配置
client = OpenAI(
# defaults to os.environ.get("OPENAI_API_KEY")
api_key="还想白嫖啊你",
base_url="https://*********/", # 这里默认使用https://api.openai.com/v1 但是如果使用中转API的话就需要修改url
)
def gpt_stream(messages: list):
# 流式响应
stream = client.chat.completions.create(
model='gpt-3.5-turbo', # 这里可以按照自己需求修改
messages=messages,
stream=True, # 下面有介绍
)
for chunk in stream:
if chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="")
def gpt_nonstream(messages: list):
# 非流式响应
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages
)
print(completion.choices[0].message.content)
if __name__ == '__main__':
# test raid
messages = [{'role': 'user', 'content': 'Hello, LLM'}, ]
gpt_stream(messages) # 使用stream
# gpt_nonstream(messages)# 无 stream
什么是流式?
在不使用stream的ChatCompletions API调用中,响应被计算出来后一次性地返回。
我:你在干嘛?
GPT:我不告诉你
但是流式的方式是(不是很准确,但大概这么理解)
我:你在干嘛?
GPT:我
GPT:不
GPT:告
GPT:诉
GPT:你
所以我们在上面的代码中可以看到流式的代码当中有for循环来迭代。这是因为每一次获得的stream信息是一个字。
为什么用流式(stream=True)?
- 速度快
默认情况下,当请求OpenAI的API时,整个响应将在生成后一次性发送回来。如果需要的响应比较复杂,就会需要很长时间来等待响应。
为了更快地获得响应,可以在请求API时选择“流式传输”。(具体快多少看看别人测评吧) - 节省内存
流式允许逐个读取或写入数据,而不需要一次性将整个数据加载到内存中。这对于处理大型文件或数据集非常有用,因为它可以节省大量的内存资源。