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

OpenSearch:RAG ベースの会話型検索アプリケーションを構築する

最終更新日:Aug 06, 2025

AI Search Open Platform は、ナレッジベースに基づいた会話型検索のための Retrieval-Augmented Generation(RAG)ベースのソリューションを提供します。このソリューションは、データ前処理、データ取得、応答生成の 3 つのモジュールで構成されています。 AI Search Open Platform は、ドキュメント解析、再ランク付け、テキスト生成など、各モジュールで利用可能なサービスをコンポーネントとして選択できるように提供しています。このプラットフォームでは、API を呼び出すことでサービスを利用できます。 RAG ベースの会話型検索アプリケーションを迅速に構築するには、コードをマシンにダウンロードし、API キー、API エンドポイント、ローカルナレッジベースなどの情報を構成します。

仕組み

RAG は、取得サービスと生成サービスを組み合わせ、大規模言語モデル(LLM)によって生成されるコンテンツの関連性、正確性、多様性を向上させる AI 手法です。生成プロセス中に、RAG はまず、大量の外部データまたはナレッジベースから入力に最も関連する情報を取得します。次に、取得した情報と元の入力をプロンプトまたはコンテキストとして LLM にインポートし、より正確で有益な出力を生成します。 LLM は、内部パラメータとトレーニングデータに加えて、最新の外部データまたはドメイン固有の情報を参照して、出力の精度を向上させることができます。基于rag智能问答技术实现图-流程图.jpg

シナリオ

ナレッジベースに基づく会話型検索は、プライベートナレッジベースの取得と要約、または業界分野での会話型検索など、複数のシナリオに適用できます。 AI Search Open Platform は、RAG と LLM を組み合わせて、企業のドメイン固有のナレッジベースに基づいて、自然言語での複雑なクエリを理解し、応答します。 RAG ベースのソリューションは、企業が自然言語を使用して PDF ファイル、WORD ファイル、表、画像から必要な情報を迅速に取得するのに役立ちます。

前提条件

RAG ベースの開発ソリューションを構築する

説明

ユーザーアクセスを容易にするため、AI Search Open Platform は次の開発フレームワークを提供しています。

  • Java 用 SDK。

  • Python 用 SDK。

  • ビジネスで LangChain を使用する場合は、開発フレームワークとして LangChain を選択します。

  • ビジネスで LlamaIndex を使用する場合は、開発フレームワークとして LlamaIndex を選択します。

ステップ 1: サービスを選択してコードをダウンロードする

