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

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

最終更新日:Aug 25, 2025

Retrieval-Augmented Generation(RAG)技術は、外部ナレッジベースから関連情報を取得し、ユーザー入力とマージすることにより、プライベートドメインナレッジ Q&A における大規模言語モデル(LLM)の機能を強化します。 EAS は、大規模言語モデルとベクトルデータベースの柔軟な選択をサポートするシナリオベースのデプロイ方法を提供し、RAG チャットボットの迅速な構築とデプロイを可能にします。このトピックでは、RAG ベースのチャットボットをデプロイし、モデル推論を実行する方法について説明します。

ステップ 1:RAG サービスをデプロイする

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

  2. [モデルオンラインサービス (EAS)] ページで、[サービスのデプロイ] をクリックします。[シナリオベースのモデルデプロイ] 領域で、[Rag ベースの LLM チャットボットのデプロイ] をクリックします。

    6eea7736f88e6ec8b3b900e4d028bb48

  3. [Rag ベースの LLM チャットボットのデプロイ] ページで、パラメータを構成し、[デプロイ] をクリックします。[サービスステータス][実行中] に変わると、サービスが正常にデプロイされます。主要なパラメータの説明は次のとおりです。

    • 基本情報

      パラメータ

      説明

      バージョン

      デプロイには次の 2 つのバージョンがサポートされています。

      • [統合 LLM デプロイ]:LLM サービスと RAG サービスを同じサービス内にデプロイします。

      • [個別 LLM デプロイ]:RAG サービスのみをデプロイします。ただし、RAG サービス内では、柔軟性を高めるために、LLM サービスを自由に切り替えて接続できます。

      モデルタイプ

      [統合 LLM デプロイ] を選択した場合は、デプロイする LLM を選択する必要があります。特定のユースケースに基づいてオープンソースモデルを選択できます。

    • リソースデプロイ

      パラメータ

      説明

      デプロイリソース

      モデルカテゴリを選択すると、システムは適切なリソース仕様を自動的に照合します。他のリソース仕様に切り替えると、モデルサービスが起動に失敗する可能性があります。

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

      RAG は、Faiss (Facebook AI Similarity Search)ElasticsearchHologresOpenSearch、または RDS PostgreSQL を使用したベクトルデータベースの構築をサポートしています。シナリオに基づいてバージョンの種類を選択して、ベクトルデータベースとして機能させます。

      FAISS

      Faiss を使用すると、ローカルベクトルデータベースを効率的に作成できるため、オンラインベクトルデータベースを取得またはアクティブ化する必要がなくなります。

      パラメータ

      説明

      バージョンの種類

      [FAISS] を選択します。

      OSS アドレス

      アップロードされたナレッジベースファイルを保存するために、現在のリージョンで作成された OSS ストレージパスを選択します。使用可能なストレージパスがない場合は、コンソールのクイックスタート を参照して作成できます。

      説明

      カスタム微調整モデルデプロイサービスを使用することを選択した場合は、競合を避けるために、選択した OSS ストレージパスがカスタム微調整モデルのパスと重複していないことを確認してください。

      Elasticsearch

      Alibaba Cloud Elasticsearch インスタンスの接続情報を指定します。 Elasticsearch インスタンスを作成して設定項目を準備する方法については、ベクトルデータベース Elasticsearch を準備する を参照してください。

      パラメータ

      説明

      バージョンの種類

      [Elasticsearch] を選択します。

      プライベートネットワークアドレス/ポート

      Elasticsearch インスタンスのプライベートネットワークアドレスとポートを http://<プライベートネットワークアドレス>:<プライベートネットワークポート> の形式で構成します。 Elasticsearch インスタンスのプライベートネットワークアドレスとポート番号を取得する方法については、インスタンスの基本情報を表示する を参照してください。

      インデックス名

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

      アカウント

      Elasticsearch インスタンスを作成したときに構成したログイン名を指定します。デフォルトのログイン名は elastic です。

      パスワード

      Elasticsearch インスタンスを作成したときに構成したパスワードを指定します。ログインパスワードを忘れた場合は、インスタンスアクセスパスワードをリセット できます。

      Hologres

      Hologres インスタンスの接続情報を指定します。 Hologres インスタンスをアクティブ化していない場合は、Hologres の購入 を参照してください。

      パラメータ

      説明

      バージョンの種類

      [Hologres] を選択します。

      呼び出し情報

      指定された VPC のホスト情報を指定します。Hologres 管理コンソール のインスタンス詳細ページに移動します。[ネットワーク情報] 領域で、[指定された VPC] の後の [コピー] をクリックして、ドメイン名 :80 の前のホスト情報を取得します。

      データベース名

      Hologres インスタンスのデータベース名を指定します。データベースの作成方法の詳細については、データベースの作成 を参照してください。

      アカウント

      作成したカスタムアカウントを指定します。詳細については、[メンバーロールを選択] を選択し、[スーパーユーザー] を選択する カスタムユーザーの作成 を参照してください。

      パスワード

      作成したカスタムアカウントのパスワードを指定します。

      テーブル名

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

      OpenSearch

      Vector Search Edition の OpenSearch インスタンスの接続情報を指定します。 OpenSearch インスタンスを作成して設定項目を準備する方法については、ベクトルデータベース OpenSearch を準備する を参照してください。

      パラメータ

      説明

      バージョンの種類

      [OpenSearch] を選択します。

      アクセスアドレス

      Vector Search Edition の OpenSearch インスタンスのパブリックエンドポイントを指定します。 Vector Search Edition の OpenSearch インスタンスのパブリックアクセス機能を有効にする必要があります。詳細については、ベクトルデータベース OpenSearch を準備する を参照してください。

      インスタンス ID

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

      ユーザー名

      Vector Search Edition の OpenSearch インスタンスを作成したときに指定したユーザー名とパスワードを入力します。

      パスワード

      テーブル名

      作成した Vector Search Edition の OpenSearch インスタンスのインデックステーブルの名前を入力します。インデックステーブルの準備方法の詳細については、ベクトルデータベース OpenSearch を準備する を参照してください。

      RDS PostgreSQL

      ApsaraDB RDS for PostgreSQL インスタンスの接続情報を指定します。 ApsaraDB RDS for PostgreSQL インスタンスを作成して設定項目を準備する方法については、ベクトルデータベース RDS PostgreSQL を準備する を参照してください。

      パラメータ

      説明

      バージョンの種類

      [RDS PostgreSQL] を選択します。

      ホストアドレス

      ApsaraDB RDS for PostgreSQL インスタンスの内部ネットワークアドレスを指定します。ApsaraDB RDS for PostgreSQL コンソール ページに移動し、ApsaraDB RDS for PostgreSQL インスタンスの [データベース接続] ページを表示できます。

      ポート

      デフォルト値は 5432 です。実際の状況に基づいて値を入力してください。

      データベース

      作成したデータベースの名前を指定します。データベースとアカウントの作成方法の詳細については、アカウントとデータベースの作成 を参照してください。ここでは、次のようになります。

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

      • [承認済みアカウント] を選択し、作成した特権アカウントを選択します。

      テーブル名

      データベーステーブルの名前を指定します。

      アカウント

      作成した特権アカウントとパスワードを指定します。特権アカウントの作成方法の詳細については、[アカウントタイプ] を選択し、[特権アカウント] を選択する アカウントとデータベースの作成 を参照してください。

      パスワード

    • 仮想プライベートクラウド構成

      パラメータ

      説明

      VPC

      • RAG サービスのデプロイ時に [個別 LLM デプロイ] を選択した場合は、LLM サービスに接続されていることを確認する必要があります。

        • パブリックアクセス:RAG サービスに仮想プライベートクラウド (VPC) を関連付け、インターネットアクセスを構成する

        • プライベートアクセス:RAG サービスと LLM サービスの両方に同じ VPC を関連付けます。

      • Model Studio のモデルを使用したり、オンライン検索で Q&A を実行したりする必要がある場合は、VPC を構成し、パブリックアクセスを有効にする必要があります。詳細については、パブリックネットワーク接続の構成 を参照してください。

      • ベクトルデータベースのネットワーク要件:

        • Faiss ベクトルデータベースはネットワークアクセスを必要としません。

        • Hologres、Elasticsearch、または RDS PostgreSQL は、パブリックネットワークまたはプライベートネットワークを介して EAS からアクセスできます。プライベートネットワークアクセスをお勧めします。プライベートネットワークアクセスでは、EAS で構成された VPC がベクトルデータベースの VPC と一致している必要があります。 VPC、スイッチ、およびセキュリティグループの作成方法の詳細については、VPC の作成と管理 および セキュリティグループの作成 を参照してください。

        • EAS はパブリックネットワークを介してのみ OpenSearch にアクセスできます。アクセス方法の構成方法の詳細については、ステップ 2:設定項目を準備する を参照してください。

      スイッチ

      セキュリティグループ名

