Api调用大模型(实用)
API接口调用大模型
在大模型 API 调用中,除了框架封装,直接使用官方库能更直观地理解调用逻辑。本文将完全基于openai
官方库,带你从初始化到实战,掌握大模型 API 调用的核心方法。
获取API密钥,去对应官网注册获取。比如硅基流动
在模型广场可以去看免费的:首页 · 魔搭社区
一、准备工作:环境与依赖
直接使用openai
库调用 API,需先完成基础配置:
-
安装官方库:使用最新版本的库(v1 + 版本),支持所有主流大模型 API 格式(包括兼容 OpenAI 接口的平台如 SiliconFlow):
bashpip install openai
-
获取 API 密钥:在目标平台(如你使用的 SiliconFlow)注册账号,创建 API 密钥并妥善保存(后续用于身份验证)。
二、核心步骤:用 OpenAI 库初始化与调用大模型
以你提供的模型配置为例,我们从初始化开始,逐步实现完整调用流程。
步骤 1:初始化客户端
openai
库通过OpenAI
类创建客户端实例,需指定 API 密钥、接口地址和默认模型(可选)。对应你提供的配置,代码如下:
python
import openai
import os
# 初始化客户端(推荐通过环境变量管理密钥,避免硬编码)
client = openai.OpenAI(
api_key=os.getenv("OPENAI_API_KEY") or "*********************************", # API密钥
base_url="https://api.siliconflow.cn/v1", # 接口基础地址(SiliconFlow平台)
)
# 定义要调用的模型(你选择的Qwen2.5-7B-Instruct)
MODEL = "Qwen/Qwen2.5-7B-Instruct"
api_key
:平台验证密钥,实际开发中强烈建议通过环境变量(如os.getenv("OPENAI_API_KEY")
)传入,避免代码泄露;base_url
:指定 API 接口地址。由于 SiliconFlow 兼容 OpenAI API 格式,因此通过该参数可直接对接其服务;MODEL
:显式定义模型名称,后续调用时直接引用,方便切换不同模型(如后续测试其他模型只需修改此处)。
步骤 2:基础调用:发送消息并获取响应
大模型 API 的核心是通过 "消息列表" 传递对话内容,消息需包含角色
(system
/user
/assistant
)和内容
(content
)。使用client.chat.completions.create
方法调用模型:
python
# 构建对话消息(遵循OpenAI API消息格式)
messages = [
{"role": "system", "content": "你是一个专业的技术助手,用简洁的语言解释技术问题。"}, # 系统提示:定义模型角色
{"role": "user", "content": "请说明大模型API调用的基本流程。"} # 用户提问
]
# 调用模型(同步获取完整响应)
response = client.chat.completions.create(
model=MODEL, # 指定模型
messages=messages, # 对话消息列表
temperature=0.7 # 控制回答随机性(0-1,值越低越稳定)
)
# 提取回答内容
answer = response.choices[0].message.content
print("模型回答:\n", answer)
- 消息结构 :
system
消息用于设定模型行为(如 "专业技术助手"),user
消息是用户输入,assistant
消息可用于多轮对话中传递历史回答; temperature
参数:调节回答的创造性,0 表示确定性回答,1 表示更灵活发散的回答;- 响应解析 :
response.choices[0].message.content
是模型返回的核心回答文本。
步骤 3:多轮对话:保留上下文
实现多轮对话需在消息列表中追加历史对话记录,让模型感知上下文:
python
import openai
import os
# 初始化客户端(推荐通过环境变量管理密钥,避免硬编码)
client = openai.OpenAI(
api_key=os.getenv("OPENAI_API_KEY") or "*********************************", # API密钥
base_url="https://api.siliconflow.cn/v1", # 接口基础地址(SiliconFlow平台)
)
# 定义要调用的模型(你选择的Qwen2.5-7B-Instruct)
MODEL = "Qwen/Qwen2.5-7B-Instruct"
# 初始化消息列表(包含系统提示)
messages = [
{"role": "system", "content": "你是一个记忆型助手,记得历史对话内容。"}
]
# 模拟多轮对话
while True:
# 获取用户输入
user_input = input("请提问(输入q退出):")
if user_input.lower() == "q":
break
# 追加用户消息到列表
messages.append({"role": "user", "content": user_input})
# 调用模型
response = client.chat.completions.create(
model=MODEL,
messages=messages
)
# 提取回答并追加到消息列表(用于下一轮上下文)
assistant_answer = response.choices[0].message.content
messages.append({"role": "assistant", "content": assistant_answer})
# 输出回答
print(f"回答:{assistant_answer}\n")
通过保留messages
列表中的所有历史消息(用户和助手的对话),模型能理解上下文,实现连贯的多轮交互。
步骤 4:流式调用:实时展示回答过程
如果需要像聊天软件一样实时输出回答(如 "打字效果"),可使用流式调用,通过stream=True
参数实现:
python
import openai
import os
# 初始化客户端(推荐通过环境变量管理密钥,避免硬编码)
client = openai.OpenAI(
api_key=os.getenv("OPENAI_API_KEY") or "*********************************", # API密钥
base_url="https://api.siliconflow.cn/v1", # 接口基础地址(SiliconFlow平台)
)
# 定义要调用的模型(你选择的Qwen2.5-7B-Instruct)
MODEL = "Qwen/Qwen2.5-7B-Instruct"
# 构建消息
messages = [
{"role": "system", "content": "你是一个聊天助手,回答简洁友好。"},
{"role": "user", "content": "请介绍一下流式调用的作用。"}
]
# 流式调用模型
print("模型回答:", end="")
stream = client.chat.completions.create(
model=MODEL,
messages=messages,
stream=True # 开启流式返回
)
# 逐段输出流式结果
for chunk in stream:
# 过滤空内容(避免输出空字符)
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
流式调用会将回答按片段(chunk
)返回,每收到一个片段就即时输出,适合需要实时反馈的场景(如网页聊天、APP 交互)。
三、多个参数值以及含义
1. temperature
:控制回答的随机性(最常用)
-
作用:调节模型输出的创造性 / 确定性,值越高,回答越发散;值越低,回答越稳定。
-
取值范围:0~2(默认 1.0)
-
极端情况:
temperature=0
:输出几乎固定(相同输入大概率得到相同结果);temperature=2
:输出高度随机(可能出现逻辑跳跃)。
python# 示例:不同temperature对比 response_stable = client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": "什么是人工智能?"}], temperature=0.1 # 低随机性:回答更标准、稳定 ) response_creative = client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": "什么是人工智能?"}], temperature=1.5 # 高随机性:回答更灵活、多样 )
2.
top_p
:控制回答的多样性(与 temperature 二选一)- 作用:通过 "累积概率" 筛选候选词,值越小,模型选择的范围越窄(更集中)。
- 取值范围:0~1(默认 1.0)
- 特点 :与
temperature
都是控制多样性,但逻辑不同。通常建议固定一个参数调整(如用temperature
就不调top_p
)。
python# 示例:限制回答多样性(聚焦高概率词汇) response = client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": "推荐一部科幻电影"}], top_p=0.3 # 仅从概率前30%的候选词中选择,回答更集中 )
3.
max_tokens
:限制回答的最大长度- 作用:控制模型生成的 token 数量上限(1 个汉字≈1 个 token,1 个英文单词≈1-2 个 token)。
- 注意:若输入消息 + 生成回答的总 token 超过模型上限(如 Qwen2.5-7B 通常支持 8k~32k),会触发错误。
python# 示例:限制回答不超过100个token(约50-80字) response = client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": "详细介绍一下大模型"}], max_tokens=100 # 强制截断过长回答 )
4.
stop
:设置回答的停止符- 作用:当模型生成指定字符 / 字符串时,立即停止输出。
- 适用场景:固定格式输出(如生成 JSON 后自动停止)、避免冗余内容。
python# 示例:遇到"总结完毕"时停止回答 response = client.chat.completions.create( model=MODEL, messages=[{"role": "user", "content": "总结Python的特点"}], stop=["总结完毕"] # 生成到该短语时停止 )
看到这里,我想你已经具备了通过Api调用大模型的能力了。