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

Platform For AI:RAGベースのLLMチャットボット

最終更新日:Sep 14, 2024

Elastic Algorithm Service (EAS) は、さまざまなシナリオに簡単な展開方法を提供します。 パラメーターを設定して、RAG (Retrieval-Augmented Generation) ベースのLLM (large language model) チャットボットをデプロイできます。 これにより、サービスのデプロイ時間が大幅に短縮されます。 チャットボットを使用してモデル推論を実行すると、チャットボットはナレッジベースから関連情報を効果的に取得し、取得した情報をLLMアプリケーションからの回答と組み合わせて、正確で有益な回答を提供します。 これにより、Q&Aの品質と全体的なパフォーマンスが大幅に向上します。 チャットボットは、特定のナレッジベースに依存するQ&A、要約、およびその他の自然言語処理 (NLP) タスクに適用できます。 このトピックでは、RAGベースのLLMチャットボットをデプロイする方法と、モデル推論を実行する方法について説明します。

背景情報

LLMアプリケーションは、正確でリアルタイムの応答を生成するのに限界がある。 したがって、LLMアプリケーションは、カスタマーサービスやQ&Aシナリオなど、正確な情報が必要なシナリオには適用できません。 これらの問題を解決するために、RAG技術を使用してLLMアプリケーションのパフォーマンスを向上させる。 これにより、特定の知識ベースに依存するQ&A、要約、およびその他のNLPタスクの品質が大幅に向上します。

RAGは、QwenなどのLLMアプリケーションを情報検索コンポーネントと組み合わせることで、回答の精度を向上させ、回答に関する情報量を増やします。 クエリが開始されると、RAGは、情報検索コンポーネントを使用して、知識ベース内のクエリに関連するドキュメントまたは情報フラグメントを見つけ、これらの検索されたコンテンツを元のクエリと統合してLLMアプリケーションに組み込む。 LLMアプリケーションは、その誘導および生成機能を使用して、最新の情報に基づいて事実に基づく回答を生成します。 LLMアプリケーションを再トレーニングする必要はありません。

EASに導入されたチャットボットは、LLMアプリケーションとRAGを統合して、精度と適時性の点でLLMアプリケーションの限界を克服します。 このチャットボットは、さまざまなQ&Aシナリオで正確で有益な回答を提供し、NLPタスクの全体的なパフォーマンスとユーザーエクスペリエンスの向上に役立ちます。

前提条件

  • 仮想プライベートクラウド (VPC) 、vSwitch、およびセキュリティグループが作成されます。 詳細については、「VPCの作成と管理」および「セキュリティグループの作成」をご参照ください。

    説明

    Facebook AI類似性検索 (Faiss) を使用してベクトルデータベースを構築する場合、上記の前提条件は必要ありません。

  • Object Storage Service (OSS) バケットまたはApsara File Storage NAS (NAS) ファイルシステムを作成して、微調整されたモデルファイルを保存します。 微調整されたモデルを使用してチャットボットをデプロイする場合は、この前提条件を満たす必要があります。 詳細については、「OSSコンソールを使用して開始する」または「ファイルシステムの作成」をご参照ください。

    説明

    Faissを使用してベクターデータベースを構築する場合は、OSSバケットを準備する必要があります。

制限事項

ベクターデータベースとEASは同じリージョンにデプロイする必要があります。

注意

この方法は、LLMサービスのトークンの最大数に左右され、RAGベースのLLMチャットボットの基本的な検索機能を理解するのに役立つように設計されています。

  • チャットボットは、LLMサービスのサーバーリソースサイズとトークンのデフォルト数によって制限されます。 チャットボットがサポートする会話の長さも制限されています。

  • 複数回の会話を実行する必要がない場合は、チャットボットのチャット履歴機能を無効にすることを推奨します。 これは、限界に達する可能性を効果的に低減する。 詳細については、このトピックの「RAGベースのチャットボットのチャット履歴機能を無効にするにはどうすればよいですか?」セクションをご参照ください。

ステップ1: ベクターデータベースの準備

ベクトルデータベースを構築するには、FaissElasticsearchHologresOpenSearch、およびApsaraDB RDS for PostgreSQL ベクターデータベースを構築するときは、後続の操作でベクターデータベースに接続するために使用される必要なパラメーター設定を保存します。

