前期调试
部署
我会通过阿里云百炼平台提供的免费试用额度来进行学习:
首先要通过代码吊桶阿里云百炼平台大模型,主要动作
- 在阿里云中创建好自己的apikey
- 在电脑中安装好openai库
- 复制官网示例代码并执行(可在代码中替换需要调用的模型)
使用环境变量保护APIKEY
代码中api如果是明文显示在代码中的,是有很大安全隐患的。我们可以通过环境变量来隐藏明文APIKEY
我们可以通过openai库来记录APIKEY或者langchain库。
在Windows中进行配置
打开高级系统设置,在系统属性,高级,环境变量中的用户变量下新建变量,变量名为OPENAI_API_KEY和DASHSCOPE_API_KEY,变量值就是自己的APIKEY的值。在配置好之后呢需要重启电脑,打开自己复制来的官网示例代码,删掉或者注释掉APIKEY一行,运行代码观察是否可以在无APIKEY的情况下运行。
在mac系统中配置
打开终端软件,输入命令
在新窗口的空白部分输入
1
2
| export OPENAI_API_KEY="修改为你自己的APIKEY"
export DASHSCOPE_API_KEY="修改为你自己的APIKEY"
|
保存,重启编译器或者重启电脑。将apikey代码行删掉观察能否运行。
ollama简介
为避免阿里云免费到期或者免费活动停止,可以通过ollama在本地部署一个模型供代码调用。
ollama:是一款旨在简化大型语言模型本地不是和运行过程的开源软件。
在ollama官网中可以下载大部分模型,对外提供接口,如命令行和Restful Api接口等。
ollama的部署
Windows系统
在官方网站点击Download按钮下载安装。
安装完成后,通过命令
即可运行对应的模型,并在命令行内做交互。
由于个人电脑的性能不高,所以我们一般选择蒸馏模型(简单理解为瘦身版),可以在网上查找,对比自己的显卡类型来调整参数量。
mac系统
同样在官方文件下载……
代码调用ollama的本地模型
只要在阿里云给自己的示例代码中稍加改动
- 将base_url改为:http://localhost:11434/v1
- 将model改为对应本地模型名称,如:qwen3:4b
之后再调试运行即可。
openai库的基础使用
01
什么是OpenAI
openai库是openAI官方推出的Python SDK,核心作用是让开发者能简单,高效地调用OpenAI的各类API,无需手动处理HTTP请求,身份验证等底层细节。
其发布较早且易于使用,现如今很多模型服务商都兼容OpenAI SDK的使用。
对OpenAI库的使用分为三个流程,分别为
获取客户端对象
1
2
3
4
5
6
7
| from openai import OpenAI
client:OpenAI = OpenAI{
api_key=""
base_url=""
}
|
主要是用如上两个参数:
- api_key:模型服务商提供的APIKEY密钥
- base_url:模型服务商的API接入地址
- 主要基于此参数来切换不同的模型服务商(如OpenAI、阿里云、腾讯云等)。
调用模型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| from openai.types.chat.chat_completion import ChatCompletion
response:ChatCompletion - client.chat.completions.create(
model="qwen3_max",
messages=[
{"role":"system","content":"你是一个ai。"},
{"role":"assistant","content":"我是ai,请问有什么可以帮助你的吗?"},
{"role":"user","content":"for循环输出1-5的数字"},
]
)
|
client.chat.completions.create 创建ChatCompletion对象
主要参数有两个:
- model:选择所用模型
- messages:提供给模型的信息
- 类型:list,可以包含多个字典消息
- 每个字典消息包含2个key
- system角色:设定助手的整体行为、角色和规则,为对话提供上下文框架,是全局的背景设定,影响后续所有交互
- assistant角色 :代表AI助手的回答,可以在代码中认为设定
- user角色: 代表用户有,发送问题、指令或需求
处理结果
response变量就是ChatCompletion对象,其包含信息如下所示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| {
"id":"chatcmpl-xxxx",
"object":"chat.completion",
"created":"1735689600",
"model":"gpt-3.5-turbo-0125",
"choices":[
{
"index": 0,
"message":{
"role": "assistant",
"content":"生成回复的内容"
},
"finish_reason": "stop" # stop=正常结束,length=令牌数超限,function_call=触发函数调用
}
],
"usage":{ #令牌消耗统计
"prompt_tokens":50,
"completion_tokens":80,
"total_tokens":130
}
}
|
可以通过print(response.choices[0].message.contene)输出模型给出的回答信息
尝试编写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| from openai import OpenAI
# 1.获取client对象,openai类对象
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 2.调用模型
response = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role":"system","content":"你是一个Python专家,并且不说废话简单回答"},
{"role": "assistant", "content": "好的,我是Python编程专家,并且话不多,你要问什么?"},
{"role": "user", "content": "输出1-10的数字,使用python代码"},
]
)
# 3.输出结果
print(response.choices[0].message.content)
|
02
openai库的流式输出
可以设定结果输出为Stream(流式输出),以获取更好的使用体验。
开启流式输出主要就两步
- 在client.chat.completions.create()调用模型的时候设定参数:stream=True。
- for循环response对象,并在循环内输出内容。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| from openai import OpenAI
# 1.获取client对象,openai类对象
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 2.调用模型
response = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role":"system","content":"你是一个Python专家,并且话非常多"},
{"role": "assistant", "content": "好的,我是Python编程专家,并且话不多,你要问什么?"},
{"role": "user", "content": "输出1-10的数字,使用python代码"},
],
stream = True # 开启流式输出功能
)
# 3.输出结果
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content,
end=" ",
flush=True # 立刻刷新缓冲区
)
|
03
openai库附带历史消息调用模型
调用模型传入的参数messages,其要求是list对象,即表明其支持非常多的消息在内。
我们可以基于此,将历史消息填入,让模型知晓对话的上下文,更好的回答。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| from openai import OpenAI
# 1.获取client对象,openai类对象
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
# 2.调用模型
response = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role":"system","content":"你是一个ai助理,且回答很简洁"},
{"role": "assistant", "content": "好的,我是ai助理,并且话不多,你要问什么?"},
{"role": "user", "content": "小明有两条宠物狗"},
{"role": "assistant", "content": "好的"},
{"role": "user", "content": "小红有三只宠物猫"},
{"role": "assistant", "content": "好的"},
{"role": "user", "content": "总共有几个宠物"},
],
stream = True # 开启流式输出功能
)
# 3.输出结果
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content,
end=" ",
flush=True # 立刻刷新缓冲区
)
|
ps :当前的历史消息是一次性的,如果是生产系统可以将消息保存到文件,数据库等持久化工具内,需要的时候提取使用
后续学习LangChain库,会学习短期记忆和长期记忆的使用方法。