使用 Gemini 构建 AI 数据探索代理

为您的业务系统编程接口构建依托人工智能 (AI) 的聊天界面,并让同事询问有关您业务数据的问题。对组织数据进行分析和报告对于改善业务模式至关重要。利用适当的数据,发现问题、发现趋势和研究结果都可以实现,但作为开发者,帮助非编码同事发现正确的数据可能很困难。

SQL Talk 项目是一个开源应用,使用生成式 AI 技术来回答有关业务数据的问题。该项目使用 Gemini API 和函数调用功能将业务数据问题转换为 SQL 查询和 API 调用,然后将结果转换回普通语言。您可以使用此项目作为起点来为自己的企业构建数据代理,并帮助同事获得答案,而无需编写大量一次性代码。

有关此项目的视频概览以及如何扩展该项目(包括构建该项目的人员的见解),请查看 AI Data Agent | 使用 Google AI 构建。否则,您可以按照以下说明开始扩展项目。

SQL Talk 项目应用界面

图 1. SQL Talk 项目应用界面。

项目设置

以下说明会引导您设置 SQL Talk 项目,以用于开发和测试。一般步骤包括:创建 SQL Talk 项目、设置 Google Cloud Shell Editor 开发项目、获取 Google Cloud 项目 ID,以及使用脚本配置项目设置。以下说明介绍了如何使用 Cloud Shell Editor 设置项目,以便快速而方便地设置、运行和更新项目。

为项目创建 Cloud Shell 实例

您可以通过将项目代码库克隆到 Cloud Shell 实例中来设置 SQL Talk 项目。此过程会在项目的 Google Cloud 基础架构内设置一个虚拟开发环境实例,并将代码库克隆到该虚拟环境中。

如需为 SQL Talk 创建 Cloud Shell 实例,请执行以下操作:

此链接会设置一个 Google Cloud Shell Editor 实例,并将 SQL Talk 代码库克隆到该实例中。

显示 SQL Talk 项目代码的 Google Cloud Shell Editor

图 2. SQL Talk 项目已克隆到 Google Cloud Shell Editor 开发环境中。

获取 Cloud 项目 ID

SQL Talk 项目使用 Google Cloud 项目 ID 连接到 Google Cloud 服务(包括 Gemini 模型)。您可以在 Cloud Shell Editor 中配置项目 ID,以允许应用与这些服务连接。

如需将 Cloud Shell Editor 连接到项目 ID,请执行以下操作:

  1. 导航到 Google Cloud 控制台并登录(如果需要)。
  2. 选择现有的 Cloud 项目,或创建一个新项目
  3. 记下项目的 Cloud 项目 ID。
  4. 将编辑器实例连接到您的项目并配置项目。 在 Cloud Shell 编辑器窗口的终端面板中,输入以下命令:

    gcloud config set project YOUR_PROJECT_ID
    

配置 SQL Talk 项目

SQL Talk 项目使用 Google Cloud 服务来运行项目,包括 BigQuery 数据库服务和用于连接到 Gemini 模型的 Vertex AI API。SQL Talk 项目包含一个 setup.sh 脚本,用于为项目配置所需的 Google Cloud 服务并启动项目的默认版本。

如需配置并运行项目 Cloud Shell Editor 实例,请执行以下操作:

  1. 在 Cloud Shell 编辑器窗口的终端面板中,导航到 Cloud Shell SQL Talk (/sql-talk-app) 项目目录:

    cd ~/cloudshell_open/generative-ai/gemini/function-calling/sql-talk-app
    
  2. 在终端面板中,输入以下命令:

    bash setup.sh
    

设置脚本成功完成后,您应该会在 Cloud Shell Editor 终端窗口中看到类似于以下内容的消息。此消息表示设置过程成功,并且 SQL Talk 应用正在运行:

You can now view your Streamlit app in your browser.
Network URL: http://##.##.##.##:8080
External URL: http://##.##.##.##:8080

测试项目

