一、概述
1.1 介绍
使用Vanna配合本地Ollama/华为mass服务,并借助开发者空间云开发环境提供的免费GaussDB数据库开发环境进构建一个先进的AI自然语言分析系统。
GaussDB:华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。
Vanna:作为数据处理和自然语言处理(NLP)的关键组件,Vanna负责数据的预处理、清洗、转换以及NLP任务的执行,如文本分类、情感分析、实体识别等。
Ollama:作为AI模型和算法的核心,Ollama提供了丰富的机器学习模型和深度学习算法,用于训练和优化自然语言处理任务。它与Vanna紧密集成,共同实现高效的数据分析和知识提取。
ModelArts Studio(MaaS)平台:是华为云推出的一款大模型即服务平台,可以一站式的对业界主流开源大模型进行部署托管,同时开放大模型API服务,可以结合业界主流Agent开发框架,轻松构建AI Agent应用。
华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云开发环境、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者 从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。
1.2 资源总览
| 资源名称 | 规格 | 单价(元) | 时长(分钟) |
|---|---|---|---|
| 华为开发者空间 - 云开发环境 | 鲲鹏通用计算增强型 kc1 | 2vCPUs | 4G | HCE2.0 | 免费 | 60 |
| 华为开发者空间 - 生态版GaussDB | 单副本集中式版 | 4 vCPUs | 16G | HCE OS 64bit (200GB) | 免费 | 60 |
| 弹性公网IP | 按流量计费 5Mbit/s | 0.8元/GB | 60 |
二、准备工作
2.1 配置云开发环境
根据案例《开发者空间 - 云开发环境使用指导》,请查看下面链接,配置云开发环境,并通过xshell、crt等链接工具登录云开发环境。
参考如上案例链接进行配置并连接:
创建本地PC和远程云开发环境的隧道链接

通过xshell、crt等链接工具登录云开发环境,进行测试

2.2 领取GaussDB数据库
2.2.1 免费领取GaussDB在线试用版。
注:部署的Django项目需要对接GaussDB,因此GaussDB需要绑定EIP,参考上述指导中领取部分第(5)步
因为默认vanna的postgrs驱动连接gaussdb认证方式有问题,实例创建完成后修改password_encryption_type参数为0,然后在基本信息里修改一下root密码


2.2.2 进行数据初始化
领取Gaussdb实例后连接数据库点击登录

输入用户名密码进行登录

点击新建数据库,创建数据库school,兼容选择mysql点击确定

点击去school数据库,创建schema名字school,点击确认

初始化表和数据
点击sql窗口,数据库选择school,schema也选择上面创建的school,拷贝表和数据脚本到窗口栏,点击执行sql



样例数据:
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');
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);
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);
2.3 验证云开发环境与GaussDB互通
通过xshell或windows命令终端登录云开发环境,测试GaussDB能否连接,如下是通的

如不通去修改安全组的入方向规则,增加需要的端口如图(默认应该没通的)


三、 安装Ollama
首先我们要先配置pycharm远程开发环境可参考如下用例
基于华为开发者空间-云开发环境,PyCharm SSH远程开发环境搭建:https://devstation.connect.huaweicloud.com/space/devportal/casecenter/4ea8a2c6e7ac4f1cbe56853876e2e84d/1
后续所有操作都基于pycharm的远程命令行进行操作

3.1 安装Ollama
Ollama 是一个强大的开源工具,旨在帮助用户轻松地在本地运行、部署和管理大型语言模型(LLMs)。它提供了一个简单的命令行界面,使用户能够快速下载、运行和与各种预训练的语言模型进行交互
执行安装命令如下:
方式一(推荐,安装速度快):
curl -fsSL https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0035/install.sh | sudo bash

3.2 模型部署
接下来可以借助 Ollama 工具来部署 Deepseek 大模型,部署 deepseek-r1:1.5b 版本,因为资源有限我们部署一个小一点的模型,执行命令:
ollama pull deepseek-r1:1.5b

