このチュートリアルでは、PAI LangStudio で意図認識カスタマーサービスアプリケーションフローを構築する方法について説明します。このフローは、意図認識と検索拡張生成 (RAG) を組み合わせ、ユーザークエリを分類し、ナレッジベースから関連する回答を取得して、正確な応答を返します。
このチュートリアルを完了すると、以下の機能を持つアプリケーションフローが完成します:
大規模言語モデル (LLM) を使用してユーザーの意図を特定
ベクターインデックス化されたナレッジベースからコンテキストに応じた回答を取得
さまざまな意図を専用の処理ブランチにルーティング
呼び出し可能な Elastic Algorithm Service (EAS) エンドポイントとしてデプロイ
処理パイプライン
このフローは、各ユーザークエリを以下のステージで処理します:
分類:意図認識ノードがクエリを LLM に送信し、LLM がクエリを事前定義された意図カテゴリにマッピングします。
再書き込み:質問再書き込みノードが、取得精度を向上させるためにクエリを再構成します。
取得:ナレッジ取得ノードが、ベクターインデックス化されたナレッジベースを検索し、最も関連性の高いドキュメントを返します。
回答:ユーザー質問回答ノードが、取得したコンテキストと元のクエリを組み合わせ、LLM を通じて最終的な応答を生成します。
マージ:変数マージノードが、すべての意図ブランチからの出力を単一の応答変数に統合します。
事前定義されたどの意図にも一致しないクエリは、その他意図ノードがカスタム Python ロジックで処理します。
例:意図分類によるクエリのルーティング
| ユーザークエリ | 分類された意図 | 次のノード |
|---|---|---|
| 「PAI-EAS にモデルをデプロイするにはどうすればよいですか?」 | Alibaba Cloud PAI に関する問題 | 質問の再書き込み > ナレッジの取得 > 回答 |
| 「今日の天気は?」 | その他 | その他意図 (カスタム Python ハンドラ) |
ビルドとデプロイのフェーズ
| フェーズ | ステップ | 発生内容 |
|---|---|---|
| セットアップ | モデルのデプロイ、接続の作成、ナレッジベースインデックスの構築 | フローに必要なすべてのインフラストラクチャを準備 |
| ビルドとテスト | アプリケーションフローの作成、ノードの設定、実行とデバッグ | フローロジックの設計と検証 |
| デプロイと呼び出し | EAS サービスとしてデプロイし、リクエストを送信 | フローを本番エンドポイントとして利用可能にする |
前提条件
開始する前に、以下が準備できていることを確認してください:
LangStudio へのアクセス権を持つ PAI ワークスペース
Object Storage Service (OSS) にアップロードされた RAG ナレッジベースデータ
(任意) ベクターデータベースとして Milvus を使用する場合は、Milvus データベース
LangStudio は Faiss と Milvus の 2 種類のベクターデータベースをサポートしています。Faiss は追加設定が不要で、テストに適しています。より大きなデータ量を扱う本番ワークロードでは、Milvus を使用してください。続行する前に Milvus データベースを作成する必要があります。
ステップ 1:(任意) LLM と埋め込みモデルのデプロイ
このフローには、意図認識と応答生成のための LLM、およびナレッジベースコンテンツをベクター化するための埋め込みモデルという 2 つのモデルサービスが必要です。OpenAI 互換 API を公開するモデルサービスをすでにデプロイしている場合は、このステップをスキップしてください。
[クイックスタート > モデルギャラリー] から、両方のモデルをデプロイします:
LLM -- [大規模言語モデル] を [シナリオ] セクションで選択し、[DeepSeek-R1] をデプロイします。モデルは、モデルギャラリーで「DeepSeek-R1-0528」などのバージョン付きの名前で表示される場合があります。詳細な手順については、「DeepSeek-V3 および DeepSeek-R1 のワンクリックデプロイ」をご参照ください。

埋め込みモデル -- [埋め込み] を [シナリオ] セクションで選択し、[bge-m3 埋め込みモデル] をデプロイします。

