写点什么

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

  • 2025-10-27
    中国香港
  • 本文字数:5358 字

    阅读完需:约 18 分钟

基于华为开发者空间-云开发环境,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 元。


二、基础环境与资源准备

1. 云开发环境

1.1 配置云开发环境

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


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


本案例参数样例:




创建配置完成后,参考案例《开发者空间 - 云开发环境使用指导》的“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 listhdspace 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/devsqlcd /home/developer/devsqlwget 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  #启动MySQLgrep 'temporary password' /var/log/mysqld.log  #获取初始密码mysql -uroot -p  #使用初始密码登录MySQLalter 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       #安装virtualenvpip3 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 openaipip3 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_Chatfrom vanna.chromadb import ChromaDB_VectorStorefrom 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 VannaFlaskAppVannaFlaskApp(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 自然语言与数据库对话案例结束。


用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
基于华为开发者空间-云开发环境,Vanna+MaaS实现自然语言与数据库对话_MaaS_华为云开发者联盟_InfoQ写作社区