国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用ChatGPT解讀非結(jié)構(gòu)化數(shù)據(jù)【ChatGPT + SQL】

這篇具有很好參考價值的文章主要介紹了用ChatGPT解讀非結(jié)構(gòu)化數(shù)據(jù)【ChatGPT + SQL】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

許多現(xiàn)代數(shù)據(jù)系統(tǒng)都依賴于結(jié)構(gòu)化數(shù)據(jù),例如 Postgres DB 或 Snowflake 數(shù)據(jù)倉庫。 LlamaIndex 提供了許多由 LLM 提供支持的高級功能,既可以從非結(jié)構(gòu)化數(shù)據(jù)創(chuàng)建結(jié)構(gòu)化數(shù)據(jù),也可以通過增強(qiáng)的文本到 SQL 功能分析這些結(jié)構(gòu)化數(shù)據(jù)。

本指南有助于逐步了解這些功能中的每一項。 具體來說,我們涵蓋以下主題:

  • 推斷結(jié)構(gòu)化數(shù)據(jù)點:將非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)。
  • Text-to-SQL(基礎(chǔ)):如何使用自然語言查詢一組表。
  • 注入上下文:如何將每個表的上下文注入到 text-to-SQL 提示中。 上下文可以手動添加,也可以從非結(jié)構(gòu)化文檔中派生。
    = 在索引中存儲表上下文:默認(rèn)情況下,我們直接將上下文插入到提示中。 如果上下文很大,有時這是不可行的。 在這里,我們展示了如何實際使用 LlamaIndex 數(shù)據(jù)結(jié)構(gòu)來包含表上下文!

我們將瀏覽一個包含城市/人口/國家信息的示例數(shù)據(jù)庫。

用ChatGPT解讀非結(jié)構(gòu)化數(shù)據(jù)【ChatGPT + SQL】

推薦:用 NSDT場景設(shè)計器 快速搭建3D場景。

1、設(shè)置

首先,我們使用 SQLAlchemy 來設(shè)置一個簡單的 sqlite 數(shù)據(jù)庫:

from sqlalchemy import create_engine, MetaData, Table, Column, String, Integer, select, column

engine = create_engine("sqlite:///:memory:")
metadata_obj = MetaData(bind=engine)

然后我們創(chuàng)建一個 city_stats 表:

# create city SQL table
table_name = "city_stats"
city_stats_table = Table(
    table_name,
    metadata_obj,
    Column("city_name", String(16), primary_key=True),
    Column("population", Integer),
    Column("country", String(16), nullable=False),
)
metadata_obj.create_all()

現(xiàn)在是時候插入一些數(shù)據(jù)點了!

如果你希望通過從非結(jié)構(gòu)化數(shù)據(jù)推斷結(jié)構(gòu)化數(shù)據(jù)點來研究填充此表,請查看以下部分。 否則,可以選擇直接填充此表:

from sqlalchemy import insert
rows = [
    {"city_name": "Toronto", "population": 2731571, "country": "Canada"},
    {"city_name": "Tokyo", "population": 13929286, "country": "Japan"},
    {"city_name": "Berlin", "population": 600000, "country": "United States"},
]
for row in rows:
    stmt = insert(city_stats_table).values(**row)
    with engine.connect() as connection:
        cursor = connection.execute(stmt)

最后,我們可以用我們的 SQLDatabase 包裝器包裝 SQLAlchemy 引擎; 這允許在 LlamaIndex 中使用數(shù)據(jù)庫:

from llama_index import SQLDatabase

sql_database = SQLDatabase(engine, include_tables=["city_stats"])

如果數(shù)據(jù)庫中已經(jīng)填充了數(shù)據(jù),我們可以使用空白文檔列表實例化 SQL 索引。 否則請參閱以下部分。

index = GPTSQLStructStoreIndex(
    [],
    sql_database=sql_database, 
    table_name="city_stats",
)

2、推斷結(jié)構(gòu)化數(shù)據(jù)點

LlamaIndex 提供將非結(jié)構(gòu)化數(shù)據(jù)點轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)的功能。 在本節(jié)中,我們將展示如何通過提取有關(guān)每個城市的維基百科文章來填充 city_stats 表。

首先,我們使用 LlamaHub 的維基百科閱讀器加載一些有關(guān)相關(guān)數(shù)據(jù)的頁面。

from llama_index import download_loader

