Featured image of post 大模型部署与openAI入门

大模型部署与openAI入门

通过阿里云百炼平台部署大模型并调用API

前期调试

部署

我会通过阿里云百炼平台提供的免费试用额度来进行学习:

首先要通过代码吊桶阿里云百炼平台大模型,主要动作

  • 在阿里云中创建好自己的apikey
  • 在电脑中安装好openai库
  • 复制官网示例代码并执行(可在代码中替换需要调用的模型)

使用环境变量保护APIKEY

代码中api如果是明文显示在代码中的,是有很大安全隐患的。我们可以通过环境变量来隐藏明文APIKEY

我们可以通过openai库来记录APIKEY或者langchain库。

在Windows中进行配置

打开高级系统设置,在系统属性,高级,环境变量中的用户变量下新建变量,变量名为OPENAI_API_KEY和DASHSCOPE_API_KEY,变量值就是自己的APIKEY的值。在配置好之后呢需要重启电脑,打开自己复制来的官网示例代码,删掉或者注释掉APIKEY一行,运行代码观察是否可以在无APIKEY的情况下运行。

在mac系统中配置

打开终端软件,输入命令

1
open .zshrc

在新窗口的空白部分输入

1
2
export OPENAI_API_KEY="修改为你自己的APIKEY"
export DASHSCOPE_API_KEY="修改为你自己的APIKEY"

保存,重启编译器或者重启电脑。将apikey代码行删掉观察能否运行。

ollama简介

为避免阿里云免费到期或者免费活动停止,可以通过ollama在本地部署一个模型供代码调用。

ollama:是一款旨在简化大型语言模型本地不是和运行过程的开源软件。

在ollama官网中可以下载大部分模型,对外提供接口,如命令行和Restful Api接口等。

ollama的部署

Windows系统

在官方网站点击Download按钮下载安装。

安装完成后,通过命令

1
ollama run 模型名称

即可运行对应的模型,并在命令行内做交互。

由于个人电脑的性能不高,所以我们一般选择蒸馏模型(简单理解为瘦身版),可以在网上查找,对比自己的显卡类型来调整参数量。

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
      • role:角色
      • content 内容
  • 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(流式输出),以获取更好的使用体验。 开启流式输出主要就两步

  1. 在client.chat.completions.create()调用模型的时候设定参数:stream=True。
  2. 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库,会学习短期记忆和长期记忆的使用方法。

不嘻嘻
使用 Hugo 构建
主题 Stack 由 Jimmy 设计