用ChatGPT解读非结构化数据【ChatGPT + SQL】

许多现代数据系统都依赖于结构化数据,例如 Postgres DB 或 Snowflake 数据仓库。 LlamaIndex 提供了许多由 LLM 提供支持的高级功能,既可以从非结构化数据创建结构化数据,也可以通过增强的文本到 SQL 功能分析这些结构化数据。

本指南有助于逐步了解这些功能中的每一项。 具体来说,我们涵盖以下主题:

  • 推断结构化数据点:将非结构化数据转换为结构化数据。
  • Text-to-SQL(基础):如何使用自然语言查询一组表。
  • 注入上下文:如何将每个表的上下文注入到 text-to-SQL 提示中。 上下文可以手动添加,也可以从非结构化文档中派生。
    = 在索引中存储表上下文:默认情况下,我们直接将上下文插入到提示中。 如果上下文很大,有时这是不可行的。 在这里,我们展示了如何实际使用 LlamaIndex 数据结构来包含表上下文!

我们将浏览一个包含城市/人口/国家信息的示例数据库。

在这里插入图片描述

推荐:用 NSDT场景设计器 快速搭建3D场景。

1、设置

首先,我们使用 SQLAlchemy 来设置一个简单的 sqlite 数据库:

from sqlalchemy import create_engine, MetaData, Table, Column, String, Integer, select, columnengine = create_engine("sqlite:///:memory:")
metadata_obj = MetaData(bind=engine)

然后我们创建一个 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()

现在是时候插入一些数据点了!

如果你希望通过从非结构化数据推断结构化数据点来研究填充此表,请查看以下部分。 否则,可以选择直接填充此表:

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 中使用数据库:

from llama_index import SQLDatabasesql_database = SQLDatabase(engine, include_tables=["city_stats"])

如果数据库中已经填充了数据,我们可以使用空白文档列表实例化 SQL 索引。 否则请参阅以下部分。

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

2、推断结构化数据点

LlamaIndex 提供将非结构化数据点转换为结构化数据的功能。 在本节中,我们将展示如何通过提取有关每个城市的维基百科文章来填充 city_stats 表。

首先,我们使用 LlamaHub 的维基百科阅读器加载一些有关相关数据的页面。

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

当我们建立SQL索引时,我们可以指定这些文档作为第一个输入; 这些文档将被转换为结构化数据点并插入到数据库中:

from llama_index import GPTSQLStructStoreIndex, SQLDatabasesql_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",
)

你可以查看当前表以验证是否已插入数据点!

# 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”功能,既有最基本的水平,也有更高级的水平。 在本节中,我们将展示如何在基本级别上使用这些文本到 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 查询。 它应该看起来像这样:

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

4、注入上下文

默认情况下,text-to-SQL 提示只是将表架构信息注入到提示中。 但是,通常你可能还想添加自己的上下文。 本节向你展示如何添加上下文,可以手动添加,也可以通过文档提取。

我们为你提供上下文构建器类以更好地管理 SQL 表中的上下文:SQLContextContainerBuilder。 这个类接受 SQLDatabase 对象和一些其他可选参数,并构建一个 SQLContextContainer 对象,然后你可以在构造 + 查询时将其传递给索引。

可以手动将上下文添加到上下文构建器。 下面的代码片段展示了如何实现:

# 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
)

你还可以选择从一组非结构化文档中提取上下文。 为此,可以调用 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、在索引中存储表上下文

一个数据库集合可以有很多表,如果每个表有很多列+与之相关的描述,那么整个上下文可能会非常大。

幸运的是,可以选择使用 LlamaIndex 数据结构来存储此表上下文! 然后,当查询 SQL 索引时,我们可以使用这个“边”索引来检索可以输入到文本到 SQL 提示中的正确上下文。

这里我们使用 SQLContextContainerBuilder 中的 derive_index_from_context 函数来创建一个新索引。 你可以灵活地选择要指定的索引类+要传入的参数。然后我们使用一个名为 query_index_for_context 的辅助方法,它是 index.query 调用的简单包装器,它包装了一个查询模板+将上下文存储在生成的上下文容器中 .

然后你可以构建上下文容器,并在查询期间将其传递给索引!

from gpt_index import GPTSQLStructStoreIndex, SQLDatabase, GPTSimpleVectorIndex
from gpt_index.indices.struct_store import SQLContextContainerBuildersql_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.rhkb.cn/news/6184.html

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