フェイス

Faissは、オンプレミスのベクトルデータベースを構築するプロセスを合理化します。 サービスを購入または有効化する必要はありません。

Elasticsearch

  1. Elasticsearchクラスターを作成します。 詳細については、「Elasticsearchクラスターの作成」をご参照ください。

    以下の点にご注意ください。

    • インスタンスタイプパラメーターをStandard Editionに設定します。

    • [Username] および [Password] パラメーターの値をコピーして、オンプレミスのコンピューターに保存します。

  2. 作成したクラスターを見つけ、その名前をクリックして [基本情報] ページに移動します。 Internal EndpointパラメーターとInternal Portパラメーターの値をコピーして、オンプレミスマシンに保存します。

Hologres

  1. Hologresインスタンスを購入し、データベースを作成します。 詳細については、「Hologresインスタンスの購入」および「データベースの作成」をご参照ください。 データベースの名前をオンプレミスマシンに保存する必要があります。

  2. Hologresコンソールで呼び出し情報を表示します。

    1. 作成したインスタンスを見つけ、その名前をクリックしてインスタンスの詳細ページに移動します。

    2. [ネットワーク情報] セクションで、[VPCの選択] を見つけ、[エンドポイント] 列の [コピー] をクリックし、エンドポイントの :80の前のコンテンツをオンプレミスマシンに保存します。

  3. 左側のナビゲーションウィンドウで、[アカウント管理] をクリックします。 [ユーザー管理] ページで、カスタムアカウントを作成します。 アカウントとパスワードをオンプレミスのマシンに保存します。 この情報は、後続の操作でHologresインスタンスに接続するために使用されます。 カスタムアカウントの作成方法については、「ユーザーの管理」トピックのカスタムアカウントの作成セクションを参照してください。

    [メンバーロールの選択] パラメーターで、[スーパー管理者 (スーパーユーザー) の例] を選択します。

OpenSearch

  1. OpenSearch Vector Search Editionインスタンスを作成します。 詳細については、「OpenSearch Vector Search Editionインスタンスの購入」をご参照ください。

    インスタンスの作成後、ステータスは [保留中の設定] になります。

  2. [インスタンス] ページで、OpenSearch Vector Search EditionインスタンスのインスタンスIDを表示し、ローカルコンピューターに保存します。

  3. インデックステーブルを設定します。

    1. [インスタンス] ページで、[操作] 列の [設定] をクリックします。

    2. 表示される [テーブルの管理] ページで、[基本テーブル情報] > [データ同期] > [フィールド設定] > [インデックススキーマ] の手順を実行してテーブルを設定します。 インデックスが作成されたら、検索を実行できます。 詳細については、「一般的なシナリオの開始方法」をご参照ください。

      次のサンプルをJSONファイルとして保存できます。 [フィールド設定] ステップで、[フィールドインデックススキーマのインポート] をクリックし、JSONファイルをインポートします。 次に、インポートされたファイルに基づいてフィールドとインデックス構造が設定されます。

      {
      	"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": []
      	}
      }
  4. インスタンスに関連付けられている仮想プライベートクラウド (VPC) のパブリックアクセスを設定します。 詳細については、「インターネットNATゲートウェイのSNAT機能を使用したインターネットへのアクセス」をご参照ください。

  5. OpenSearch Vector Search Editionインスタンスのパブリックアクセスを設定します。

    説明

    EASは、プライベートエンドポイントを使用してOpenSearchインスタンスにアクセスできません。 プライベートアクセスを設定する必要がある場合は、アカウントマネージャーに連絡してください。

    1. 関連付けられているelastic IPアドレス (EIP) を表示します。

      1. VPCの [リソース管理] ページに移動します。 詳細については、「VPCの表示」をご参照ください。

      2. [インターネットNATゲートウェイ] の番号をクリックし、[インターネットNATゲートウェイ] ページに移動します。image

      3. インターネットNATゲートウェイインスタンスのIDをクリックします。

      4. [関連付けられたEIP] タブで、EIPアドレスを表示し、ローカルコンピューターに保存します。image

    2. OpenSearchコンソールの [インスタンス] ページで、OpenSearch Vector Search Editionインスタンスの名前をクリックして、[インスタンス情報] ページに移動します。

    3. [ネットワーク情報] セクションで、[パブリックアクセス] を有効にします。 [パブリックアクセスのホワイトリストの変更] パネルで、関連付けられているEIPアドレスをホワイトリストに追加します。

    4. [ネットワーク情報] セクションで、[パブリックエンドポイント] をローカルコンピューターに保存します。

  6. ユーザー名とパスワードの表示

    [APIエンドポイント] セクションで、OpenSearch Vector Search Editionインスタンスの作成時に指定した [ユーザー名][パスワード] を表示します。image