ステップ 2:WebUI ページでデバッグする

RAG サービスが正常にデプロイされた後、[サービスメソッド] 列の [Web アプリケーションを表示] をクリックして、WebUI ページを起動します。

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

1. ベクトルデータベースと大規模言語モデルの設定

[設定] タブで、埋め込み関連のパラメータと使用中の大規模言語モデルを変更できます。 デフォルト構成を使用することをお勧めします

説明

Dashscope を使用するには、EAS の パブリックネットワーク接続を構成 し、Bailian の API キーを構成する必要があります。 Bailian モデル呼び出しは個別に課金されます。詳細については、Bailian 課金項目の説明 を参照してください。

  • インデックス パラメータの説明:

    パラメータ

    説明

    インデックス名

    システムは既存のインデックスの更新をサポートしています。ドロップダウンリストから [新規] を選択して新しいインデックスを追加し、インデックス名を指定することで、異なるナレッジベースデータを分離できます。詳細については、ナレッジベースデータの分離に RAG サービスを使用する方法 を参照してください。

    埋め込みタイプ

    2 つのモデルソース、Huggingface と Dashscope をサポートしています。

    • Huggingface:システムは、選択できる組み込みの埋め込みモデルを提供します。

    • Dashscope:Bailian モデルを使用します。デフォルトは text-embedding-v2 モデルです。詳細については、埋め込み を参照してください。

    埋め込み次元

    出力ベクトルの次元。次元設定はモデルのパフォーマンスに直接影響します。埋め込みモデルを選択すると、システムは埋め込み次元を自動的に構成するため、手動操作は必要ありません。

    埋め込みバッチサイズ

    バッチ処理サイズ。

  • 大規模言語モデル パラメータの説明

    [個別 LLM デプロイ] を選択した場合は、LLM のデプロイ を参照して LLM サービスをデプロイする必要があります。次に、LLM サービス名をクリックします。[基本情報] 領域で、[呼び出し情報を表示] をクリックして、サービスアクセスアドレスとトークンを取得します。次に、次のパラメータを構成します。

    パラメータ

    説明

    LLM ベース URL

    • 個別 LLM デプロイを使用する場合は、取得した LLM サービスのアクセスアドレスとトークンを指定します。

    • 統合 LLM デプロイを使用する場合は、システムはこのパラメータをすでにデフォルトで構成しているため、変更は必要ありません。

    API キー

    モデル名

    LLM をデプロイするときに、高速デプロイ-vLLM モードを選択した場合は、qwen2-72b-instruct などのモデル名を指定してください。他のデプロイモードでは、モデル名を default に設定するだけです。

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

