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

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

最終更新日:Nov 12, 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) を使用してベクターデータベースを構築する場合、VPC、vSwitch、およびセキュリティグループは必要ありません。

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

    説明

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

使用上の注意

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

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

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

手順1: RAGサービスのデプロイ

RAGベースのLLMチャットボットをデプロイし、ベクターデータベースをバインドするには、次の手順を実行します。

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

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

  3. [RAGベースのLLM Chatbotデプロイ] ページで、次の主要なパラメーターを設定します。

    • 基本情報

      パラメーター

      説明

      モデルソース

      モデルのソース。 有効な値:

      • オープンソースモデル :PAIは、Qwen、Llama、ChatGLM、Baichuan、Falcon、Yi、Mistral、Gemma、DeepSpeekなど、さまざまなプリセットオープンソースモデルを提供します。 適切なパラメータサイズでモデルを選択してデプロイできます。

      • カスタム微調整モデル :PAIは、特定のシナリオに合わせて微調整モデルをサポートします。

      モデルタイプ

      • オープンソースモデルを使用する場合は、適切なパラメータサイズのモデルを選択します。

      • カスタム微調整モデルを使用する場合は、モデルタイプ、パラメータサイズ、および精度を指定する必要があります。

      モデル設定

      カスタム微調整モデルを使用する場合は、モデルのパスを指定する必要があります。 モデルのデプロイ時に、システムはこのパスからモデル構成ファイルを読み取ります。 有効な値:

      説明

      モデルをEASサービスとして展開する前に、まず微調整されたモデルをTransformers of Huggingfaceで実行して、出力が期待どおりであることを確認することをお勧めします。

      • OSS: 微調整されたモデルファイルが保存されているOSSパスを選択します。

      • NAS: 微調整されたモデルファイルが保存されているNASファイルシステム、ソースパス、およびマウントパスを選択します。

    • リソース設定

      パラメーター

      説明

      リソース設定

      モデルを選択すると、システムは適切なリソース設定を推奨します。 別の仕様に切り替えると、モデルサービスの起動に失敗することがあります。

      推論の加速

      推論アクセラレーションは、A10またはGU30インスタンスにデプロイされているQwen、Llama2、ChatGLM、またはBaichuan2モデルに対して有効にできます。 有効な値:

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

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

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

      FaissElasticsearchHologresOpenSearch、またはRDS PostgreSQLのいずれかのタイプのベクターデータベースを使用できます。 ビジネス要件に基づいてタイプを選択します。

      フェア

      Faissを使用すると、オンラインベクトルデータベースを購入またはアクティブ化することなく、EASインスタンスにローカルベクトルデータベースをすばやく構築できます。

      パラメーター

      説明

      Vectorデータベース型

      [FAISS] を選択します。

      OSSパス

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

      説明

      カスタム微調整モデルを使用する場合は、ベクトルデータベースとモデルのOSSパスが異なることを確認してください。

      ElasticSearch

      Elasticsearchクラスターの接続情報を指定します。 Elasticsearchクラスターの作成方法と準備方法については、「Elasticsearchを使用したベクターデータベースの準備」をご参照ください。

      パラメーター

      説明

      Vectorデータベース型

      [Elasticsearch] を選択します。

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

      Elasticsearchクラスターのプライベートエンドポイントとポート番号。 形式: http:// Private endpoint:Port number Elasticsearchクラスターのプライベートエンドポイントとポート番号の取得方法については、「クラスターの基本情報の表示」をご参照ください。

      インデックス名

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

      [アカウント]

      Elasticsearchクラスターを作成したときに指定したログオン名。 デフォルトのログイン名: elastic。

      Password

      Elasticsearchクラスターの作成時に設定したパスワード。 パスワードを忘れた場合は、「Elasticsearchクラスターのアクセスパスワードのリセット」をご参照ください。

      Hologres

      Hologresインスタンスの接続情報を指定します。 Hologresインスタンスを購入するには、「Hologresインスタンスの購入」をご参照ください。

      パラメーター

      説明

      Vectorデータベース型

      [ホログラム] を選択します。

      呼び出し情報

      [VPCの選択] のホスト情報。 Hologresコンソールの [インスタンスの詳細] ページに移動します。 [ネットワーク情報] セクションで、[VPCの選択] の横にある [コピー] をクリックして、ドメイン名 :80の前のホストを取得します。

      データベース名

      Hologresインスタンス内のデータベースの名前。 データベースの作成方法の詳細については、「データベースの作成」をご参照ください。

      [アカウント]

      作成したカスタムアカウント。 詳細については、「カスタムアカウントの作成」をご参照ください。 [メンバーの役割の選択] セクションで、[スーパー管理者 (スーパーユーザー) の例] を選択します。

      Password

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

      テーブル名

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

      OpenSearch

      Vector Search EditionのOpenSearchインスタンスの接続情報を指定します。 OpenSearchインスタンスの作成方法と準備方法については、「OpenSearchインスタンスの準備」をご参照ください。

      パラメーター

      説明

      Vectorデータベース型

      [OpenSearch] を選択します。

      Endpoint

      OpenSearchインスタンスのパブリックエンドポイント。 まず、OpenSearchインスタンスのインターネットアクセスを設定する必要があります。 詳細については、「OpenSearchインスタンスの準備」をご参照ください。

      インスタンスID

      OpenSearchインスタンスリストからインスタンスIDを取得します。

      ユーザー名

      OpenSearchインスタンスのユーザー名とパスワードを入力します。

      Password

      テーブル名

      OpenSearchインスタンスのインデックステーブルの名前を入力します。 インデックステーブルの準備方法については、「OpenSearchインスタンスの準備」をご参照ください。

      RDS PostgreSQL

      ApsaraDB RDS for PostgreSQLインスタンスの接続情報を指定します。

      パラメーター

      説明

      Vectorデータベース型

      [RDS PostgreSQL] を選択します。

      ホストアドレス

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

      ポート

      ポート番号 デフォルト値: 5432

      データベース

      データベースの名前。 データベースとアカウントの作成方法については、「データベースとアカウントの作成」をご参照ください。

      • アカウントを作成するときに、[アカウントタイプ][特権アカウント] を選択します。

      • データベースを作成するときに、[権限付与者] ドロップダウンリストから作成した特権アカウントを選択します。

      テーブル名

      データベーステーブルの名前。

      [アカウント]

      作成した特権アカウントとパスワードを指定します。 データベースとアカウントを作成します。

      Password

    • VPC設定

      パラメーター

      説明

      [VPC]

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

        説明

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

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

      vSwitch

      セキュリティグループ名

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

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

