快速入門導覽課程:建構 Python (LangChain) 網頁應用程式並部署至 Cloud Run

Cloud Run 可讓您建構及部署 LangChain 應用程式,並使用 Gemini 回覆查詢。在本快速入門導覽課程中,您將部署 Python 網頁應用程式,回答有關首都城市的問題,並在從原始碼部署時,由 Cloud Run 自動建構容器。

事前準備

  1. 安裝 Google Cloud CLI。

  2. 設定 gcloud CLI,使用您的聯合身分。

    詳情請參閱「 使用聯合身分登入 gcloud CLI」。

  3. 執行下列指令,初始化 gcloud CLI:

    gcloud init
  4. 建立或選取 Cloud de Confiance 專案。

    選取或建立專案所需的角色

    • 選取專案:選取專案時不需要特定 IAM 角色,只要您獲派某個專案的角色,即可選取該專案。
    • 建立專案:如要建立專案,您必須具備專案建立者角色 (roles/resourcemanager.projectCreator),其中包含 resourcemanager.projects.create 權限。瞭解如何授予角色。
    • 建立 Cloud de Confiance 專案:

      gcloud projects create PROJECT_ID

      將 PROJECT_ID 替換為您要建立的 Cloud de Confiance 專案名稱。

    • 選取您建立的 Cloud de Confiance 專案:

      gcloud config set project PROJECT_ID

      將 PROJECT_ID 替換為 Cloud de Confiance 專案名稱。

  5. 如要使用現有專案進行本指南中的操作,請確認您具有完成本指南所需的權限。如果您建立新專案,則已具備必要權限。

  6. 確認 Cloud de Confiance 專案已啟用計費功能。

  7. 如果專案受限於限制未經驗證叫用的網域限制組織政策,您必須按照「測試私人服務」一節所述的方式存取已部署的服務。

  8. 啟用 Cloud Run Admin API 和 Cloud Build API (如果尚未啟用):

    啟用 API 所需的角色

    您必須具備 serviceusage.services.enable 權限,才能啟用 API。如果您建立了專案,可能已透過擁有者角色 (roles/owner) 取得這項權限。否則,您可以透過服務使用情形管理員角色 (roles/serviceusage.serviceUsageAdmin) 取得這項權限。瞭解如何授予角色。

    gcloud services enable run.googleapis.com cloudbuild.googleapis.com

    啟用 Cloud Run Admin API 後,系統會自動建立 Compute Engine 預設服務帳戶。

  9. 查看 Cloud Run 定價,或使用 Pricing Calculator 估算費用。
  10. 您需要 Google AI Studio 的 API 金鑰,才能使用 Gemini 模型部署 LangChain 應用程式。如要使用 Google AI Studio 產生 API 金鑰,請參閱 Gemini API 說明文件中的「使用 Gemini API 金鑰」一節。部署服務時,您會參照這組金鑰。

必要的角色

如要取得完成本快速入門導覽課程所需的權限,請要求管理員授予您下列 IAM 角色:

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

您或許也能透過自訂角色或其他預先定義的角色,取得必要權限。

授予 Cloud Build 服務帳戶專案存取權

Cloud Build 會自動使用 Compute Engine 預設服務帳戶,做為建構原始碼和 Cloud Run 資源的預設 Cloud Build 服務帳戶,除非您覆寫這項行為。

如要讓 Cloud Build 建構來源,請將專案的 Cloud Run 建構者 (roles/run.builder) 角色授予 Cloud Build 服務帳戶:

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:SERVICE_ACCOUNT_EMAIL_ADDRESS \
    --role=roles/run.builder

將 PROJECT_ID 替換為您的 Cloud de Confiance專案 ID,並將 SERVICE_ACCOUNT_EMAIL_ADDRESS 替換為 Cloud Build 服務帳戶的電子郵件地址。如果您使用 Compute Engine 預設服務帳戶做為 Cloud Build 服務帳戶,請按照下列格式輸入服務帳戶電子郵件地址:

PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com

將 PROJECT_NUMBER 替換為您的 Cloud de Confiance專案編號。

如要瞭解如何找出專案 ID 和專案編號,請參閱「建立及管理專案」。

授予 Cloud Run 建構工具角色後,需要幾分鐘的時間才會生效。

編寫範例應用程式