RDS for PostgreSQL

  1. インスタンスの作成

  2. インスタンスのアカウントとデータベースを作成します。 詳細については、「データベースとアカウントの作成」をご参照ください。

    • アカウントを作成したら、[アカウントタイプ][特権アカウント] を選択します。

    • データベースを作成するときに、[権限付与者] に作成した特権アカウントを指定します。

  3. データベース接続を設定します。

    1. [インスタンス] ページに移動します。 上部のナビゲーションバーで、RDS インスタンスが存在するリージョンを選択します。 次に、RDSインスタンスを見つけ、インスタンスのIDをクリックします。

    2. 左側のナビゲーションウィンドウで、データベースの接続をクリックします。

    3. [データベース接続] ページで、エンドポイントとポートを表示します。

      • 内部エンドポイント: RAGアプリケーションとデータベースが同じVPCに属している場合、内部接続を使用できます。

      • パブリックエンドポイント: パブリックエンドポイントを申請し、ホワイトリストに0.0.0.0/0を追加する必要があります。 詳細については、「パブリックエンドポイントの申請またはリリース」をご参照ください。

ステップ2: RAGベースのチャットボットのデプロイ

  1. EASページに移動します。

    1. Platform for AI (PAI) コンソールにログインします。

    2. 左側のナビゲーションペインで、[ワークスペース] をクリックします。 [ワークスペース] ページで、モデルを配置するワークスペースを見つけ、その名前をクリックして [ワークスペースの詳細] ページに移動します。

    3. 左側のナビゲーションウィンドウで、[モデル展開] > [Elastic Algorithm Service (EAS)] を選択して、[Elastic Algorithm Service (EAS)] ページに移動します。image

  2. [Elastic Algorithm Service (EAS)] ページで、[サービスのデプロイ] をクリックします。 [シナリオベースのモデル展開] セクションで、[RAGベースのスマートダイアログ展開] をクリックします。6eea7736f88e6ec8b3b900e4d028bb48

  3. RAGベースのLLM Chatbotデプロイページで、パラメーターを設定します。 次の表では、さまざまなセクションの主要なパラメーターについて説明します。

    • 基本情報

      パラメーター

      説明

      サービス名

      サービスの名前です。

      モデルソース

      モデルのソース。 有効な値: オープンソースモデルおよびカスタム微調整モデル

      モデルタイプ

      モデルタイプ。 ビジネス要件に基づいてモデルタイプを選択します。

      モデルソースパラメーターをカスタム微調整モデルに設定した場合、モデルタイプのパラメーターの数量と精度を設定する必要があります。

      モデル設定

      モデルソースパラメーターを [カスタム微調整モデル] に設定した場合、微調整モデルファイルを格納するパスを設定する必要があります。 有効な値:

      説明

      モデルファイル形式がHugging Face transformersと互換性があることを確認してください。

      • マウントOSS: 微調整されたモデルファイルが格納されているOSSパス。

      • マウントNAS: 微調整されたモデルファイルが格納されているNASファイルシステムと、NASファイルシステムのソースパス。

    • リソース設定

      パラメーター

      説明

      リソース設定

      • モデルソースパラメーターをオープンソースモデルに設定した場合、システムはデフォルト値として選択されたモデルタイプに基づいてインスタンスタイプを自動的に選択します。

      • モデルソースパラメーターを [カスタム微調整モデル] に設定した場合、モデルに一致するインスタンスタイプを選択します。 詳細については、「EASでLLMを迅速にデプロイする」トピックの「別のオープンソースLLMに切り替えるにはどうすればよいですか?」セクションをご参照ください。

      推論の加速

      推論アクセラレーションは、A10またはGU30インスタンスにデプロイされているQwen、Llama2、ChatGLM、またはBaichuan2モデルに対して有効にできます。 次の推論アクセラレーションメソッドが提供されます。

      • BladeLLM推論アクセラレーション: BladeLLM推論アクセラレーションエンジンは、高い同時実行性と低いレイテンシを保証します。 BladeLLMを使用すると、費用対効果の高い方法でLLM推論を高速化できます。

      • オープンソースvLLM推論アクセラレーション

    • ベクトルデータベース设定

      ビジネス要件に基づいてベクトルデータベースを構築するサービスを選択します。

      フェア

      パラメーター

      説明

      Vectorデータベース型

      ベクターデータベースの構築に使用するサービス。 [FAISS] を選択します。

      OSSパス

      ベクトルデータベースのOSSパス。 現在のリージョンでOSSパスを選択します。 利用可能なOSSパスがない場合は、OSSパスを作成できます。 詳細については、「OSSコンソールを使用して開始する」をご参照ください。

      Elasticsearch

      パラメーター

      説明

      Vectorデータベース型

      ベクターデータベースの構築に使用するサービス。 [Elasticsearch] を選択します。

      プライベートエンドポイントとポート

      手順1で取得したプライベートエンドポイントとポート番号。 形式: http:// Private endpoint:Port number

      インデックス名

      インデックスの名前。 新しいインデックス名または既存のインデックス名を入力できます。 既存のインデックス名を使用する場合、インデックススキーマはRAGベースのチャットボットの要件を満たす必要があります。 たとえば、EASを使用してRAGベースのチャットボットをデプロイするときに自動的に作成されるインデックスの名前を入力できます。

      [アカウント]

      手順1でElasticsearchクラスターを作成したときに設定したユーザー名。

      Password

      手順1でElasticsearchクラスターを作成したときに設定したパスワード。

      Hologres

      パラメーター

      説明

      Vectorデータベース型

      ベクターデータベースの構築に使用するサービス。 [ホログラム] を選択します。

      呼び出し情報

      ステップ1で取得したHologres呼び出し情報。

      データベース名

      手順1で作成したデータベースの名前。

      [アカウント]

      手順1で作成したカスタムアカウント。

      Password

      手順1で作成したカスタムアカウントのパスワード。

      テーブル名

      テーブルの名前。 新しいテーブル名または既存のテーブル名を入力できます。 既存のテーブル名を使用する場合、テーブルスキーマはRAGベースのチャットボットの要件を満たす必要があります。 たとえば、EASを使用してRAGベースのチャットボットをデプロイするときに自動的に作成されるHologresテーブルの名前を入力できます。

      OpenSearch

      パラメーター

      説明

      Endpoint

      手順1で取得したパブリックエンドポイント。

      インスタンスID

      手順1で作成したOpenSearch Vector Search EditionインスタンスのID。

      ユーザー名

      手順1でOpenSearch Vector Search Editionインスタンスを作成するときに指定したユーザー名とパスワード。

      Password

      テーブル名

      手順1でOpenSearch Vector Search Editionインスタンス用に設定したインデックステーブルの名前。

      RDS for PostgreSQL

      パラメーター

      説明

      ホストアドレス

      手順1で取得した内部エンドポイントまたはパブリックエンドポイント。

      ポート

      実際のポート番号。 デフォルト値: 5432

      データベース

      手順1で作成したデータベースの名前。

      テーブル名

      テーブル名を指定します。

      [アカウント]

      ステップ1で作成した特権アカウント。

      Password

      ステップ1で作成した特権アカウントのパスワード。

    • VPC設定

      パラメーター

      説明

      [VPC]

      • Hologres、Elasticsearch、OpenSearch、またはRDS PostgreSQLを使用する場合 ベクトルデータベースを構築するには、ベクトルデータベースがデプロイされているVPCを選択します。

        説明

        OpenSearchを使用してベクターデータベースを構築する場合は、別のVPCを選択できます。 ただし、インターネット経由でVPCにアクセスでき、関連するEIPがOpenSearchインスタンスのパブリックアクセスホワイトリストに追加されていることを確認する必要があります。 詳細については、「インターネットNATゲートウェイのSNAT機能を使用したインターネットへのアクセス」および「パブリックアクセスホワイトリストの設定」をご参照ください。

      • Faissを使用してベクターデータベースを構築する場合、VPCを設定する必要はありません。

      vSwitch

      セキュリティグループ名

  4. [デプロイ] をクリックします。

    [サービスステータス] 列の値が [実行中] に変わると、RAGベースのチャットボットがデプロイされます。

