PostgreSQL AI 数据库代理: 简介

John Doe 八月 19, 2024

摘要:在本文中,我们将学习 AI 数据库代理的基础知识,并尝试创建一个简单的数据库 AI 代理。

目录

介绍

生成式 AI 是许多工程师最关心的问题。如何应用它来解决业务问题和提高生产力,问题仍然悬而未决。有各种 AI 代理,它们可以与不同的系统和 API 进行交互。AI 代理或这些代理的组合,将会深刻影响我们今天与计算机和系统一起工作的方式。

我今天要研究的一个例子是数据库 AI 代理。我们可以称其为文本转 SQL 模型,它将人类自然语言的请求转换为 SQL 语言,并产生类似人类自然语言的响应。

我们将使用开源工具的组合:

  • Langchain – 一个开源 python 库,为开发人员提供一套全面的资源,来开发在大型语言模型上运行的应用程序(LLM)。
  • PostgreSQL – 我们将使用 PostgreSQL 来作为包含示例数据的数据库。我将使用 Pagila,这是移植到 PostgreSQL 的著名 Sakila 示例数据库。数据库的结构可以在这里找到。

设置数据库

从 GitHub 获取 Pagila 数据库的 SQL:

git clone https://github.com/devrimgunduz/pagila

创建数据库:

CREATE DATABASE pagila;

创建表结构:

cat pagila/pagila-schema.sql | psql -U postgres -d pagila

插入数据:

cat pagila/pagila-data.sql | psql -U postgres -d pagila

我还将创建用户 pagila,以从我的脚本访问数据库:

create user pagila with password 'SOMEPASSWORD';
\c pagila
GRANT ALL PRIVILEGES ON DATABASE pagila to pagila;
grant select on all tables in schema public to pagila;

设置 Langchain

有了 Langchain,任何 LLM 都可以使用。在我们的示例中,我们将使用 Google Gemini 模型,该模型需要密钥。您也可以在该代理的下一次迭代改进中使用 OpenAI。

首先安装所需的 Python 包。通常的建议是使用 pip:

pip install --upgrade --quiet langchain langchain-google-genai pillow

一个简单的脚本,0_langchain_gemini_test.py,问 Gemini,“What’s the weather in San Francisco?” 您可以设置 GOOGLE_API_KEY 变量,但如果没有,脚本将会请求它。

import getpass
import os
from langchain_google_genai import ChatGoogleGenerativeAI

if "GOOGLE_API_KEY" not in os.environ:
    os.environ["GOOGLE_API_KEY"] = getpass.getpass("Provide your Google API Key")

llm = ChatGoogleGenerativeAI(model="gemini-pro")
result = llm.invoke("What's the weather in San Francisco?")
print(result.content)
$ python3 0_langchain_gemini_test.py

Based on the search results, here is a summary of the current weather in San Francisco:

The weather in San Francisco is currently misty with a temperature of around 53°F (12°C). There is complete cloud cover and moderate winds from the northwest around 5-9 mph (9-14 km/h). Humidity is high at 88%. Visibility is around 3 miles (6.4 km).

The results provide an hourly forecast as well as current conditions from a couple different weather sources. Let me know if you need any additional details about the San Francisco weather!
...

它正常工作了。

查询数据库

我们已经完成了初始设置;我们来查询一下数据库。

安装所需的库:

pip install --upgrade --quiet langchain-community psycopg2-binary

为了测试查询数据库,我们使用了 1_langchain_gemini_postgresql.py 脚本。该脚本以人类可读的格式,将用户问题作为参数,并生成响应结果。

为此,我们将使用 create_sql_agent 函数,来构造一个专门设计用于与 SQL 数据库交互的代理。该代理将语言模型(如 Gemini)与理解和操作 SQL 查询的专用工具相结合。

除了 GOOGLE_API_KEY 之外,我们还需要提供有关数据库的详细信息:

dbname="pagila"
username=os.environ["PG_USERNAME"]
password=os.environ["PG_PASSWORD"]
hostname="localhost"
port="5432"

请确保设置好环境变量 PG_USERNAME 和 PG_PASSWORD。

让我们从一个简单的问题开始:

$ python3 1_langchain_gemini_postgresql.py "How many films are there in the database?"

> Entering new SQL Agent Executor chain...
I should find the number of rows in the film table
Action: sql_db_query
Action Input: SELECT COUNT(*) FROM film[(1000,)]I now know the final answer
Final Answer: 1000
> Finished chain.

{'input': 'How many films are there in the database?', 'output': '1000'}

在没有提供任何额外的背景信息,或者解释数据库的结构的情况下,我能够得到一个正确的答案。其工作原理如下:

img

但这仅适用于简单的问题,这些问题非常直接。对于更复杂的问题,需要多次请求数据库和 LLM,即所谓的请求链。同样有趣的是,链有助于即时修复查询中的一些错误。下面,您还可以看到文本到 SQL 的脚本,如何回复另外两个问题:

  1. Which 5 actors have appeared in the most films?
  2. What are the most popular film categories? Show the top 3 with the number of films in that category.

潜在影响

公司会产生大量数据,后面会使用这些数据,来做出更好的业务决策。一个完美的结构化商业智能系统,需要分析师和工程师的技能。在这篇文章中,我们看到了生成式人工智能如何帮助消化来自基本数据库的数据,但人们期望它会随着时间的推移而成熟。无需学习 SQL 或了解数据的存储方式;AI 会自动理解它。这将会影响企业存储、管理和处理数据的方式。