基于华为开发者空间-云开发环境,Vanna+MaaS实现自然语言与数据库对话

本案例由开发者:banjin提供

最新案例动态,请查阅《【案例共创】基于华为开发者空间-云开发环境,Vanna+MaaS实现自然语言与数据库对话》。小伙伴快来领取华为开发者空间进行实操吧

一、概述

1. 案例介绍

华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云开发环境、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。

本案例基于华为开发者空间 - 云开发环境 ,使用Vanna结合MaaS实现Vanna在HCE2.0开发环境进行本地部署,构建Text-to-SQL自然语言与数据库对话。

Vanna 是一个开源的 Python 框架,用于基于 SQL 数据库构建、训练和部署 AI SQL 代理。它的核心功能是让用户能够通过自然语言直接与数据库进行交互,而无需编写复杂的 SQL 查询语句。

2. 适用对象

  • 企业
  • 个人开发者
  • 高校学生

3. 案例时间

本案例总时长预计90分钟。

4. 案例流程

说明:

  1. 登录华为开发者空间,创建云开发环境;
  2. 创建隧道A,配置VS Code远程连接,进入云开发环境;
  3. 安装MySQL并创建数据库;
  4. 申请ModelArts Studio(MaaS)免费服务
  5. 安装部署Vanna,创建Vanna工程,配置MaaS与MySQL参数;
  6. 创建隧道B,提供对外访问,浏览器访问Vanna.AI。

5. 资源总览

本案例预计花费0元。

资源名称规格单价(元)时长(分钟)
华为开发者空间 - 云开发环境鲲鹏通用计算增强型 kc1 | 2vCPUs | 4G | HCE免费90

二、基础环境与资源准备

1. 云开发环境

1.1 配置云开发环境

华为开发者空间-云开发环境平台为开发者提供专属云端开发主机,集成主流IDE工具,支持多端访问和API/SDK调用,打造开箱即用的开发环境。

参考案例《开发者空间 - 云开发环境使用指导》中“二、Web端创建和管理云开发环境”章的“1. 进入云开发环境”和“2. 创建云开发环境”,创建配置云开发环境。

本案例参数样例:

参数项样例
环境名称dev
开放端口8084,8089(备),22(默认)
默认账号developer
密码开发者根据需要自行设定。

创建配置完成后,参考案例《开发者空间 - 云开发环境使用指导》的“3. 管理云开发环境”,操作云开发环境开机,开机后状态如下:

1.3 创建隧道

本地PC与云开发环境的互联互通需要配置CLI工具包,因此在开始创建隧道前需要先参考案例《开发者空间 - 云开发环境使用指导》中“三、PC端创建和管理云开发环境”章节的“1. 安装cli工具包”和“2. 配置本地环境”,安装CLI工具包修改系统环境变量配置AK/SK签名认证

在本案例中,需要创建两条隧道:A隧道B隧道

  • A隧道:本地端口使用1234,远端端口使用默认的22端口,该隧道可用于VS Code的SSH插件远程连接云开发环境。
  • B隧道:本地端口使用1233,远端端口使用8084(步骤“1.1 创建云开发环境”中设置的端口号)。创建的的隧道用于云开发环境对外访问的HTTP/HTTPS服务,本案例中用于对外提供Vanna的访问服务。
1.3.1 创建A隧道

在PC本地开始菜单中搜索CMD,打开的命令行窗口,输入如下指令:

hdspace devenv list
hdspace devenv start-tunnel --instance-id={InstanceId}  --local-port=1234

创建完成后的效果如下:

1.3.2 创建B隧道

打开一个新的命令行窗口,输入如下指令:

hdspace devenv start-tunnel --instance-id={InstanceId} --remote-port=8084  --local-port=1233

1.4 创建VS Code远程连接

参考案例《本地VSCode基于华为开发者空间云开发环境完成小程序开发》,创建VS Code与云开发环境远程连接。

VS Code远程连接云开发环境成功后,打开终端:

2. 安装MySQL,创建数据库

2.1 安装MySQL

  1. 本案例在云开发环境root用户下进行,系统默认使用developer用户权限,需要手动切换到root用户权限。VS Code远程连接,进入云开发环境后,在控制台输入如下指令:
sudo su -
  1. /home/developer/目录下创建devsql文件夹,并进入到该文件目录中,然后通过wget命令下载mysql80-community-release-el8-9.noarch.rpm
mkdir /home/developer/devsql
cd /home/developer/devsql
wget https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
  1. 安装MySQL
yum -y install mysql80-community-release-el8-9.noarch.rpm 
yum -y install mysql-community-server
  1. 启动MySQL重置密码
systemctl start mysqld	#启动MySQL
grep 'temporary password' /var/log/mysqld.log	#获取初始密码
mysql -uroot -p	#使用初始密码登录MySQL
alter user 'root'@'localhost' identified by 'your password';	#设置新密码
exit;	#退出MySQL

