vanna+qwen实现私有模型的SQL转换

本文涉及的产品
交互式建模 PAI-DSW,5000CU*H 3个月
简介: 本文档介绍了如何在本地部署Vanna服务以使用Qwen模型进行text2sql转换。首先,通过`snapshot_download`下载Qwen-7B-Chat模型,并安装相关依赖。接着,修改`openai_api.py`设置本地LLM服务接口。然后,安装并配置Vanna Flask服务,包括自定义LLM服务、连接数据库以及修改端口。为了解决内网访问问题,使用ngrok或natapp进行内网穿透,提供公网访问。最后,处理了chromadb包中自动下载资源的问题,以防网络不佳导致的失败。通过这些步骤,实现了使用本地Qwen模型的Vanna服务。

1. 基本介绍

vanna作为先进灵活的text2sql转换服务,能够在页面上灵活添加训练的DDL和SQL语句,提供 RAG "model",vanna官方提供支持openai、Ollma等LLM模型,但在国内希望本地部署,使用自己的元数据信息不外泄,因此本文帮助实现vanna+本地的QWEN模型实现本地访问。

2. 实现步骤

2.1部署Qwen通义千问的qwen-7B-Chat模型

#模型下载

from modelscope import snapshot_download

model_dir = snapshot_download('qwen/Qwen-14B',cache_dir='./model')

#下载Qwen仓库代码

!git clone https://github.com/QwenLM/Qwen.git

然后编辑openai_api.py,设置checkpoint_path= '/mnt/workspace/model/qwen/Qwen-7B-Chat'

              替换前                                                                              替换后

image.png 1710927871254.png

文件替换完成后,就可以启动LLM服务

然后安装依赖包:pip install -r requirements.txt

注意:安装完毕后检查下transformers的版本,最好保持在pip install transformers==4.30.2

python ./openai_api.py


1710928504634.png

2.2部署vanna服务

pip install 'vanna[chromadb,openai]'

pip install pymysql


下载vanna-flask版本的服务

git clone https://github.com/vanna-ai/vanna-flask.git

#使用自定义的llm服务接口

from vanna.remote import VannaDefault

from vanna.openai.openai_chat import OpenAI_Chat

from vanna.chromadb.chromadb_vector import ChromaDB_VectorStore

from vanna.flask import VannaFlaskApp

from openai import OpenAI

import pandas as pd

import pymysql

client = OpenAI(

   api_key="...",

   base_url="http://127.0.0.1:8000/v1/",

   default_headers = {"x-foo": "true"}

)

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": "Qwen-7B",})   #chatglm2-6b

vn.max_tokens = 800

vn.temperature = 0.5

#vn.connect_to_sqlite('https://vanna.ai/Chinook.sqlite')

修改app.py中的代码 :

注释掉:load_dotenv()

1710928273519.png

然后修改vn的初始化逻辑,替换上面的代码:

1710928306512.png 1710928358939.png

修改启动端口:增加port=18888

1710928403583.png


启动vanna    python ./app.py,输出本地的地址:http://127.0.0.1:18888

1710928563890.png

2.3内网穿透部署,提供公网访问地址

由于使用的是阿里的PAI训练机,本地地址无法在公网上访问极度不方便,因此就用到内网穿透的功能,可以使用ngrok或natapp。

ngrok方式:

from pyngrok import ngrok

ngrok.set_auth_token("")                 #设置访问ngrok的认证token,这个token需要在ngrok上注册个人账号后会生成的

ngrok_tunnel = ngrok.connect(18888)          #建立通道,该命令执行后,会自动生成一个公网的域名地址,可以在公网上访问

这段代码加入到app.run()前面。

由于ngrok服务是国外的,经常被墙,可能在国内北方地区能够访问,南方地区就不能访问,因此可以使用国内的内网穿透服务natapp

natapp方式:

同样,需在natapp上注册账号获取token,并建立一个隧道服务。这个隧道直接绑定到内网服务的端口上的,并且可以设置代理地址访问时是否需要认证登录使用,保障安全。

1710928953488.png