部署的时间长短依赖于网络的情况,部署完成后,我们就可以与 Deepseek 大模型进行对话了:
ollama run deepseek-r1:1.5b

四、 安装配置Vanna
4.1 更新python配置虚拟环境
vanna使用python 安装建议3.10以上,开发者空间中的python版本为3.9.9,需要先升级python
4.1.1 安装所需包
sudo yum groupinstall "Development Tools" -y
sudo yum install openssl-devel -y
sudo yum install gcc -y
sudo yum install gcc-c++ -y
sudo yum install bzip2-devel -y
sudo yum install libffi-devel -y
sudo yum install zlib-devel -y
sudo yum install wget -y
sudo yum install make -y
sudo yum install glibc-devel -y
sudo yum install libgcc -y
sudo yum install tar -y
sudo yum install bzip2 -y
sudo yum install zlib -y
sudo yum install xz -y
sudo yum install readline-devel -y
sudo yum install sqlite-devel -y
sudo yum install sqlite-libs -y

4.1.2 升级python
sudo wget https://mirrors.huaweicloud.com/python/3.10.14/Python-3.10.14.tgz
sudo tar xzf Python-3.10.14.tgz
cd Python-3.10.14
OPENSSL_PREFIX=/usr
sudo ./configure --enable-optimizations --with-ensurepip=install \
--with-openssl=$OPENSSL_PREFIX
sudo make -j$(nproc)
sudo make altinstall
python3.10 -m ssl
python3.10 --version

4.1.3 配置python虚拟环境
因为业务场景的Python开发,多数都是构建一个大型应用程序,并且不希望各种组件的各种版本之间相互冲突,所以需要设置一个虚拟环境。
先需要更新下载源。执行如下命令
sudo yum -y update
sudo yum -y upgrade
pip3 install virtualenv -i https://repo.huaweicloud.com/repository/pypi/simple/ #安装virtualenv
python3.10 -m venv myenv #创建虚拟环境
source myenv/bin/activate #激活环境

4.2 python下安装Vanna
python 安装建议3.10以上
安装前更新下pip,然后执行安装
python3.10 -m pip install --upgrade pip -i https://repo.huaweicloud.com/repository/pypi/simple/
pip3 install 'vanna[chromadb,ollama,postgres]' -i https://repo.huaweicloud.com/repository/pypi/simple/

4.3 Vanna官网生成示例代码
Vanna是一款基于开源Python框架的SQL生成工具,可以用日常用语提问,Vanna自动将其转换为SQL语句,简化数据库查询过程。
生成实例代码
Vanna的例子,链接如下,按照如下图选择生成示例代码:
https://vanna.ai/docs/postgres-ollama-chromadb/
依次选择Ollama-ChromaDB-postgres 会生成示例代码,
选择使用的模型商

选择使用向量数据库的类型

选择要连接的数据库

