当前位置: 首页 > news >正文

本地部署vanna ai+通过http请求调用vanna

本地部署vanna ai

准备python环境,推荐最新的python12、13版本

安装vanna库

我这里安装的python环境是python312

进入目录python312/Scripts,在该目录下的命令行窗口中输入以下命令:pip jinstall vanna

pip install vanna

配置向量库

这里我选用的向量库为qdrant,并在Linux环境下通过docker进行安装

配置linux环境以及在linux环境下安装docker的教程可自行查找

在完成docker配置的linux环境中,运行qdrant容器,命令如下

docker run -d --name qdrant_server -v $(pwd)/qdrant_storage:/qdrant/storage -p 6333:6333 qdrant/qdrant

获取线上大模型的base_urlapi_key

这里,我选择使用线上大语言模型通义千问。新用户可以通过其官方平台注册账号,免费体验该模型。

获取通义千问模型的base_urlapi_key可以参考以下官方文档:

https://help.aliyun.com/zh/model-studio/user-guide/first-api-call-to-qwen

编写vanna调用代码

vanna使用python编写,这里我选择pycharm作为开发环境,以下是完整的python程序:将获取到的api_key填入以下对应的参数中

from vanna.base import VannaBase
from vanna.qdrant import Qdrant_VectorStore
from qdrant_client import QdrantClient
from vanna.qianwen import QianWenAI_Chat


# 创建Vanna实例
class MyVanna(Qdrant_VectorStore, MyCustomLLM):
    def __init__(self, config=None):
        Qdrant_VectorStore.__init__(self, config=config)
        QianWenAI_Chat.__init__(self, config=config)

# 配置参数
config = {
    "client": QdrantClient(host="8.134.216.171", port=6333),
    "api_key": "sk-yVx6P2nKH4YHT7BfwFTMJLT3IEKrglpQ7OzNjhWulDUrUXLa",
    "model": "https://api.moonshot.cn/v1"
}

# 实例化Vanna
vn = MyVanna(config=config)

# 连接MySQL数据库
vn.connect_to_mysql(
    host="8.134.204.169",
    dbname="sales_visit",  # 替换为你的数据库名称
    user="root",  # 替换为你的数据库用户名
    password="root",  # 替换为你的数据库密码
    port=3306  # 数据库的运行端口,mysql默认运行在3306端口
)

# 启动Vanna的Flask应用
from vanna.flask import VannaFlaskApp
app = VannaFlaskApp(vn)
app.run()

运行访问localhost:8084,就可以看到的vanna的前端操作界面了

请添加图片描述

请添加图片描述

添加训练数据

请添加图片描述

有三种类型的数据DDL(数据库表结构)、Documentation(说明文档)、SQL(可执行sql语句),可以按照自己的需求添加训练数据

请添加图片描述


与vanna实例相关的api接口

vn是vanna的实例对象,vn.generate_sql("What are the top 10 customers by sales?")用于生成sql语句,vn.run_sql("SELECT * FROM my_table")用于执行sql语句。

通过http请求调用vanna的功能

通过 HTTP 请求,既可以调用线上官方的 Vanna 功能,也可以调用本地部署的 Vanna 功能。

以下是一个例子:

from urllib import request
from flask import Flask, jsonify, request
from vanna.remote import VannaDefault

# 初始化Flask应用
app = Flask(__name__)

@app.route('/ask', methods=['POST'])
def deal_ask():
    print("进入请求处理")
    # 获取请求中的查询需求
    data = request.json
    if not data or 'question' not in data:
        return jsonify({"error":"query question is required"}),400

    question = data['question']
    print(question)

    # vn=init_app()
    vn = VannaDefault(model='rik', api_key='2a307e03229f40ef9621073b41ed1701')
    vn.connect_to_mysql(
        host="8.134.233.232",
        dbname="sale_visit",  # 替换为你的数据库名称
        user="root",  # 替换为你的数据库用户名
        password="root",
        port=3306
    )  # Connect to your database here
    print("开始执行请求")
    # 执行请求
    # result = vn.ask(question)
    result = vn.generate_sql(question)
    print("请求执行完毕")
    # print("这是result[1]")
    # print(result[1])
    # print("这是result[2]")
    # print(result[2])
    # 返回结果
    return jsonify({"result": result})


# 启动Flask应用
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=3000)

可以在postman中发送请求进行测试,

url -X POST http://localhost:3000/ask \
     -H "Content-Type: application/json" \
     -d '{"question": "查询最近一周的销售数据"}'

后端收到请求后,将会返回一条sql查询语句

相关文章:

  • 虚幻5入门
  • Docker学习--本地镜像管理相关命令--docker save 命令
  • 【Easylive】TokenUserInfoDto中@JsonIgnoreProperties和 Serializable 接口作用
  • git 按行切割 csv文件
  • MCP协议的Streamable HTTP:革新数据传输的未来
  • 企业常用Linux服务搭建
  • 数字IC后端项目常见问题之streamOut layermap和innovus drc violation
  • 智能设备操作系统闭源化浪潮下,小程序生态重构与技术创新
  • 我用Axure画了一个富文本编辑器,还带交互
  • 使用QT调试LidarView
  • MySQL 实现:基于时间差与车牌号匹配
  • 26考研 | 王道 | 数据结构 | 第四章 串
  • 系统与网络安全------Windows系统安全(4)
  • 新手村:逻辑回归-理解03:逻辑回归中的最大似然函数
  • pip安装第三方库,但PyCharm中却无法识别
  • 【计算机视觉】YOLO语义分割
  • 【赵渝强老师】Oracle的闪回数据库
  • ReCaptcha集成人机验证教学(Vue3篇)
  • RAG(检索增强生成)系统中解析 Excel 文件
  • 用matlab探索卷积神经网络(Convolutional Neural Networks)-2
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 2025上海科技节将于5月17日开幕,拟设6大板块专题活动
  • 阿森纳被打得毫无脾气,回天无力的阿尔特塔只剩嘴硬
  • 鸿蒙电脑正式亮相,五年布局积累超2700项核心专利
  • 上交现场配乐4K修复版《神女》:默片巅峰有了新的打开方式
  • 民生访谈|摆摊设点、公园搭帐篷、行道树飘絮,管理难题怎么解?