摘要:华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云开发环境、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、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远程连接云开发环境成功后,打开终端:
VS Code控制台输入如下指令,然后根据提示输入MySQL安装过程中设置的新密码,进入MySQL。
mysql -uroot -p查询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;验证表格创建成功:
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由此我们获取到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 Key、API地址、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自然语言与数据库对话案例结束。
来源:华为云开发者联盟
