使用 Gemini 建構 AI 資料探索代理程式

為您的商業系統程式設計介面建構人工智慧 (AI) 技術輔助即時通訊介面,讓同事詢問有關業務資料的問題。對機構的資料進行分析和報告,對於改善業務營運方式至關重要。使用正確的資料,無論如何解決問題、發掘趨勢及調查結果,都相當困難,但身為開發人員,要幫助非程式碼的同事發掘正確的資料並不容易。

SQL Talk 專案是開放原始碼應用程式,採用生成式 AI 技術回答業務資料相關問題。該專案使用 Gemini API 和函式呼叫功能,將業務資料問題轉換成 SQL 查詢和 API 呼叫,然後將結果轉換回純語言。此專案可做為起點,為自己的企業建構資料代理程式。此外,您還能協助同事找到答案,而不必編寫大量的一次性程式碼。

如需專案簡介影片並瞭解如何延伸,包括建構程式開發人員的深入分析,請前往 AI Data Agent | Build with Google AI。否則,您可以開始使用下列操作說明來擴充專案。

SQL Talk 專案應用程式使用者介面

圖 1 SQL Talk 專案應用程式使用者介面。

專案設定

這些操作說明會逐步引導您完成 SQL Talk 專案設定,以便進行開發和測試。一般步驟包括建立 SQL Talk 專案、設定 Google Cloud Shell 編輯器開發專案、取得 Google Cloud 專案 ID,以及使用指令碼設定專案設定。這些操作說明說明如何使用 Cloud Shell 編輯器設定專案,方便快速地設定、執行及更新專案。

為專案建立 Cloud Shell 執行個體

您可以將專案存放區複製到 Cloud Shell 執行個體,以設定 SQL Talk 專案。這項程序會在專案的 Google Cloud 基礎架構中設定虛擬開發環境執行個體,並將程式碼存放區複製到該虛擬環境。

如要為 SQL Talk 建立 Cloud Shell 執行個體,請按照下列指示操作:

這個連結會設定 Google Cloud Shell 編輯器執行個體,並將 SQL Talk 存放區複製到執行個體。

含有 SQL Talk 專案程式碼的 Google Cloud Shell 編輯器

圖 2. 複製到 Google Cloud Shell 編輯器開發環境的 SQL Talk 專案。

取得 Cloud 專案 ID

SQL Talk 專案會使用 Google Cloud 專案 ID 連線至 Google Cloud 服務,包括 Gemini 模型。您可以在 Cloud Shell 編輯器中設定專案 ID,讓應用程式能連結至這些服務。

如何將 Cloud Shell 編輯器連線至專案 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 資料庫服務和 Vertex AI API 來連結 Gemini 模型。SQL Talk 專案包含 setup.sh 指令碼,可將專案設為所需的 Google Cloud 服務,並啟動專案的預設版本。

設定並執行專案 Cloud Shell 編輯器執行個體:

  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 編輯器終端機視窗中應會顯示類似以下的訊息。這則訊息表示設定程序已成功,且 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 編輯器處於閒置狀態並中斷連線,您可能需要重新連線至 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 編輯器視窗右上方,依序選取「網頁預覽」按鈕和「透過以下通訊埠預覽:8080」

Cloud Shell 編輯器標頭,以方框特別標出「網頁預覽」按鈕

如何查看 SQL Talk 應用程式更新:

  • 在 SQL Talk 網頁應用程式網頁預覽中,重新載入瀏覽器或瀏覽器分頁。

如何停止 SQL Talk 應用程式:

  • 在 Cloud Shell 編輯器視窗終端機面板中,輸入 Ctrl-C

修改應用程式

您可以修改應用程式的 Python 程式碼,以變更 SQL Talk 應用程式的行為並新增功能。本節說明如何在 SQL Talk 應用程式中新增函式呼叫。

Gemini API 函式呼叫功能會使用特定的語法,定義生成式模型要用來回答或解決問題的函式。此語法不需要完全符合實際 API 呼叫的語法。請改用函式呼叫功能,強制生成式模型提供符合 API 呼叫語法的特定資料輸入或參數,然後使用這些參數在應用程式程式碼中執行實際 API 呼叫。

本實作範例說明如何建立函式呼叫定義,用來列出最近的資料庫查詢或工作,然後在 SQL Talk 應用程式程式碼中,將該定義對應至實際的 API 呼叫。

新增函式呼叫定義

新增函式呼叫,用於列出最近的資料庫查詢或工作。這個定義由生成式模型使用,以瞭解 API 呼叫的作用和輸入參數。此函式範例定義並未定義任何參數。

如何在應用程式中新增函式呼叫:

  1. 在 Cloud Shell 編輯器視窗中,開啟 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 Query 專案,請參閱程式碼存放區和有關 SQL Talk 專案的 Cloud 社群網誌文章。如果您在建構應用程式時需要協助,或是想要與其他開發人員合作,請造訪 Google Developers Community Discord 伺服器和 Google Cloud AI/ML 論壇。如要進一步瞭解 Build with Google AI 專案,請查看影片播放清單