ollama部署文字转sql,并使用fastapi提供外部接口访问

根据你提供的官方文档中的调用方法,可以使用 Ollama 的 chat 方法来与模型进行交互。我们将调整 FastAPI 应用代码以使用 ollama 模块的 chat 方法。

1. 安装必要的库

确保你已经安装了 FastAPI 和 Ollama Python 客户端库:

pip install fastapi uvicorn ollama

2. 创建 FastAPI 应用

创建一个新的 Python 文件(例如 main.py),并编写 FastAPI 应用代码:

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import ollamaapp = FastAPI()class SQLRequest(BaseModel):question: str@app.post("/generate_sql")
async def generate_sql(request: SQLRequest):prompt = f"""### Instructions:Your task is to convert a question into a SQL query, given a Postgres database schema.Adhere to these rules:- **Deliberately go through the question and database schema word by word** to appropriately answer the question- **Use Table Aliases** to prevent ambiguity. For example, `SELECT table1.col1, table2.col1 FROM table1 JOIN table2 ON table1.id = table2.id`.- When creating a ratio, always cast the numerator as float### Input:Generate a SQL query that answers the question `{request.question}`.This query will run on a database whose schema is represented in this string:CREATE TABLE products (product_id INTEGER PRIMARY KEY, -- Unique ID for each productname VARCHAR(50), -- Name of the productprice DECIMAL(10,2), -- Price of each unit of the productquantity INTEGER  -- Current quantity in stock);CREATE TABLE customers (customer_id INTEGER PRIMARY KEY, -- Unique ID for each customername VARCHAR(50), -- Name of the customeraddress VARCHAR(100) -- Mailing address of the customer);CREATE TABLE salespeople (salesperson_id INTEGER PRIMARY KEY, -- Unique ID for each salespersonname VARCHAR(50), -- Name of the salespersonregion VARCHAR(50) -- Geographic sales region);CREATE TABLE sales (sale_id INTEGER PRIMARY KEY, -- Unique ID for each saleproduct_id INTEGER, -- ID of product soldcustomer_id INTEGER,  -- ID of customer who made purchasesalesperson_id INTEGER, -- ID of salesperson who made the salesale_date DATE, -- Date the sale occurredquantity INTEGER -- Quantity of product sold);CREATE TABLE product_suppliers (supplier_id INTEGER PRIMARY KEY, -- Unique ID for each supplierproduct_id INTEGER, -- Product ID suppliedsupply_price DECIMAL(10,2) -- Unit price charged by supplier);-- sales.product_id can be joined with products.product_id-- sales.customer_id can be joined with customers.customer_id-- sales.salesperson_id can be joined with salespeople.salesperson_id-- product_suppliers.product_id can be joined with products.product_id### Response:Based on your instructions, here is the SQL query I have generated to answer the question `{request.question}`:"""try:response = ollama.chat(model='sqlcoder:7B', messages=[{'role': 'user', 'content': prompt}])return {"sql_query": response['message']['content']}except Exception as e:raise HTTPException(status_code=500, detail=str(e))if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

3. 启动 Ollama 服务

确保 Ollama 服务正在本地运行。你可以使用以下命令启动 Ollama 服务:

ollama serve

4. 启动 FastAPI 应用

在终端中运行以下命令启动 FastAPI 应用:

uvicorn main:app --reload

5. 测试 API

你可以使用 curl 或 Postman 测试 API。例如,使用 curl:

curl -X POST "http://localhost:8000/generate_sql" -H "Content-Type: application/json" -d '{"question": "哪种产品的销售额最高?"}'

这应该会返回一个包含生成的 SQL 查询的 JSON 响应。

详细解释

  1. FastAPI:创建一个简单的 Web API 服务。@app.post("/generate_sql") 定义了一个 POST 端点,用于接收用户的问题并调用 Ollama 模型生成 SQL 查询。
  2. Pydantic:用于数据验证和解析。SQLRequest 类定义了请求体的数据结构。
  3. Ollama:使用 ollama.chat 方法与模型 sqlcoder:7B 进行交互并生成响应。

通过这些步骤,你应该能够正确配置和运行 FastAPI 应用,并通过调用 Ollama 服务来生成 SQL 查询。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/28965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派pico入坑笔记,快捷键键盘制作

使用usb_hid功能制作快捷键小键盘,定义了6个键,分别是 ctrlz ctrlv ctrlc ctrla ctrlw ctrln 对应引脚 board.GP4, board.GP8, board.GP13 board.GP28, board.GP20, board.GP17 需要用到的库,记得复制进单片机存储里面 然后是main主程…

3dmax2025能用云渲染吗?2025最新云渲染渲染100使用方法

