## 引言

随着企业数据的不断增长,有效地从结构化数据中提取信息已变得越来越重要。通过结合大型语言模型(LLM)和SQL查询技术,我们可以创建一个强大的问答系统,能够从数据库中自然语言地提取信息。本指南将详细介绍如何在SQL数据上构建一个问答系统,帮助你提高数据的使用效率和决策能力。

## 主要内容

### 1. 架构概述

问答系统的基本步骤如下:
1. 将问题转化为DSL(如SQL)查询。
2. 执行SQL查询。
3. 使用查询结果回答问题。

### 2. 设置环境

首先,我们需要安装必要的包并设置环境变量:

```python
# 安装必要的Python包
%%capture --no-stderr
%pip install --upgrade --quiet langchain langchain-community langchain-openai faiss-cpu

# 设置API密钥
import getpass
import os

if not os.environ.get("OPENAI_API_KEY"):
    os.environ["OPENAI_API_KEY"] = getpass.getpass()

3. 数据库设置

我们将使用SQLite连接并示例性的Chinook数据库进行操作。确保Chinook.db在当前目录中可以使用,并与SQLAlchemy驱动的SQLDatabase类进行接口。

from langchain_community.utilities import SQLDatabase

db = SQLDatabase.from_uri("sqlite:///Chinook.db")
print(db.get_usable_table_names())

4. 构建问答链

使用链

链适用于步骤可预测的应用程序。我们可以创建一个简单的链,将问题转换为SQL查询,执行该查询,并使用结果回答原始问题。

from langchain.chains import create_sql_query_chain
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")

chain = create_sql_query_chain(llm, db)
response = chain.invoke({"question": "How many employees are there"})
db.run(response)
使用代理

LangChain的SQL代理提供了一种更灵活的与SQL数据库交互的方法。代理可以根据数据库的模式和内容回答问题,并可以在查询失败时生成新的查询。

from langchain_community.agent_toolkits import SQLDatabaseToolkit

toolkit = SQLDatabaseToolkit(db=db, llm=llm)
agent_executor = create_react_agent(llm, toolkit.get_tools())

代码示例

以下代码展示了如何通过链和代理查询数据库中的员工数量。

# 使用链方法的示例
response = chain.invoke({"question": "How many employees are there?"})
print(f"Total employees: {db.run(response)}")

# 使用代理方法的示例
for s in agent_executor.stream({"messages": [{"content": "How many employees are there?"}]}):
    print(s)

常见问题和解决方案

  • 安全性:因问答系统涉及执行由模型生成的SQL查询,需确保数据库连接权限尽可能的小。
  • 高卡方列处理:使用向量存储检查拼写的正确性,以确保准确性。

总结和进一步学习资源

本文帮助你了解了如何在SQL数据上构建基于LLM的问答系统。进一步的学习资源如下:

  • LangChain 文档
  • OpenAI API 文档

参考资料

  1. LangChain Documentation
  2. OpenAI API Reference

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

---END---
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