[アップロード] タブで、ナレッジベースファイルをアップロードできます。システムは、ナレッジベースを PAI-RAG 形式でベクトルデータベースに自動的に保存します。サポートされているファイルタイプは、.html、.htm、.txt、.pdf、.pptx、.md、Excel(.xlsx または .xls)、.jsonl、.jpeg、.jpg、.png、.csv、または Word(.docx)です。例:rag_chatbot_test_doc.txt。サポートされているアップロード方法は次のとおりです。

  • ローカルからファイルをアップロードする(複数ファイルのアップロードをサポート)または対応するディレクトリ([ファイル] または [ディレクトリ] タブ)

  • OSS からアップロードする([Aliyun OSS] タブ)

アップロードする前に、同時実行制御とセマンティックチャンキングパラメータを変更できます。パラメータの説明は次のとおりです。

パラメータ

説明

データロードを並列化するワーカーの数

同時実行制御パラメータ。デフォルト値は 4 で、システムが 4 つのプロセスを同時に起動してファイルをアップロードすることをサポートしていることを示します。同時実行を のサイズに設定することをお勧めします。たとえば、現在の GPU ビデオメモリが 24 GB の場合、同時実行を 4 に設定できます。

チャンクサイズ

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

チャンクの重複

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

マルチモーダルで処理

マルチモーダルモデルを使用して、PDF、Word、および MD ファイルの画像を処理します。マルチモーダル LLM を使用することを選択した場合は、このスイッチをオンにします。

