Web学习日志(3)

911 阅读5分钟

百炼支持通过API调用大模型,涵盖OpenAI兼容接口、DashScope SDK等接入方式。 本文以通义千问为例,成大模型API调用。将了解到:

  • 如何获取API Key
  • 如何配置本地开发环境
  • 如何调用通义千问API

通过api调用通义千问大模型

账号设置

  1. 注册账号:如果没有阿里云账号,您需要先注册阿里云账号。

  2. 开通百炼: 前往百炼控制台,如果页面顶部显示以下消息,您需要开通百炼的模型服务,以获得免费额度。如果未显示该消息,则表示已经开通。

    image

  3. 获取API Key: 在控制台的右上角选择API-KEY,然后创建API Key 用于通过API调用大模型。

    image

    配置API Key到环境变量

    如果希望API Key环境变量在当前用户的所有新会话中生效,可以按如下操作。

  4. 在CMD中运行以下命令。

    ** **

    # 用您的 DashScope API Key 代替 YOUR_DASHSCOPE_API_KEY
    setx DASHSCOPE_API_KEY "YOUR_DASHSCOPE_API_KEY"
    
  5. 打开一个新的CMD窗口。

  6. 在新的CMD窗口运行以下命令,检查环境变量是否生效。

    ** **

    echo %DASHSCOPE_API_KEY%
    

    选择开发语言(这里以python为例)

    1. 创建虚拟环境

    可以运行以下命令,创建一个命名为 .venv的虚拟环境:

    ** **

    # 如果运行失败,您可以将python替换成python3再运行
    python -m venv .venv
    
  7. 激活虚拟环境

    如果使用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.pypython3 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数组中,实现多轮对话的功能。多轮对话示例:

image

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")