2.2 创建MySQL数据库

2.2.1 登入数据库

VS Code控制台输入如下指令,然后根据提示输入MySQL安装过程中设置的新密码,进入MySQL。

mysql -uroot -p
2.2.2 创建数据库school,并切换到该数据库,
CREATE DATABASE school DEFAULT CHARACTER SET = 'utf8mb4';
SHOW DATABASES;
USE school;
2.2.3 创建students表,并插入数据
CREATE TABLE students (
    student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID',
    name VARCHAR(50) NOT NULL COMMENT '学生姓名',
    age INT COMMENT '年龄',
    major VARCHAR(100) COMMENT '专业',
    email VARCHAR(100) UNIQUE COMMENT '电子邮件'
);

INSERT INTO students (name, age, major, email) VALUES
('张三', 20, '计算机科学', 'zhangsan@example.com'),
('李四', 21, '电子工程', 'lisi@example.com'),
('王五', 19, '数学', 'wangwu@example.com'),
('赵六', 22, '物理', 'zhaoliu@example.com'),
('钱七', 20, '化学', 'qianqi@example.com'),
('孙八', 21, '生物', 'sunba@example.com'),
('周九', 19, '历史', 'zhoujiu@example.com'),
('吴十', 22, '哲学', 'wushi@example.com'),
('郑十一', 20, '艺术', 'zhengshiyi@example.com'),
('王十二', 21, '音乐', 'wangshier@example.com'),
('陈十三', 19, '体育', 'chenshisan@example.com'),
('冯十四', 22, '英语', 'fengshisi@example.com'),
('董十五', 20, '法语', 'dongshiwu@example.com'),
('萧十六', 21, '德语', 'xiaoshiliu@example.com'),
('曹十七', 19, '日语', 'caoshiqi@example.com'),
('许十八', 22, '韩语', 'xushiba@example.com'),
('蒋十九', 20, '西班牙语', 'jiangshijiu@example.com'),
('沈二十', 21, '意大利语', 'shenshier@example.com'),
('韩二十一', 19, '心理学', 'hanershiyi@example.com'),
('杨二十二', 22, '社会学', 'yangershi@example.com');

查询students表格创建成功:

SHOW TABLES;
2.2.4创建courses表,并插入数据
CREATE TABLE courses (
    course_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '课程ID',
    course_name	 VARCHAR(100) NOT NULL COMMENT '课程名称',
    credits INT COMMENT '学分',
    teacher_id INT COMMENT '教师ID'
);

INSERT INTO courses (course_name, credits, teacher_id) VALUES
('数据结构', 4, 1),
('微积分', 3, 2),
('编程基础', 3, 3),
('物理实验', 2, 4),
('化学原理', 3, 5),
('生物技术', 4, 6),
('历史概论', 2, 7),
('哲学思考', 3, 8);

验证表格创建成功:

DESCRIBE courses;
2.2.5 创建enrollments表,并插入数据
CREATE TABLE enrollments (
    enrollment_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '选课记录ID',
    student_id INT NOT NULL COMMENT '学生ID',
    course_id INT NOT NULL COMMENT '课程ID',
    grade FLOAT COMMENT '成绩'
);

INSERT INTO enrollments (student_id, course_id, grade) VALUES
(1, 1, 85.5),
(2, 2, 90.0),
(3, 3, 78.5),
(4, 4, 82.0),
(5, 5, 88.5),
(6, 6, 75.0),
(7, 7, 80.5),
(8, 8, 87.0),
(9, 1, 81.0),
(10, 2, 85.5),
(11, 3, 79.0),
(12, 4, 83.0),
(13, 5, 86.5),
(14, 6, 77.0),
(15, 7, 82.5),
(16, 8, 88.0),
(17, 1, 84.0),
(18, 2, 87.5),
(19, 3, 80.0),
(20, 4, 85.0),
(21, 5, 83.5),
(22, 6, 78.0),
(23, 7, 81.5),
(24, 8, 86.0),
(25, 1, 82.0),
(26, 2, 84.5),
(27, 3, 79.5),
(28, 4, 83.0),
(29, 5, 86.5),
(30, 6, 77.5);

验证表格创建成功:

SELECT * FROM enrollments;

最后使用exit;命令退出数据库。

3. 登录MaaS平台领取200万免费token

参考案例《基于DeepSeek和Dify构建心理咨询师应用》中的“2.1 免费领取DeepSeek R1满血版”内容领取DeepSeek-V3模型200万免费token。

获取关键数据API地址model参数

获取关键参数API Key

三、Vanna部署

1. 配置python开发环境

云开发环境虚拟机已为开发者预置了python 3.9.9环境,输入以下指令验证环境:

python --version

1.1 设置pip源

pip config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple/
pip config list