OCR で PDF を処理

OCR モードを使用して PDF ファイルを解析します。

3. モデル推論の検証

[チャット] タブで、使用するナレッジベースインデックス([インデックス名])を選択し、Q&A 戦略を構成し、Q&A テストを実行します。次の 4 つの Q&A 戦略がサポートされています。

  • [取得]:ベクトルデータベースから上位 K 個の類似結果を直接取得して返します。

  • [LLM]:LLM を直接使用して回答します。

  • [チャット(Web 検索)]:ユーザーの質問に基づいて、オンライン検索が必要かどうかを自動的に判断します。オンライン検索が必要な場合は、検索結果とユーザーの質問を LLM サービスに入力します。オンライン検索を使用するには、EAS の パブリックネットワーク接続を構成する 必要があります。

  • [チャット(ナレッジベース)]:ベクトルデータベースの取得から返された結果をユーザーの質問とマージし、選択したプロンプトテンプレートに入力します。次に、それらを LLM サービスに入力して処理し、Q&A 結果を取得します。

    image

その他の推論パラメータの説明は次のとおりです。

  • 一般パラメータ

    パラメータ

    説明

    ストリーミング出力

    [ストリーミング出力] を選択すると、システムは結果をストリーミング方式で出力します。

    引用が必要

    回答に参考文献が必要かどうか。

    マルチモーダル LLM での推論

    マルチモーダル LLM を使用するときに画像を表示するかどうか。

  • ベクトル取得パラメータ

    取得モード:次の 3 つの取得方法がサポートされています。

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

    • [キーワードのみ]:キーワードベースの取得。

    • [ハイブリッド]:ベクトルデータベースベースの取得とキーワードベースの取得を組み合わせたマルチモーダル取得。

    説明

    ほとんどの複雑なシナリオでは、ベクトルデータベースベースの取得は良好なパフォーマンスを発揮します。ただし、情報が不足している一部の垂直分野や、正確な一致が必要なシナリオでは、ベクトルデータベースベースの取得は、スパースベクトルとデンスベクトルに基づく従来の取得と同じ効果を達成できない場合があります。スパースベクトルとデンスベクトルに基づく取得は、ユーザーのクエリとナレッジファイル間のキーワードの重複を計算することで、よりシンプルで効率的です。

    PAI は、BM25 などのキーワードベースの取得アルゴリズムを提供して、スパースベクトルとデンスベクトルに基づく取得を実行します。ベクトルデータベースベースの取得とキーワードベースの取得には、それぞれ長所と短所があります。 2 つのタイプの取得方法の結果を組み合わせることで、全体的な精度と効率を向上させることができます。

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

  • オンライン検索パラメータ

    パラメータ

    説明

    bing:Bing 検索を構成します。

    Bing API キー

    Bing 検索にアクセスするために使用されます。 Bing API キーの取得方法の詳細については、Bing Web Search API を参照してください。

    検索数

    検索する Web ページの数。デフォルト値は 10 です。

    言語

    検索言語。 zh-CN(中国語)または en-US(英語)を選択できます。

  • LLM パラメータ

    温度:生成されるコンテンツのランダム性を制御します。温度が低いほど、出力結果はより固定されます。温度が高いほど、出力結果はより多様で創造的になります。

ステップ 3:API 呼び出し

次のコンテンツでは、RAG API を呼び出す方法について説明します。

重要

クエリ API とアップロード API は、index_name を指定してナレッジベースを切り替えることができます。 index_name パラメータを省略すると、デフォルトのナレッジベースは default_index になります。詳細については、ナレッジベースデータの分離に RAG サービスを使用する方法 を参照してください。

呼び出し情報を取得する

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

  2. [基本情報] 領域で、[呼び出し情報を表示] をクリックします。

  3. [呼び出し情報] ダイアログボックスで、[パブリックアドレス呼び出し] タブをクリックして、サービスアクセスアドレスとトークンを取得します。

ナレッジベースファイルをアップロードする

API を介してローカルナレッジベースファイルをアップロードできます。アップロードインターフェイスから返された task_id に基づいて、ファイルアップロードタスクのステータスを照会できます。