ステップ3: web UIでモデル推論を実行する

この手順では、web UIでRAGベースのチャットボットをデバッグする方法について説明します。 web UIでRAGベースのチャットボットのQ&Aパフォーマンスをテストした後、PAIが提供するAPI操作を呼び出して、RAGベースのチャットボットをビジネスシステムに適用できます。 詳細については、このトピックの「手順4: API操作を呼び出してモデル推論を実行する」をご参照ください。

1. RAGベースのチャットボットの設定

  1. RAGベースのチャットボットがデプロイされたら、[サービスタイプ] 列の [Webアプリの表示] をクリックしてweb UIに移動します。

  2. 機械学習モデルを設定します。

    • 埋め込みモデル名: 4つのモデルが利用可能です。 デフォルトでは、最適なモデルが選択されています。

    • 埋め込みディメンション: 埋め込みモデル名パラメーターを設定すると、システムは自動的にこのパラメーターを設定します。

  3. ベクトルデータベースが接続されているかどうかを確認します。

    システムは、チャットボットのデプロイ時に構成されたベクトルデータベース設定を自動的に認識して適用します。 設定は変更できません。 Hologresを使用してベクターデータベースを構築する場合は、[Hologresの接続] をクリックして、Hologresのベクターデータベースが接続されているかどうかを確認します。

