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

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)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 政策护航新能源助推绿色经济腾飞
  • 需求预测算法面试
  • pycharm如何使用jupyter
  • 什么是断路器模式?Hystrix在其中扮演什么角色?
  • 党员教育和管理系统的设计与实现
  • 本地部署 fish-speech
  • [程序员] gnu: binutils:addr2line 结果显示很多问号?
  • 【数据结构】(6.3)堆的应用——堆排序(C语言)
  • 问题集锦1
  • Java中初始化一个List的多种方式
  • 【Linux进程】进程优先级 Linux 2.6内核进程的调度
  • 分配工资(含代码详解)
  • git要忽略对文件的本地修改
  • Linux系统(CentOS)安装iptables防火墙
  • 1-2 什么是自然语言处理
  • 【面试系列】之二:关于js原型
  • Docker: 容器互访的三种方式
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • ES6核心特性
  • JavaScript的使用你知道几种?(上)
  • jQuery(一)
  • Redis中的lru算法实现
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 分享一份非常强势的Android面试题
  • 工作手记之html2canvas使用概述
  • 跨域
  • 每天10道Java面试题,跟我走,offer有!
  • 入门到放弃node系列之Hello Word篇
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 在weex里面使用chart图表
  • 积累各种好的链接
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​总结MySQL 的一些知识点:MySQL 选择数据库​
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (21)起落架/可伸缩相机支架
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (三)mysql_MYSQL(三)
  • (四)React组件、useState、组件样式
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)负载均衡,回话保持,cookie
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET 发展历程
  • .net 流——流的类型体系简单介绍
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .net6 core Worker Service项目,使用Exchange Web Services (EWS) 分页获取电子邮件收件箱列表,邮件信息字段
  • .Net7 环境安装配置
  • .net对接阿里云CSB服务
  • ??在JSP中,java和JavaScript如何交互?
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。