昇腾社区首页
中文
注册
基于香橙派AIpro+MindSpore实现Qwen聊天机器人

基于香橙派AIpro+MindSpore实现Qwen聊天机器人

香橙派AIpro

发表于 2025/04/24

基于香橙派AIpro+MindSpore实现Qwen聊天机器人

01引言

通义千问Qwen是阿里云自主研发的大语言模型,Qwen-1.5-0.5B 为其轻量版,拥有5亿参数,具备低成本和高效文本生成能力。适用于文字创作、文本处理、编程辅助、翻译服务和对话模拟等场景。

在本次任务中,我们将基于昇思MindSpore在香橙派开发板上运行通义千问Qwen-1.5-0.5B模型,体验和模型的对话互动,完成和聊天机器人对话。

02环境准备

开发者拿到香橙派开发板后,首先需要进行硬件资源确认,镜像烧录及 CANN 和 MindSpore 版本的升级,才可运行该案例,具体如下:

  • 硬件:香橙派 AIpro 16G 8-12T 开发板
  • 镜像:香橙派官网 Ubuntu 镜像
  • CANN:8.0.RC3.alpha002
  • MindSpore:2.4.10

1、镜像烧录

运行该案例需要烧录香橙派官网 Ubuntu 镜像,烧录流程参考 昇思 MindSpore 官网--香橙派开发专区--环境搭建指南--镜像烧录 章节。注意官网链接示例镜像与本案例镜像有所区别,以本案例要求为准,注意区分。

2、CANN 升级

CANN 升级参考 昇思 MindSpore 官网--香橙派开发专区--环境搭建指南--CANN 升级 章节。本案例的 CANN 版本要求是 8.0.RC3.alpha002,注意官网链接示例升级版本与本案例所需版本有所区别,以本案例要求为准,注意区分。

3、MindSpore 升级

MindSpore 升级参考 昇思 MindSpore 官网--香橙派开发专区--环境搭建指南--MindSpore 升级 章节。本案例的 MindSpore 版本要求是 2.4.10,注意官网链接示例升级版本与本案例所需版本有所区别,以本案例要求为准,注意区分。

03实验过程

1、权重加载

使用mindnlp套件加载Qwen/Qwen1.5-0.5B-Chat模型权重,该套件包含了许多自然语言处理的常用方法,可以方便地加载和使用huggingface的模型权重。注意,首次运行时请耐心等待模型下载。

(1)mindnlp安装

!pip install mindnlp

(2)下载模型

import mindspore
from mindnlp.transformers import AutoModelForCausalLM, AutoTokenizer
    
# Loading the tokenizer and model from Hugging Face's model hub.
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-0.5B-Chat", ms_dtype=mindspore.float16)
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen1.5-0.5B-Chat", ms_dtype=mindspore.float16)

2、模型推理

模型加载完成后定义聊天机器人所需处理的事务:加载与处理聊天历史,转换成适合模型输入的格式;并通过流式生成器的推理模式逐步生成聊天机器人的回复。

from mindnlp.transformers import TextIteratorStreamer
from threading import Thread
    
system_prompt = "You are a helpful and friendly chatbot"
    
def build_input_from_chat_history(chat_history, msg: str):
     messages = [{'role': 'system', 'content': system_prompt}]
     for user_msg, ai_msg in chat_history:
          messages.append({'role': 'user', 'content': user_msg})
          messages.append({'role': 'assistant', 'content': ai_msg})
     messages.append({'role': 'user', 'content': msg})
     return messages
    
# Function to generate model predictions.
def predict(message, history):
    # Formatting the input for the model.
    messages = build_input_from_chat_history(history, message)
    input_ids = tokenizer.apply_chat_template(
                messages,
                add_generation_prompt=True,
                return_tensors="ms",
                tokenize=True
               )
    streamer = TextIteratorStreamer(tokenizer, timeout=300, skip_prompt=True, skip_special_tokens=True)
    generate_kwargs = dict(
            input_ids=input_ids,
            streamer=streamer,
            max_new_tokens=1024,
            do_sample=True,
            top_p=0.9,
            temperature=0.1,
            num_beams=1,
            )
    t = Thread(target=model.generate, kwargs=generate_kwargs)
    t.start()  # Starting the generation in a separate thread.
    partial_message = ""
    for new_token in streamer:
        partial_message += new_token
        if '</s>' in partial_message:  # Breaking the loop if the stop token is generated.
             break
        yield partial_message

3、启动聊天机器人

下面我们将启动一个基于Gradio的聊天界面,用于与聊天机器人进行交互。在浏览器中打开链接 http://127.0.0.1:7860/,开始与聊天机器人的交互。您可以在页面下方的消息输入框中输入任何问题,或者点击页面下方 Examples 中预设的问题,然后点击 Submit 按钮与聊天机器人进行对话。注意,第一次回答需要较长时间的加载(约1~2分钟),请耐心等待。

04实验视频

本实验配套视频,供参考学习。


05实验总结

本实验在OrangePi AIpro开发板上基于MindSpore框架实现Qwen-1.5-0.5B模型,体验和模型的对话互动,完成和聊天机器人对话。通过本案例的学习,您可以掌握香橙派AIpro开发板的使用及Qwen模型在开发板部署的流程。

本页内容