相关文章

ChatGPT也能助力建筑设计,这么智能?

ChatGPT也称为 Generative Pre-trained Transformer,是一种强大的语言生成工具,具有生成类人文本的能力。这项技术有可能通过为建筑师提供与客户、承包商和其他利益相关者沟通和协作的新方式来彻底改变建筑行业。在这篇文章中,我们将探讨架构…

【AI Code】CodeGeex:你的免费AI编程助手——基于清华ChatGLM的130亿参数预训练大模型

CodeGeex官网:https://codegeex.cn/zh-CN 在线体验地址:https://codegeex.cn/zh-CN/playground 论文:https://arxiv.org/pdf/2303.17568.pdf 开源地址:GitHub - THUDM/CodeGeeX: CodeGeeX: An Open Multilingual Code Generation Model 目录 </

分享一个国内可用的免费GPT-AI网站

背景 ChatGPT作为一种基于人工智能技术的自然语言处理工具&#xff0c;近期的热度直接沸腾&#x1f30b;。 我们也忍不住做了一个基于ChatGPT的网站&#xff0c;可以免登陆&#xff01;&#xff01;国内可直接对话AI&#xff0c;也有各种提供工作效率的工具供大家使用。 ** …

当我问了ChatGPT 10个程序员最关心的问题,没想到…

源&#xff5c;AfterShip 近期 OpenAI 火爆了科技圈。作为一家极客氛围浓厚&#xff0c;60% 都是产研的科技公司&#xff0c;AfterShip 的很多同学也都留意到了这个工具。 因此&#xff0c;我们面向工程师征集共创&#xff0c;并筛选出了程序员最关心的十个问题。并将这些问题询…

ChatGPT(GPT3.5) OpenAI官方API正式发布

OpenAI社区今天凌晨4点多发送的邮件&#xff0c;介绍了ChatGPT官方API的发布。官方介绍文档地址为“OpenAI API”和“OpenAI API”。 ChatGPT(GPT3.5)官方API模型名称为“gpt-3.5-turbo”和“gpt-3.5-turbo-0301”。API调用价格比GPT text-davinci-003模型便宜10倍。调用费用为…

AI落地:如何用ChatGPT写出可用的长文?

用ChatGPT写长文一直是个难题&#xff0c;原因主要是单个回答字数的限制&#xff08;约1000字&#xff09;以及多轮会话有限的记忆能力。 如果我想写一篇1万字甚至更长的文章&#xff0c;应该如何做呢&#xff1f; 下面以“普通人的AIGC学习手册”为题。 直接提问会有什么问…

如何用ChatGPT做一门课?(包含大纲、脚本、PPT文本)

【ChatGPT】前些天发现了一个巨牛的人工智能学习资源&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击查看学习资源&#xff09; 该场景对应的关键词库&#xff08;13个&#xff09;&#xff1a; 市场调研、在…

你要的并不是ChatGPT,而是强大和经济的算力

编辑&#xff1a;阿冒 设计&#xff1a;沐由 2022年12月&#xff0c;AI创业公司OpenAI推出了聊天机器人ChatGPT。作为生成式AI在文本领域的实际应用之一&#xff0c;ChatGPT的问世距今不过百天而已&#xff0c;却已经火爆了全球。 君不见&#xff0c;大学生们用它撰写论文&…

比ChatGPT强大100万倍!老黄预测未来AI模型,网友:夸张但又不无道理

白交 发自 凹非寺量子位 | 公众号 QbitAI 比ChatGPT强大100万倍&#xff01; 这是老黄黄仁勋给出的AI模型未来十年预测。 在最新财报会议上&#xff0c;几乎没有人再谈论游戏图形&#xff0c;一切都与人工智能相关。 不少网友认为100万倍的说辞是英伟达面向董事会和股东的“夸大…

紧跟时代潮流,如用ChatGPT速成自媒体达人

每一个选题是否成为爆款和热门&#xff0c;这个就占了80%&#xff0c;为什么&#xff1f;因为我看到你的标题&#xff0c;我可以点进去啊&#xff0c;不管内容如何&#xff0c;至少让人眼前一亮&#xff0c;有点进去的欲望&#xff0c;至少浏览量会很大&#xff0c;这就成功了一…