次の例では、<service_url> を RAG サービスのアクセスアドレスに置き換え、<service_token> を RAG サービスのトークンに置き換えます。アクセスアドレスとトークンを取得する方法の詳細については、呼び出し情報を取得する を参照してください。

  • データをアップロードする

    curl -X 'POST' '<service_url>api/v1/upload_data' -H 'Authorization: <service_token>' -H 'Content-Type: multipart/form-data' -F 'files=@<file_path>'
    # 戻り値: {"task_id": "****557733764fdb9fefa063538914da"}
  • アップロードタスクのステータスを照会する

    curl '<service_url>api/v1/get_upload_state?task_id=****557733764fdb9fefa063538914da' -H 'Authorization: <service_token>'
    # 戻り値: {"task_id":"****557733764fdb9fefa063538914da","status":"completed"}

単一ラウンド会話リクエスト

CURL コマンド

:次の例では、<service_url> を RAG サービスのアクセスアドレスに置き換え、<service_token> を RAG サービスのトークンに置き換えます。アクセスアドレスとトークンを取得する方法の詳細については、呼び出し情報を取得する を参照してください。

  • 取得api/v1/query/retrieval

    curl -X 'POST'  '<service_url>api/v1/query/retrieval' -H 'Authorization: <service_token>' -H 'accept: application/json' -H 'Content-Type: application/json'  -d '{"question": "PAI とは何ですか?"}'
  • LLM/api/v1/query/llm

    curl -X 'POST'  '<service_url>api/v1/query/llm' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "PAI とは何ですか?"}'

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

  • チャット(ナレッジベース)api/v1/query

    curl -X 'POST'  '<service_url>api/v1/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "PAI とは何ですか?"}'

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

  • チャット(Web 検索):api/v1/query/search

    curl --location '<service_url>api/v1/query/search' \
    --header 'Authorization: <service_token>' \
    --header 'Content-Type: application/json' \
    --data '{"question":"中国映画興行収入ランキング", "stream": true}'

Python スクリプト

:次の例では、SERVICE_URL は RAG サービスのアクセスアドレスとして構成され、Authorization は RAG サービスのトークンとして構成されます。アクセスアドレスとトークンを取得する方法の詳細については、呼び出し情報を取得する を参照してください。

import requests