在内网机器上下载linux版的natapp软件

wget https://cdn.natapp.cn/assets/downloads/clients/2_4_0/natapp_linux_amd64/natapp

并设置可执行权限

1710929055585.png

chmod 755 natapp

然后执行:

./natapp -authtoken=24dfff7012ce9095

1710929169664.png

注意:每次启动生成的公网域名地址是不同的。

1710929245469.png

1710930041017.png

开启您的Text2SQL之旅吧。




3.问题记录

在chromadb包里还有个自动去公网下载资源的地方,若网络不好则会下载失败,这个主要用于存储用户自定义训练信息的向量存储。

File "/opt/conda/lib/python3.10/site-packages/chromadb/utils/embedding_functions.py", line 514, in model

   return self.ort.InferenceSession(

 File "/opt/conda/lib/python3.10/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 419, in __init__

   self._create_inference_session(providers, provider_options, disabled_optimizers)

 File "/opt/conda/lib/python3.10/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 472, in _create_inference_session

   sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model)

onnxruntime.capi.onnxruntime_pybind11_state.InvalidProtobuf: [ONNXRuntimeError] : 7 : INVALID_PROTOBUF : Load model from /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx/model.onnx failed:Protobuf parsing failed.

1710929761062.png


wget https://chroma-onnx-models.s3.amazonaws.com/all-MiniLM-L6-v2/onnx.tar.gz


vi /opt/conda/lib/python3.10/site-packages/chromadb/utils/embedding_functions.py


把MODEL_DOWNLOAD_URL的地址换成本地的地址:

file:///mnt/workspace/vanna-flask/onnx.tar.gz

1710929988919.png







相关文章
|
SQL 存储 OLAP
如何基于维度模型自动化生成SQL语句
众所周知数据分析的核心是数据,为了更容易的分析数据,数据模型的设计需要遵循一定的规范。当前最流行的联机分析处理(OLAP)的规范为维度建模规范。本文介绍Quick BI如何进行维度建模,基于维度模型如何来自动化的生成分析查询的SQL语句,从而使数据分析变得更容易。
2329 0
|
SQL 存储 数据挖掘
Quick BI 的模型设计与生成SQL原理剖析
本文介绍Quick BI如何进行维度建模,基于维度模型如何来自动化的生成分析查询的SQL语句,从而使数据分析变得更容易。
2790 0
|
4天前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
4天前
|
SQL 自然语言处理 关系型数据库
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
NL2SQL进阶系列(3):Data-Copilot、Chat2DB、Vanna Text2SQL优化框架开源应用实践详解[Text2SQL]
|
5月前
|
流计算
Flink CDC-sql怎样导数据使starrocks支持主键模型delete的配置吗?目前只能更新和插入,但是删除不行
Flink CDC-sql怎样导数据使starrocks支持主键模型delete的配置吗?目前只能更新和插入,但是删除不行
105 1
|
9月前
java202304java学习笔记第六十六天-ssm-动态sql-一对一模型介绍
java202304java学习笔记第六十六天-ssm-动态sql-一对一模型介绍
33 0
|
9月前
java202304java学习笔记第六十六天-ssm-动态sql-一对一模型介绍
java202304java学习笔记第六十六天-ssm-动态sql-一对一模型介绍
26 0
|
10月前
|
存储 SQL 关系型数据库
SQL—什么是数据库?范式有哪些?模型有哪些?
在学校里,我们总是会把学生的个人信息,如:姓名、性别、家庭住址、成绩、年龄、所在班级等数据组成一张张表,最后它们形成一个数据库(当然一张表也可以形成一个数据库)。当我们想要数据库中的某条数据时,你只用告诉服务器你想要什么,它就给你找什么。大大降低人工操作的时间,保障了数据的准确。
|
12月前
|
SQL 人工智能 自然语言处理
MIGA项目原作解读:基于生成式预训练语言模型T5的Text-to-SQL模型
MIGA项目原作解读:基于生成式预训练语言模型T5的Text-to-SQL模型
149 0
http://www.vxiaotou.com