3dmax2025还没用上云渲染?简单3步用上云渲染。 第一步,打开浏览器搜索渲染100,并进入下载客户端并安装 第二步,打开已安装的客户端进行安装,点击登录,未登录注册个账号即可(注册账号时邀请码填…

记录一下GMT时间转北京时间

GMT时间比北京时间慢8小时 1. dayjs import dayjs from dayjs dateFormat () (value: Parameters<typeof dayjs>[0],format YYYY-MM-DD HH:mm:ss) > (value ? dayjs(value).format(format) : )2. new Date timeDate(time){return new Date(time) // time 必须是字…

Sermant标签路由能力在同城双活场景的应用

作者&#xff1a;聂子雄 华为云高级软件工程师 摘要&#xff1a;目前应用上云已成为趋势&#xff0c;用户也对应用在云上的高可靠方案有更高追求&#xff0c;目前同城双活场景作为应用高可靠方案中的一种常见实践方案&#xff0c;对微服务流量提出了数据中心亲和性的要求&…

浙江电信联合中兴通讯取得新突破,完成融合边缘商用验证

前不久&#xff0c;浙江电信联合中兴通讯在融合边缘方面取得新突破&#xff0c;在嘉兴完成了融合边缘的商用验证&#xff0c;并发布了商用版本。接下来&#xff0c;双方在融合边缘方面正式进入商用阶段&#xff0c;有效赋能新质生产力。    随着数字经济的快速发展&#xff0…

数据结构与算法笔记:基础篇 -字符串匹配(下):如何借助BM算法轻松理解KMP算法?

概述 上篇文章讲了 BM 算法&#xff0c;尽管他复杂&#xff0c;也不好理解&#xff0c;但确实工程中非常好用的一种高效字符串匹配算法。有统计说&#xff0c;它是最搞笑、最常用的字符串匹配算法。不过&#xff0c;在所有的字符串匹配算法里&#xff0c;要说最知名的一种的话…

【C++】认识STL

【C】认识STL STL的概念STL的版本STL的六大组件STL的三个境界STL的缺陷 STL的概念 SLT(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个保罗数据结构与算法的软件框架。 STL的版本 原…

便携式手持气象仪:低功耗设计

TH-LSZ05便携式手持气象仪是一款轻便、操作简便的气象监测工具&#xff0c;集成了风向、风速、大气压、温度、湿度五项气象要素的测量功能。这些设备通常设计为体积小、重量轻&#xff0c;以便于用户随时携带并使用。通过使用手持气象仪&#xff0c;用户可以实时获取关键的气象…

列表(list)(Python)

文章目录 一、定义二、列表常用操作 一、定义 list ["张三", "李四", "王五", "赵六"]二、列表常用操作 分类关键字/函数/方法说明增加列表.append(值)在列表末尾追加值列表.insert(索引&#xff0c; 值)在指定位置插入值&#xff…

Android Root全教程

1.安装指定镜像&#xff1a;https://blog.csdn.net/weixin_43846562/article/details/130028258 2.安装 magisk&#xff1a;https://blog.csdn.net/qq1337715208/article/details/115922514 3.打开 adb root&#xff1a;https://liwugang.github.io/2021/07/11/magisk_enable…

如何训练一个企业邮局系统区分垃圾邮件和非垃圾邮件的私有化模型?用于提高企业的沟通效率

训练一个企业邮局系统区分垃圾邮件和非垃圾邮件涉及多个步骤和技术。以下是一个基本的流程&#xff1a; 1. 数据收集 获取邮件数据 收集样本&#xff1a;获取大量的历史邮件数据&#xff0c;包括标记为垃圾邮件和非垃圾邮件的邮件。标签数据&#xff1a;确保数据集中的每封邮…

DDS相关知识记录

DDS全称是Data Distribution Service&#xff0c;这是一套通信协议和API标准&#xff0c;它提供了以数据为中心的连接服务&#xff0c;基于发布者-订阅者模型。这是一套中间件&#xff0c;它提供介于操作系统和应用程序之间的功能&#xff0c;使得组件之间可以互相通信。并且提…

c++ 形参callback加上const修饰符的神坑

示例代码 template <typename Callback> void read_input(const std::string& prompt, const Callback& cb) {std::thread([prompt, cb](){std::cout << prompt << ": ";std::cout.flush();std::string line;std::getline(std::cin, line…

安徽保安员精选模拟试题(含答案)

1、风险管理的三要素是()&#xff0c;风险评价和风险控制。 A、频率分析 B、风险分析 C、风险转移 D、后果估计 答案:B 2、治安保卫重要部位是指由()确定的、关系本单位生产业务全局的部位和生产环节。 A、企事业重点单位 B、地方政府 C、企事业单位保卫协会 D、公安机关 …

智能室内空气质量监测预警系统小程序设计说明书

智能室内空气质量监测预警系统小程序设计说明书 一、应用功能与系统设计 &#xff08;一&#xff09; 应用功能 该小程序设计的目的是为了配合环境监测吸顶灯,Mini空气监测仪等硬件设备实时数据展示与远程设备控制等功能&#xff0c;系统框架图如图1-1所示。用户可以从小程序…

【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt系统相关 | Qt事件 | 事件的介绍及基本概念 文章编号&#xff1a;Qt…

BatchNormalization和Layer Normalization解析

Batch Normalization 是google团队2015年提出的&#xff0c;能够加速网络的收敛并提升准确率 1.Batch Normalization原理 图像预处理过程中通常会对图像进行标准化处理&#xff0c;能够加速网络的收敛&#xff0c;如下图所示&#xff0c;对于Conv1来说输入的就是满足某一分布…

RN全局封装一个toast弹窗提示(在任意地方只要调用方法就能使用)

创建Toast.js let toastInstance = null;export const showToast = options => {if (toastInstance) {// toastInstance有值的话toastInstance(options);} else {console.error(Toast instance is not initialized);} };export const setToastInstance = instance => {t…

SQL语言-关系数据库的标准语言

一、SQL是关系数据库的标准语言&#xff0c;兼有关系代数和关系演算的特点。具有数据定义、数据查询、数据更新、数据控制等功能。 二、SQL的数据定义主要包括对基本表TABLE、视图VIEW、索引INDEX的创建CREATE和撤销DROP。通过定义表的主键、外键&#xff0c;以及有关的约束&a…

从hip cuda kernel 的汇编语言来感受 AMD GPU内部工作方式

0, 无参数 kernel 汇编语言示例 ./param_00.hip __global__ void WWWWW() {((int*)0x8888888)[3] 0x77777; } ../../../local_amdgpu/bin/clang -O1 --cuda-device-only --offload-archgfx906 -S ./param_00.hip -o param_00.s _Z5WWWWWv: ; …