样例代码:
from vanna.ollama import Ollama
from vanna.chromadb import ChromaDB_VectorStore
class MyVanna(ChromaDB_VectorStore, Ollama):
def __init__(self, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
Ollama.__init__(self, config=config)
vn = MyVanna(config={'model': 'deepseek-r1:1.5b', 'ollama_host': 'http://localhost:11434'})
vn.connect_to_postgres(host='xxxxxxx', dbname='school', user='xxxx', password='xxxx', port='8000')
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 VannaFlaskApp
VannaFlaskApp(vn, allow_llm_to_see_data=True).run()
五、 启动应用并使用
4.1 代码配置
打开pycham把样例代码粘贴进main.py,并修改模型和数据库配置
vn = MyVanna(config={'model': 'deepseek-r1:1.5b', 'ollama_host': 'http://localhost:11434'})
vn.connect_to_postgres(host='xxxx', dbname='school', user='xxxx', password='xxxx', port='8000')

上传代码到远程开发环境

5.2 启动应用
进入自己配置的ssh远程目录启动应用
nohup python3.10 main.py &

查看输出日志,日志最后有系统的登录地址
tail nohup.out

创建应用启动的对应端口(8084)的隧道协议,可参考开发者空间 - 云开发环境使用指导-第4章2小节
hdspace devenv start-tunnel --instance-id=0edfc31f922c4b54b74ba8819 --remote-port=8084 --local-port=8084

5.3 使用自然语言分析数据库
在浏览器输入http://127.0.0.1:8084,进行登录,第一次比较慢等待一下

然后我们可以用自然语言操作数据库了,因为已开发环境内存有限,deepseek-r1:1.5b回答的不太好,如果资源充足可以换别的模型,生成的sql问题可以点击修复;
使用自然语言提问:每门课程的做高分是多少

sql结果会自动生成表格和图表

六、 使用华为maas部署
使用ollama本地模型比较安全但相对复杂,我们还可以使用华为ModelArts Studio(MaaS)服务来作为系统的智能模型
6.1 申请ModelArts免费服务
参考下面的步骤,免费体验ModelArts Studio(MaaS)预置服务
https://support.huaweicloud.com/usermanual-maas-modelarts/maas-modelarts-0020.html
按下面的步骤获取相关信息:
区域切换到"西南-贵阳一",依次点击:ModelArts Studio->模型推理->在线推理->预置服务->免费服务->领取

领取后点击->调用说明->OpenAI SDK

API Key管理-> 创建API Key

把api key,api地址,model参数保留好备用
6.2 生成vanna代码
整体可参考<<四、安装配置vanna>>
https://vanna.ai/docs/postgres-ollama-chromadb/
依次选择OpenAI-ChromaDB-postgres 成示例代码



生成的示例代码

6.3 安装python包
注意: 要重新安装使用的包与ollama部署时的不一样
pip3 install 'vanna[chromadb,openai,postgres]' -i https://repo.huaweicloud.com/repository/pypi/simple/
pip3 install openai #安装openai本地客户端

6.4 修改代码并运行
整体可参考步骤<<五、启动应用并使用>>
在6.2生成的模板代码下我们进行修改,添加进去华为maas的参数及OpanAI客户端的代码
运行前修改如下模型和数据库配置
my_llm_api_key = 'key' #上面步骤我们创建的apikey
my_llm_base_url = 'https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/271c9332-4aa6-4ff5-95b3-0cf8bd94c394/v1' # 上面步骤调用说明里的apiurl
my_llm_name = 'DeepSeek-V3' #上面步骤的modelname
vn.connect_to_postgres(host='xxx', dbname='school', user='root', password='xxx', port='8000')

代码:
from vanna.ollama import Ollama
from vanna.chromadb import ChromaDB_VectorStore
from vanna.openai import OpenAI_Chat
from openai import OpenAI
my_llm_api_key = 'key' #上面步骤我们创建的apikey
my_llm_base_url = 'https://maas-cn-southwest-2.modelarts-maas.com/v1/infers/271c9332-4aa6-4ff5-95b3-0cf8bd94c394/v1' # 上面步骤调用说明里的apiurl
my_llm_name = 'DeepSeek-V3' #上面步骤的modelname
client = OpenAI(
api_key=my_llm_api_key,
base_url=my_llm_base_url
)
class MyVanna(ChromaDB_VectorStore, OpenAI_Chat):
def __init__(self, client=None, config=None):
ChromaDB_VectorStore.__init__(self, config=config)
OpenAI_Chat.__init__(self, client=client, config=config)
vn = MyVanna(client=client, config={"model": my_llm_name})
vn.connect_to_postgres(host='xxx', dbname='school', user='root', password='xxx', port='8000')
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 VannaFlaskApp
VannaFlaskApp(vn, allow_llm_to_see_data=True).run()
上传代码并运行
整体可参考步骤<<五、启动应用并使用>>
nohup python3.10 main.py &

在浏览器输入http://127.0.0.1:8084,进行登录使用,我们可以看到使用准确的模型一次就回答对了,如果生产部署选对模型很重要

至此关于在开发者空间--远程开发环境中使用Vanna配合ollama/maas基于GaussDB的自然语言分析系统实践操作完毕。