NL2SQL 工具

描述

此工具用于将自然语言转换为 SQL 查询。当传递给代理时,它将生成查询,然后使用这些查询与数据库交互。

这支持多种工作流程,例如让代理访问数据库,根据目标获取信息,然后使用这些信息生成响应、报告或任何其他输出。同时,它还赋予代理根据其目标更新数据库的能力。

注意:请确保代理有权访问只读副本,或者代理可以在数据库上运行插入/更新查询是可以接受的。

要求

  • SqlAlchemy
  • 任何数据库兼容库(例如 psycopg2, mysql-connector-python)

安装

安装 crewai_tools 包

pip install 'crewai[tools]'

用法

为了使用 NL2SQLTool,您需要将数据库 URI 传递给该工具。URI 应采用 dialect+driver://username:password@host:port/database 格式。

代码
from crewai_tools import NL2SQLTool

# psycopg2 was installed to run this example with PostgreSQL
nl2sql = NL2SQLTool(db_uri="postgresql://example@localhost:5432/test_db")

@agent
def researcher(self) -> Agent:
    return Agent(
        config=self.agents_config["researcher"],
        allow_delegation=False,
        tools=[nl2sql]
    )

示例

主要任务目标是

“检索每个城市的平均、最大和最小月收入,但只包括用户数多于一个的城市。此外,统计每个城市的用户数量,并按平均月收入降序排列结果”

因此代理尝试从数据库获取信息,第一次是错误的,所以代理再次尝试并获取到正确的信息,然后传递给下一个代理。

第二个任务目标是

“审查数据并创建一个详细报告,然后在数据库中根据提供的数据创建表,字段基于提供的数据。包括每个城市的平均、最大和最小月收入信息,但只包括用户数多于一个的城市。此外,统计每个城市的用户数量,并按平均月收入降序排列结果。”

现在事情变得有趣起来,代理生成的 SQL 查询不仅创建了表,还插入了数据到表中。最后,代理仍然返回最终报告,该报告与数据库中的内容完全一致。

这是一个简单的示例,展示了 NL2SQLTool 如何用于与数据库交互并根据数据库中的数据生成报告。

该工具为代理的逻辑及其与数据库的交互方式提供了无限的可能性。

 DB -> Agent -> ... -> Agent -> DB