完成 SQL Talk 项目的设置后,您可以测试应用以验证其是否按预期运行。设置脚本会在您运行应用时自动启动该应用,您可以按照以下步骤重启该应用。

如需运行 SQL Talk 应用,请执行以下操作:

  1. 如果 Cloud Shell Editor 已处于空闲状态并已断开连接,您可能需要重新连接到您的 Cloud 项目 ID。

    gcloud config set project YOUR_PROJECT_ID
    
  2. 在 Cloud Shell 编辑器窗口的终端面板中,导航到 Cloud Shell SQL Talk 项目目录。

    cd ~/cloudshell_open/generative-ai/gemini/function-calling/sql-talk-app
    
  3. 在终端面板中,输入以下命令。

    ~/miniforge/bin/streamlit run app.py --server.enableCORS=false \
        --server.enableXsrfProtection=false --server.port 8080
    
  4. 查看 SQL Talk 应用。在 Cloud Shell Editor 窗口的右上角,选择网页预览按钮,然后选择在端口 8080 上预览

Cloud Shell Editor 标题,其中突出显示了“网页预览”按钮

要查看 SQL Talk 应用的更新,请执行以下操作:

  • 在 SQL Talk Web 应用网页预览中,重新加载浏览器或浏览器标签页。

要停止 SQL Talk 应用,请执行以下操作:

  • 在 Cloud Shell 编辑器窗口的终端面板中,按 Ctrl-C

修改应用

您可以通过修改应用的 Python 代码来更改行为,并向 SQL Talk 应用添加功能。本部分介绍如何向 SQL Talk 应用添加新的函数调用。

Gemini API 函数调用功能使用特定语法来定义生成模型将用于回答问题或解决问题的函数。此语法不需要与实际 API 调用的语法完全一致。而是使用函数调用功能来强制生成模型提供符合 API 调用语法的特定数据输入或参数,然后使用这些参数在应用代码中执行实际的 API 调用。

此示例实现展示了如何创建用于列出最近的数据库查询或作业的函数调用定义,然后将该定义映射到 SQL Talk 应用代码中的实际 API 调用。

添加函数调用定义

添加一个用于列出最近的数据库查询或作业的新函数调用。生成模型使用此定义来了解 API 调用的用途及其所需的输入参数。此示例函数定义不带任何参数。

如需向应用添加新的函数调用,请执行以下操作:

  1. 在 Cloud Shell Editor 窗口中,打开 sql-talk-app/app.py 代码文件。
  2. list_datasets_func 函数声明后,添加新的 FunctionDeclaration

    list_jobs_func = FunctionDeclaration(
        name="list_jobs",
        description="Get a list of the 10 most recent database requests to help answer the user's question",
        parameters={
            "type": "object",
            "properties": {
      },
    },
    )
    
  3. 将新函数添加到 sql_query_tool 对象。

    sql_query_tool = Tool(
        function_declarations=[
            sql_query_func,
            list_datasets_func,
            List_jobs_func,  # add this new function
            list_tables_func,
            get_table_func,
        ],
    )
    

要添加代码以运行新函数的 API 调用,请执行以下操作:

  • sql-talk-app/app.py 代码文件中,向 while function_calling_in_process: 循环添加新的 if 子句。

    if response.function_call.name == "list_datasets":
        ...
    
    # add this if clause for list_jobs function
    if response.function_call.name == "list_jobs":
        api_response = client.list_jobs(max_results=10)  # API request(s)
        api_response = str([job.job_id for job in api_response])
        api_requests_and_responses.append(
          [response.function_call.name,params, api_response])
    

其他资源

如需详细了解 SQL Query 项目,请参阅代码库并查看有关 SQL Talk 项目的 Cloud 社区博文。如果您在构建应用方面需要帮助,或者希望与其他开发者合作,请查看 Google Developers 社区 Discord 服务器和 Google Cloud AI/机器学习论坛。 如需详细了解 Build with Google AI 项目,请观看视频播放列表