llamaindex实战-使用本地大模型和数据库对话

概述

本文使用NLSQLTableQueryEngine 查询引擎来构建SQL的自然语言处理查询。

请注意,我们需要指定要与该查询引擎一起使用的表。如果我们不这样做,查询引擎将提取所有架构上下文,这可能会溢出 LLM 的上下文窗口。

在以下情况都可以使用NLSQLTableQueryEngine查询引擎:只要您可以预先指定要查询的表,或者所有表结构的总大小加上提示的其余部分,不会超出提示词返回内容的大小。

数据准备

在mysql中创建一张表,并插入一些数据:

 CREATE TABLE `city_stats` (`city_name` varchar(16) DEFAULT NULL,`population` int(11) DEFAULT NULL,`country` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

把以下数据插入到city_stats表中:

rows = [ {"city_name": "Toronto", "population": 2930000, "country": "Canada"},{"city_name": "Tokyo", "population": 13960000, "country": "Japan"},{ "city_name": "Chicago", "population": 2679000, "country": "United States" },  {"city_name": "Seoul", "population": 9776000, "country": "South Korea"},
]

一旦我们构建了 SQL 数据库,我们就可以使用 NLSQLTableQueryEngine 来构建合成为 SQL 查询的自然语言查询。

申明openai的key

在openai.com官网上申请一个key,并设置环境变量:

export OPENAI_API_KEY="xxxxxx"

注意:这可能是llamaindex的一个bug。因为我并没有调用openai的接口,我的机器也无法访问openai网站,但代码提示还是需要让我设置一个OPENAI_API_KEY环境变量。

实现逻辑

(1)通过llama_index的create_engine函数来创建数据库查询引擎

(2)使用SQLDatabase对象来封装查询引擎,通过该对象的封装,就可以把数据库查询引擎带入自然语言处理查询引擎了。

(3)构建大模型对象,可以使用Ollama,或使用其他方式也都可以。

(4)构建自然语言处理查询引擎NLSQLTableQueryEngine,并把数据库查询引擎带入其中。

(5)和NLSQLTableQueryEngine查询引擎进行交互,通过自然语言来和数据库中的数据对话。

完整代码

以下代码通过自然语言的方式和数据对话。

from llama_index.core import SQLDatabase
from llama_index.llms.ollama import Ollamafrom llama_index.core.query_engine import NLSQLTableQueryEnginefrom sqlalchemy import (create_engine,select,
)
from sqlalchemy import insert## prepare database and data 
engine = create_engine("mysql+pymysql://root:@172.16.1.54/llmdb")# 准备数据
sql_database = SQLDatabase(engine, include_tables=["city_stats"])# 创建大模型
llm = Ollama(model="llama3", request_timeout=360.0)# 构建查询引擎
query_engine = NLSQLTableQueryEngine(sql_database=sql_database, tables=["city_stats"], llm=llm
)query_str = "Which city has the highest population?"response = query_engine.query(query_str)#display(Markdown(f"<b>{response}</b>"))
print(response)

小结

本文只是实现了:通过本地大模型和数据库对话的基本功能。然而,通过大模型和数据库对话的真正的难点是如何适配不同的业务。让大模型可以理解业务的逻辑和需求,然后根据业务需要分解计算步骤,并计算结果。

参考文档

  • Text-to-SQL Guide (Query Engine + Retriever)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

你的 Mac 废纸篓都生苍蝇啦

今天给大家推荐个免费且有趣的小工具 BananaBin&#xff0c;它可以在你的废纸篓上“长”一些可爱的苍蝇&#x1fab0;。 软件介绍 BananaBin 是 macOS 上的一款有趣实用工具&#xff0c;当你的垃圾桶满了时&#xff0c;它会提醒你清理。这个软件通过在垃圾桶上添加互动的苍蝇…

S32DS S32 Design Studio for S32 Platform 3.5 软件安装离线激活

问题描述 重新下载安装 NXP s32系列芯片的集成开发环境&#xff08;IDE&#xff09; S32DS S32 Design Studio&#xff0c;当前版本 S32 Design Studio for S32 Platform 3.5&#xff0c;安装时遇到激活问题 在线激活&#xff0c;激活码哪里来&#xff1f; s32ds 不是免费的&a…

乐鑫ESPRESSIF芯片开发简介

乐鑫科技&#xff08;Espressif Systems&#xff0c;通常简称乐鑫或ESPRESSIF&#xff09;是一家全球化的无晶圆厂半导体公司&#xff0c;专注于研发无线通信微控制器单元&#xff08;MCU&#xff09;芯片&#xff0c;特别在物联网&#xff08;IoT&#xff09;领域有着显著的影…

【网工】学习笔记1

windows&#xff1a;ipconfig ens40&#xff1a;和别人通信的网卡 lo本地回环和自己通信的网卡 ifconfig down/up 进程&#xff1a;运行起来的程序 使用浏览器访问网站&#xff1a;http&#xff1a;电脑上的程序和网站上的程序之间的通信。 主要用于服务器和客户端之间上传和…

WPS中制作甘特图的详细教程

网上没几个详细说怎么在WPS中制作甘特图的&#xff0c;我自己整理了一下详细教程&#xff0c;最终效果如下图所示&#xff1a; 1.写好需要展示的项目相关信息&#xff0c;如下图所示&#xff1a; #####这个进度的百分比渐变效果这样设置就行了 2.现在我们需要计算已用时间和剩…

InnoDB中的表级锁、页级锁、行级锁详解

MySQL支持三种层级的锁定 我们知道&#xff0c;MySQL支持三种层级的锁定&#xff0c;分别为&#xff1a; 表级锁定 表级锁是MySQL中锁定粒度最大的一种锁&#xff0c;表示对当前操作的整张表加锁&#xff0c;它实现简单&#xff0c;资源消耗较少&#xff0c;被大部分MySQL引…

SQL 汇总各个部门当前员工的title类型的分配数目

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 有一个部门表…

机械硬盘坏了怎么导出数据?5中高效恢复数据的方法

面对机械硬盘损坏的紧急情况&#xff0c;如何有效地导出数据成为了许多用户关注的焦点。以下是对上述方法的深入分析与润色&#xff0c;旨在为用户提供更加全面、清晰的指导。 机械硬盘损坏后的数据导出策略 1. 利用数据恢复软件&#xff1a; 当机械硬盘出现逻辑故障或轻微物…

无人机便携式侦测干扰设备(定全向)技术详解

无人机便携式侦测干扰设备&#xff08;定全向&#xff09;是一种专门针对无人机进行侦测和干扰的设备。它具备定向和全向两种工作模式&#xff0c;能够覆盖较宽的频率范围&#xff0c;有效侦测并干扰无人机与遥控器之间的通信信号&#xff0c;从而达到控制或驱离无人机的目的。…

Pandas数据可视化详解:大案例解析(第27天)

系列文章目录 Pandas数据可视化解决不显示中文和负号问题matplotlib数据可视化seaborn数据可视化pyecharts数据可视化优衣库数据分析案例 文章目录 系列文章目录前言1. Pandas数据可视化1.1 案例解析&#xff1a;代码实现 2. 解决不显示中文和负号问题3. matplotlib数据可视化…

Llama-2 vs. Llama-3:利用微型基准测试(井字游戏)评估大模型

编者按&#xff1a; 如何更好地评估和比较不同版本的大语言模型&#xff1f;传统的学术基准测试固然重要&#xff0c;但往往难以全面反映模型在实际应用场景中的表现。在此背景下&#xff0c;本文作者别出心裁&#xff0c;通过让 Llama-2 和 Llama-3 模型进行井字游戏对决&…

一维前缀和的实现

这是C算法基础-基础算法专栏的第十一篇文章&#xff0c;专栏详情请见此处。 引入 我们用朴素做法求一维数组的区间和时&#xff0c;一般是从前向后循环累加&#xff0c;它的时间复杂度为&#xff0c;当求区间和的次数过多&#xff0c;则会有超时的可能&#xff0c;那有没有时间…

高效管理个人日程,智慧校园行政办公全指南

在智慧校园的行政办公体系里&#xff0c;个人日程管理功能担当起协调与优化每位教职员工日常安排的角色&#xff0c;它像一位贴心的时间助理&#xff0c;确保工作与私人生活的和谐并进。这一功能设计得既直观又灵活&#xff0c;让使用者能以自己偏好的视角审视时间规划&#xf…

物联网的技术和应用有哪些?

随着科技的飞速发展&#xff0c;物联网已经成为连接世界的重要纽带&#xff0c;塑造着我们未来的生活。我们一起深入探索物联网的前沿技术和前瞻性应用&#xff0c;一窥未来的可能性。 获取物联网解决方案&#xff0c;YesPMP平台一站式物联网开发服务。 提示&#xff1a;智慧家…

springboot的健身房预约管理系统-计算机毕业设计源码75535

目录 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 1.4开发技术 1.4.1 Java技术 1.4.2MVVM模式 1.4.3B/S结构 1.4.4SpringBoot框架 1.4.5 Mysql数据库 2系统分析 2.1 可行性分析 2.1.1经济可行性 2.1.2技术可行性 2.1.3操作可行性 2.2 系…

Python爬虫零基础实战,简洁实用!

1.爬虫简介 简单来讲&#xff0c;爬虫就是一个探测机器&#xff0c;它的基本操作就是模拟人的行为去各个网站溜达&#xff0c;点点按钮&#xff0c;查查数据&#xff0c;或者把看到的信息背回来。就像一只虫子在一幢楼里不知疲倦地爬来爬去。 你可以简单地想象&#xff1a;每个…

阶段总结——基于深度学习的三叶青图像识别

阶段总结——基于深度学习的三叶青图像识别 文章目录 一、计算机视觉图像分类系统设计二、训练模型2.1. 构建数据集2.2. 网络模型选择2.3. 图像数据增强与调参2.4. 部署模型到web端2.5. 开发图像识别小程序 三、实验结果3.1. 模型训练3.2. 模型部署 四、讨论五、参考文献&#…

Redis基础教程(十三):Redis lua脚本

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

Python用户宝典:了解并实现遗传算法

遗传算法是一种基于自然选择的技术&#xff0c;用于解决复杂问题。由于问题很复杂&#xff0c;遗传算法&#xff08;而不是其他方法&#xff09;被用来得出解决问题的合理方案。本文介绍遗传算法的基础知识以及如何用Python来实现。 遗传算法的要素 适应度函数 适应度函数衡…

Vue 常用指令详细介绍

Vue 常用指令 1.Vue 常用指令介绍 内容讲解 【1】Vue 指令介绍 在vue中指令是作用在视图中的即html标签&#xff0c;可以在视图中增加一些指令来设置html标签的某些属性和文本。 指令都是以带有 v- 前缀的特殊属性。 【2】使用Vue指令 使用指令时&#xff0c;通常编写在…