2. ビジネスデータファイルのアップロード

[アップロード] タブで、指定した業務データファイルをアップロードします。 TXT、PDF、XLSX、XLS、CSV、DOCX、DOC、Markdown、およびHTMLの形式でファイルをアップロードできます。

image

  1. セマンティックベースのチャンキングパラメータを設定します。

    次のパラメーターを設定して、ドキュメントチャンクの粒度を制御し、自動Q&A情報抽出を有効にします。

    パラメーター

    説明

    チャンクサイズ

    各チャンクのサイズ。 単位:バイト デフォルト値: 500。

    チャンク重複

    隣接するチャンク間の重複部分。 デフォルト値は 10 です。

    QA抽出モデルによるプロセス

    Q&A情報を抽出するかどうかを指定します。 [はい] を選択すると、ビジネスデータファイルがアップロードされた後、システムは自動的に質問と対応する回答をペアで抽出します。 これにより、データクエリでより正確な回答が返されます。

  2. [ファイル] タブで、1つ以上のビジネスデータファイルをアップロードします。 [ディレクトリ] タブで、業務データファイルを含むディレクトリをアップロードすることもできます。 たとえば、rag_chatbot_test_doc.txtファイルをアップロードできます。

  3. [アップロード] をクリックします。 システムは、ビジネスデータファイルをアップロードする前に、ビジネスデータファイルに対してデータクレンジングおよびセマンティックベースのチャンキングを実行する。 データクレンジングは、テキスト抽出およびハイパーリンク置換を含みます。image

3。 モデル推論パラメーターの設定

検索ベースのクエリのQ&Aポリシーの設定

[チャット] タブで、検索ベースのクエリのQ&Aポリシーを設定します。

image

パラメーター

説明

ストリーミング出力

ストリーミングモードで結果を返すかどうかを指定します。 ストリーミング出力を選択した場合、結果はストリーミングモードで返されます。

トップK

ベクトルデータベースから返される最も関連性の高い結果の数。

再ランクモデル

ほとんどのベクターデータベースは、データの精度を損ない、高いコンピューティング効率を提供します。 その結果、ベクトルデータベースから返される上位K個の結果は、最も関連性が高くない可能性があります。 この場合、ビジネス要件に基づいて、オープンソースモデルBAAI/bge-reranker-baseBAAI/bge-reranker-large、またはllm-rerankerを使用して、ベクトルデータベースから返される上位K件の結果に対して高精度の再ランク付け操作を実行し、より関連性が高く正確なナレッジファイルを取得できます。

説明

初めてモデルを使用する場合は、モデルが読み込まれるまでしばらく待つ必要があります。

キーワードモデル

検索メソッド。 有効な値:

  • 埋め込みのみ: ベクトルデータベースベースの検索が使用されます。

  • キーワードのみ: キーワードベースの検索が使用されます。

  • ハイブリッド: ベクトルデータベースベースの検索とキーワードベースの検索を組み合わせたマルチモーダル検索が使用されます。

