1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Google ADKで作ったエージェントをRest APIで呼べるようにする

1
Last updated at Posted at 2026-05-03

前回、ADKでマルチエージェントのサンプルを作りましたが、
Google ADKでOCI Generative AIを使ったマルチエージェントのサンプルを作ってみた

これだと、外部から利用するのが難しいため、今回Rest APIで呼び出せるようにしました。

ソースコード

https://github.com/saiken/adk-oci-sample/blob/main/main.py
※FastAPIとADK周りの連携はこのファイルで実装しています

環境

  • ローカル
    • Mac
    • Python3.13
    • Codex CLI

サマリー

以下の構成にしました

  • ローカルデバッグ用に、adk webなどはそのまま利用できるようにしつつ、
  • main.pyでuvicornを起動し、FastAPI経由でagentを実行

実装

※今回も基本的にCodex CLIに依頼して修正してもらっています

Fast APIの設定とuvicornの起動

app = FastAPI(title="ADK Agent API", version="0.1.0")

// エンドポイントの定義
@app.post("/message", response_model=MessageResponse)
async def post_message(payload: MessageRequest, request: Request) -> MessageResponse:
  // ここに処理を記載
  
  return MessageResponse(session_id=session_id, response=response_text)

def main() -> None:
  host = os.getenv("HOST", "127.0.0.1")
  port = int(os.getenv("PORT", "8000"))
  uvicorn.run("main:app", host=host, port=port, reload=os.getenv("RELOAD") == "1")

ADKのRunnerを定義

runner = Runner(app_name=APP_NAME, agent=root_agent, session_service=session_service)

ADKのエージェントを実行

runner.run_asyncでエージェントの処理を実行

  async for event in runner.run_async(
      user_id=user_id, session_id=session_id, new_message=user_content
  ):

event に、ADKのイベントが渡されてきて、ログを出力したりレスポンスを生成したりできます

セッション制御

継続してやりとりするために、会話履歴が必要でセッションを使います

session_serviceを取得

session_service = InMemorySessionService()

ADKのRunnerを定義する際に、session_serviceもわたす

runner = Runner(app_name=APP_NAME, agent=root_agent, session_service=session_service)

session_serviceでセッションIDがなければcreate

async def _ensure_session(*, user_id: str, session_id: str) -> None:
  lock = _get_session_lock(user_id, session_id)
  async with lock:
    session = await session_service.get_session(
        app_name=APP_NAME, user_id=user_id, session_id=session_id
    )

    if session is None:
      await session_service.create_session(
          app_name=APP_NAME, user_id=user_id, session_id=session_id
      )

起動方法

uv run python main.py

実行結果

$ curl -s -X POST http://127.0.0.1:8000/message \
>   -H 'content-type: application/json' \
>   -d '{"message":"OCI Generative AI とGenerative AI Agentsの違いを教えて"}' \
> | jq .
{
  "session_id": "0cc986f085e2488490f25edbc2915318",
  "response": "OCI Generative AI と Generative AI Agents の違いは、その機能の幅広さと用途の特化性にあります。\n\nOCI Generative AI は、Oracle Cloud Infrastructure によって提供される包括的な AI サービスです。テキスト、画像、音声の生成や操作、分析など、幅広い AI 機能を提供し、開発者がさまざまなアプリケーションを構築できるプラットフォームとなっています。自然言語処理や画像認識などの分野で活用され、企業や開発者の AI 活用をサポートします。\n\n一方、Generative AI Agents は、特定のタスクや目的のために設計された AI を利用したソフトウェアエージェントです。人間のように行動し、複雑なタスクを実行したり、ユーザーと対話したりすることができます。自然言語処理や機械学習技術を利用して、ユーザーからの要求に応え、チャットボットや仮想アシスタントなどの特定の用途やシナリオに合わせてカスタマイズされた専門的なソリューションを提供します。\n\n要約すると、OCI Generative AI は幅広い AI 機能を提供するプラットフォームであり、Generative AI Agents は特定のタスクに特化したエージェントです。OCI は開発者や企業の AI 活用を包括的にサポートし、Generative AI Agents は専門的な用途に特化したツールとして機能します。\n\nこの説明で違いが理解できたでしょうか?さらに詳しい情報や確認したい点があれば、お気軽にお尋ねください。"
}

学習メモ

ADKのapi_server機能

ADKにも、起動オプションでapi_serverとして動かす機能があるようです
ただ、エンドポイントをカスタマイズできなかったり自由度は低そうだったので今回の実装をしました

参考)下記の「実行方法3:APIサーバー (adk api_server)」のところ

adk web との共存

adk web agents で動かすと、パスのルートが変わってしまい、import でエラーになりました
※ルートがagents ディレクトリになってしまうようでした。

そのため、 adk web で動かす場合は、以下のようにして実行するようにしました

PYTHONPATH=. uv run adk web agents
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?