WikipediaReader = download_loader("WikipediaReader")
wiki_docs = WikipediaReader().load_data(pages=['Toronto', 'Berlin', 'Tokyo'])

當(dāng)我們建立SQL索引時,我們可以指定這些文檔作為第一個輸入; 這些文檔將被轉(zhuǎn)換為結(jié)構(gòu)化數(shù)據(jù)點并插入到數(shù)據(jù)庫中:

from llama_index import GPTSQLStructStoreIndex, SQLDatabase

sql_database = SQLDatabase(engine, include_tables=["city_stats"])
# NOTE: the table_name specified here is the table that you
# want to extract into from unstructured documents.
index = GPTSQLStructStoreIndex(
    wiki_docs, 
    sql_database=sql_database, 
    table_name="city_stats",
)

你可以查看當(dāng)前表以驗證是否已插入數(shù)據(jù)點!

# view current table
stmt = select(
    [column("city_name"), column("population"), column("country")]
).select_from(city_stats_table)

with engine.connect() as connection:
    results = connection.execute(stmt).fetchall()
    print(results)

3、文本到 SQL(基本)

LlamaIndex 提供“文本到 SQL”功能,既有最基本的水平,也有更高級的水平。 在本節(jié)中,我們將展示如何在基本級別上使用這些文本到 SQL 的功能。

此處顯示了一個簡單示例:

# set Logging to DEBUG for more detailed outputs
response = index.query("Which city has the highest population?", mode="default")
print(response)

你可以通過 response.extra_info[‘sql_query’] 訪問底層派生的 SQL 查詢。 它應(yīng)該看起來像這樣:

SELECT city_name, population
FROM city_stats
ORDER BY population DESC
LIMIT 1

4、注入上下文

默認(rèn)情況下,text-to-SQL 提示只是將表架構(gòu)信息注入到提示中。 但是,通常你可能還想添加自己的上下文。 本節(jié)向你展示如何添加上下文,可以手動添加,也可以通過文檔提取。

我們?yōu)槟闾峁┥舷挛臉?gòu)建器類以更好地管理 SQL 表中的上下文:SQLContextContainerBuilder。 這個類接受 SQLDatabase 對象和一些其他可選參數(shù),并構(gòu)建一個 SQLContextContainer 對象,然后你可以在構(gòu)造 + 查詢時將其傳遞給索引。

可以手動將上下文添加到上下文構(gòu)建器。 下面的代碼片段展示了如何實現(xiàn):

# manually set text
city_stats_text = (
    "This table gives information regarding the population and country of a given city.\n"
    "The user will query with codewords, where 'foo' corresponds to population and 'bar'"
    "corresponds to city."
)
table_context_dict={"city_stats": city_stats_text}
context_builder = SQLContextContainerBuilder(sql_database, context_dict=table_context_dict)
context_container = context_builder.build_context_container()

# building the index
index = GPTSQLStructStoreIndex(
    wiki_docs, 
    sql_database=sql_database, 
    table_name="city_stats",
    sql_context_container=context_container
)

你還可以選擇從一組非結(jié)構(gòu)化文檔中提取上下文。 為此,可以調(diào)用 SQLContextContainerBuilder.from_documents。 我們使用 TableContextPrompt 和 RefineTableContextPrompt(請參閱參考文檔)。

# this is a dummy document that we will extract context from
# in GPTSQLContextContainerBuilder
city_stats_text = (
    "This table gives information regarding the population and country of a given city.\n"
)
context_documents_dict = {"city_stats": [Document(city_stats_text)]}
context_builder = SQLContextContainerBuilder.from_documents(
    context_documents_dict, 
    sql_database
)
context_container = context_builder.build_context_container()

# building the index
index = GPTSQLStructStoreIndex(
    wiki_docs, 
    sql_database=sql_database, 
    table_name="city_stats",
    sql_context_container=context_container,
)

5、在索引中存儲表上下文

一個數(shù)據(jù)庫集合可以有很多表,如果每個表有很多列+與之相關(guān)的描述,那么整個上下文可能會非常大。

幸運(yùn)的是,可以選擇使用 LlamaIndex 數(shù)據(jù)結(jié)構(gòu)來存儲此表上下文! 然后,當(dāng)查詢 SQL 索引時,我們可以使用這個“邊”索引來檢索可以輸入到文本到 SQL 提示中的正確上下文。

