AIエージェント活用実践編 / Capstone-A — RAG型業務QAエージェント
最小デプロイ
無料公開レッスン / 読了目安 8 分
レッスン: 最小デプロイ
学習のねらい
これまでのレッスンで構築したRAGエージェントを、Webサービスとして公開する「最小デプロイ」について学びます。具体的には、PythonのWebフレームワークであるFastAPIを使ってAPIエンドポイントを作成し、RenderやVercelといったプラットフォームにデプロイする流れ、そして簡易的なモニタリングについても触れます。
FastAPI でエンドポイント化
構築したRAGエージェントを外部から利用できるようにするには、Web APIとして公開する必要があります。PythonでAPIを構築する際に便利なのが FastAPI です。FastAPIは、高速なパフォーマンスと自動生成されるAPIドキュメント(Swagger UI)が特徴で、モダンなWeb API開発に適しています。
FastAPIの基本的な構造
RAGエージェントをFastAPIでラップする基本的な流れは以下の通りです。
- FastAPIアプリケーションの初期化:
FastAPI()オブジェクトを作成します。 - RAGロジックの統合: 前レッスンで作成したRAGエージェントの検索関数や生成関数を、FastAPIアプリケーション内に組み込むか、モジュールとしてインポートします。
- APIエンドポイントの定義:
- ユーザーからの質問を受け付けるエンドポイント(例:
/qa)を定義します。 @app.post("/qa")のようにデコレーターを使い、HTTP POSTリクエストを処理する関数を作成します。- リクエストボディとして、ユーザーの質問テキストを受け取るためのPydanticモデルを定義すると、入力のバリデーション(検証)が容易になります。
- RAGエージェントを呼び出し、生成された回答をJSON形式で返します。
- ユーザーからの質問を受け付けるエンドポイント(例:
例:
from fastapi import FastAPI
from pydantic import BaseModel
# from .rag_agent import query_rag_agent # RAGエージェントの関数をインポート
app = FastAPI()
class Question(BaseModel):
text: str
@app.post("/qa")
async def ask_question(question: Question):
# ここでRAGエージェントの関数を呼び出す
# answer, citations = query_rag_agent(question.text)
answer = f"ダミー回答: {question.text}に関する情報です。"
citations = ["ソース1", "ソース2"]
return {"answer": answer, "citations": citations}
Render / Vercel への配置
FastAPIアプリケーションをインターネット上で動作させるためには、サーバーにデプロイする必要があります。Render や Vercel は、Webアプリケーションのデプロイを簡単に行えるクラウドプラットフォームです。
デプロイの一般的な流れ
- コードの準備: FastAPIアプリケーションのコードと、依存関係を記述した
requirements.txtファイルを用意します。 - Gitリポジトリへのプッシュ: コードをGitHubなどのGitリポジトリにプッシュします。
- プラットフォームの選択: RenderまたはVercelにアカウントを作成し、新しいプロジェクトを作成します。
- リポジトリの接続: 作成したGitリポジトリをプラットフォームに接続します。
- ビルド設定:
- Build Command: アプリケーションをビルドするためのコマンド(例:
pip install -r requirements.txt)を設定します。 - Start Command: アプリケーションを起動するためのコマンド(例:
uvicorn main:app --host 0.0.0.0 --port $PORT)を設定します。 - 環境変数: APIキーなどの機密情報を環境変数として設定します。
- Build Command: アプリケーションをビルドするためのコマンド(例:
- デプロイ: 設定が完了すると、プラットフォームが自動的にコードをビルドし、デプロイを開始します。成功すれば、公開URLが発行されます。
プラットフォームの選択
- Render: 長時間実行されるバックエンドサービス(APIサーバー)のデプロイに適しています。データベースやWebサービスなど、様々なコンポーネントを統合しやすいです。
- Vercel: フロントエンドアプリケーションやサーバーレス関数(Lambdaなど)のデプロイに強みがあります。APIもデプロイ可能ですが、アイドル状態が続くとスリープするなどの特徴があります。
RAGエージェントのようなAPIサーバーには、Renderの方が適していることが多いですが、Vercelのサーバーレス関数として実装することも可能です。
簡易モニタリング
デプロイしたRAGシステムが本番環境で安定して動作しているかを確認するためには、簡易的なモニタリング(監視)が不可欠です。
モニタリングすべき項目
- 稼働状況(Uptime): サービスが正常に稼働しているか。プラットフォームのダッシュボードで確認できます。
- エラーログ: API呼び出し時のエラーや、LLMからの応答エラーなど。FastAPIのログや、デプロイプラットフォームのログ出力で確認します。
- レイテンシー(Latency): ユーザーがリクエストを送信してから応答が返るまでの時間。特にLLMの応答時間は長くなりがちなので注意が必要です。
- APIコール数/トークン消費量: LLMの利用コストに直結するため、定期的に確認し、予算を超過しないように監視します。
初期段階では、デプロイプラットフォームが提供する基本的なログやメトリクスで十分ですが、本格運用ではより詳細なモニタリングツール(Datadog, Prometheusなど)の導入も検討しましょう。
まとめ
RAGエージェントをWebサービスとして公開するために、FastAPIでAPIエンドポイントを作成し、RenderやVercelなどのプラットフォームにデプロイする手順を学びました。デプロイ後も、サービスの稼働状況やエラーログ、コストなどを簡易的にモニタリングし、安定稼働を目指しましょう。これにより、構築したRAGシステムが実際に業務で活用できるようになります。