ナレッジに基づいて、RAG ベースのソリューションで使用するアルゴリズムサービスと開発フレームワークを選択します。この例では、Python 用 SDK を使用します。

  1. AI Search Open Platform コンソール にログオンします。

  2. ドイツ(フランクフルト)リージョンを選択します。 [AI Search Open Platform] とターゲットワークスペースに切り替えます。

  3. 左側のナビゲーションウィンドウで、[シーンセンター] をクリックします。 [RAG シーン - ナレッジベース オンライン Q&A] セクションの [入力] をクリックします。

    image

  4. ドロップダウンリストから使用するサービスを選択します。次に、[サービスの詳細] タブで、サービスの詳細を表示します。

    説明
    • API を介して RAG ベースのソリューションでアルゴリズムサービスを使用するには、service_id を使用してサービス ID を指定します。たとえば、ドキュメントコンテンツ解析サービスの ID は ops-document-analyze-001 です。

    • サービスを選択すると、生成されたコードの service_id パラメータがそれに応じて変更されます。コードをローカル環境にダウンロードした後、コード内の service_id パラメータを変更して他のサービスを呼び出します。

    サービス

    説明

    ドキュメントコンテンツ解析

    ドキュメントコンテンツ解析サービス(ops-document-analyze-001)は、タイトルやセグメントなどの論理階層構造、およびテキスト、表、画像、その他の情報を非構造化ドキュメントから抽出し、構造化形式で出力する汎用ドキュメント解析サービスを提供します。

    画像コンテンツ解析

    • 画像テキスト認識サービス(ops-image-analyze-ocr-001)では、OCR 機能を使用して画像内のテキストを認識し、画像検索と会話型検索のためにテキスト情報を抽出できます。

    • 画像コンテンツ認識サービス(ops-image-analyze-vlm-001)では、マルチモーダル LLM に基づいて画像のコンテンツを解析できます。また、このサービスを使用して画像内のテキストを解析し、解析されたテキストを画像検索と会話型検索に使用することもできます。

    ドキュメントチャンク

    共通ドキュメントスライスサービス(ops-document-split-001): 汎用テキストスライスサービスを提供します。このサービスを使用して、HTML、MARKDOWN、TXT 形式の構造化データを段落、セマンティクス、特定のルールに基づいてセグメント化できます。また、リッチテキストからコード、画像、表を抽出することもできます。

    テキスト埋め込み

    • OpenSearch テキストベクトル化サービス -001(ops-text-embedding-001): 40 以上の言語をサポートするテキストベクトル化サービスを提供します。入力テキストの最大長は 300 トークンで、生成されるベクトルの次元は 1,536 です。

    • OpenSearch ユニバーサルテキストベクトル化サービス -002(ops-text-embedding-002): 100 以上の言語をサポートするテキストベクトル化サービスを提供します。入力テキストの最大長は 8,192 トークンで、生成されるベクトルの次元は 1,024 です。

    • OpenSearch テキストベクトル化サービス - 中国語 -001(ops-text-embedding-zh-001): 中国語テキストのテキストベクトル化サービスを提供します。入力テキストの最大長は 1,024 トークンで、生成されるベクトルの次元は 768 です。

    • OpenSearch テキストベクトル化サービス - 英語 -001(ops-text-embedding-en-001): 英語テキストのテキストベクトル化サービスを提供します。入力テキストの最大長は 512 トークンで、生成されるベクトルの次元は 768 です。

    スパーステキスト埋め込み

    テキストスパースベクトル化は、テキストデータをストレージ容量の少ないスパースベクトルに変換します。スパースベクトルを使用して、キーワードと頻繁に使用される用語に関する情報を表現できます。スパースベクトルとデンスベクトルを使用してハイブリッド検索を実行し、検索パフォーマンスを向上させることができます。

    OpenSearch テキストスパースベクトル化サービス - 汎用(ops-text-sparse-embedding-001): 100 以上の言語をサポートするテキストベクトル化サービスを提供します。入力テキストの最大長は 8,192 トークンです。

    クエリ分析

    クエリ分析サービス 001(ops-query-analyze-001): LLM に基づく汎用クエリ分析サービスを提供し、ユーザーの意図を理解し、類似の質問を拡張します。

    検索エンジン

    • Alibaba Cloud Elasticsearch は、オープンソースの Elasticsearch に基づいて開発された、完全にマネージドされたすぐに使えるクラウドサービスです。オープンソースの機能と完全に互換性のある Alibaba Cloud Elasticsearch は、従量課金制をサポートし、すぐに使える可用性を提供します。

      説明

      検索エンジンとして Alibaba Cloud Elasticsearch を選択した場合、互換性の問題により、テキストスパースベクトル化サービスは使用できません。この場合、テキストベクトル化サービスを使用することをお勧めします。

    • OpenSearch Vector Search Edition は、Alibaba Group によって開発された大規模分散ベクトル検索エンジンです。 OpenSearch Vector Search Edition は複数のベクトル検索アルゴリズムをサポートし、高精度検索で優れたパフォーマンスを発揮します。 OpenSearch Vector Search Edition を使用して、費用対効果の高い方法で大規模なインデックス構築と検索を実行できます。水平スケーリングとインデックスのマージ、インデックスのパイプライン作成、作成時のリアルタイムクエリ、リアルタイムデータの動的更新などの機能がサポートされています。

      説明

      OpenSearch Vector Search Edition を使用するには、ソリューションのエンジン構成とコードを置き換えます。

    再ランク付け

    BGE 並べ替えモデル(ops-bge-reranker-larger): 汎用ドキュメントスコアリングサービスを提供します。このサービスを使用して、クエリとコンテンツの関連性に基づいてドキュメントをスコアリングし、スコアに基づいてドキュメントを降順にソートしてから、スコアを返すことができます。

    LLM

    • OpenSearch-Qwen-Turbo: qwen-turbo をベースモデルとして使用し、教師ありモデルの微調整、強化された検索拡張、有害性の軽減を行います。

    • Qwen-Turbo: Qwen シリーズで最速かつ最も費用対効果の高いモデルであり、単純なタスクに適しています。詳細については、「Qwen LLM」をご参照ください。

    • Qwen-Plus: 機能のバランスが取れており、Qwen-Max と Qwen-Turbo の間の推論の有効性、コスト、速度がバランスが取れており、中程度の複雑さのタスクに適しています。詳細については、「Qwen LLM」をご参照ください。

    • Qwen-Max(qwen-max)は、数百億のパラメータと、中国語や英語などの複数の入力言語をサポートする Qwen 超大型言語モデルです。詳細については、「Qwen LLM」をご参照ください。

  5. サービスを選択した後、[構成が完了したら、コードクエリを入力します] をクリックして、コードを表示およびダウンロードします。

    コードは、RAG ベースのソリューションのオフラインドキュメント処理プロセスとオンライン会話型検索プロセスに基づいて、2 つの部分で構成されています。

    プロセス

    説明

    手順

    オフラインドキュメント処理

    このプロセスは、ドキュメント解析、画像抽出、ドキュメントセグメンテーション、テキストベクトル化、および Elasticsearch インデックスへの処理結果の書き込みで構成されます。

    main 関数 document_pipeline_execute を使用して、次の手順を実行します。ドキュメント URL または Base64 エンコードファイルを使用して、処理するドキュメントを渡します。

    1. ドキュメントを解析します。詳細については、「ドキュメントコンテンツ解析」をご参照ください。

      • ドキュメント解析の非同期操作を呼び出して、URL からコンテンツを抽出するか、Base64 エンコードファイルからコンテンツをデコードします。

      • create_async_extraction_task 関数を使用して解析タスクを作成し、poll_task_result 関数を使用してタスクの完了ステータスをポーリングします。

    2. 画像を抽出します。詳細については、「画像コンテンツ抽出」をご参照ください。

      • 画像解析の非同期操作を呼び出して、URL から画像コンテンツを抽出するか、Base64 エンコードファイルから画像コンテンツをデコードします。

      • create_image_analyze_task 関数を使用して画像解析タスクを作成し、get_image_analyze_task_status 関数を使用してタスクの完了ステータスをポーリングします。

    3. ドキュメントをチャンクします。詳細については、「ドキュメントチャンク」をご参照ください。

      • ドキュメントチャンク操作を呼び出して、特定のポリシーに基づいて解析されたドキュメントをチャンクします。

      • document_split 関数を使用してドキュメントをチャンクします。このプロセスには、テキストチャンクとリッチテキスト解析が含まれます。

    4. テキスト埋め込み。詳細については、「テキスト埋め込み」をご参照ください。

      • テキスト埋め込み操作を呼び出して、チャンクされたテキストをデンスベクトルに変換します。

      • text_embedding 関数を使用して、各チャンクの埋め込みベクトルを生成します。

    5. Elasticsearch インデックスに処理結果を書き込みます。詳細については、「Elasticsearch の kNN 検索機能を使用する」をご参照ください。

      • 埋め込みフィールドとコンテンツフィールドを含む構成の Elasticsearch インデックスを作成します。

        重要

        Elasticsearch インデックスを作成すると、システムは同じ名前のインデックスを削除します。システムがインデックスを誤って削除しないように、コード内のインデックス名を変更します。

      • helpers.async_bulk 関数を呼び出して、埋め込み結果を Elasticsearch インデックスに書き込みます。

    オンライン会話型検索

    このプロセスは、クエリベクトルの生成、クエリ分析の実行、関連ドキュメントチャンクの取得、検索結果の再ランク付け、検索結果に基づく回答の生成で構成されます。

    main 関数 query_pipeline_execute を使用して、ユーザークエリを処理し、回答を生成します。

    1. クエリに対してテキスト埋め込みを実行します。詳細については、「テキスト埋め込み」をご参照ください。

      • テキストベクトル化操作を呼び出して、クエリをデンスベクトルに変換します。

      • text_embedding 関数を使用して、クエリベクトルを生成します。

    2. クエリ分析サービスを呼び出します。詳細については、「クエリ分析」をご参照ください。

      クエリ分析操作を呼び出して、会話履歴を分析することでユーザーの意図を特定し、類似の質問を生成します。

    3. 埋め込みチャンクを取得します。詳細については、「Elasticsearch の kNN 検索機能を使用する」をご参照ください。

      • Elasticsearch インデックスを使用して、クエリベクトルに類似している埋め込みチャンクを取得します。

      • AsyncElasticsearch の search 操作と k 近傍法(kNN)検索機能を使用して、ベクトルの類似性に基づいて結果を取得します。

    4. 結果を再ランク付けします。詳細については、「再ランクサービス」をご参照ください。

      • 再ランク付け操作を呼び出して、取得したチャンクをスコアリングし、スコアに基づいて結果をソートします。

      • documents_ranking 関数を呼び出して、クエリベクトルに基づいてドキュメントをスコアリングし、再ランク付けします。

    5. テキスト生成操作を呼び出して、回答を生成します。詳細については、「API の詳細」をご参照ください。

      テキスト生成サービスを使用し、llm_call 関数を呼び出して、取得した結果とユーザークエリに基づいて回答を生成します。

    [コードクエリ] の下にある [ドキュメント処理フロー][オンライン Q&A プロセス] を選択します。コードエディタで、[コードをコピー] または [ファイルをダウンロード] をクリックします。