このチュートリアルでは、[インテント認識]、[質問の書き換え]、および[ユーザー質問への回答]の各ノードに、単一のLLM 接続(DeepSeek-R1)を使用します。本番環境では、ビジネス要件に基づいて各ノードに異なるモデルを展開し、関連する接続を作成して、アプリケーションフローの正確性と効率性を確保できます。
ステップ 2:接続の作成
接続は、アプリケーションフローをモデルサービスにリンクします。LLM 用と埋め込みモデル用にそれぞれ 1 つずつ接続を作成します。
2.1 LLM 接続の作成
LangStudio に移動し、ワークスペースを選択して、[接続] > [モデルサービス] を選択します。
[新規接続] をクリックします。

接続を設定します:
PAI-EAS モデルサービス -- [EAS サービス] ドロップダウンリストからステップ 1 でデプロイされた LLM を選択すると、
base_url(VPC エンドポイント) とapi_key(トークン) が自動的に入力されます。サードパーティ製モデルサービス -- プロバイダーの API エンドポイントとキーを入力します。たとえば、DeepSeek モデルサービスの場合、
base_urlをhttps://api.deepseek.comに設定し、DeepSeek プラットフォーム から取得したapi_keyを入力します。
パラメーター 説明 [名前] 接続名です。モデル名を確認するには、モデルギャラリー ページのモデルカードをクリックします。詳細については、「接続の作成」の「モデルサービス」セクションをご参照ください。 [接続タイプ] [汎用 LLM サービス] を選択します。 [サービスプロバイダー] 次のいずれかを選択します。
2.2 埋め込み接続の作成
手順 1 でデプロイされた埋め込みモデルの接続を作成するには、2.1 の同じ手順に従います。「[接続タイプ]」で、「[一般埋め込みモデル サービス]」を選択します。

ステップ 3:ナレッジベースインデックスの作成
ナレッジベースインデックスは、コーパスを解析、チャンク化、ベクター化し、ベクターデータベースに保存することで、フローがクエリ時に適切なコンテンツを取得できるようにします。
LangStudio でワークスペースを選択し、[ナレッジベース] タブに移動します。 次のキーパラメーターで新しいインデックスを作成します。
| パラメーター | 設定方法 |
|---|---|
| データソース OSS パス | RAG ナレッジベースデータが保存されている OSS パス (前提条件でアップロード済み) に設定します。 |
| 出力 OSS パス | 中間結果とインデックスファイル用のディレクトリに設定します。適切なパスの選択については、以下のガイダンスをご参照ください。 |
| 埋め込みタイプ | 汎用エンベディングモデルサービス を選択します。 |
| 埋め込み接続 | ステップ 2.2 で作成した埋め込み接続を選択します。 |
| ベクターデータベースの種類 | [FAISS] を選択します。デフォルトの選択は Elasticsearch である場合がありますが、このチュートリアルでは FAISS に変更してください。 |
他のすべてのパラメーターについては、「ナレッジベースインデックスの作成」をご参照ください。
出力 OSS パスの選択方法
Faiss を使用する場合、インデックスファイルは OSS に保存されます。パスは RAM ロールの設定によって異なります:
デフォルトの PAI ロール ([ランタイムの開始] ページで [インスタンス RAM ロール] を [PAI のデフォルトロール] に設定):フローは、ワークスペースのデフォルトのストレージバケットにアクセスできます。 [出力 OSS パス] を、そのバケットの ストレージパス 内のディレクトリに設定します。
カスタム RAM ロール:カスタムロールに OSS アクセス権限を付与する。
AliyunOSSFullAccessポリシーをアタッチするのが最も簡単な方法です。
ステップ 4:アプリケーションフローの作成と実行
4.1 アプリケーションフローの作成
LangStudio に移動し、ワークスペースを選択して、[アプリケーション] タブをクリックします。
[アプリケーションの作成] をクリックし、[ワークフロー] を選択してから、[意図認識カスタマーサービス] テンプレートを選択します。

4.2 ランタイムの開始
ノードを設定または実行する前に、ランタイムを開始します。ランタイムは、Python ノードの解析や高度なツールへのアクセスに必要です。
アプリケーションフローの詳細ページで、[ランタイムを作成] をクリックします。

[VPC] パラメーターを設定します:
Milvus の使用 -- ご利用の Milvus インスタンスと同じ VPC、またはそれに接続された VPC を選択します。
Faiss の使用 -- VPC の設定は不要です。
ランタイムを開始します。
4.3 ノードの設定
テンプレートには事前設定済みのノードが含まれています。以下の主要なノードを確認し、更新してください:

