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

本文涉及的产品
模型训练 PAI-DLC,100CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 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







相关文章
|
2月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
674 109
|
2月前
|
分布式计算 测试技术 Spark
科大讯飞开源星火化学大模型、文生音效模型
近期,科大讯飞在魔搭社区(ModelScope)和Gitcode上开源两款模型:讯飞星火化学大模型Spark Chemistry-X1-13B、讯飞文生音频模型AudioFly,助力前沿化学技术研究,以及声音生成技术和应用的探索。
270 2
|
2月前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
1419 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
1月前
|
人工智能 搜索推荐 程序员
当AI学会“跨界思考”:多模态模型如何重塑人工智能
当AI学会“跨界思考”:多模态模型如何重塑人工智能
264 120
|
3月前
|
存储 人工智能 自然语言处理
告别文字乱码!全新文生图模型Qwen-Image来咯
通义千问团队开源了Qwen-Image,一个20B参数的MMDiT模型,具备卓越的文本渲染和图像编辑能力。支持复杂中英文文本生成与自动布局,适用于多场景图像生成与编辑任务,已在魔搭社区与Hugging Face开源。
684 2
|
3月前
|
文字识别 算法 语音技术
基于模型蒸馏的大模型文案生成最佳实践
本文介绍了基于模型蒸馏技术优化大语言模型在文案生成中的应用。针对大模型资源消耗高、部署困难的问题,采用EasyDistill算法框架与PAI产品,通过SFT和DPO算法将知识从大型教师模型迁移至轻量级学生模型,在保证生成质量的同时显著降低计算成本。内容涵盖教师模型部署、训练数据构建及学生模型蒸馏优化全过程,助力企业在资源受限场景下实现高效文案生成,提升用户体验与业务增长。
580 23
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
567 13
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
|
2月前
|
自然语言处理 机器人 图形学
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型
腾讯混元图像3.0,真的来了——开源,免费开放使用。 正式介绍一下:混元图像3.0(HunyuanImage 3.0),是首个工业级原生多模态生图模型,参数规模80B,也是目前测评效果最好、参数量最大的开源生图模型,效果可对…
758 2
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型

热门文章

最新文章