SERVICE_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(url):
    data = {
       "question":"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"======= 質問 =======\n {data['question']}")
    if 'answer' in ans.keys():
        print(f"======= 回答 =======\n {ans['answer']}")
    if 'docs' in ans.keys():
        print(f"======= 取得されたドキュメント =======\n {ans['docs']}\n\n")
 
# LLM 
test_post_api_query(SERVICE_URL + 'api/v1/query/llm')
# 取得
test_post_api_query(SERVICE_URL + 'api/v1/query/retrieval')
# チャット (ナレッジベース)
test_post_api_query(SERVICE_URL + 'api/v1/query')

複数ラウンド会話リクエスト

LLM とチャット (ナレッジベース) は、複数ラウンド会話リクエストの送信をサポートしています。次のコード例は、これを行う方法を示しています。

CURL コマンド

:次の例では、<service_url> を RAG サービスのアクセスアドレスに置き換え、<service_token> を RAG サービスのトークンに置き換えます。アクセスアドレスとトークンを取得する方法の詳細については、呼び出し情報を取得する を参照してください。

次の例は、RAG 会話を実行する方法を示しています。

# リクエストを送信します。
curl -X 'POST'  '<service_url>api/v1/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "PAI とは何ですか?"}'

# リクエストに返されたセッション ID を提供します。この ID は、会話履歴内の会話を一意に識別します。セッション ID が提供されると、対応する会話が保存され、LLM を呼び出す後続のリクエストに自動的に含まれます。
curl -X 'POST'  '<service_url>api/v1/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question": "PAI の利点は何ですか?","session_id": "ed7a80e2e20442eab****"}'

# chat_history パラメータを提供します。これには、チャットボットとの会話履歴が含まれています。パラメータ値はリストで、各要素は {"user":"入力","bot":"出力"} 形式の単一ラウンドの会話を示します。複数の会話は時系列でソートされます。
curl -X 'POST'  '<service_url>api/v1/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question":"その機能は何ですか?", "chat_history": [{"user":"PAI とは何ですか?", "bot":"PAI は Alibaba Cloud の AI プラットフォームです..."}]}'

# session_id パラメータと chat_history パラメータの両方を指定した場合、会話履歴は指定されたセッション ID に対応する会話に追加されます。
curl -X 'POST'  '<service_url>api/v1/query' -H 'Authorization: <service_token>' -H 'accept: application/json'  -H 'Content-Type: application/json'  -d '{"question":"その機能は何ですか?", "chat_history": [{"user":"PAI とは何ですか?", "bot":"PAI は Alibaba Cloud の AI プラットフォームです..."}], "session_id": "1702ffxxad3xxx6fxxx97daf7c"}'

Python

:次の例では、SERVICE_URL は RAG サービスのアクセスアドレスとして構成され、Authorization は RAG サービスのトークンとして構成されます。アクセスアドレスとトークンを取得する方法の詳細については、呼び出し情報を取得する を参照してください。

import requests

SERVICE_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_with_chat_history(url):
    # ラウンド 1 クエリ
    data = {
       "question": "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"=======ラウンド 1:質問 =======\n {data['question']}")
    if 'answer' in ans.keys():
        print(f"=======ラウンド 1:回答 =======\n {ans['answer']} session_id: {ans['session_id']}")
    if 'docs' in ans.keys():
        print(f"=======ラウンド 1:取得されたドキュメント =======\n {ans['docs']}")
   
    # ラウンド 2 クエリ
    data_2 = {
       "question": "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"=======ラウンド 2:質問 =======\n {data_2['question']}")
    if 'answer' in ans.keys():
        print(f"=======ラウンド 2:回答 =======\n {ans_2['answer']} session_id: {ans_2['session_id']}")
    if 'docs' in ans.keys():
        print(f"=======ラウンド 2:取得されたドキュメント =======\n {ans['docs']}")
    print("\n")

# LLM
test_post_api_query_with_chat_history(SERVICE_URL + "api/v1/query/llm")
# チャット (ナレッジベース)
test_post_api_query_with_chat_history(SERVICE_URL + "api/v1/query")

注意事項

このプラクティスは、LLM サービスの最大トークン数に制限されており、RAG ベースの LLM チャットボットの基本的な取得機能を理解するのに役立ちます。

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

  • 複数ラウンドの会話が必要ない場合は、会話履歴機能を無効にして、制限に達する可能性を効果的に減らすことをお勧めします。

    WebUI 操作方法:RAG サービス WebUI ページの [チャット] タブで、[チャット履歴] チェックボックスをオフにします。

    image

FAQ

ナレッジベースデータの分離に RAG サービスを使用する方法

異なる部門または個人が独自の独立したナレッジベースを使用する場合、次の方法を使用して効果的なデータ分離を実現できます。

  1. WebUI ページの [設定] タブで、次のパラメータを構成し、[インデックスを追加] をクリックします。

    • インデックス名[新規] を選択します。

    • 新しいインデックス名:新しいインデックス名をカスタマイズします。たとえば、INDEX_1。

    • パス:VectorStore として Faiss を選択した場合は、パスの末尾にあるインデックス名が新しいインデックス名と一致するように、パスも同期して更新する必要があります。

    image

  2. [アップロード] タブでナレッジベースファイルをアップロードするときに、[インデックス名] を選択できます。アップロードが完了すると、ファイルは選択したインデックスの下に保存されます。image

  3. [チャット] タブで会話を実行するときに、対応するインデックス名を選択します。システムは、インデックスの下にあるナレッジベースファイルを使用してナレッジ Q&A を実行し、異なるナレッジベースのデータ分離を実現します。image

参考文献

EAS を使用して次の項目をデプロイすることもできます。

  • Web UI または API 操作を使用して呼び出すことができる LLM アプリケーションをデプロイします。 LLM アプリケーションがデプロイされたら、LangChain フレームワークを使用して企業ナレッジベースを LLM アプリケーションに統合し、インテリジェントな Q&A と自動化機能を実装します。詳細については、EAS を使用して 5 分で LLM アプリケーションをデプロイする を参照してください。

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

  • いくつかのパラメータを構成することにより、Stable Diffusion WebUI に基づくモデルサービスをデプロイします。詳細については、AI ペイント - SDWebUI デプロイメント を参照してください。

  • RAG ベースの LLM チャットボットをデプロイすると、EAS リソースに関連する料金のみが課金されます。課金の詳細については、モデルオンラインサービス (EAS) 課金説明 を参照してください。 RAG ベースの LLM チャットボットの使用中に Bailian、ベクトルデータベース、または Object Storage Service (OSS) などの他の製品を使用する場合、それらは対応する製品で個別に課金されます。