這里我們使用 SQLContextContainerBuilder 中的 derive_index_from_context 函數(shù)來創(chuàng)建一個新索引。 你可以靈活地選擇要指定的索引類+要傳入的參數(shù)。然后我們使用一個名為 query_index_for_context 的輔助方法,它是 index.query 調(diào)用的簡單包裝器,它包裝了一個查詢模板+將上下文存儲在生成的上下文容器中 .

然后你可以構(gòu)建上下文容器,并在查詢期間將其傳遞給索引!

from gpt_index import GPTSQLStructStoreIndex, SQLDatabase, GPTSimpleVectorIndex
from gpt_index.indices.struct_store import SQLContextContainerBuilder

sql_database = SQLDatabase(engine)
# build a vector index from the table schema information
context_builder = SQLContextContainerBuilder(sql_database)
table_schema_index = context_builder.derive_index_from_context(
    GPTSimpleVectorIndex,
    store_index=True
)

query_str = "Which city has the highest population?"

# query the table schema index using the helper method
# to retrieve table context
SQLContextContainerBuilder.query_index_for_context(
    table_schema_index,
    query_str,
    store_context_str=True
)
context_container = context_builder.build_context_container()

# query the SQL index with the table context
response = index.query(query_str, sql_context_container=context_container)
print(response)

原文鏈接:ChatGPT+SQL — BimANt文章來源地址http://www.zghlxwxcb.cn/news/detail-420620.html

