すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:LLM 向け RAG チャットボット

最終更新日:Oct 15, 2025

検索拡張生成 (RAG) は、プライベートドメインに関する質問に回答する大規模言語モデル (LLM) の能力を強化します。この技術は、外部のナレッジベースから情報を取得し、それをユーザーの入力と組み合わせます。この結合されたデータが LLM に送信されます。Elastic Algorithm Service (EAS) は、RAG チャットボットを迅速に構築およびデプロイできるシナリオベースのデプロイメントメソッドを提供します。LLM とベクトルデータベースを柔軟に選択できます。このトピックでは、RAG チャットボットサービスをデプロイし、そのモデル推論をテストする方法について説明します。

ステップ 1: RAG サービスのデプロイ

  1. PAI コンソールにログインします。ページの上部でリージョンを選択します。次に、目的のワークスペースを選択し、[Elastic Algorithm Service (EAS)] をクリックします。

  2. [推論サービス] タブで、[サービスのデプロイ] をクリックします。次に、[シナリオベースのモデルデプロイ] セクションで、[RAG ベースの LLM チャットボットデプロイ] をクリックします。

  3. [RAG ベースの LLM チャットボットデプロイ] ページで、パラメーターを設定し、[デプロイ] をクリックします。主要なパラメーターは次のとおりです。

    • バージョン選択: RAG サービスは 2 つのデプロイモードを提供しており、アプリケーションシナリオとリソースプランに基づいて選択できます。

      • 統合 LLM デプロイメント: RAG サービスと Qwen などの大規模言語モデルを同じ EAS サービスインスタンスにデプロイします。このモードは設定が簡単で、迅速な検証やプロトタイプ開発に適しています。

      • 分離 LLM デプロイメント: RAG サービスのみをデプロイします。大規模言語モデルは別のサービスとして存在します。このモードでは、RAG サービスを EAS にデプロイされた他の LLM や Alibaba Cloud Model Studio モデルサービスなど、さまざまな LLM サービスに接続できます。このアプローチは、リソースの再利用と独立したスケーリングを容易にし、本番環境や LLM サービスが既に存在するシナリオに適しています。

    • デプロイメントリソース: サービスに割り当てる計算資源を指定します。

      • 統合 LLM デプロイメント: システムは、選択された [モデルカテゴリ] に基づいてリソース仕様を自動的に推奨します。より低い仕様を選択すると、サービスの起動に失敗する可能性があります。

      • 分離 LLM デプロイメント: RAG サービス自体は最小限のリソースしか消費しません。ecs.g6.2xlargeecs.g6.4xlarge など、少なくとも 8 コア CPU と 16 GB のメモリを持つ仕様を選択することをお勧めします。

    • ベクトルデータベース設定:

      • Faiss (Facebook AI Similarity Search)ElasticsearchHologresOpenSearch、または RDS PostgreSQL を使用してベクトル検索ライブラリを構築できます。

        FAISS

        Faiss を使用してローカルのベクトルデータベースを構築できます。この方法は軽量で使いやすく、オンラインのベクトルデータベース製品を有効化する複雑さを排除します。

        • [バージョンタイプ] には、FAISS を選択します。

        Elasticsearch

        Alibaba Cloud Elasticsearch インスタンスを作成済みであることを確認してください。

        重要

        Elasticsearch インスタンスでインデックスの自動作成を許可するように設定する必要があります。[設定と管理] > [ES クラスタ設定] ページの Elasticsearch インスタンスで、[設定の変更] をクリックし、[インデックスの自動作成][インデックスの自動作成を許可] に設定します。詳細については、「YML パラメーターの設定」をご参照ください。

        • [バージョンタイプ] には、Elasticsearch を選択します。

        • プライベート IP アドレス/ポート: Elasticsearch インスタンス詳細ページの基本情報セクションからプライベート IP アドレスとポートを取得できます。フォーマットは http://<プライベート IP アドレス>:<プライベートポート> です。

        • インデックス名: システムが実行する操作を決定します。

          • 新しい名前を入力: EAS はデプロイ中に PAI-RAG の要件を満たすインデックスを自動的に作成します。

          • 既存の名前を入力: EAS は既存のインデックスを使用します。構造的な互換性を維持するために、インデックスが PAI-RAG サービスによって作成されたものであることを確認してください。

        • ユーザー名パスワード: Elasticsearch インスタンスを作成したときに設定したユーザー名とパスワード。デフォルトのユーザー名は elastic です。パスワードを忘れた場合は、インスタンスのアクセスパスワードをリセットできます。

        • OSS パス: 現在のリージョンにある既存の OSS ストレージディレクトリを選択します。そのパスはナレッジベース管理のためにマウントされます。

        Hologres

        Hologres インスタンスを購入済みであることを確認してください。

        • [バージョンタイプ] には、Hologres を選択します。

        • 呼び出し情報: 指定された VPC 内のインスタンスのホスト。ホストを取得するには、Hologres 管理コンソールのインスタンス詳細ページに移動し、[ネットワーク情報] セクションの [指定された VPC] の横にある [コピー] をクリックします。ホストは、ドメイン名の :80 より前の部分です。

        • データベース名: Hologres インスタンス内のデータベースの名前。データベースを作成するには、「データベースの作成」をご参照ください。

        • アカウント: 既存のカスタムユーザーアカウントに設定します。詳細については、「カスタムユーザーの作成」をご参照ください。[メンバーロールの選択][インスタンススーパー管理者 (SuperUser)] を選択していることを確認してください。

        • パスワード: カスタムユーザーの現在のパスワード。

        • テーブル名: システムが実行する操作は、入力した名前によって異なります。

          • 新しい名前を入力: EAS はデプロイ中に PAI-RAG の要件を満たすテーブルを自動的に作成します。

          • 既存の名前を入力: EAS は既存のテーブルを使用します。構造的な互換性を維持するために、テーブルが PAI-RAG サービスによって作成されたものであることを確認してください。

        • OSS パス: 現在のリージョンにある既存の OSS ディレクトリを選択します。選択したパスはナレッジベースを管理するためにマウントされます。

        OpenSearch

        OpenSearch Vector Search Edition インスタンスを購入済みであることを確認してください。

        • [バージョンタイプ] には、OpenSearch を選択します。

        • エンドポイント: OpenSearch Vector Search Edition インスタンスのパブリックエンドポイント。

          説明

          OpenSearch Vector Search Edition インスタンスのパブリックネットワークアクセス機能を有効にし、EAS パブリック IP アドレスをホワイトリストに追加する必要があります。

        • インスタンス ID: OpenSearch Vector Search Edition コンソールのインスタンスリストから ID を取得できます。

        • ユーザー名パスワード: OpenSearch (Vector Search Edition) インスタンスを作成したときに指定したユーザー名とパスワード。

        • テーブル名: 要件を満たすインデックステーブルを作成する必要があります。詳細については、「インスタンスの設定」をご参照ください。主要なパラメーターは次のとおりです。

          • シナリオテンプレートには、汎用テンプレートを選択します。フィールド設定には、次の設定ファイルをインポートします。

            フィールド設定ファイル

            {
            	"schema": {
            		"summarys": {
            			"parameter": {
            				"file_compressor": "zstd"
            			},
            			"summary_fields": [
            				"id",
            				"embedding",
            				"file_path",
            				"file_name",
            				"file_type",
            				"node_content",
            				"node_type",
            				"doc_id",
            				"text",
            				"source_type"
            			]
            		},
            		"file_compress": [
            			{
            				"name": "file_compressor",
            				"type": "zstd"
            			},
            			{
            				"name": "no_compressor",
            				"type": ""
            			}
            		],
            		"indexs": [
            			{
            				"index_fields": [
            					{
            						"boost": 1,
            						"field_name": "id"
            					},
            					{
            						"boost": 1,
            						"field_name": "embedding"
            					}
            				],
            				"indexer": "aitheta2_indexer",
            				"index_name": "embedding",
            				"parameters": {
            					"enable_rt_build": "true",
            					"min_scan_doc_cnt": "20000",
            					"vector_index_type": "Qc",
            					"major_order": "col",
            					"builder_name": "QcBuilder",
            					"distance_type": "SquaredEuclidean",
            					"embedding_delimiter": ",",
            					"enable_recall_report": "true",
            					"ignore_invalid_doc": "true",
            					"is_embedding_saved": "false",
            					"linear_build_threshold": "5000",
            					"dimension": "1536",
            					"rt_index_params": "{\"proxima.oswg.streamer.segment_size\":2048}",
            					"search_index_params": "{\"proxima.qc.searcher.scan_ratio\":0.01}",
            					"searcher_name": "QcSearcher",
            					"build_index_params": "{\"proxima.qc.builder.quantizer_class\":\"Int8QuantizerConverter\",\"proxima.qc.builder.quantize_by_centroid\":true,\"proxima.qc.builder.optimizer_class\":\"BruteForceBuilder\",\"proxima.qc.builder.thread_count\":10,\"proxima.qc.builder.optimizer_params\":{\"proxima.linear.builder.column_major_order\":true},\"proxima.qc.builder.store_original_features\":false,\"proxima.qc.builder.train_sample_count\":3000000,\"proxima.qc.builder.train_sample_ratio\":0.5}"
            				},
            				"index_type": "CUSTOMIZED"
            			},
            			{
            				"has_primary_key_attribute": true,
            				"index_fields": "id",
            				"is_primary_key_sorted": false,
            				"index_name": "id",
            				"index_type": "PRIMARYKEY64"
            			},
            			{
            				"index_fields": "file_path",
            				"index_name": "file_path",
            				"index_type": "STRING"
            			},
            			{
            				"index_fields": "file_name",
            				"index_name": "file_name",
            				"index_type": "STRING"
            			},
            			{
            				"index_fields": "file_type",
            				"index_name": "file_type",
            				"index_type": "STRING"
            			},
            			{
            				"index_fields": "node_content",
            				"index_name": "node_content",
            				"index_type": "STRING"
            			},
            			{
            				"index_fields": "node_type",
            				"index_name": "node_type",
            				"index_type": "STRING"
            			},
            			{
            				"index_fields": "doc_id",
            				"index_name": "doc_id",
            				"index_type": "STRING"
            			},
            			{
            				"index_fields": "text",
            				"index_name": "text",
            				"index_type": "STRING"
            			},
            			{
            				"index_fields": "source_type",
            				"index_name": "source_type",
            				"index_type": "STRING"
            			}
            		],
            		"attributes": [
            			{
            				"file_compress": "no_compressor",
            				"field_name": "id"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "embedding"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "file_path"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "file_name"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "file_type"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "node_content"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "node_type"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "doc_id"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "text"
            			},
            			{
            				"file_compress": "no_compressor",
            				"field_name": "source_type"
            			}
            		],
            		"fields": [
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "id"
            			},
            			{
            				"user_defined_param": {
            					"multi_value_sep": ","
            				},
            				"multi_value": true,
            				"compress_type": "uniq",
            				"field_type": "FLOAT",
            				"field_name": "embedding"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "file_path"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "file_name"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "file_type"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "node_content"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "node_type"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "doc_id"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "text"
            			},
            			{
            				"compress_type": "uniq",
            				"field_type": "STRING",
            				"field_name": "source_type"
            			}
            		],
            		"table_name": "abc"
            	},
            	"extend": {
            		"description": [],
            		"vector": [
            			"embedding"
            		],
            		"embeding": []
            	}
            }
          • [インデックススキーマ] では、ベクトルディメンションがナレッジベースのベクトルモデルのものと一致している必要があります。[距離タイプ] には、InnerProduct を選択します。

        RDS PostgreSQL

        RDS PostgreSQL インスタンスを作成済みであることを確認してください。

        • [バージョンタイプ] には、RDS PostgreSQL を選択します。

        • ホスト: RDS PostgreSQL インスタンスの内部エンドポイント。ApsaraDB RDS for PostgreSQL コンソールのインスタンスの [データベース接続] ページでエンドポイントを表示できます。

        • ポート: デフォルト値は 5432 です。必要に応じてこの値を変更できます。

        • データベース: [承認済みアカウント][特権アカウント] である必要があります。詳細については、「アカウントとデータベースの作成」をご参照ください。また、vector プラグインと jieba プラグインをインストールする必要があります。

        • テーブル名: データベーステーブルの名前を入力します。

        • ユーザー名パスワード: データベースの作成に使用した特権アカウントのユーザー名とパスワード。特権アカウントを作成するには、「アカウントとデータベースの作成」をご参照ください。リンク先のトピックでは、[アカウントタイプ][特権アカウント] を選択する必要があります。

        • OSS パス: 現在のリージョンにある既存の OSS ストレージディレクトリを選択して、ナレッジベースを管理するためにマウントします。

      • OSS パス: 現在のリージョンにある OSS フォルダを選択して、ナレッジベースファイルを保存します。利用可能なフォルダがない場合は、「コンソールクイックスタート」を参照して作成してください。

        説明

        セルフホストのファインチューニング済みモデルを使用してサービスをデプロイする場合、選択した OSS ストレージパスがモデルの場所のパスと異なることを確認して、競合を避けてください。

    • VPC: RAG サービスが LLM サービス、ベクトル検索ライブラリ、およびその他の Alibaba Cloud サービスと通信できるように、次のネットワーク設定を実行します。

      • パブリックサービスへのアクセス: インターネット経由でベクトルデータベースや LLM サービス (Alibaba Cloud Model Studio モデルサービスなど) にアクセスしたり、Web 検索を使用したりするには、EAS サービスのパブリックネットワークアクセスを設定する必要があります。

      • プライベートサービスへのアクセス:

        • プライベートエンドポイントを使用してベクトルデータベースにアクセスするには、RAG サービスとベクトルデータベースが同じ VPC 内にある必要があります。

        • プライベートエンドポイントを使用して LLM サービスにアクセスするには、RAG サービスと LLM サービスが同じ VPC 内にある必要があります。

      説明
      • Hologres、Elasticsearch、、および RDS PostgreSQL は、内部ネットワークまたはパブリックネットワーク経由でアクセスできます。内部ネットワークアクセスを使用することをお勧めします。

      • Faiss ベクトルデータベースはネットワークアクセスを必要としません。OpenSearch はインターネット経由のアクセスのみをサポートします。

  1. [サービスステータス][実行中] に変わると、サービスは正常にデプロイされます。(サービスのデプロイには通常約 5 分かかりますが、実際の所要時間はモデルパラメーターの数などの要因によって異なる場合があります。)

