目的
- 自分の学習用です
やったこと
- Google ADKでOCI Generative AIのLLMを利用したアプリを作ってみました
- OCI Generative AIでモデルを使うための設定
- ローカル環境でGoogle ADKのアプリを構築
やらなかったこと
- OCI Generative AI Agents に関しては触れません
- Oracle のADKについても触れていません
- OCIにデプロイはしていません(ローカルで動かすところまでしかできていません)
ソースコード
https://github.com/saiken/adk-oci-sample
※あまりテストもできていないです、、クオリティはご容赦ください
環境
- ローカル
- Mac
- Python3.13
- uv(Pythonパッケージマネージャ)
- Codex CLI
- 実行環境
- OCI Generative AI
OCI Generative AI の設定
今回は、専用クラスタは用意せず、オンデマンドで利用したため、
利用可能なリージョンにいれば特に設定は不要です。
ただ、私は東京リージョンでFree Tierだったため、下記対応をしました。
リージョンの有効化
リージョンは、利用したいモデルを下記で確認し、利用リージョンを決めます
※OCIはCohereやLlamaしか使えないイメージでしたが、GPT(OSS版)やGemini(2.5で古い)も利用できるようでした
※2026/04/30時点で、OCI Generative AIは、東京リージョンではデプロイできません。
Free Tierの場合
私の場合、Free TierでOCIアカウントを作っていたため、複数リージョンが作れず、
下記を参考に、アカウントをアップグレードしました。
OCI 無料アカウントの有料アカウントへのアップグレードとリージョンサブスクライブ
※アップグレードの申請をして、2時間後くらいに完了のメールが来ていました
その後、大阪リージョンをSubscribeし、
5分くらい待つと大阪リージョンに切り替えれました、以下のようにGenerative AI がハンバーガーメニューから選択できるようになりました

