このチュートリアルでは、クルーズ ラインの旅行者の問い合わせと予約を処理する自律 AI エージェントを構築する方法について説明します。 AI エージェントは、計画、ツールの使用、および認識に LangChain Agent フレームワークを使用します。 エージェントは、これらの機能を Azure DocumentDB のベクター データベースとドキュメント ストア機能と組み合わせて、統合メモリ システムを実現します。
サンプル エージェントは Python FastAPI バックエンド内で動作し、React JavaScript ユーザー インターフェイスを介したユーザー操作をサポートします。 この実装は、AI エージェントが基本的なチャットボットを超えて、従来はコード化されたロジックを必要とする自然言語に基づいて複雑なタスクを実行する方法を示しています。
このチュートリアルでは、以下の内容を学習します。
- ベクター検索機能を使用して Azure DocumentDB を設定する
- 移動ドキュメントを読み込み、ベクター埋め込みを作成する
- Python FastAPI と LangChain を使用して AI エージェントを構築する
- 休暇検索、旅程検索、予約のためのエージェント ツールを実装する
- ユーザー操作用の React Web インターフェイスを作成する
- 完全な AI エージェント ソリューションをテストする
[前提条件]
Azure サブスクリプション
- Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください
既存の Azure DocumentDB クラスター
- クラスターがない場合は、新しいクラスターを作成します
OpenAI API または Azure OpenAI Service 用にアカウント。
Visual Studio Code などの統合開発環境。
開発環境にインストールされている Python 3.11.4 以降。
Node.js React フロントエンド用にインストールされます。
サンプル プロジェクトのダウンロード
すべてのコードとサンプル データセットは、 Travel AI Agent GitHub リポジトリで入手できます。
リポジトリ (https://github.com/jonathanscholtes/Travel-AI-Agent-React-FastAPI-and-Cosmos-DB-Vector-Store) をローカル開発環境に複製またはダウンロードします。
プロジェクト ディレクトリに移動し、構造を調べます。
/loader: Azure DocumentDB でサンプル ドキュメントとベクター埋め込みを読み込むための Python コードが含まれています/api: AI 旅行エージェントをホストするための Python FastAPI プロジェクトが含まれています/web: React Web インターフェイスのコードが含まれています
旅行ドキュメントを Azure DocumentDB に読み込む
/loader ディレクトリには、サンプルの旅行ドキュメントを Azure DocumentDB に読み込み、必要なベクター埋め込みを作成するための Python プロジェクトが含まれています。
ターミナルの
/loaderディレクトリに移動します。Python 仮想環境を作成します。
python -m venv venv仮想環境をアクティブ化します。
# On Windows venv\Scripts\activate # On macOS/Linux source venv/bin/activate必要な依存関係をインストールします。
python -m pip install -r requirements.txt接続の詳細を含む
.envファイルを/loaderディレクトリに作成します。OPENAI_API_KEY="<your OpenAI key>" MONGO_CONNECTION_STRING="mongodb+srv:<your connection string from Azure DocumentDB>"main.pyファイルは、データを読み込むための中心的なエントリ ポイントとして機能します。 船と目的地の情報を含むサンプルの旅行データを処理し、旅行日程パッケージを生成します。/loaderディレクトリからデータ読み込みスクリプトを実行します。 スクリプトは、次の操作を実行します。JSON ファイルから発送データと転送先データを読み取ります
を使用して、5 つの旅程パッケージを作成します。
ItineraryBuilderスケジュール パッケージを
itineraryコレクションに保存します目的地を
destinationsコレクションに保存しますshipsコレクション内の船舶のベクター埋め込みを作成します。出荷名にテキスト検索インデックスを追加します
python main.py出力が正常に完了したことを確認します。
--build itinerary-- --load itinerary-- --load destinations-- --load vectors ships--
AI Travel Agent API を構築する
AI 旅行エージェントは、フロントエンド インターフェイスと統合し、Azure DocumentDB データに対する大きな言語モデル (LLM) プロンプトを起動してエージェント要求を処理する Python FastAPI バックエンドを介してホストされます。
ターミナルの
/apiディレクトリに移動します。Python 仮想環境を作成してアクティブ化します。
python -m venv venv # On Windows venv\Scripts\activate # On macOS/Linux source venv/bin/activate必要な依存関係をインストールします。
python -m pip install -r requirements.txt.envディレクトリに/apiファイルを作成します。OPENAI_API_KEY="<your OpenAI key>" MONGO_CONNECTION_STRING="mongodb+srv:<your connection string from Azure DocumentDB>"/apiディレクトリから FastAPI アプリケーションを実行します。python app.py既定では、サーバーは
http://127.0.0.1:8000で起動します。http://127.0.0.1:8000/docsの対話型 Swagger ドキュメントにアクセスして、API エンドポイントを探索します。
AI エージェントの機能をテストする
AI エージェントが期待どおりに機能することをテストします。
Swagger インターフェイスで、セッション エンドポイントをテストします。
/session/に移動し、[試してみる] を選択します会話履歴を追跡するためのセッション ID を取得する要求を実行する
エージェント チャット機能をテストします。
/agent/agent_chatに移動し、[試してみる] を選択します次の入力例を使用して、エージェントをテストします。
{ "input": "I want to take a relaxing vacation.", "session_id": "your-session-id-from-step-1" }エージェントは、ベクトル類似性検索を使用したクルーズのおすすめ情報を提供し、LLMとAzure DocumentDBの統合をデモンストレーションする必要があります。
React Web インターフェイスを作成する
Web インターフェイスは、会話型インターフェイスを介して AI 旅行エージェントと対話するためのユーザー フレンドリな方法を提供します。
React 環境を設定する
ターミナルの
/webディレクトリに移動します。プロジェクトの依存関係をインストールします。
npm ci.envディレクトリに/webファイルを作成します。REACT_APP_API_HOST=http://127.0.0.1:8000
Web アプリケーションを起動する
React 開発サーバーを起動します。
npm startアプリケーションは既定のブラウザー (通常は
http://localhost:3000) で自動的に開きます。インターフェイスには、クルーズ船と目的地の画像を含む旅行 Web サイトが表示されます。
完全なソリューションをテストする
メイン ページで、[移動を 簡単に計画 する] を選択して、旅行アシスタントのチャット インターフェイスを開きます。
チャット インターフェイスが開き、"リラックスした休暇を取りたい" というメッセージが事前に入力されたダイアログが表示されます。
[ 送信] を選択して、AI エージェントにメッセージを送信します。
エージェントは、入力に基づいてクルーズの推奨事項で応答し、以下を示します。
自然言語処理
Azure DocumentDB に対するベクター類似性検索
セッション中の会話記憶
チャット インターフェイスでの HTML 形式の応答
会話を続けることで、エージェントのすべての機能を確認できます。 特定の船、旅程、または予約について尋ねます。
AI エージェントのアーキテクチャを理解する
AI エージェントの実装は、懸念事項を分離し、保守容易性を実現する階層構造のアーキテクチャに従います。
サービス レイヤー コンポーネント
サービス レイヤーには、コア ビジネス ロジックと LangChain エージェントの実装が含まれています。
エージェントの初期化:
init.pyモジュールは、ChatOpenAI モデル、エージェント ツール、会話履歴を設定します。エージェントツール:3つの主要なツールが休暇検索、旅程検索、クルーズ予約を処理します。
メモリ管理: 会話履歴は、セッション識別子を使用して Azure DocumentDB に格納されます。
エージェント ツールの機能
AI エージェントは、3 つの特殊なツールを使用します。
vacation_lookup: Azure DocumentDB に対してベクター検索を実行して、関連する旅行情報を検索します。
itinerary_lookup: 特定の船舶のクルーズ パッケージの詳細とスケジュールを取得します。
book_cruise: 乗客情報の検証を使用してクルーズ パッケージの予約を処理します。
データ層の統合
データ レイヤーは、Azure DocumentDB との対話をすべて処理します。
ベクター検索: 旅行に関するレコメンデーションのスコア付けを使用した類似性検索。
ドキュメント ストレージ: 船舶、目的地、旅程の構造化データ。
会話履歴: セッション ベースのチャット メッセージ ストレージ。
リソースをクリーンアップする
このチュートリアルで作成したリソースが不要になった場合は、継続的な料金を回避するためにクリーンアップできます。
Azure portal で、Azure DocumentDB アカウントに移動します。
このチュートリアル用に専用のリソース グループを作成した場合は、リソース グループ全体を削除します。
それ以外の場合は、作成された特定のコレクションを削除します。
travel.itinerarytravel.destinationstravel.shipstravel.history