如要以 Python 編寫應用程式,請按照下列步驟操作:

  1. 建立名為 langchain-gemini-fastapi-app 的新目錄,然後切換至該目錄:

    mkdir langchain-gemini-fastapi-app
    cd langchain-gemini-fastapi-app
    
  2. 建立名為 main.py 的檔案,將下列程式碼貼入其中:

    import os
    import uvicorn
    from fastapi import FastAPI, HTTPException
    from pydantic import BaseModel
    from langchain_google_genai import ChatGoogleGenerativeAI
    from langchain_core.prompts import ChatPromptTemplate
    from langchain_core.output_parsers import StrOutputParser
    
    # Initialize FastAPI
    app = FastAPI(title="LangChain Gemini Cloud Run App")
    
    # 1. Setup Gemini Model
    # We expect GOOGLE_API_KEY to be set in the environment variables
    llm = ChatGoogleGenerativeAI(
      model="gemini-2.5-flash",
      temperature=0.7
    )
    
    # 2. Define the Chain
    prompt = ChatPromptTemplate.from_template("You are a helpful assistant. Answer the following question concisely: {topic}")
    output_parser = StrOutputParser()
    
    # Chain: Prompt -> Model -> String Parser
    chain = prompt | llm | output_parser
    
    # 3. Define Request Model
    class QueryRequest(BaseModel):
      topic: str
    
    # 4. Define Endpoint
    @app.post("/chat")
    async def chat(request: QueryRequest):
      try:
          response = await chain.ainvoke({"topic": request.topic})
          return {"response": response}
      except Exception as e:
          raise HTTPException(status_code=500, detail=str(e))
    
    @app.get("/")
    def health_check():
      return {"status": "ok", "service": "Gemini-FastAPI"}
    
  3. 建立名為 requirements.txt 的檔案,將下列程式碼貼入其中:

    fastapi
    uvicorn
    langchain
    langchain-google-genai
    python-dotenv
    

從原始碼部署至 Cloud Run

「從來源部署」會自動從原始碼建構容器映像檔並部署。

如要使用下列指令從來源部署:

  gcloud run deploy gemini-fastapi-service \
    --source . \
    --region us-central1 \
    --no-allow-unauthenticated \
    --set-env-vars GEMINI_API_KEY=API_KEY

將 API_KEY 替換為 Google AI Studio API 金鑰。在正式環境中,建議使用 Secret Manager 處理 API 金鑰,而非純文字環境變數。

成功部署應用程式後,Cloud Run 會顯示服務網址,例如 https://gemini-fastapi-service-xyz-uc.a.run.app。

測試 Cloud Run 服務

使用下列 curl 指令,將查詢傳送至代理,測試服務:

  curl -X POST YOUR-SERVICE-URL/chat \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-identity-token)" \
    -d '{"topic": "What is the capital of France?"}'

將 YOUR-SERVICE-URL 替換為服務網址。

代理會傳送下列回覆:

  {
  "response": "Paris"
  }

如要確認服務是否正常運作,請查看 Cloud Run 服務的「Logs」(記錄) 分頁。

清除所用資源

為了避免系統向您的 Cloud de Confiance 帳戶收取本頁面所用資源的費用,請刪除含有這些資源的 Cloud de Confiance 專案。

為避免系統向您的 Cloud de Confiance by S3NS 帳戶收取額外費用,請刪除您透過本快速入門導覽課程部署的所有資源。

刪除存放區

Cloud Run 不會對未使用的已部署服務收費。不過,您可能仍須支付在 Artifact Registry 儲存容器映像檔的費用。如要刪除 Artifact Registry 存放區,請按照 Artifact Registry 說明文件中的「刪除存放區」步驟操作。

刪除服務

Cloud Run 服務在收到要求前不會產生費用。如要刪除 Cloud Run 服務,請按照下列任一步驟操作:

控制台

如要刪除服務:

  1. 前往 Cloud de Confiance by S3NS 控制台的 Cloud Run「Services」(服務) 頁面:

    前往 Cloud Run。

  2. 在服務清單中找出您要刪除的服務,然後按一下核取方塊來選取。

  3. 按一下「Delete」(刪除)。這項操作會刪除服務的所有修訂版本。

gcloud

如要刪除服務,請執行下列指令:

gcloud run services delete SERVICE --region REGION

更改下列內容:

  • SERVICE:服務名稱。
  • REGION:服務的 Cloud de Confiance 區域。

刪除測試專案

刪除 Cloud de Confiance 專案後,系統會停止對該專案中的所有資源計費。如要釋出專案中的所有 Cloud de Confiance by S3NS 資源,請按照下列步驟操作:

    刪除 Cloud de Confiance 專案:

    gcloud projects delete PROJECT_ID

後續步驟

如要進一步瞭解如何從程式碼來源建構容器,並推送至存放區,請參閱: