使用Python免费调用通义千问大模型

Qwen-72b开源模型

        模型的主要用途是预测或描述一个系统或现象的行为模式。它可以帮助人们更好地理解这个系统或现象,例如预测股市变化、天气预报、地震预警、交通流量等。模型也常用于设计和优化产品和工艺。在科学研究中,模型也是一种方法,用于测试和验证理论。总之,模型是一个用于描述和预测现实世界的简化表示。

        最近,阿里云的通义千问Qwen-72b大模型宣布开源了!现可以在魔撘社区(点击跳转)免费体验,也可通过官方限时免费开放的api使用。本文就将讲解如何使用官方api


前提条件

1.需要注册阿里云(点我跳转)账号

注册

2.开通DashScope(点我跳转)并创建API-KEY

创建后点击API-KEY管理

使用Python免费调用通义千问大模型_第1张图片创建新的API_KEY(一定记住且不要随意给别人)

搭建Python(3.7及以上版本)环境并安装DashScope SDK 

搭建Python环境这里忽略,搭建好环境后安装

pip install dashscope

使用dashscope调用api

设置API-KEY

设置API_KET的方法有很多种,这里只讲python代码中添加

import random
from http import HTTPStatus

import dashscope
from dashscope.api_entities.dashscope_response import Role

dashscope.api_key = "你的api-key"

messages参数讲解(配合下文使用)

# 需要导入from dashscope.api_entities.dashscope_response import Role
{
    "role": Role.USER,    # 此处是 'user',代表着用户
     "content": "content"    # 此处用户输入的内容
}

{
    "role": Role.SYSTEM    # 此处是 'system',代表着是此次对话的标题(用过chatgpt的应该了解)
    "content": "content"    # 此处是对话的第一句话也是标题。
}

{
    "role": Role.ASSISTANT    # 此处是 'assistant',代表着机器人(api)
    "content": "content"    # 机器人的输出
}

# 这些都用一个列表存储在一起
# 因此,我们可以通过这种方式存储对话的缓存,也可以自定义对话内容。

简单调用

def call_with_messages(content: str):
    messages = [
        {'role': 'user', 'content': content}]
    response = dashscope.Generation.call(
        'qwen-72b-chat',    # 采用模型
        messages=messages,    # 信息列表
        result_format='message',    # 设置格式为message
    )
    if response.status_code == HTTPStatus.OK:
        return response.output.choices[0]['message']['content']
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))


while True:
    content = input("user>")
    print(call_with_messages(content))

这就是最简单的调用,但是没有缓存缓存记录。

缓存调用

def multi_round_conversation(content: str):
    messages = [
        {'role': Role.SYSTEM, 'content': '我是谁'},
        {'role': Role.USER, 'content': '我是PYmili,你记住了!'},
        {'role': Role.ASSISTANT, 'content': '好的,我记住了!'}
    ]
    response = dashscope.Generation.call(
        'qwen-72b-chat',
        messages=messages,
        # 设置一个种子,并不是必要参数
        seed=random.randint(1, 10000),
        result_format='message',
    )
    if response.status_code == HTTPStatus.OK:
        print(response)
        messages.append(
            {
                'role': response.output.choices[0]['message']['role'],
                 'content': response.output.choices[0]['message']['content']
            }
        )
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))
    messages.append({'role': Role.USER, 'content': content})
    response = dashscope.Generation.call(
        'qwen-72b-chat',
        messages=messages,
        result_format='message'
    )
    if response.status_code == HTTPStatus.OK:
        print(response)
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))
    
    print(messages)

messages中将存放所有对话缓存。

流式调用

def call_stream_with_messages():
    messages = [
        {'role': 'user', 'content': '用c语言写一个插入算法。'}
    ]
    responses = dashscope.Generation.call(
        'qwen-72b-chat',
        messages=messages,
        seed=random.randint(1, 10000),  # set the random seed, optional, default to 1234 if not set
        result_format='message',  # set the result to be "message"  format.
        stream=True,
        output_in_full=True  # get streaming output incrementally
    )
    full_content = ''
    for response in responses:
        if response.status_code == HTTPStatus.OK:
            full_content += response.output.choices[0]['message']['content']
            print(response)
        else:
            print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
                response.request_id, response.status_code,
                response.code, response.message
            ))
    print('Full content: \n' + full_content)

这样将会对于机器人输出长字符串,很好的优化。就可以实现机器人在打字的效果。


官方文档

更详细的内容可以到官网文档(点我跳转)看看 


结束语

好的,这就是本篇文章内容,有问题的话,可以联系我:Q群 706128290

你可能感兴趣的:(人工智能,AI,大模型,python,阿里云,语言模型,ai)