百炼支持通过API调用大模型,涵盖OpenAI兼容接口、DashScope SDK等接入方式。 本文以通义千问为例,成大模型API调用。将了解到:
- 如何获取API Key
- 如何配置本地开发环境
- 如何调用通义千问API
通过api调用通义千问大模型
账号设置
-
注册账号:如果没有阿里云账号,您需要先注册阿里云账号。
-
开通百炼: 前往百炼控制台,如果页面顶部显示以下消息,您需要开通百炼的模型服务,以获得免费额度。如果未显示该消息,则表示已经开通。
-
获取API Key: 在控制台的右上角选择API-KEY,然后创建API Key , 用于通过API调用大模型。
配置API Key到环境变量
如果希望API Key环境变量在当前用户的所有新会话中生效,可以按如下操作。
-
在CMD中运行以下命令。
** **
# 用您的 DashScope API Key 代替 YOUR_DASHSCOPE_API_KEY setx DASHSCOPE_API_KEY "YOUR_DASHSCOPE_API_KEY" -
打开一个新的CMD窗口。
-
在新的CMD窗口运行以下命令,检查环境变量是否生效。
** **
echo %DASHSCOPE_API_KEY%选择开发语言(这里以python为例)
- 创建虚拟环境
可以运行以下命令,创建一个命名为 .venv的虚拟环境:
** **
# 如果运行失败,您可以将python替换成python3再运行 python -m venv .venv -
激活虚拟环境
如果使用windows系统,运行以下命令来激活虚拟环境:
** **
.venv\Scripts\activate
安装模型调用SDK
可以通过OpenAI的Python SDK或DashScope的Python SDK来调用百炼平台上的模型。
通过运行以下命令安装OpenAI Python SDK:
** **
pip3 install -U openai
步骤 2:调用大模型API
如果安装完成了Python以及OpenAI的Python SDK,可以参考以下代码发送的API请求。可以新建一个python文件,命名为hello_qwen.py,将以下代码复制到hello_qwen.py中并保存。
import os
from openai import OpenAI
try:
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus", # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}
]
)
print(completion.choices[0].message.content)
except Exception as e:
print(f"错误信息:{e}")
print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
复制完成后,可以通过命令行运行python hello_qwen.py或python3 hello_qwen.py。运行后将会看到输出结果:
我是阿里云开发的一款超大规模语言模型,我叫通义千问。
文本生成
文本生成模型将接收的信息作为提示(Prompt),并返回一个根据提示信息生成的输出。百炼支持 OpenAI SDK、DashScope SDK、HTTP 接入方式。
本文以调用通义千问模型为例,介绍如何使用文本生成模型。使用 OpenAI 接口进行模型调用的完整参数列表参见 OpenAI 兼容 API 参考,DashScope 模型调用的完整参数列表参见DashScope API 参考。
消息类型
您通过API与大模型进行交互时的输入和输出也被称为消息(Message)。每条消息都属于一个角色(Role),角色包括系统(System)、用户(User)和助手(Assistant)。
- 系统消息(System Message,也称为System Prompt):用于告知模型要扮演的角色或行为。例如,您可以让模型扮演一个严谨的科学家等。默认值是“You are a helpful assistant”。您也可以将此类指令放在用户消息中,但放在系统消息中会更有效。
- 用户消息(User Message):您输入给模型的文本。
- 助手消息(Assistant Message):模型的回复。您也可以预先填写助手消息,作为后续助手消息的示例。
- 可以通过OpenAI SDK或OpenAI兼容的HTTP方式调用通义千问模型,体验单轮对话的功能。
完整参数列表参见 OpenAI 兼容 API 参考。
示例代码
** **
import os
from openai import OpenAI
try:
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen-plus",
messages=[
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': '你是谁?'}
]
)
print(completion.choices[0].message.content)
except Exception as e:
print(f"错误信息:{e}")
print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
返回结果
** **
我是来自阿里云的超大规模语言模型,我叫通义千问。
多轮对话
相比于单轮对话,多轮对话可以让大模型参考历史对话信息,更符合日常交流的场景。实现多轮对话的关键在于维护一个存放历史对话信息的数组,并将更新后的数组作为大模型的输入,从而使大模型可以参考历史对话信息进行回复。您可以将每一轮的对话历史添加到messages数组中,实现多轮对话的功能。多轮对话示例:
import os
from openai import OpenAI
def get_response(messages):
client = OpenAI(
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(model="qwen-plus", messages=messages)
return completion
messages = [
{
"role": "system",
"content": """你是一名百炼手机商店的店员,你负责给用户推荐手机。手机有两个参数:屏幕尺寸(包括6.1英寸、6.5英寸、6.7英寸)、分辨率(包括2K、4K)。
你一次只能向用户提问一个参数。如果用户提供的信息不全,你需要反问他,让他提供没有提供的参数。如果参数收集完成,你要说:我已了解您的购买意向,请稍等。""",
}
]
assistant_output = "欢迎光临百炼手机商店,您需要购买什么尺寸的手机呢?"
print(f"模型输出:{assistant_output}\n")
while "我已了解您的购买意向" not in assistant_output:
user_input = input("请输入:")
# 将用户问题信息添加到messages列表中
messages.append({"role": "user", "content": user_input})
assistant_output = get_response(messages).choices[0].message.content
# 将大模型的回复信息添加到messages列表中
messages.append({"role": "assistant", "content": assistant_output})
print(f"模型输出:{assistant_output}")
print("\n")