Cloud Run に LangChain エージェントをデプロイする

1. 概要

エージェント とは、AI モデルと対話して、エージェントが持つツールとコンテキストを使用して目標ベースの操作を実行する自律型プログラムであり、真実に基づいた自律的な意思決定が可能です。

エージェントの作成には、Agent Development Kit(ADK)、LangChain、smolagents などのエージェント フレームワークが使用されます。このようなフレームワークで作成されたエージェント アプリケーションは Cloud Run にデプロイでき、サーバーレス アプリケーションとしてユーザーが利用できるようになります。

この Codelab では、LangChain を使用してエージェントを構築し、Cloud Run にデプロイします。

作成するアプリの概要

プロトタイプ PROMPT からエージェントの構築に移行する準備はできましたか?LangChain を使用してエージェントを作成し、歴史上の人物に関する情報を構造化された形式で取得します。このラボでは、次のことを行います。

  1. LangChain を使用して、歴史上の人物に関する情報を構造化された形式で生成するシンプルなエージェントを構築する
  2. エージェントをローカルで実行し、期待どおりに動作することを確認する
  3. エージェントを Cloud Run にデプロイし、Cloud Run URL を使用して呼び出す

要件

  • ChromeFirefox などのブラウザ
  • 課金を有効にした Google Cloud プロジェクト

2. 始める前に

プロジェクトを作成する

  1. Google Cloud コンソールのプロジェクト選択ページで、Google Cloud プロジェクトを選択または作成します。
  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。
  3. このリンクをクリックして、Cloud Shell をアクティブにします。Cloud Shell の対応するボタンをクリックすると、Cloud Shell ターミナル (クラウド コマンドの実行用)とエディタ(プロジェクトの構築用)を切り替えることができます。
  4. Cloud Shell に接続したら、次のコマンドを使用して、すでに認証済みであることと、プロジェクトがプロジェクト ID に設定されていることを確認します。
gcloud auth list
  1. Cloud Shell で次のコマンドを実行して、gcloud コマンドがプロジェクトを認識していることを確認します。
gcloud config list project
  1. プロジェクトが設定されていない場合は、次のコマンドを使用して設定します。
gcloud config set project <YOUR_PROJECT_ID>
  1. Python 3.13 以降がインストールされていることを確認します。

その他の gcloud コマンドとその使用方法については、ドキュメントをご覧ください。

3. LangChain エージェントを作成する

プロジェクト構造

Cloud Shell で langchain-app という名前のフォルダを作成し、その中に次のファイルを追加します。

langchain-gemini-fastapi-app/
├── main.py
├── requirements.txt

アプリケーション コード

requirements.txt に追加する必要がある依存関係は次のとおりです。

fastapi
uvicorn
langchain
langchain-google-genai
python-dotenv

main.py では、Gemini モデルを使用し、歴史上の人物に関する情報を取得するエージェント コードを記述します。取得した情報は、指示に従って構造化された形式にフォーマットされます。

この実装では、最新の LCEL(LangChain Expression Language)構文を使用します。

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 JsonOutputParser

# Initialize FastAPI
app = FastAPI(title="LangChain App for Historical Figures")

# 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 Prompt
prompt = ChatPromptTemplate.from_template("You are an expert Historian. For the historical personality {name}, you are able to accurately tell their birth date and birth country. Return the output in the JSON format containing name, birthDate, birthCountry. In case you are unable to retrieve birthDate or birthCountry, just have the unknown values as null. ensure the response is a valid json object only.")
output_parser = JsonOutputParser()

# Chain: Prompt -> Model -> Json Output Parser
chain = prompt | llm | output_parser

# 3. Define Request Model
class QueryRequest(BaseModel):
    name: str

# 4. Define Endpoint
@app.post("/chat")
async def chat(request: QueryRequest):
    try:
        response = await chain.ainvoke({"name": request.name})
        return response
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))

@app.get("/")
def health_check():
    return {"status": "ok", "service": "LangChain-Gemini-FastAPI"}

4. エージェントをテストする

デプロイする前に、ローカルでテストできます。

  1. AI Studio で Gemini API キーを作成します。
  2. Gemini API キーを次のようにエクスポートします。
export GOOGLE_API_KEY="AIzaSy..."
  1. サーバーを実行します。
uvicorn main:app --port 8080 --host 0.0.0.0
  1. 次の curl コマンドを使用してエージェントをテストします。
curl -X POST http://localhost:8080/chat \
     -H "Content-Type: application/json" \
     -d '{"name": "Abraham Lincoln"}'

名前、生年月日、出身国を含む JSON 構造の出力が表示されることを確認します。

5. Cloud Run にデプロイする

gcloud run deploy コマンドを使用して、エージェント アプリケーションを Cloud Run にデプロイします。次のコマンドは、Cloud Build を使用してコンテナをビルドし、1 つのステップで Cloud Run にデプロイします。

YOUR_API_KEY は、実際の Gemini API キーに置き換えます。

gcloud run deploy gemini-fastapi-service \
  --source . \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated \
  --set-env-vars GOOGLE_API_KEY=<YOUR_API_KEY>

デプロイが完了すると、ターミナルにエンドポイントが表示され、使用できるようになります。

6. デプロイをテストする

Cloud Run エンドポイントを使用して curl を実行し、期待どおりの結果が得られることを確認します。

curl -X POST <CLOUD_RUN_ENDPOINT> \
     -H "Content-Type: application/json" \
     -d '{"name": "Abraham Lincoln"}'

ローカルで実行しているアプリケーションと同じ結果が得られます。

7. クリーンアップ

この Codelab で使用したリソースについて、Google Cloud アカウントに課金されないようにする手順は、次のとおりです。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。
  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

8. 完了

おめでとうございます!Cloud Run にデプロイされた LangChain エージェントを作成して操作できました。