ステップ2: API 呼び出し

RAG サービスは、ナレッジベース管理や対話などの API 操作を提供し、アプリケーションへの統合を容易にします。詳細については、「RAG API 操作」をご参照ください。

コストとリスク

コスト構成要素

このソリューションのデプロイと使用にかかる料金には、以下が含まれます。

  • EAS リソースの料金: RAG サービスによって消費される計算資源 (vCPU、メモリ、GPU など) は、時間単位で課金されます。これらのリソースの課金は、サービスを停止すると停止します。

  • ベクトル検索ライブラリ料金: Elasticsearch、、HologresOpenSearch、または RDS PostgreSQL を使用する場合、対応するプロダクトのインスタンス料金を支払う必要があります。

  • Object Storage Service (OSS) 料金: これらの料金は、元のナレッジベースファイルを保存するために発生します。

  • 大規模言語モデル呼び出し料金: Alibaba Cloud Model Studio などの商用モデルサービスを使用する場合、API 呼び出し料金が発生します。

  • インターネット NAT ゲートウェイ料金: EAS サービスがインターネットにアクセスする必要がある場合、NAT ゲートウェイ料金が発生します。

  • Web 検索サービス料金: Web 検索機能 (Bing など) を有効にすると、対応する検索サービスの料金が発生します。