ステップ2: WebUIでチャットボットをテストする

次の手順に従って、ナレッジベースファイルをWebUIページにアップロードし、Q&Aチャットボットをテストします。

1. ベクターデータベースへの接続

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

  2. 埋め込みモデルを設定します。 システムは埋め込みモデルを使用して、テキストチャンクをベクトルに変換します。

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

    • 寸法の埋め込み: このパラメーターは、モデルのパフォーマンスに直接影響します。 埋め込みモデルを選択すると、このパラメーターが自動的に設定されます。

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

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

2. ナレッジベースファイルのアップロード

ナレッジベースファイルをアップロードします。 システムは、知識ベースをPAI-RAGフォーマットで、検索のためにベクトルデータベースに自動的に格納します。 データベース内の既存のナレッジベースを使用することもできますが、ナレッジベースはPAI-RAG形式の要件を満たす必要があります。 そうしないと、検索中にエラーが発生する可能性があります。

image

  1. [アップロード] タブで、チャンクパラメーターを設定します。

    次のパラメーターは、ドキュメントチャンクの粒度とQ&A抽出を有効にするかどうかを制御します。

    パラメーター

    説明

    チャンクサイズ

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

    チャンク重複

    隣接するチャンク間のオーバーラップ。 デフォルト値は 10 です。

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

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

  2. [ファイル] タブまたは [ディレクトリ] タブで、1つ以上のビジネスデータファイルをアップロードします。 ビジネスデータファイルを含むディレクトリをアップロードすることもできます。 サポートされているファイルタイプ: txt、. pdf、Excel (.xlsxまたは. xls),. csv、Word (.docxまたは. doc) 、Markdown、または. htmlを実行します。 設定例: rag_chatbot_test_doc.txt

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

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