1.2 配置python虚拟环境

业务场景的Python开发,多数都是构建一个大型应用程序,并且不希望各种组件的各种版本之间相互冲突,所以需要设置一个虚拟环境。

yum -y update	#更新系统软件包
pip3 install virtualenv       #安装virtualenv
pip3 list | grep virtualenv       #查询virtualenv安装成功
python -m venv myenv          #创建虚拟环境
source myenv/bin/activate       #激活环境

1.3 安装python插件

在VS Code远程连接窗口中,点插件市场,搜索python,然后选中插件,点Install in SSH: 127.0.0.1

2. 安装Vanna

2.1 查看官方文档

登录官网文档:https://vanna.ai/docs/,通过官方文档选配安装方式。

登录官网文档,选择Vector Databases > Quickstart With Your Own Data,进入快速开始选配页面。

  1. 大模型LLM:OpenAI
  1. 数据训练:ChromaDB开源向量数据库
  1. 被检索的数据库类型:MySQL

由此我们获取到Vanna安装、创建、调用、训练等样例代码。下一步我们将先开始安装Vanna。

2.2 安装Vanna

在VS Code控制台,输入如下指令:

pip3 install openai
pip3 install 'vanna[chromadb,openai,mysql]'

3. 创建Vanna工程

3.1 创建工程目录

完成上述步骤后,在VS Code左侧/home/developer文件目录下点New Folder,创建Vanna_mysql目录,并在该目录下点New File,创建main.py

3.2 编写工程代码

创建完成后,参考本章“2.1 查看官方文档”中的内容在main.py文件中编辑工程代码。

3.2.1 初始化Vanna

导入必要的包文件,完成MyVanna初始化,在初始化过程中,完成OpenAI的参数设置。

注:

  • 将“二、基础环境与资源准备”章中“3. 登录MaaS平台领取200万免费token”获取的API KeyAPI地址model参数分别替换代码中的api_keybase_urlmodel参数。
  • base_url参数需要把API地址中的/chat/completions去掉。
from vanna.openai import OpenAI_Chat
from vanna.chromadb import ChromaDB_VectorStore
from openai import OpenAI

class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
    def __init__(self, config=None):
        ChromaDB_VectorStore.__init__(self, config=config)
        
        # 创建自定义的 OpenAI 客户端指向 DeepSeek
        client = OpenAI(
            api_key='nK9HJqSkuVqndXw8jhR9UONEB******4G-E-OucsGca_sQUz336YbzZsBsES1FdJ3xUw',	#注意替换成自己在MaaS平台注册的API Key。
            base_url='https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/271c9332-4aa6-4ff5-95b3-0cf8bd94c394/v1',
        )
        
        OpenAI_Chat.__init__(self, client=client, config=config)

# 初始化
vn = MyVanna(config={
    'model': 'DeepSeek-V3'
})
3.2.2 设置连接MySQL参数
vn.connect_to_mysql(host='localhost', dbname='school', user='root', password='your_password', port=3306)

注:实际操作中注意替换在“二、基础环境与资源准备”章中“2. 安装MySQL,创建数据库”所设置的数据库参数。

3.2.3 训练模型
vn.train(ddl="""
CREATE TABLE school.students (
    student_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '学生ID',
    name VARCHAR(50) NOT NULL COMMENT '学生姓名',
    age INT COMMENT '年龄',
    major VARCHAR(100) COMMENT '专业',
    email VARCHAR(100) UNIQUE COMMENT '电子邮件'
);
CREATE TABLE school.courses (
    course_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '课程ID',
    course_name	 VARCHAR(100) NOT NULL COMMENT '课程名称',
    credits INT COMMENT '学分',
    teacher_id INT COMMENT '教师ID'
);
CREATE TABLE school.enrollments (
    enrollment_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '选课记录ID',
    student_id INT NOT NULL COMMENT '学生ID',
    course_id INT NOT NULL COMMENT '课程ID',
    grade FLOAT COMMENT '成绩'
);
""")
3.2.4 启动Vanna
from vanna.flask import VannaFlaskApp
VannaFlaskApp(vn, allow_llm_to_see_data=True).run()

4. 运行/测试Vanna

在VS Code右上角点运行按钮,日志中输出Your app is running at:http://localhost:8084,程序启动成功。

在PC本地打开浏览器,访问:http://127.0.0.1:1233/,然后对Vanna提问:“每门课程的最高分是多少?”。

Vanna.AI先将语言进行了分析,转化成SQL语句,然后将查询到的数据表格化显示。然后生成图表,并且转化成自然语言进行答复。

最后询问:“结果是否正确?”,我们可以通过按钮Yes, train as Question-SQL pair或者NO回答Vanna.AI。

至此基于华为开发者空间开发平台 - 云开发环境,使用Vanna结合MaaS实现Text-to-SQL自然语言与数据库对话案例结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值