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.pswp.cn/web/40559.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40559.shtml
英文地址,請注明出處:http://en.pswp.cn/web/40559.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何用Java寫一個整理Java方法調用關系網絡的程序

大家好&#xff0c;我是猿碼叔叔&#xff0c;一位 Java 語言工作者&#xff0c;也是一位算法學習剛入門的小學生。很久沒有為大家帶來干貨了。 最近遇到了一個問題&#xff0c;大致是這樣的&#xff1a;如果給你一個 java 方法&#xff0c;如何找到有哪些菜單在使用。我的第一想…

線程中如何有效避免死鎖問題

1. 理解死鎖形成的原因 互斥條件&#xff1a;一個資源每次只能被一個線程使用。 請求與保持條件&#xff1a;線程因請求資源而阻塞時&#xff0c;對已獲得的資源保持不放。 不剝奪條件&#xff1a;線程已獲得的資源&#xff0c;在末使用完之前&#xff0c;不能強行剝奪。 循環…

c++ primer plus 第15章友,異常和其他:15.1.3 其他友元關系

c primer plus 第15章友&#xff0c;異常和其他&#xff1a;15.1.3 其他友元關系 提示&#xff1a;這里可以添加系列文章的所有文章的目錄&#xff0c;目錄需要自己手動添加 15.1.3 其他友元關系 提示&#xff1a;寫完文章后&#xff0c;目錄可以自動生成&#xff0c;如何生成可…

整潔架構SOLID-單一職責原則(SRP)

文章目錄 定義案例分析重復的假象代碼合并解決方案 小結 定義 SRP是SOLID五大設計原則中最容易被誤解的一個。也許是名字的原因&#xff0c;很多程序員根據SRP這個名字想當然地認為這個原則就是指&#xff1a;每個模塊都應該只做一件事。 在歷史上&#xff0c;我們曾經這樣描…

科研繪圖系列:R語言雙側條形圖(bar Plot)

介紹 雙側條形圖上的每個條形代表一個特定的細菌屬,條形的高度表示該屬的LDA得分的對數值,顏色用來區分不同的分類群或組別,它具有以下優點: 可視化差異:條形圖可以直觀地展示不同細菌屬在得分上的差異。強調重要性:較高的條形表示某些特征在區分不同組別中具有重要作用…

# Sharding-JDBC從入門到精通(6)-- Sharding-JDBC 水平分庫 和 垂直分庫。

Sharding-JDBC從入門到精通&#xff08;6&#xff09;-- Sharding-JDBC 水平分庫 和 垂直分庫。 一、Sharding-JDBC 水平分庫-分片策略配置 1、分庫策略定義方式如下 # 分庫策略&#xff0c;如何將一個邏輯表映射到多個數據源 spring.shardingsphere.sharding.tables.<邏…

第33集《大乘起信論》

《大乘起信論》和尚尼慈悲&#xff0c;諸位法師、諸位居士&#xff0c;阿彌陀佛&#xff01;&#xff08;阿彌陀佛&#xff01;&#xff09;請大家打開《講義》第七十四頁&#xff0c;子二、釋觀。 本論的特色&#xff0c;一言以蔽之就是文簡意賅、辭約理富&#xff0c;就是說…

VUE2拖拽組件:vue-draggable-resizable-gorkys

vue-draggable-resizable-gorkys組件基于vue-draggable-resizable進行二次開發, 用于可調整大小和可拖動元素的組件并支持沖突檢測、元素吸附、元素對齊、輔助線 安裝: npm install --save vue-draggable-resizable-gorkys 全局引用: import Vue from vue import vdr fro…

嵌入式linux面試1

1. linux 1.1. Window系統和Linux系統的區別 linux區分大小寫windows在dos&#xff08;磁盤操作系統&#xff09;界面命令下不區分大小寫&#xff1b; 1.2. 文件格式區分 windows用擴展名區分文件&#xff1b;如.exe代表執行文件&#xff0c;.txt代表文本文件&#xff0c;.…

運用Python與Keras框架打造深度學習圖像分類應用:詳盡步驟與代碼實例解析

引言 隨著深度學習技術的飛速發展&#xff0c;其在圖像識別和分類領域的應用日益廣泛。在這一背景下&#xff0c;Python因其豐富的數據科學庫和強大的生態系統而成為首選編程語言之一。在本文中&#xff0c;我們將深入探討如何使用Python和其中的Keras深度學習框架來完成一個實…

