一、OpenAI库的作用
openai库是我们在本地调用大模型时的桥梁,openai库集成了很多大模型的api,通过大模型服务厂商提供给我们的api key,我们就可以通过openai库来调用大模型。我理解为openai库是一个服务员,open ai库中的api接口是餐口,api key是饭票,大模型厂商是厨师,模型是饭,我们通过服务员点餐附上饭票,服务员将饭票通过出餐口递给厨师,厨师给我们饭。
二、OpenAI库的使用
1.Openai下载:打开anconda prompt ->conda activate agent(你创建的环境名字)激活环境->pip install openai下载库
2.Openai的使用流程:
i:创建客户端对象(OpenAI类对象)
ii:和模型对话,提供system, assistant, user三个角色
system:设定模型的行为和规则
assiatant:设定模型的回答,由用户设定
user:用户的提问
iii:返回处理结果
3.Openai示例代码与注释以通义千问qwen-3.6plus为例:
PS:如果没有配置API KEY需要在client=OpenAI()中添加api key 的值
#通过 OpenAI(basu_url)创建一个客户端对象,将请求发送到阿里云 DashScope 的兼容 OpenAI 格式的端点。
client = OpenAI()
#使用client.chat_completions.create发起一次聊天补全请求,模型为qwen3.6-plus,消息包含 system、assistant、user 三个角色。
response = client.chat.completions.create ()
#打印模型返回的回复内容
print(response.choices[0].message.content)
#print(response.choices[0].message.content)各参数含义
4.Openai库的流式输出
大模型的输出分为两种流式与非流式,流式输出是大模型边想边说,响应较快,用户体验感会更好;非流式输出则是大模型先想好再说,用户等待时间长,用户体验感较差,上述示例代码print(response.choices[0].message.content)就是非流式输出,具体区别如下图。
图源:黑马程序员RAG与Agent实战项目
流式输出的实现,设定结果输出为stream模式(流式输出),在client.chat_completions.create()调用模型设定参数stream=True,for循环response对象,在循环内输出内容,示例代码如下:
for chunk in response:
- 当 stream=True时,client.chat_completions.create() 返回的不是一个完整的响应对象,而是一个可迭代的流式对象。
- 模型会分批返回数据,每批数据就是一个chunk(数据块)。
- 循环遍历这些chunk,每次处理一个块。
content = chunk.choices[0].delta.content:
-
chunk的结构与非流式响应的结构类似,但主要区别在于:
- 非流式:response.choices[0].message.content
- 流式:chunk.choices[0].delta.content
-
delta表示“增量内容”,即当前这一块中新生成的部分(而不是完整消息)。
-
因为模型是一点一点生成文本的,每个chunk只包含一小段新增的文本(可能是一个字、一个词或几个字符)。
-
对于第一个chunk,delta 里可能还包含role,但通常我们只关心content。
if content is not None:
- 某些chunk中delta.content可能为None(比如最后一个chunk可能只包含结束标记finish_reason,没有实际内容)。
- 只有content不为None时才打印,避免输出None字符串或空白。
print(content, end=" ", flush = True):
- printt(content...):打印当前块新增的文本。
- end=" ":不换行,这样多个块的内容会拼接在同一行,实现连贯的输出效果。
- flush=True:立即刷新输出缓冲区,让内容实时显示在终端上(而不是等缓冲区满了或程序结束才显示)。
三、Openai附带历史记录调用模型
这一部分的实现较为简单直接在调用模型 时向messages中传入历史消息即可,这样做可以让大模型根据上下文更好回答用户问题,messages参数的要求是list类型,每个元素是一个字典(包含role和content等字段)具体实例代码如下: