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

B站影视 内地电影 2025-10-27 15:05 2

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

本案例由开发者:banjin提供

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

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

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

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

说明:

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

本案例预计花费0元。

资源名称规格单价(元)时长(分钟)

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

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

本案例参数样例:

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

创建配置完成后,参考案例《开发者空间 - 云开发环境使用指导》的“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的访问服务。

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

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

创建完成后的效果如下:

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

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

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

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

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

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

mysql -uroot -pCREATE DATABASE school DEFAULT CHARACTER SET = 'utf8mb4';SHOW DATABASES;USE school;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表格创建成功:

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;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;命令退出数据库。

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

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

获取关键参数API Key

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

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

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

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

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

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

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

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

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

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

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

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

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

注:

将“二、基础环境与资源准备”章中“3. 登录MaaS平台领取200万免费token”获取的API KeyAPI地址model参数分别替换代码中的api_key、base_url和model参数。base_url参数需要把API地址中的/chat/completions去掉。from vanna.openai import OpenAI_Chatfrom vanna.chromadb import ChromaDB_VectorStorefrom openai import OpenAIclass 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'})vn.connect_to_mysql(host='localhost', dbname='school', user='root', password='your_password', port=3306)

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

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 '成绩');""")from vanna.flask import VannaFlaskAppVannaFlaskApp(vn, allow_llm_to_see_data=True).run

在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自然语言与数据库对话案例结束。

来源:华为云开发者联盟

相关推荐