本案例由開發者:banjin提供

最新案例動態,請查閲《【案例共創】基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話》。小夥伴快來領取華為開發者空間進行實操吧

一、概述

1. 案例介紹

華為開發者空間,是為全球開發者打造的專屬開發者空間,致力於為每位開發者提供一台雲開發環境、一套開發工具和雲上存儲空間,匯聚昇騰、鴻蒙、鯤鵬、GaussDB、歐拉等華為各項根技術的開發工具資源,並提供配套案例指導開發者從開發編碼到應用調測,基於華為根技術生態高效便捷的知識學習、技術體驗、應用創新。

本案例基於華為開發者空間 - 雲開發環境 ,使用Vanna結合MaaS實現Vanna在HCE2.0開發環境進行本地部署,構建Text-to-SQL自然語言與數據庫對話。

Vanna 是一個開源的 Python 框架,用於基於 SQL 數據庫構建、訓練和部署 AI SQL 代理。它的核心功能是讓用户能夠通過自然語言直接與數據庫進行交互,而無需編寫複雜的 SQL 查詢語句。

2. 適用對象

  • 企業
  • 個人開發者
  • 高校學生

3. 案例時間

本案例總時長預計90分鐘。

4. 案例流程

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者

説明:

  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

密碼

開發者根據需要自行設定。

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_02

創建配置完成後,參考案例《開發者空間 - 雲開發環境使用指導》的“3. 管理雲開發環境”,操作雲開發環境開機,開機後狀態如下:

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_03

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

創建完成後的效果如下:

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_04

1.3.2 創建B隧道

打開一個新的命令行窗口,輸入如下指令:

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

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_05

1.4 創建VS Code遠程連接

參考案例《本地VSCode基於華為開發者空間雲開發環境完成小程序開發》,創建VS Code與雲開發環境遠程連接。

VS Code遠程連接雲開發環境成功後,打開終端:

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_06

2. 安裝MySQL,創建數據庫

2.1 安裝MySQL

  1. 本案例在雲開發環境root用户下進行,系統默認使用developer用户權限,需要手動切換到root用户權限。VS Code遠程連接,進入雲開發環境後,在控制枱輸入如下指令:
sudo su -

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_07

  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

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_08

  1. 安裝MySQL
yum -y install mysql80-community-release-el8-9.noarch.rpm 
yum -y install mysql-community-server

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_09

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_10

  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

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_11

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_12

2.2 創建MySQL數據庫

2.2.1 登入數據庫

VS Code控制枱輸入如下指令,然後根據提示輸入MySQL安裝過程中設置的新密碼,進入MySQL。

mysql -uroot -p

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_13

2.2.2 創建數據庫school,並切換到該數據庫,
CREATE DATABASE school DEFAULT CHARACTER SET = 'utf8mb4';
SHOW DATABASES;
USE school;

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_14

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');

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_15

查詢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);

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_16

驗證表格創建成功:

DESCRIBE courses;

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_17

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);

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_18

驗證表格創建成功:

SELECT * FROM enrollments;

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_19

最後使用exit;命令退出數據庫。

3. 登錄MaaS平台領取200萬免費token

參考案例《基於DeepSeek和Dify構建心理諮詢師應用》中的“2.1 免費領取DeepSeek R1滿血版”內容領取DeepSeek-V3模型200萬免費token。

獲取關鍵數據API地址model參數

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_20

獲取關鍵參數API Key

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_21

三、Vanna部署

1. 配置python開發環境

雲開發環境虛擬機已為開發者預置了python 3.9.9環境,輸入以下指令驗證環境:

python --version

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_22

1.1 設置pip源

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

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_23

1.2 配置python虛擬環境

業務場景的Python開發,多數都是構建一個大型應用程序,並且不希望各種組件的各種版本之間相互衝突,所以需要設置一個虛擬環境。

yum -y update	#更新系統軟件包
pip3 install virtualenv       #安裝virtualenv
pip3 list | grep virtualenv       #查詢virtualenv安裝成功
python -m venv myenv          #創建虛擬環境
source myenv/bin/activate       #激活環境

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_24

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_25

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_26

1.3 安裝python插件

在VS Code遠程連接窗口中,點插件市場,搜索python,然後選中插件,點Install in SSH: 127.0.0.1

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_27

2. 安裝Vanna

2.1 查看官方文檔

登錄官網文檔:https://vanna.ai/docs/,通過官方文檔選配安裝方式。

登錄官網文檔,選擇Vector Databases > Quickstart With Your Own Data,進入快速開始選配頁面。

  1. 大模型LLM:OpenAI

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_28

  1. 數據訓練:ChromaDB開源向量數據庫

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_29

  1. 被檢索的數據庫類型:MySQL

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_30

由此我們獲取到Vanna安裝、創建、調用、訓練等樣例代碼。下一步我們將先開始安裝Vanna。

2.2 安裝Vanna

在VS Code控制枱,輸入如下指令:

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

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_31

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發環境_32

3. 創建Vanna工程

3.1 創建工程目錄

完成上述步驟後,在VS Code左側/home/developer文件目錄下點New Folder,創建Vanna_mysql目錄,並在該目錄下點New File,創建main.py

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_33

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()

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_34

4. 運行/測試Vanna

在VS Code右上角點運行按鈕,日誌中輸出Your app is running at:http://localhost:8084,程序啓動成功。

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_35

在PC本地打開瀏覽器,訪問:http://127.0.0.1:1233/,然後對Vanna提問:“每門課程的最高分是多少?”。

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_MySQL_36

Vanna.AI先將語言進行了分析,轉化成SQL語句,然後將查詢到的數據表格化顯示。然後生成圖表,並且轉化成自然語言進行答覆。

基於華為開發者空間-雲開發環境,Vanna+MaaS實現自然語言與數據庫對話_開發者_37

最後詢問:“結果是否正確?”,我們可以通過按鈕Yes, train as Question-SQL pair或者NO回答Vanna.AI。

至此基於華為開發者空間開發平台 - 雲開發環境,使用Vanna結合MaaS實現Text-to-SQL自然語言與數據庫對話案例結束。