如何利用 ChatGPT 和 GPT4 搞用户调研?

这位产品经理&#xff0c;GPT-4都已经发布了&#xff0c;你还在纯人工搞用户调研吗&#xff1f;还在为纯人工搞用户调研而烦恼&#xff1f; 不如把问题交给GPT-4和ChatGPT&#xff0c;放心啃着方便面消遣吧&#xff01; 对于 ChatGPT及GPT-4 是什么&#xff0c;相信大家已经有所…

chatgpt赋能python:Python如何收集数据:一份基本指南

Python如何收集数据&#xff1a;一份基本指南 Python是一门广泛应用于数据分析和挖掘的编程语言, 而数据的管道之一就是数据收集。无论你是用于市场研究&#xff0c;竞争情报收集或仅仅是出于好奇心&#xff0c;Python提供了许多的数据收集可视化框架&#xff0c;各种库和工具…

里程碑,ChatGPT插件影响几何?

目录 插件发布网络浏览器代码解释器平台生态微软魄力总结 3月15日OpenAI推出了GPT-4&#xff0c;引起了全球轰动&#xff0c;仅仅过去一周多时间&#xff0c;OpenAI又宣布推出插件功能。如果说ChatGPT是AI的“iPhone时刻”&#xff0c;那么插件就是ChatGPT的“App Store”。超强…

ChatGPT插件权限给Plus用户放开了

大家好&#xff0c;我是章北海mlpy ChatGPT插件权限给Plus用户放开了 我稍微测试了俩&#xff0c;感觉还行&#xff0c;后续我会对一些热门插件深入测测&#xff0c;敬请期待。 官方对插件的介绍如下&#xff1a; 1、插件由非由OpenAI控制的第三方应用程序提供动力。在安装…

IDEA装上这3款ChatGPT插件,彻底炸裂!!

今天&#xff0c;给大家介绍3款好用的IntelliJ IDEA ChatGPT插件,各有千秋&#xff0c;可以帮我自动写代码&#xff0c;自动改善代码性能和安全并且生成视图对比&#xff0c;以及解释代码&#xff0c;优化代码&#xff0c;生成单元测试用例&#xff0c;更牛逼的是直接可以根据描…

好用的IntelliJ IDEA ChatGPT插件:NexChatGPT

随着ChatGPT的爆火&#xff0c;ChatGPT给我们的生产生活带来一定的影响&#xff0c;ChatGPT相关的工具插件潮水般的涌现。ChatGPT对IT的影响也不小&#xff0c;尤其是自动化编程&#xff0c;今天介绍几款IntelliJ IDEA中ChatGPT插件。 一、NexChatGPT NexChatGPT是一款开箱即…

ChatGPT从业影响之个人浅见

文章目录 前言ChatGPT简介AI简介ChatGPT对从业者的影响参考资料 前言 ChatGRT最近很火&#xff0c;网上有一些观点&#xff0c;他会取代很多职业&#xff0c;让产业产生颠覆性的变化。今天聊聊自己的想法&#xff0c;他的出现&#xff0c;是否会让我&#xff08;程序员&#x…

使用爆火ChatGPT自动编写Python爬虫脚本,学会之后兼职能有多香

都知道最近ChatGPT聊天机器人爆火&#xff0c;我也想方设法注册了账号&#xff0c;据说后面要收费了。 ChatGPT是一种基于大语言模型的生成式AI&#xff0c;换句话说它可以自动生成类似人类语言的文本&#xff0c;把梳理好的有逻辑的答案呈现在你面前&#xff0c;这完全不同于…

利用chatgpt帮我写爬虫代码

首先我这里需要先赋予它一个身份&#xff0c;以便他更好的理解我们的话 接下来就可以让他帮我们写代码了 import requests from bs4 import BeautifulSoup# 请求头部信息&#xff0c;模拟浏览器访问 headers {user-agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/5…

我用ChatGPT+爬虫搞钱,赚翻了,成为第一个吃螃蟹的人

今年真是太科幻了&#xff0c;各路令人赞叹的AI产品接连问世&#xff0c;感觉幻想过的未来已在眼前。就与多年前移动互联网的普及一样&#xff0c;我们正处于AI改变世界的前夜。 在众多优秀的人工智能产品中&#xff0c;以ChatGPT最为火爆&#xff01;在OpenAI为其推出了GPT-4…