【大模型】OpenAI库
OpenAI简介
OpenAI库是OpenAI官方推出的Python SDK,作用是可以更简单高效的调用OpenAI的各类API,不需要手动处理HTTP请求、身份验证等细节。现有各个大模型服务商都兼容了OpenAI SDK的调用。
OpenAI 流程
OpenAI流程-获取客户端对象
from openai import OpenAI
client: OpenAI = OpenAI(
api_key="your_api_key_here",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
主要是用如上2个参数:
api_key:模型服务商提供的APIKEY密钥
base_url:模型服务商的API接入地址
主要基于此参数来切换不同的模型服务商(如OpenAI、阿里云、腾讯云等)
OpenAI流程-调用模型
from openai.types.chat.chat_completion import ChatCompletion
response: ChatCompletion = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role": "system", "content": "你是一个Python编程专家。"},
{"role": "assistant", "content": "我是一个Python编程专家。请问有什么可以帮助您的吗?"},
{"role": "user", "content": "for循环输出1到5的数字"}
]
)
client.chat.completions.create创建ChatCompletion对象
主要参数有2个:
model:选择所用模型,如代码的qwen3-max
messages:提供给模型的消息
类型:list,可以包含多个字典消息
每个字典消息包含2个key
role:角色
content:内容
system角色:设定助手的整体行为、角色和规则,为对话提供上下文框架(如指定助手身份、回答风格、核心要求),是全局的背景设定,影响后续所有交互。
assistant角色:代表 AI 助手的回答,可以在代码中认为设定。【few-shot learning中,作为引导使用】
user角色:代表用户,发送问题、指令或需求。
OpenAI流程-处理结果
{
"id": "chatcmpl-xxxx",
"object": "chat.completion",
"created": "1735689600",
"model": "gpt-3.5-turbo-0125",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "生成的回复内容"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 50,
"completion_tokens": 80,
"total_tokens": 130
}
}
通过
print(response.choices[0].message.content)
获取到模型给出的回答信息。
普通输出和流式输出
如果等待大模型完整的输出全部回答再做输出的话,就是普通输出,也就是上面的例子。但是一般在使用大模型时,用户希望可以直接拿到响应,而不是等待大模型的完整回答,这里就需要使用到流式输出。
流式输出首先需要在调用模型的入参中给到相应配置。
也就是在create函数中:
from openai.types.chat.chat_completion import ChatCompletion
response: ChatCompletion = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role": "system", "content": "你是一个Python编程专家。"},
{"role": "assistant", "content": "我是一个Python编程专家。请问有什么可以帮助您的吗?"},
{"role": "user", "content": "for循环输出1到5的数字"}
],
stream=True
)
那么处理结果也需要做对应处理:
for chunk in resp:
print(chunk.choices[0].delta.content,end="",flush=True)
上述中,end表示一次输出后用什么做分割,默认是回车。之后flush表示立即刷新。
OpenAI附带历史消息
调用模型传入的参数message是一个List对象,那么就表明其支持非常多的消息。所以我们可以将历史消息填入,让模型知晓对话上下文,从而更好的回答提出的问题。
import os
from openai import OpenAI
# 获取client对象,OpenAI类对象
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 调用模型
resp = client.chat.completions.create(
model="deepseek-v3",
messages=[
{"role": "system", "content": "你是一个AI助理,回答很简洁。"},
{"role": "user", "content": "小明有两只宠物狗。"},
{"role": "assistant", "content": "好的,"},
{"role": "user", "content": "小红有三只宠物猫。"},
{"role": "assistant", "content": "好的,"},
{"role": "user", "content": "请问总共有多少只宠物?"},
],
stream=True
)
for chunk in resp:
print(chunk.choices[0].delta.content, end="", flush=True)
这样就可将历史消息封装到message中。
但当前的历史消息是一次性的,如果生产系统可以将消息保存到文件、数据库等持久化工具内。或者使用LangChain库,使用其短期记忆和长期记忆的功能。
更多推荐
所有评论(0)