ステップ 2: ローカル環境でコードをテストする

コードファイルをデバイスにダウンロードした後、コード内のパラメータを指定する必要があります。この例では、online.py ファイルと offline.py ファイルがダウンロードされます。 online.py ファイルはオンライン会話型検索に使用され、offline.py ファイルはオフラインドキュメント処理に使用されます。次の表にパラメータを示します。

セクション

パラメータ

説明

AI Search Open Platform

api_key

API キー。 API キーの取得方法の詳細については、「API キーを管理する」をご参照ください。

aisearch_endpoint

API エンドポイント。 API エンドポイントの取得方法の詳細については、「サービスエンドポイントを照会する」をご参照ください。

説明

「http://」を削除する必要があります。

インターネットまたは VPC 経由で API 操作を呼び出すことができます。

workspace_name

AI Search Open Platform のワークスペース名。

service_id

サービス ID。コード開発を容易にするため、service_id_config パラメータを使用して、offline.py ファイルと online.py ファイルでサービスを個別に構成し、サービス ID を指定できます。

image

Elasticsearch 検索エンジン

es_host

Elasticsearch クラスタのエンドポイント。インターネットまたは VPC 経由で Elasticsearch クラスタにアクセスする場合は、デバイスの IP アドレスを Elasticsearch クラスタのパブリックまたはプライベート IP アドレスホワイトリストに追加します。詳細については、「Elasticsearch クラスタのパブリックまたはプライベート IP アドレスホワイトリストを構成する」をご参照ください。