到了這里,關(guān)于用ChatGPT解讀非結(jié)構(gòu)化數(shù)據(jù)【ChatGPT + SQL】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)

    結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)

    結(jié)構(gòu)化的數(shù)據(jù)一般是指可以使用關(guān)系型數(shù)據(jù)庫表示和存儲,可以用二維表來邏輯表達(dá)實現(xiàn)的數(shù)據(jù)。例如:需要多少個屬性,每個屬性什么類型,每個屬性的取值范圍等等,類似下圖所示, 提前定義好了一個二維矩陣的元數(shù)據(jù) ,包含有列名稱、列的類型、列的約束等: ? 可見

    2024年02月09日
    瀏覽(93)
  • MySql003——SQL(結(jié)構(gòu)化查詢語言)基礎(chǔ)知識

    DB:數(shù)據(jù)庫(Database) 即存儲數(shù)據(jù)的“倉庫”,其本質(zhì)是一個 文件系統(tǒng) 。它保存了一系列有組織的數(shù)據(jù)。 DBMS:數(shù)據(jù)庫管理系統(tǒng)(Database Management System) 是一種操縱和管理數(shù)據(jù)庫的 大型軟件 (例如我們前面下載的MySQL軟件),用于建立、使用和維護(hù)數(shù)據(jù)庫,對數(shù)據(jù)庫進(jìn)行統(tǒng)一

    2024年02月15日
    瀏覽(70)
  • 【案例】--非結(jié)構(gòu)化數(shù)據(jù)中臺案例

    最近接觸一個平臺架構(gòu)的討論,公司需要一個非結(jié)構(gòu)化數(shù)據(jù)中臺,理念是能夠滿足存儲隨時變換的非結(jié)構(gòu)化數(shù)據(jù),另外引入低代碼思想。由于非結(jié)構(gòu)化數(shù)據(jù)是未知的,不同業(yè)務(wù)的數(shù)據(jù)是不同,為了更好的使用,低代碼就需要一種方案,在盡量不開發(fā)代碼下滿足相關(guān)需求變化,

    2024年02月10日
    瀏覽(28)
  • 什么是T-SQL編程?T-SQL是Transact-SQL的縮寫,是一種擴(kuò)展了SQL(結(jié)構(gòu)化查詢語言)的編程語言,用于Microsoft SQL Server數(shù)據(jù)庫管理系統(tǒng)中的數(shù)據(jù)管理和操作。T-

    什么是T-SQL編程? T-SQL是Transact-SQL的縮寫,是一種 擴(kuò)展了SQL(結(jié)構(gòu)化查詢語言) 的編程語言,用于Microsoft?SQL?Server數(shù)據(jù)庫管理系統(tǒng)中的數(shù)據(jù)管理和操作。T-SQL支持創(chuàng)建 存儲過程、觸發(fā)器、函數(shù) 等高級特性,能夠更加靈活地進(jìn)行數(shù)據(jù)操作和處理?;镜腡-SQL語法與標(biāo)準(zhǔn)SQL很相

    2024年01月21日
    瀏覽(100)
  • 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù)

    【跟小嘉學(xué) Rust 編程】一、Rust 編程基礎(chǔ) 【跟小嘉學(xué) Rust 編程】二、Rust 包管理工具使用 【跟小嘉學(xué) Rust 編程】三、Rust 的基本程序概念 【跟小嘉學(xué) Rust 編程】四、理解 Rust 的所有權(quán)概念 【跟小嘉學(xué) Rust 編程】五、使用結(jié)構(gòu)體關(guān)聯(lián)結(jié)構(gòu)化數(shù)據(jù) 本章節(jié)講解一種自定義數(shù)據(jù)類型

    2024年02月10日
    瀏覽(33)
  • python序列化和結(jié)構(gòu)化數(shù)據(jù)詳解

    序列化和結(jié)構(gòu)化數(shù)據(jù)是計算機(jī)程序中非常重要的概念,它們的原理和應(yīng)用在許多應(yīng)用程序中都是必不可少的。Python作為一種高級編程語言,在序列化和結(jié)構(gòu)化數(shù)據(jù)方面提供了很多優(yōu)秀的解決方案。在本文中,我們將詳細(xì)介紹Python中序列化和結(jié)構(gòu)化數(shù)據(jù)的相關(guān)概念和應(yīng)用。 1.

    2024年02月08日
    瀏覽(28)
  • 一種使得大模型輸出結(jié)構(gòu)化數(shù)據(jù)的簡易方法

    一種使得大模型輸出結(jié)構(gòu)化數(shù)據(jù)的簡易方法

    最近在用大模型跑一些數(shù)據(jù),于是就不可避免的遇到了如何讓大模型輸出的格式便于處理這個問題。經(jīng)過一些研究發(fā)現(xiàn)了一套比較有用的方法,在這里總結(jié)一下。 任務(wù)是這樣的,我需要用大模型(比如ChatGPT,ChatGLM等等)對文本進(jìn)行名詞提取。輸入一段文本,我需要大模型理

    2024年02月16日
    瀏覽(27)
  • 13.JavaWeb & XML:構(gòu)建結(jié)構(gòu)化數(shù)據(jù)的重要工具

    目錄 導(dǎo)語: 一、XML概念 (1)可拓展 (2)功能-存儲數(shù)據(jù) (3)xml與html的區(qū)別 二、XML內(nèi)容 三、XML用途 四、案例:使用XML構(gòu)建在線書店的書籍?dāng)?shù)據(jù)庫 結(jié)語: ????在當(dāng)今的信息時代,數(shù)據(jù)結(jié)構(gòu)化和管理成為了一個重要課題。XML(eXtensible Markup Language,可擴(kuò)展標(biāo)記語言)作為一

    2024年04月09日
    瀏覽(27)
  • StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析

    StarRocks 生成列:百倍提速半結(jié)構(gòu)化數(shù)據(jù)分析

    半結(jié)構(gòu)化分析主要是指對 MAP,STRUCT,JSON,ARRAY 等復(fù)雜數(shù)據(jù)類型的查詢分析。這些數(shù)據(jù)類型表達(dá)能力強(qiáng),因此被廣泛應(yīng)用到 OLAP 分析的各種場景中,但由于其實現(xiàn)的復(fù)雜性,對這些復(fù)雜類型分析將會比一般簡單類型要更困難和耗時,例如: 需要對 MAP,STRUCT,JSON 等數(shù)據(jù)類型中

    2024年01月22日
    瀏覽(26)
  • Verilog的三種描述方式(結(jié)構(gòu)化描述、數(shù)據(jù)流描述、行為級描述對電路功能的描述有三種方式:結(jié)構(gòu)化描述、數(shù)據(jù)流描述、行為級描述

    Verilog的三種描述方式(結(jié)構(gòu)化描述、數(shù)據(jù)流描述、行為級描述對電路功能的描述有三種方式:結(jié)構(gòu)化描述、數(shù)據(jù)流描述、行為級描述

    Verilog的三種描述方式(結(jié)構(gòu)化描述、數(shù)據(jù)流描述、行為級描述對電路功能的描述有三種方式:結(jié)構(gòu)化描述、數(shù)據(jù)流描述、行為級描述。三種描述方式抽象級別不同,各有優(yōu)缺點,相輔相成,需要配合使用。 目錄 一、結(jié)構(gòu)化描述 1、概念 2、特點 3、示例 真值表: 電路抽象:

    2024年02月04日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包