説明

最も複雑なシナリオでは、ベクトルデータベースベースの検索は優れたパフォーマンスを提供します。 しかしながら、コーパスが乏しいいくつかの垂直フィールドにおいて、または正確なマッチングが必要とされるシナリオにおいて、ベクトルデータベースベースの検索は、疎および密なベクトルに基づく従来の検索と同じ効果を達成しない場合があります。 疎ベクトルおよび密ベクトルに基づく検索は、ユーザクエリと知識ファイルとの間のキーワード重複を計算することにより、より単純かつ効率的です。

PAIは、疎ベクトルおよび密ベクトルに基づいて検索を実行するために、BM25などのキーワードベースの検索アルゴリズムを提供します。 ベクトルデータベースベースの検索およびキーワードベースの検索は、それら自身の利点および欠点を有します。 2つのタイプの検索方法の結果を組み合わせることにより、全体的な精度および効率を改善することができます。 相互ランク融合 (RRF) アルゴリズムは、合計スコアを得るためにファイルが異なる検索方法でソートされるランクの加重合計値を計算します。 キーワードモデルパラメーターとしてハイブリッドを選択した場合、マルチモーダル検索が使用されます。 この場合、PAIはデフォルトでRRFアルゴリズムを使用して、ベクトルデータベースベースの検索とキーワードベースの検索から返された結果を組み合わせます。

RAGベースのクエリのQ&Aポリシーの設定

[チャット] タブで、RAGベースのクエリのQ&Aポリシーを設定します。2f946624a50449a379a901b6a8bf716d

  • PAIは、様々なプロンプトポリシーを提供する。 事前定義されたプロンプトテンプレートを選択するか、またはより良い推論結果を得るためのカスタムプロンプトテンプレートを指定できます。

  • さらに、RAG (検索 + LLM) クエリモードでは、ストリーミング出力、再ランク付けモデル、キーワードモデルのパラメーターを設定できます。 詳細については、このトピックの「検索ベースのクエリのQ&Aポリシーの設定」をご参照ください。

4。 モデル推論の実行

検索

チャットボットは、ベクターデータベースから上位K件の関連結果を返します。

image

LLM

チャットボットはLLMアプリケーションのみを使用して回答を生成します。

image

RAG (検索 + LLM)

チャットボットは、ベクターデータベースから返された結果とクエリを選択したプロンプトテンプレートに入力し、テンプレートをLLMアプリケーションに送信して回答を提供します。

image