es_auth

Elasticsearch クラスタへのアクセスに使用するユーザー名とパスワード。ユーザー名は elastic で、パスワードは Elasticsearch クラスタの作成時に設定したパスワードです。パスワードを忘れた場合は、リセットできます。詳細については、「Elasticsearch クラスタのアクセスパスワードをリセットする」をご参照ください。

その他のパラメータ

サンプルコードを使用する場合は、その他のパラメータを変更する必要はありません。

パラメータを指定した後、Python 3.7 以降で offline.py ファイルと online.py ファイルのコードを別々に実行して、生成された回答が正しいかどうかを確認します。

たとえば、ドキュメント「AI Search Open Platform とは」をナレッジベースとして使用します。ドキュメントに基づいて、次の質問をします。AI Search Open Platform はどのような機能を提供していますか?

次の図は、返される結果を示しています。

  • オフラインドキュメント処理の結果

    raglixian.jpg.png

  • オンライン会話型検索の結果

    ragzaxian.png

  • ソースコードファイル

    offline.py
    # RAG ベースのオフラインリンク - Elasticsearch エンジン
    
    # 以下の環境要件が満たされていること。
    # Python バージョン 3.7 以降がインストールされていること。
    # V8.9 以降の Elasticsearch クラスタが作成されていること。Alibaba Cloud Elasticsearch クラスタを作成する場合は、事前に Alibaba Cloud Elasticsearch をアクティブ化し、クラスタの IP アドレスホワイトリストを構成する必要があります。詳細については、https://www.alibabacloud.com/help/zh/es/user-guide/configure-a-public-or-private-ip-address-whitelist-for-an-elasticsearch-cluster を参照してください。
    
    # 以下の依存関係がインストールされていること。
    # pip install alibabacloud_searchplat20240529
    # pip install elasticsearch
    
    # AI Search Open Platform の構成
    aisearch_endpoint = "xxx.platform-cn-shanghai.opensearch.aliyuncs.com"
    api_key = "OS-xxx"
    workspace_name = "default"
    service_id_config = {"extract": "ops-document-analyze-001",
                         "split": "ops-document-split-001",
                         "text_embedding": "ops-text-embedding-001",
                         "text_sparse_embedding": "ops-text-sparse-embedding-001",
                         "image_analyze": "ops-image-analyze-ocr-001"}
    
    # Elasticsearch の構成
    es_host = 'http://es-cn-xxx.public.elasticsearch.aliyuncs.com:9200'
    es_auth = ('elastic', 'xxx')
    
    
    # ドキュメント URL を指定します。この例では、OpenSearch プロダクトの説明ドキュメントを使用します。
    document_url = "https://www.alibabacloud.com/help/zh/open-search/search-platform/product-overview/introduction-to-search-platform?spm=a2c4g.11186623.0.0.7ab93526WDzQ8z"
    
    # ... (Rest of the code remains unchanged)
    
    online.py
    # RAG ベースのオンラインリンク - Elasticsearch エンジン
    
    # ... (The beginning part of online.py remains unchanged)
    
    # ユーザークエリを入力します
    user_query = "AI Search Open Platform はどのような機能を提供していますか?"
    
    # ... (Rest of the code remains unchanged)