重要

EAS サービスを停止すると、EAS リソースの課金のみが停止します。他のプロダクトの課金を停止するには、それらのプロダクトのドキュメントを参照し、指示に従って対応するインスタンスを停止または削除してください。

主なリスクと制限事項

  • 会話長の制限: 1 回の会話で処理できるテキストの長さは、選択した LLM サービスのコンテキストウィンドウサイズ (トークン制限) によって制限されます。

  • ファイルの上書き: FAISS 以外のベクトルデータベースを使用する場合、同じ名前のファイルをアップロードすると既存のデータが直接上書きされます。この操作を行う際には注意が必要です。

  • API パラメーターの制限: API 操作を通じて設定できるのは、一部の機能パラメーターのみです。ほとんどの取得チューニングパラメーターなど、その他の詳細設定は WebUI を使用して設定する必要があります。

注意事項

このソリューションは、サーバーリソースのサイズと LLM サービスのデフォルトのトークン制限によって制限され、サポートされる会話長が制約されます。このガイドは、RAG チャットボットの基本的な取得特徴をテストするのに役立ちます。

よくある質問

API を使用して設定したパラメーターが有効にならないのはなぜですか?

現在、PAI-RAG サービスでは、API を使用して API リファレンスドキュメントに記載されているパラメーターのみを設定できます。他のすべてのパラメーターは WebUI を使用して設定する必要があります。