初めに
以前書いたADKでVertex AI RAG Engineを参照するAIエージェントを開発するの続きです。今回は、ADKで作成したAIエージェントをVertex AI Agent Engineにデプロイし、動作確認を行ってみようと思います。
この記事でやること
- ①ADKを使って、AIエージェントを開発する
- RAGを参照して質問に回答する
- RAGにはVertex AI RAG Engineを用いる
- ②Vertex AI Agent Engineにデプロイする
- ③デプロイしたアプリをcurlで呼び出す
試してみる
早速試してみましょう。
今回はRAGを参照して質問に回答するAIエージェントを作成します。
RAGにはVertex AI RAG Engineを利用します。
RAGにはPHPフレームワークFlowの公式ドキュメントの情報を読み込ませました。
①ADKを使って、AIエージェントを開発する
まずは、ADKを使って、RAGを参照するAIエージェントを開発します。
実装方法は以前まとめたので今回は割愛します。
こちらをご参照ください。
②Vertex AI Agent Engineにデプロイする
Vertex AI Agent Engineへのデプロイはpythonで書いたスクリプトを実行することで行います。
以下のサンプルを参考に作成してみました。
ディレクトリ構成は以下です。
deploy.pyが作成したファイルになります。
parent_folder/
deployment/
deploy.py
ragagent/
__init__.py
agent.py
.env
deploy.py
実際のコードがこちら。
STAGING_BUCKETには任意のGCSを指定します。デプロイする資材を置いておく場所です。
import vertexai
from vertexai import agent_engines
from vertexai.preview.reasoning_engines import AdkApp
from ragagent.agent import root_agent
import logging
import os
from dotenv import set_key
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
PROJECT_ID = "hogehoge"
LOCATION = "us-central1"
STAGING_BUCKET = "gs://fugafuga"
vertexai.init(
project=PROJECT_ID,
location=LOCATION,
staging_bucket=STAGING_BUCKET,
)
logger.info("deploying app...")
app = AdkApp(
agent=root_agent,
enable_tracing=True,
)
remote_app = agent_engines.create(
app,
requirements=[
"google-adk",
"llama-index",
],
extra_packages=[
"./ragagent",
],
)
デプロイする
プロジェクトのルートディレクトリにて以下のコマンドを実行してデプロイします。
5分ほど待つとデプロイが完了します。
ログにGCPのログエクスプローラーのリンクが表示されるので、それを見れば進捗も把握できます。
$ python -m deployment.deploy
デプロイが完了すると、Vertex AI Agent Engineにデプロイしたアプリが表示されます。
デプロイ時に名前を指定しなかったので、「-」になってますが、デプロイはできてそうです。
名前はUI上からも変更できますが、agent_engines.createの引数で指定することも可能です。
③デプロイしたアプリをcurlで呼び出す
URL
Vertex AI Agent EngineのUI上でデプロイしたアプリの詳細を見ると、APIのURLを確認することができます。
URLは通常のものとストリーム形式のレスポンスを返すものの二種類があります。今回はストリーム形式のほうを利用しました。
(通常のほうも試してみたのですが、実行できずでした)
https://us-central1-aiplatform.googleapis.com/v1/projects/hoge/locations/us-central1/reasoningEngines/0000000000000000000:streamQuery?alt=sse
RAGの参照権限の付与
また、Vertex AI Agent EngineからRAG Engineを参照するためには、Vertex AI Agent Engineが利用しているユーザの権限を与える必要があります。
IAMにてservice-[プロジェクト番号]@gcp-sa-aiplatform-re.iam.gserviceaccount.comというユーザを探し、「Vertex AI ユーザー」と「ストレージ管理者」の二つの権限を与えてあげましょう。
上記ユーザはIAMにてGoogle 提供のロール付与を含めるにチェックを入れると出てきます。
curlで呼び出す
curlで実行してみました。
user_idを指定するとVertex AI Agent Engine側にセッションが作成されます。
作成したセッションは
$ curl -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/hoge/locations/us-central1/reasoningEngines/0000000000000000000:streamQuery?alt=sse -d '{
"class_method": "stream_query",
"input": {
"user_id": "1234",
"session_id": "427859831664148480011",
"message": "PHPのFlowでIPアドレス制限はできますか?できるとしたら、どのように実装しますか?"
}
}' | jq
返ってきたレスポンスがこちらです(一部抜粋)。
質問に答えてくれました!
省略していますが、グランディングの情報も返ってきており、RAGを参照していることも確認できました。
{
"content": {
"parts": [
{
"text": "はい、PHPのFlowフレームワークではIPアドレス制限が可能です。\n\nFlowのファイアウォール機能を使用して、`Settings.yaml`ファイルで設定できます。`filters`セクションに`Ip`パターンを設定し、`cidrPattern`でIPアドレスまたはCIDR範囲を指定し、`AccessGrant`または`AccessDeny`インターセプターを使用します。\n\n例として、`Settings.yaml`での設定は以下のようになります。\n\n```yaml\nNeos:\n Flow:\n security:\n firewall:\n filters:\n 'Some.Package:AllowedIps':\n pattern: 'Ip'\n patternOptions:\n 'cidrPattern': '192.168.178.0/24'\n interceptor: 'AccessGrant'\n```\n\nこの設定は、`192.168.178.0/24`の範囲からのIPアドレスにアクセスを許可します。`AccessGrant`の代わりに`AccessDeny`を使用することで、特定のIPアドレス範囲からのアクセスを拒否することも可能です。"
}
],
},
"timestamp": 1752580160.307721
}
終わりに
今回はVertex AI Agent Engineへのデプロイを試してみました。ADK、Vertex AI Agent Engine、RAG Engineを使えば、RAGを参照するAIエージェントを比較的簡単に開発、デプロイできます。是非試してみてはいかがでしょうか。
ここまでご覧いただきありがとうございました!