手動將dingtalk-sdk-java jar包打入maven本地倉庫

有時候,中央鏡像庫不一定有自己需要的jar包,這時候我們就需要用到該方法,將jar打入maven本地倉庫,然后項目中,正常使用maven的引入規則。 mvn install:install-file -Dmaven.repo.local=D:\software\maven\apache-maven-3.6.3-bin\apache-maven-3.6.3\repo -DgroupId=ding…

學習筆記——交通安全分析11

目錄 前言 當天學習筆記整理 4信控交叉口交通安全分析 結束語 前言 #隨著上一輪SPSS學習完成之后&#xff0c;本人又開始了新教材《交通安全分析》的學習 #整理過程不易&#xff0c;喜歡UP就點個免費的關注趴 #本期內容接上一期10筆記 #最近確實太懶了&#xff0c;接受…

跨越數據邊界:域適應在目標檢測中的革新作用

標題&#xff1a;跨越數據邊界&#xff1a;域適應在目標檢測中的革新作用 在機器學習和計算機視覺領域&#xff0c;尤其是目標檢測任務中&#xff0c;域適應&#xff08;Domain Adaptation&#xff09;是一種關鍵技術&#xff0c;它解決了模型在不同數據分布上的泛化問題。當訓…

C語言字節對齊技術在嵌入式、網絡與操作系統中的應用與優化

第一部分&#xff1a;嵌入式系統中的字節對齊 嵌入式系統通常對性能和資源有著嚴格的要求。在這些系統中&#xff0c;字節對齊的正確使用可以顯著提高數據訪問速度&#xff0c;減少內存占用&#xff0c;并提高系統的整體效率。 一、嵌入式系統中的字節對齊挑戰 嵌入式系統中…

Caffeinated for Mac v2.0.6 Mac防休眠應用 兼容 M1/M2/M3

Caffeinated 可以防止您的 Mac 進入休眠狀態、屏幕變暗或者啟動屏幕保護。 應用介紹 您的屏幕是否總是在您不希望的時候變暗&#xff1f;那么Caffeinated就是您解決這個大麻煩的最好工具啦。Caffeinated是在Caffeine這個非常便捷、有用的工具的基礎上開發而來的。Caffeinated…

215. 數組中的第K個最大元素(中等)

215. 數組中的第K個最大元素 1. 題目描述2.詳細題解3.代碼實現3.1 Python3.2 Java 1. 題目描述 題目中轉&#xff1a;215. 數組中的第K個最大元素 2.詳細題解 快速排序算法在每一輪排序中&#xff0c;隨機選擇一個數字 x x x&#xff0c;根據與 x x x的大小關系將要排序的數…

PMP–知識卡片--PDCA循環

記憶 PDCA&#xff1a;計劃執行檢查調整&#xff0c;計劃觀察動作&#xff1b;plan do check action 定義 PDCA循環的含義是將質量管理分為四個過程&#xff0c;即計劃&#xff08;Plan&#xff09;、執行&#xff08;Do&#xff09;、檢查&#xff08;Check&#xff09;、處…

C++開發調試工具:GDB調試,windebug調試,adb調試

我們在C開發過程中時常避免不了要調試追蹤&#xff0c;一下介紹最主流的三種調試工具&#xff1a; 一.GDB調試 1.coredump文件&#xff1a; coredump文件是程序異常時系統產生的錯誤日志文件&#xff0c;即核心轉儲文件&#xff1b; 編譯一個debug程序&#xff0c;必須是debu…

使用 OpenCV 和 Python 進行車道檢測和物體檢測(YOLO)

本項目旨在開發一個集車道檢測與物體檢測功能于一體的智能視覺分析系統&#xff0c;利用先進的計算機視覺技術和深度學習模型&#xff0c;實現實時的道路場景理解和目標識別。系統主要依托OpenCV這一強大的計算機視覺庫&#xff0c;以及Python作為編程語言&#xff0c;融合了車…

MySQL索引教程(01):創建索引

文章目錄 MySQL 創建索引索引介紹MySQL CREATE INDEX 語法MySQL 索引類型MySQL CREATE INDEX 實例結論 MySQL 創建索引 對于一個具有大量數據行的表&#xff0c;如果你根據某個查詢條件檢索數據時很慢&#xff0c;可能是因為你沒有在檢索條件相關的列上創建索引。 索引類似于…