跳到主要内容

SQL 数据库

SQL Database 组件用于在 兼容 SQLAlchemy 的数据库 上执行 SQL 查询。 它支持任何兼容 SQLAlchemy 的数据库,例如 PostgreSQL、MySQL 和 SQLite。

如果你要执行 CQL 查询,请参阅 DataStax 业务组件

使用自然语言提示查询 SQL 数据库

下面的示例演示如何在流程中使用 SQL Database,并进一步把它改造成支持通过 Agent 组件接收自然语言查询。

这样一来,你就可以用同一个 SQL Database 组件处理各种查询,而不再局限于手工写死的一条 SQL,也不要求用户、应用或其他组件必须提供完全合法的 SQL 语句。 用户不需要掌握 SQL 语法,因为 Agent 会把自然语言提示转换成 SQL,交给 SQL Database 执行,再把结果返回给用户。

同样,来自外部应用或其他组件的输入也不一定非要先被提取和转换成准确 SQL。 你只需要给 Agent 足够上下文,让它知道应该根据传入数据生成并执行 SQL 查询即可。

  1. 使用你自己的样例数据库,或先创建一个测试数据库。

    创建一个测试 SQL 数据库
    1. 创建一个名为 test.db 的数据库:


      _10
      sqlite3 test.db

    2. 向数据库写入一些示例数据:


      _13
      sqlite3 test.db "
      _13
      CREATE TABLE users (
      _13
      id INTEGER PRIMARY KEY,
      _13
      name TEXT,
      _13
      email TEXT,
      _13
      age INTEGER
      _13
      );
      _13
      _13
      INSERT INTO users (name, email, age) VALUES
      _13
      ('John Doe', 'john@example.com', 30),
      _13
      ('Jane Smith', 'jane@example.com', 25),
      _13
      ('Bob Johnson', 'bob@example.com', 35);
      _13
      "

    3. 验证数据库已创建成功并包含这些数据:


      _10
      sqlite3 test.db "SELECT * FROM users;"

      结果应该能列出你刚才写入的文本数据:


      _10
      1|John Doe|john@example.com
      _10
      2|Jane Smith|jane@example.com
      _10
      3|John Doe|john@example.com
      _10
      4|Jane Smith|jane@example.com

  2. 向流程中添加一个 SQL Database 组件。

  3. Database URL 字段中填写数据库连接串,例如 sqlite:///test.db

    到这一步为止,你已经可以在 SQL Query 字段里直接填写 SQL,也可以通过端口从其他组件传入查询内容,例如来自 Chat Input。 如果编辑空间不够,可以点击 Expand 打开全屏文本输入框。

    不过,如果你想让它在智能体场景中更灵活,建议参考下面几步,配合 Agent 组件把自然语言输入转换成 SQL。

  4. 点击 SQL Database 组件,打开其组件头部菜单,然后启用 Tool Mode

    这样你就可以把它作为智能体工具使用。 在 Tool Mode 下,SQL Database 本身不需要预先写死查询语句,因为当 Agent 判断需要该工具时,它会自动生成并发送查询。 更多说明请参阅为智能体配置工具

  5. 向流程中添加一个 Agent 组件,并填入 OpenAI API Key。

    默认模型是 OpenAI 模型。 如果你希望改用其他模型,可以继续调整 Model ProviderModel NameAPI Key

    如果你的查询场景非常专业,也可以考虑选用更擅长 SQL 或复杂推理任务的模型。 如果你要使用的模型不在 Agent 的内置列表里,可将 Model Provider 设为 Connect other models,再连接任意语言模型组件

  6. SQL DatabaseToolset 输出连接到 AgentTools 输入。

    SQL Database component connected to an Agent component

  7. 打开 Playground,向 Agent 提问有关数据库的问题,例如:Which users are in my database?

    Agent 会判断自己需要查询数据库,于是利用 LLM 生成 SQL,再通过 SQL Database 组件的 RUN_SQL_QUERY 动作执行查询。 最后,它会以对话形式把结果返回给用户;当然,如果你有额外指令,也可以让它返回原始结果或其他格式。

    虽然上面的示例数据库很小,但如果你的数据更完整,就可以提出更复杂的查询问题。


    _10
    Here are the users in your database:
    _10
    _10
    1. **John Doe** - Email: john@example.com
    _10
    2. **Jane Smith** - Email: jane@example.com
    _10
    3. **John Doe** - Email: john@example.com
    _10
    4. **Jane Smith** - Email: jane@example.com
    _10
    _10
    It seems there are duplicate entries for the users.

SQL Database 参数

有些参数在可视化编辑器中默认处于隐藏状态。 你可以通过组件标题栏菜单中的 控件 来修改全部参数。

NameDisplay NameInfo
database_urlDatabase URL输入参数。兼容 SQLAlchemy 的数据库连接 URL。
querySQL Query输入参数。要执行的 SQL 查询;可以直接填写、由其他组件传入,或在 Tool Mode 下由 Agent 自动提供。
include_columnsInclude Columns输入参数。是否在结果中包含列名。默认启用(true)。
add_errorAdd Error输入参数。启用后,如果执行过程中产生错误,则把错误信息附加到结果中。默认关闭(false)。
run_sql_queryResult Table输出参数。查询结果,以 DataFrame 形式返回。