手順4: API操作を呼び出してモデル推論を実行

  1. RAGベースのチャットボットの呼び出し情報を取得します。

    1. RAGベースのチャットボットの名前をクリックして、[サービスの詳細] ページに移動します。

    2. [基本情報] セクションで、[エンドポイント情報の表示] をクリックします。

    3. [パブリックエンドポイント] タブで、サービスエンドポイントとトークンを取得します。

  2. web UI上のベクターデータベースに接続し、ビジネスデータファイルをアップロードします。 詳細については、このトピックの1. RAGベースのチャットボットの設定2. ビジネスデータファイルのアップロードセクションをご参照ください。

  3. API操作を呼び出してモデル推論を実行します。

    PAIでは、さまざまなクエリモードで次のAPI操作を使用して、RAGベースのチャットボットを呼び出すことができます。検索モードではservice/query/retrieval、llmモードではservice/query /LLM、RAGモードではservice/queryです。 サンプルコード:

    cURLコマンド

    • シングルラウンドの会話検索要求を開始する

      • 方法1: service/query/retrieval操作を呼び出します。

        curl -X 'POST'  '<service_url>service/query/retrieval' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json'  -d '{"question": "What is PAI?"}'
        # Replace <service_url> and <service_token> with the service endpoint and service token that you obtained in Step 1.

      • 方法2: /service/query/llm操作を呼び出します。

        curl -X 'POST'  '<service_url>service/query/llm' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "What is PAI?"}'
        # Replace <service_url> and <service_token> with the service endpoint and service token that you obtained in Step 1.

        {"question":"What is PAI?" 、"temperature": 0.9} など、他の調整可能な推論パラメーターを追加できます。

      • 方法3: service/query操作を呼び出します。

        curl -X 'POST'  '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "What is PAI?"}'
        # Replace <service_url> and <service_token> with the service endpoint and service token that you obtained in Step 1.

        {"question":"What is PAI?" 、"temperature": 0.9} など、他の調整可能な推論パラメーターを追加できます。

    • マルチラウンド会話検索要求を開始する

      マルチラウンドの会話検索リクエストは、RAGおよびLLMクエリモードでのみ開始できます。 次のサンプルコードは、RAGクエリモードでマルチラウンド会話検索リクエストを開始する方法の例を示しています。

      # Send the request.  
      curl -X 'POST'  '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "What is PAI?"}'
      
      # Provide the session ID returned for the request. This ID uniquely identifies a conversation in the conversation history. After the session ID is provided, the corresponding conversation is stored and is automatically included in subsequent requests to call an LLM. 
      curl -X 'POST'  '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "What are the benefits of PAI?","session_id": "ed7a80e2e20442eab****"}'
      
      # Provide the chat_history parameter, which contains the conversation history between you and the chatbot. The parameter value is a list in which each element indicates a single round of conversation in the {"user":"Inputs","bot":"Outputs"} format. Multiple conversations are sorted in chronological order. 
      curl -X 'POST'  '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question":"What are the features of PAI?", "chat_history": [{"user":"What is PAI", "bot":"PAI is an AI platform provided by Alibaba Cloud..."}]}'
      
      # If you provide both the session_id and chat_history parameters, the conversation history is appended to the conversation that corresponds to the specified session ID.  
      curl -X 'POST'  '<service_url>service/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question":"What are the features of PAI?", "chat_history": [{"user":"What is PAI", "bot":"PAI is an AI platform provided by Alibaba Cloud..."}], "session_id": "1702ffxxad3xxx6fxxx97daf7c"}'

    Pythonスクリプト

    • 次のサンプルコードは、単一ラウンドの会話検索リクエストを開始する方法の例を示しています。

      import requests
      
      EAS_URL = 'http://xxxx.****.cn-beijing.pai-eas.aliyuncs.com'
      headers = {
          'accept': 'application/json',
          'Content-Type': 'application/json',
          'Authorization': 'MDA5NmJkNzkyMGM1Zj****YzM4M2YwMDUzZTdiZmI5YzljYjZmNA==',
      }
      
      
      def test_post_api_query_llm():
          url = EAS_URL + '/service/query/llm'
          data = {
             "question":"What is PAI?"
          }
          response = requests.post(url, headers=headers, json=data)
      
          if response.status_code != 200:
              raise ValueError(f'Error post to {url}, code: {response.status_code}')
          ans = dict(response.json())
          print(f"======= Question =======\n {data['question']}")
          print(f"======= Answer =======\n {ans['answer']} \n\n")
      
      
      def test_post_api_query_retrieval():
          url = EAS_URL + '/service/query/retrieval'
          data = {
             "question":"What is PAI?"
          }
          response = requests.post(url, headers=headers, json=data)
      
          if response.status_code != 200:
              raise ValueError(f'Error post to {url}, code: {response.status_code}')
          ans = dict(response.json())
          print(f"======= Question =======\n {data['question']}")
          print(f"======= Answer =======\n {ans['docs']}\n\n")
      
      
      def test_post_api_query_rag():
          url = EAS_URL + '/service/query'
          data = {
             "question":"What is PAI?"
          }
          response = requests.post(url, headers=headers, json=data)
      
          if response.status_code != 200:
              raise ValueError(f'Error post to {url}, code: {response.status_code}')
          ans = dict(response.json())
          print(f"======= Question =======\n {data['question']}")
          print(f"======= Answer =======\n {ans['answer']}")
          print(f"======= Retrieved Docs =======\n {ans['docs']}\n\n")
      # LLM
      test_post_api_query_llm()
      # Retrieval
      test_post_api_query_retrieval()
      # RAG (Retrieval + LLM)
      test_post_api_query_rag()
      

      EAS_URLパラメーターをRAGベースのチャットボットのエンドポイントに設定します。 エンドポイントの末尾にあるスラッシュ (/) を削除してください。 [権限付与] パラメーターをRAGベースのチャットボットのトークンに設定します。

    • マルチラウンド会話検索要求を開始する

      マルチラウンド会話検索リクエストは、RAG (検索 + LLM) およびLLMクエリモードでのみ開始できます。 サンプルコード:

      import requests
      
      EAS_URL = 'http://xxxx.****.cn-beijing.pai-eas.aliyuncs.com'
      headers = {
          'accept': 'application/json',
          'Content-Type': 'application/json',
          'Authorization': 'MDA5NmJkN****jNlMDgzYzM4M2YwMDUzZTdiZmI5YzljYjZmNA==',
      }
      
      
      def test_post_api_query_llm_with_chat_history():
          url = EAS_URL + '/service/query/llm'
          # Round 1 query
          data = {
             "question":"What is PAI?"
          }
          response = requests.post(url, headers=headers, json=data)
      
          if response.status_code != 200:
              raise ValueError(f'Error post to {url}, code: {response.status_code}')
          ans = dict(response.json())
          print(f"=======Round 1: Question =======\n {data['question']}")
          print(f"=======Round 1: Answer =======\n {ans['answer']} session_id: {ans['session_id']} \n")
         
          # Round 2 query
          data_2 = {
             "question": "What are the benefits of PAI?",
             "session_id": ans['session_id']
          }
          response_2 = requests.post(url, headers=headers, json=data_2)
      
          if response.status_code != 200:
              raise ValueError(f'Error post to {url}, code: {response.status_code}')
          ans_2 = dict(response_2.json())
          print(f"=======Round 2: Question =======\n {data_2['question']}")
          print(f"=======Round 2: Answer =======\n {ans_2['answer']} session_id: {ans_2['session_id']} \n\n")
      
      
      def test_post_api_query_rag_with_chat_history():
          url = EAS_URL + '/service/query'
         
          # Round 1 query
          data = {
             "question":"What is PAI?"
          }
          response = requests.post(url, headers=headers, json=data)
      
          if response.status_code != 200:
              raise ValueError(f'Error post to {url}, code: {response.status_code}')
          ans = dict(response.json())
      
          print(f"=======Round 1: Question =======\n {data['question']}")
          print(f"=======Round 1: Answer =======\n {ans['answer']} session_id: {ans['session_id']}")
          print(f"=======Round 1: Retrieved Docs =======\n {ans['docs']}\n")
      
          # Round 2 query
          data = {
             "question":"What are the features of PAI?",
             "session_id": ans['session_id']
          }
          response = requests.post(url, headers=headers, json=data)
      
          if response.status_code != 200:
              raise ValueError(f'Error post to {url}, code: {response.status_code}')
          ans = dict(response.json())
      
          print(f"=======Round 2: Question =======\n {data['question']}")
          print(f"=======Round 2: Answer =======\n {ans['answer']} session_id: {ans['session_id']}")
          print(f"=======Round 2: Retrieved Docs =======\n {ans['docs']}")
      # LLM
      test_post_api_query_llm_with_chat_history()
      # RAG (Retrieval + LLM)
      test_post_api_query_rag_with_chat_history()
      

      EAS_URLパラメーターをRAGベースのチャットボットのエンドポイントに設定します。 エンドポイントの末尾にあるスラッシュ (/) を削除してください。 [権限付与] パラメーターをRAGベースのチャットボットのトークンに設定します。

関連ドキュメント

EASを使用して、次のアイテムを展開することもできます。

  • web UIまたはAPI操作を使用して呼び出すことができるLLMアプリケーションをデプロイできます。 LLMアプリケーションのデプロイ後、LangChainフレームワークを使用してエンタープライズナレッジベースをLLMアプリケーションに統合し、インテリジェントなQ&Aおよび自動化機能を実装します。 詳細については、「EASでのLLMの迅速なデプロイ」をご参照ください。

  • ComfyUIおよびStable video Diffusionモデルを使用して、AIビデオ生成モデルサービスをデプロイできます。 これにより、ソーシャルメディアプラットフォームでの短いビデオ生成やアニメーションなどのタスクを完了できます。 詳細については、「ComfyUIを使用したAIビデオ生成モデルサービスのデプロイ」をご参照ください。

よくある質問

RAGベースのチャットボットのチャット履歴機能を無効にするにはどうすればよいですか?

RAGベースのチャットボットのweb UIページで、[チャット履歴] を選択しないでください。image