[チャット] タブで、Q&Aポリシーを設定します。

取得ポリシー

image

パラメーター

説明

ストリーミング出力

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

検索モード

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

  • 埋め込みのみ: ベクトルデータベースベースの取得。

  • キーワードのみ: キーワードベースの検索。

  • ハイブリッド: ベクトルデータベースベースの検索とキーワードベースの検索を組み合わせます。

説明

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

PAIは、疎ベクトルおよび密ベクトルに基づいて検索を実行するために、BM25などのキーワードベースの検索アルゴリズムを提供する。 ベクトルデータベースベースの検索およびキーワードベースの検索は、それら自身の利点および欠点を有する。 2つのタイプの検索方法の結果を組み合わせることにより、全体的な精度および効率を改善することができる。

相互ランク融合 (RRF) アルゴリズムは、合計スコアを得るためにファイルが異なる検索方法でソートされるランクの加重合計値を計算する。 キーワードモデルパラメーターとしてハイブリッドを選択した場合、マルチモーダル検索が使用されます。 この場合、PAIはデフォルトでRRFアルゴリズムを使用して、ベクトルデータベースベースの検索とキーワードベースの検索から返された結果を組み合わせます。

Rerankerタイプ

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

  • simple-weighted-reranker: 返された上位K個の結果は、重み付けによってソートされます。

  • model-based-reranker: オープンソースの再ランクモデルBAAI/bge-reranker-baseまたはBAAI/bge-reranker-largeを選択して、ベクターデータベースから最初に呼び出された上位K個の結果をソートします。

    説明

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

トップK

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

RAG (Retrieval + LLM) ポリシー

image

  • PAIは、様々なプロンプトポリシーを提供する。 事前定義されたプロンプトテンプレートを選択するか、またはより良い推論結果を得るためのカスタムプロンプトテンプレートを指定できます。 検索拡張世代 (RAG) システムは、返された結果とユーザークエリをプロンプトテンプレートに入力し、プロンプトをLLMに送信します。

  • RAG (検索 + LLM) モードでは、ストリーミング出力、検索モード、およびリランカータイプのパラメーターを設定することもできます。 詳細については、このセクションの「ポリシーの取得」タブをご参照ください。

4. モデル推論の実行

検索

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

image

LLM

チャットボットはLLMのみを使用して回答を生成します。

image

RAG (検索 + LLM)

チャットボットは、データベースおよびユーザークエリから返された結果をプロンプトテンプレートに入力し、プロンプトをLLMに送信して回答を生成します。

image

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

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

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

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

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

    3. [呼び出しメソッド] ダイアログボックスの [パブリックエンドポイント] タブで、サービスエンドポイントとトークンを取得します。

  2. WebUIを介してベクターデータベースに接続し、ナレッジベースファイルをアップロードします。

    生成されたテーブルの構造 (PAI-RAG形式に準拠) に基づいて、ナレッジベースをベクトルベースにアップロードすることもできます。

  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ビデオ生成モデルサービスのデプロイ」をご参照ください。

  • いくつかのパラメーターを設定することで、安定拡散WebUIに基づいてモデルサービスをデプロイできます。 詳細については、「安定した拡散web UIを使用したAIペイントサービスのデプロイ」をご参照ください。

よくある質問

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

RAGベースのチャットボットのweb UIページで、[チャット履歴] のチェックを外します。image