Playground
Azure OpenAI のように、Playground機能でモデルを指定してチャットも利用できます
ローカル環境セットアップ
Codex
brew update
brew install codex
codex --version
※npm で入れるなど他にもいろいろ方法はあるようです
参考)Codex CLI クイックインストール(Mac/Windows対応)
~/.codex/config.toml に下記を設定し、
model = "gpt-5.2"
環境変数に、OpenAIのAPIキーを設定すれば利用できました
export OPENAI_API_KEY={YOUR_API_KEY}
OCI CLI
動作確認などで利用できるようにOCIのCLIもインストールしておきます
brew install oci-cli
APIキーの設定など下記で実施します
oci setup config
以下の記事を参考にしました
Oracle Cloud コマンド・ライン・インタフェース(CLI) をインストールしてみてみた
uv (Pythonのパッケージマネージャ)
- インストール
curl -LsSf https://astral.sh/uv/install.sh | sh
- プロジェクトの初期化
uv init
- sdkの追加
uv add oci
- 環境の同期
uv sync
生成したコードを実行し、200が返ってくることを確認
uv run chat_demo.py
**************************Chat Result**************************
{'status': 200, 'headers': {'Date': 'Fri, 01 May 2026 02:42:59 GMT', 'Content-Type': 'application/json', 'Content-Length': '1109', 'Connection': 'keep-alive', 'opc-request-id': ・・・
ローカルでADKアプリを開発
とりあえず動くもの
基本的に、Codex CLIにまかせます
まずはサンプルを作成
> GoogleのADKを使ったマルチエージェントのサンプルを作ってください
いい感じにサンプルを作ってくれたものの、Gemini利用になっていたので修正
› agent.py で利用するモデルをOpenAI のgpt-5.2 にするようにおねがいします
など、出てきたものに対して、VSCodeでソースを見ながら適宜依頼
› .adk配下のsession.db は必要ですか?
› 生成しないようにすることはできますか?
生成されたコードについて質問しつつ、
› セッションサービスを in-memory にしてください
› .envや.env.example はプロジェクトのルート直下においてください
適宜修正
一旦OpenAIベースで動くことを確認
$ uv run adk web agents
こんな感じで適当な質問に対して、マルチエージェントで動いている様子を確認できます

OCI Generative AIを使うように変更
Codex CLIで以下のようなプロンプトで修正を依頼していきます
› エージェントの構成を、全体オーケストレーションエージェントと領域ごとのエージェントに分けたいです
以下のようなイメージです
- オーケストレーション
- 全体オーケストレーションエージェントでユーザーからの入力に対して、サブタスクに分解し、適したエージェントにタスク
を依
頼する
- 最後に各エージェントが出力した内容をもとに回答を生成する
- OCIの専門家エージェント
- タスクからWeb検索用のクエリーを生成
- Web検索を実行
- 検索結果を元に回答を生成
- システム開発エンジニアスペシャリスト
- システムでどのように実現するかを検討し、回答を生成
以下のエージェントごとに、ディレクトリを分解してください
- オーケストレーション
- OCIの専門家エージェント
- システム開発エンジニアスペシャリスト
リファクタリングや出てきたエラーの解消も基本的にCodex CLIに依頼
PRを出して、まず自分がレビュワーとして確認し、マージしていくような流れで進めました
Google ADKでOCI Generative AIに接続する方法
以下のように、OCI Generative AI用のクラスを生成し、
def _create_oci_inference_client():
try:
import oci # type: ignore
from oci.generative_ai_inference import GenerativeAiInferenceClient # type: ignore
except Exception as exc: # pragma: no cover
raise ImportError(
"OCI Generative AI requires the OCI Python SDK. Install it with `uv sync`."
) from exc
auth = os.getenv("OCI_AUTH", "api_key").strip().lower()
region = os.getenv("OCI_REGION", "").strip() or None
if auth == "resource_principal":
signer = oci.auth.signers.get_resource_principals_signer()
config = {"region": region} if region else {}
return GenerativeAiInferenceClient(config=config, signer=signer)
config_file = os.getenv("OCI_CONFIG_FILE", "~/.oci/config")
profile = os.getenv("OCI_PROFILE", "DEFAULT")
config = oci.config.from_file(
file_location=os.path.expanduser(config_file),
profile_name=profile,
)
if region:
config["region"] = region
return GenerativeAiInferenceClient(config=config)
各エージェントで、modelを指定する際に、以下のように設定
task_router_agent = LlmAgent(
name="OrchestratorRouter",
model=MODEL, # ← ここで、OCI Generative AI用のmodelを指定
description="・・・",
generate_content_config=GEN_CONFIG,
instruction=(
"・・・"
),
output_key="task_breakdown",
)
※詳細はGitHubのコードを参考にしてください(といってもCodexに出力してもらったものがほとんどですが)
https://github.com/saiken/adk-oci-sample
最終的に
ディレクトリ構成
(この辺もCodex CLIがかってに書いてくれます)
.
├── .env.example # 環境変数のサンプル(OpenAI / OCI 切り替え)
├── README.md
├── pyproject.toml # 依存関係(google-adk / oci など)
├── uv.lock
├── agents/
│ ├── orchestrator/
│ │ ├── __init__.py # ADK エントリ
│ │ └── agent.py # 全体オーケストレーション(分解→依頼→統合)
│ ├── oci_expert/
│ │ ├── __init__.py # ADK エントリ
│ │ ├── agent.py # OCI専門家(クエリ生成→検索→回答)
│ │ ├── oci_llm.py # OCI Generative AI 用 LLM アダプタ
│ │ └── web_search.py # Web検索ツール(DuckDuckGo HTML)
│ ├── system_dev_specialist/
│ │ ├── __init__.py # ADK エントリ
│ │ └── agent.py # システム開発エンジニア(設計/実装/運用)
└── .adk/ # (任意)ローカル保存の session/artifacts(無効化可能)
画面での実行イメージ
こんな感じで、タスクを分解し、回答を生成してくれるようになりました

学習メモ
OCI Generative AIのオンデマンドと専用クラスタ
OCI Generative AIでLLMを利用する場合、
オンデマンドと専用クラスタの2つの方法があるようで、今回は検証用なのでオンデマンドで利用します
- オンデマンド
- すぐ使える(セットアップ不要)
- 初期コストなし
- 使った分だけ課金
- スケールは自動だが制限あり
- レイテンシや性能はやや不安定(共有のため)
→ 検証・小規模・たまに使う用途向け
- 専用クラスタ
- GPUなどのリソースを占有
- 安定した性能・低レイテンシ
- スループットが高い(大量リクエスト向き)
- 常時コストが発生(使ってなくても課金)
→ 本番運用・高負荷・安定性重視の用途向け
Google ADK or OCI ADK
調べていると、OCIにもADKがあるようで、どちらを使うか少し悩みました
OCIのADKも、マネージドでいろいろ多機能なようではあったのですが、結論、GoogleのADKで今回は試しています。
理由は、OCI Generative AI Agents と密結合な印象だったため。
下記などを参考にしたのですが、AI Agentsのエンドポイントを指定したりする必要があるようでした。
(すみません、そんなに深くは調べれていないです)
OCI ADKを使ってGenerative AI Agents Platformを触ってみた
ADKでOCI Generative AIにつなぐLiteLLM経由案
OCI Generative AI用のクラスを用意するのに、
OCIのSDKを使って作る方法と、LiteLLM経由で使う方法とあるようですが、下記Codex の出力を参考に、
LiteLLM proxyでエラーがでていたのもあり、SDKを使う方法の方が無難かなと思いそちらを採用しました
(Google ADKが、うまくOCI部分を隠蔽して実装できたことも大きいです)
› いまの実装は、OCIのSDKを使って接続していますが、LiteLLMを使うことも可能でしょうか?メリット・デメリットを確認したいで
す
• 可能です。OCI Generative AI は「OCI SDKで直接叩く」以外に、LiteLLM(=OpenAI互換などを含む統一IF)経由で呼ぶ構成も取り
得ます。ただし、OCI Generative AI を LiteLLM が“ネイティブに”サポートしているか/どの機能まで対応しているかはバージョ
ン依存です(確認が必要)。
OCI SDK 直叩き(現状実装)のメリット
- OCI Generative AI のAPI仕様に最短で追従しやすい(OnDemandServingMode、CohereChatRequest/GenericChatRequest 等をその
まま扱える)
- OCI の認証(APIキー/リソースプリンシパル)・署名が確実
- エラー時の原因切り分けがしやすい(OCIのエラーがそのまま出る)
OCI SDK 直叩きのデメリット
- プロバイダ切替が重い(OpenAI/Anthropic等へ移すと実装も変わる)
- 形式差(Cohere/Generic)の吸収を自前でやる必要がある
- ストリーミングやツール呼び出し等も自前実装になりがち
LiteLLM 経由のメリット
- model 文字列の切替だけでプロバイダ変更しやすい(実装の共通化)
- リトライ/ログ/レート制御などの周辺機能を揃えやすい(設定で統一)
- ADK側は model="provider/model" の1行で済むことが多い
LiteLLM 経由のデメリット
- OCI 固有の“モデル形式差”(Cohere/Generic)を LiteLLM がどこまで正しく吸収できるか不確実
- OCI の認証(リソースプリンシパル等)対応が限定的な場合がある
- 問題発生時に「ADK→LiteLLM→OCI」の多段になりデバッグが難しくなる
- 最新OCI機能が LiteLLM に来るまでタイムラグが出やすい
結論として、本番でOCIをメインに使うなら OCI SDK 直叩きが堅い一方、将来プロバイダ切替・多ベンダ対応を重視するなら
LiteLLM も検討価値ありです。
LiteLLM でOCI Generative AIを使う構成に実際に切り替える案も作れますが、まず「OCI上で使いたいモデルが Cohere 系か
Generic 系か(例: Command R / Llama)」と「認証は APIキー or リソースプリンシパル」だけ教えてください。そこに合わせて
最小の実装方針を出します。
(ダメだったもの)CodexでもLightLLM経由でOCI Generative AIを利用する
当初、Codex CLI でもOCI Generative AIを使おうと考えていましたが、ハマりそうだったので諦めました。
LiteLLMをproxyとして利用しようとしたのですが、
LiteLLMでエラーがでて、うまくコード生成ができなかったため
ググっても、
OpenCodeとOCI Generative AIを連携する のように、
Codex 以外のサンプルは見つかったものの、Codex でうまくやっているものは見つからずでした。
uv tool install 'litellm[proxy]' -p 3.13
python 3.14 だと cannot import name 'BaseDefaultEventLoopPolicy' from 'asyncio.events' のエラーになるため、3.13 を指定しています
OCI Generative AIのmodelの確認方法
下記でmodelの情報がとれるので、そこからOCIDを取得したり、モデル名を取得したりしました
oci generative-ai model-collection list-models \
--endpoint=https://generativeai.{region}.oci.oraclecloud.com \
--compartment-id={compartment_id}
OCI Generative AIの料金
価格表だと、
Oracle Cloud Infrastructure Generative AI - Large Cohere といったLarge とかSmall で書いてあって、
どれがどのモデルかわからないのがツラいですね。。
専用クラスタの場合は、APIを呼ばなくても、費用がかかるようでした
参考
-
[OCI Technical Deep Dive] OCIで生成AIを活用するためのソリューション解説(2025年8月5日開催)
- OCIのAIサービスの概要をつかむのによかったです

