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

为您的企业构建依托人工智能 (AI) 技术的聊天界面 让同事们能够咨询 商家数据。对贵组织的数据进行分析和报告 对改善业务运营方式至关重要。发现问题、发现问题 趋势和调查结果都可以用正确的数据, 帮助非编程同事发现正确的数据, 挑战。

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

通过视频简要了解项目以及如何扩展项目(包括数据洞见) 敬请查看 AI 数据代理 |使用 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 实例。此过程会设置一个虚拟开发环境, 位于项目的 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,以允许应用与这些服务连接。

如需将 Cloud Shell Editor 与项目 ID 关联,请执行以下操作:

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

    gcloud config set project YOUR_PROJECT_ID
    

配置 SQL Talk 项目

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

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

  1. 在 Cloud Shell Editor 窗口终端窗口中,前往 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 Editor 窗口终端窗口中,前往 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 编辑器的右上角 窗口中,选择网页预览按钮,然后 在端口 8080 上预览

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

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

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

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

  • 在 Cloud Shell 编辑器窗口终端窗口中,输入 Ctrl-C

修改应用

您可以更改行为并为 SQL Talk 应用添加功能 方法是修改应用的 Python 代码。本部分介绍了如何 向 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 代码文件中,将新的 if 子句添加到 while function_calling_in_process: 循环。

    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 查询项目,请参阅 代码库 并观看 Cloud 社区博文 介绍 SQL Talk 项目。如果您在构建应用时需要帮助, 希望与其他开发者协作,请访问 Google Developers Community Discord 服务器以及 Google Cloud AI/机器学习论坛。 如需了解更多“使用 Google AI 构建”项目,请参阅 视频播放列表