意図認識
このノードは、ユーザークエリを LLM に送信し、LLM は各クエリを事前定義された意図カテゴリのいずれかに分類します。分類結果に基づいて、フローは対応するブランチノードにルーティングされます。
| パラメーター | 設定方法 |
|---|---|
| マルチインテント設定 | 意図カテゴリを定義します。各意図には明確で具体的な説明が必要です。カテゴリ間の意味的な重複を避けてください。たとえば、「製品に関する質問」と「使用方法に関する質問」が同様のトピックをカバーしている場合、両方を作成しないでください。デフォルトの意図は「Alibaba Cloud PAI に関する問題」です。 |
| モデル設定 | ステップ 2.1 で作成した LLM 接続を選択します。 |
| [チャット履歴] | オンにすると、以前の会話のターンが入力として含まれ、複数ターンの対話が可能になります。 |
質問の再書き込み
ユーザーのクエリが以前のコンテキスト (「それについてはどうですか?」など) を参照している場合、このノードは LLM を呼び出して、クエリを自己完結型の質問に再書き込みします。これにより、ナレッジ取得ノードでの取得精度が向上します。
| パラメーター | 設定方法 |
|---|---|
| モデル設定 | ステップ 2.1 で作成した LLM 接続を選択します。 |
| チャット履歴 | 意図認識ノードの設定と一致させます。 |
ナレッジの取得
このノードは、ベクターインデックス化されたナレッジベースを検索し、再書き込みされたクエリに対して最も関連性の高いドキュメントを返します。
| パラメーター | 設定方法 |
|---|---|
| インデックス名 | ステップ 3 で作成したナレッジベースインデックスを選択します。 |
| Top K | 返す上位一致ドキュメントの数。 |
詳細については、「ナレッジベースインデックスの使用」をご参照ください。
ユーザー質問への回答
このノードは、取得したドキュメントとユーザークエリを組み合わせ、LLM を呼び出して最終的な回答を生成します。
| パラメーター | 設定方法 |
|---|---|
| モデル設定 | ステップ 2.1 で作成した LLM 接続を選択します。 |
| チャット履歴 | 意図認識ノードの設定と一致させます。 |
その他の意図
事前定義されたどの意図にも一致しないクエリを処理します。カスタム Python コードを使用して、フォールバックロジック (デフォルトメッセージの返却や人間のオペレーターへのエスカレーションなど) を実装します。
変数のマージ
すべての意図ブランチ (一致した意図とその他の意図) からの出力を単一の変数にマージします。これにより、後続のノードと最終出力が、どのブランチが実行されたかに関係なく結果を参照できるようになります。
各コンポーネントの詳細については、「アプリケーションフローの開発」をご参照ください。
4.4 実行とデバッグ
右上隅の[実行]をクリックして、アプリケーション フローを実行します。

フローが応答を生成した後、回答の下にある[トレースの表示]をクリックすると、一致した意図、取得されたドキュメント、および完全なトレース トポロジーを含む実行パスを確認できます。

一般的なランタイムの問題については、「よくある質問」をご参照ください。
ステップ 5:アプリケーションフローのデプロイ
アプリケーションフロー開発ページで、右上隅にある[デプロイ]をクリックします。フローは EAS サービスとしてデプロイされます。
以下の主要なパラメーターを設定します:
| パラメーター | 設定方法 |
|---|---|
| インスタンス (リソース情報) | サービスインスタンスの数。テスト用には 1 に設定します。本番環境では、単一障害点 (SPOF) を回避するために、複数のインスタンスを設定します。 |
| VPC | ステップ 4.2 のランタイム VPC と同じルールです。該当する場合は Milvus VPC を選択し、Faiss の場合はスキップします。 |
他のすべてのパラメーターと詳細な手順については、「アプリケーションフローのデプロイ」をご参照ください。
ステップ 6:サービスの呼び出し
デプロイ後、PAI は EAS ページにリダイレクトします。
[オンラインデバッグ] タブを開きます。
JSON ボディを含むリクエストを送信します。[チャット入力] フィールドは、アプリケーションフローの [開始ノード] 内のフィールドと一致する必要があります。デフォルトのフィールド名は
questionです。

{ "question": "How do I deploy a model on PAI-EAS?" }
API 連携など、サービスを呼び出すその他の方法については、「サービスの呼び出し」をご参照ください。