0 / 0
資料の 英語版 に戻る
AutoAI RAG実験を Milvus ベクトルストアでコーディング
最終更新: 2025年1月23日
AutoAI RAG実験を Milvus ベクトルストアでコーディング

ガイドラインとコードサンプルを確認し、 AutoAI RAG実験のベクトルストアとして Milvus データベースを使用する方法を学びましょう。

企業または生産用のRAGソリューションについては、 Milvus でベクターデータベースを設定してください。 ベクトル化されたコンテンツは、将来のパターンや統合のために持続する。 詳細は、 Milvus の操作を参照してください。

次のセクションでは、 Milvus データベース ノートブックを使用した RAG パターンの自動化で提供される注釈付きサンプル コードを拡張します。

ノートブックでは、watsonx.ai Python クライアントライブラリ(バージョン1.1.11以降)を使用しています。

以下の手順に従って、AutoAI RAG 実験をあなたのユースケースに合わせてコーディングしてください。

  1. データを準備するための前提条件を整え、実験をセットアップする
  2. RAG実験を設定する
  3. エクスペリメントの実行
  4. パターンを検討し、最適なものを選ぶ
  5. パターンをデプロイします。

ステップ1:データを準備するための前提条件を整え、実験をセットアップする

実験の前提条件を準備する。

  • 必要なモジュールと依存関係をインストールしてインポートします。 例:
pip install 'ibm-watsonx-ai[rag]>=1.1.11'
pip install langchain-community==0.2.4
from ibm_watsonx_ai import APIClient, Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.mydomain.com",
                   api_key = "***********"
                  )

client = APIClient(credentials)
client.set.default_project("<Project ID>")
client.set.default_space("<Space GUID>")
  • 接地書類の準備
  • 評価データの準備

接地に関する文書

RAG実験に使用する接地資料を準備し、接続する。 詳しくは、プロジェクトのデータの取得と準備を参照してください。

  • 対応フォーマットPDF、HTML、DOCX、プレーンテキスト
  • Cloud Object Storageバケット、バケット内のフォルダ、または最大20個のファイルを指定してデータに接続します。
  • AutoAIは実験を実行するためのドキュメントをサンプリングする

たとえば、ドキュメントがCloud Object Storageバケットに格納されているときにデータ接続を作成する場合です:

from ibm_watsonx_ai.helpers import DataConnection, S3Location

conn_meta_props= {
    client.connections.ConfigurationMetaNames.NAME: f"Connection to input data - {datasource_name} ",
    client.connections.ConfigurationMetaNames.DATASOURCE_TYPE: client.connections.get_datasource_type_id_by_name(datasource_name),
    client.connections.ConfigurationMetaNames.DESCRIPTION: "ibm-watsonx-ai SDK documentation",
    client.connections.ConfigurationMetaNames.PROPERTIES: {
        'bucket': <BUCKET_NAME>,
        'access_key': <ACCESS_KEY>,
        'secret_key': <SECRET_ACCESS_KEY>,
        'iam_url': 'https://iam.cloud.ibm.com/identity/token',
        'url': <ENDPOINT_URL>
    }
}

conn_details = client.connections.create(meta_props=conn_meta_props)
cos_connection_id = client.connections.get_id(conn_details)

input_data_references = [DataConnection(
    connection_asset_id=cos_connection_id,
    location=S3Location(
        bucket=<BACKET_NAME>,
        path=<BACKET_PATH>
    )
)]

次の例は、プロジェクトで作成された(またはスペースに昇格された)データ アセットの使用方法を示しています:

注:

core_api.htmlは、サンプルノートブックで使われている接地文書ファイルの例です。

import os, wget
from ibm_watsonx_ai.helpers import DataConnection

input_data_filename = "core_api.html"
input_data_path = f"https://ibm.github.io/watsonx-ai-python-sdk/{input_data_filename}"

if not os.path.isfile(input_data_filename): 
    wget.download(input_data_path, out=input_data_filename)
    
asset_details = client.data_assets.create(input_data_filename, input_data_filename)
asset_id = client.data_assets.get_id(asset_details)

input_data_references = [DataConnection(data_asset_id=asset_id)]
ヒント:

input_data_referencesは最大20個のDataConnectionインスタンスをサポートします。

評価データ

評価データは、以下のフィールドを持つ固定スキーマのJSON形式でなければならない:question, correct_answer, correct_answer_document_ids

例:

[
    {
        "question": "What is the purpose of get_token()?",
        "correct_answer": "get_token() is used to retrieve an authentication token for secure API access.",
        "correct_answer_document_ids": [
            "core_api.html"
        ]
    },
    {
        "question": "How does the delete_model() function operate?",
        "correct_answer": "delete_model() method allows users to delete models they've created or managed.",
        "correct_answer_document_ids": [
            "core_api.html"
        ]
    }
]

評価データを作成する:

import os, wget
from ibm_watsonx_ai.helpers import DataConnection

test_data_filename = "benchmarking_data_core_api.json"
test_data_path = f"https://github.com/IBM/watson-machine-learning-samples/raw/master/cloud/data/autoai_rag/{test_data_filename}"

if not os.path.isfile(test_data_filename): 
    wget.download(test_data_path, out=test_data_filename)

test_asset_details = client.data_assets.create(name=test_data_filename, file_path=test_data_filename)
test_asset_id = client.data_assets.get_id(test_asset_details)

test_data_references = [DataConnection(data_asset_id=test_asset_id)]

Milvus ベクターデータベースへの接続

このコードスニペットは、 Milvus ベクターデータベースへの接続方法を示しています。

注: Milvus との接続がすでに存在する場合は、接続を作成する必要はありません。
from ibm_watsonx_ai.helpers import DataConnection

milvus_data_source_type_id = client.connections.get_datasource_type_uid_by_name("milvus")
details = client.connections.create(
    {
        client.connections.ConfigurationMetaNames.NAME: "Milvus Connection",
        client.connections.ConfigurationMetaNames.DATASOURCE_TYPE: milvus_data_source_type_id,
        client.connections.ConfigurationMetaNames.PROPERTIES: {
            "host": <PASTE MILVUS HOST HERE>,
            "port": <PASTE MILVUS PORT HERE>,
            "username": <PASTE MILVUS USERNAME HERE>,
            "password": <PASTE MILVUS PASSWORD HERE>,
            "ssl": True,
        },
    }
)

milvus_connection_id = client.connections.get_id(details)
vector_store_references = [DataConnection(connection_asset_id=milvus_connection_id)]

ステップ2:RAGオプティマイザの設定

rag_optimizer オブジェクトは、AutoAI RAG実験を操作するための一連のメソッドを提供します。 このステップでは、実験を定義するための詳細を入力します。 利用可能な設定オプションは以下の通り:

パラメーター 説明
名前 有効な名前を入力してください 実験名
説明 エクスペリメントの説明 任意で実験を説明する
埋め込みモデル モデルを埋め込んで試す ibm/slate-125m-english-rtrvr
intfloat/multilingual-e5-large
検索メソッド 使用する検索方法 simpleはすべての関連文書を検索し、ランク付けする
windowは一定数の関連文書を検索し、ランク付けする
基礎モデル ファンデーション・モデル タスク別の財団モデルを見る
最大ラグパターン数 作成するRAGパターンの最大数 4-20
最適化指標 最適化に使用するメトリック名(複数可 faithfulness
answer_correctness

次のサンプル・コードは、ibm-watsonx-ai SDK ドキュメントを使用して実験を実行するための設定オプションを示しています:

from ibm_watsonx_ai.experiment import AutoAI

experiment = AutoAI(credentials, project_id=project_id)

rag_optimizer = experiment.rag_optimizer(
    name='DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation',
    description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
    max_number_of_rag_patterns=5,
    optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS]
)
ヒント: コンフィギュレーション・テーブルで説明されているように、サポートされている値を使用してコンフィギュレーションを変更することができます。
rag_optimizer = experiment.rag_optimizer(
    name='DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation',
    description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
    embedding_models=["ibm/slate-125m-english-rtrvr"],
    foundation_models=["ibm/granite-13b-chat-v2","mistralai/mixtral-8x7b-instruct-v01"],
    max_number_of_rag_patterns=5,
    optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS]
)

ステップ3:実験の実行

オプティマイザを実行し、指定された構成オプションを使用して RAG パターンを作成する。 このコード・サンプルでは、タスクは対話モードで実行される。 background_modeをTrueに変更すると、タスクをバックグラウンドで実行できます。

run_details = rag_optimizer.run(
    input_data_references=input_data_references,
    test_data_references=test_data_references,
    vector_store_references=vector_store_references,
    background_mode=False
)

ステップ4:パターンを検討し、最適なものを選ぶ

AutoAIRAG実験が正常に完了したら、パターンを確認することができます。 summaryメソッドを使用して、完了したパターンと評価メトリクス情報を PandasDataFrameの形式でリストアップし、最適化されたメトリクスに対するパフォーマンスに従ってランク付けされたパターンをレビューできるようにします。

summary = rag_optimizer.summary()
summary

例えば、パターン結果はこのように表示される:

パターン 平均正答率 平均忠実度 平均文脈正しさ chunking.chunk_size embeddings.model_id vector_store.distance_metric retrieval.method retrieval.number_of_chunks generation.model_id
Pattern1 0.6802 0.5407 1.0000 512 ibm/slate-125m-english-rtrvr ユークリッド ウィンドウ 5 meta-llama/llama-3-70b-instruct
Pattern2 0.7172 0.5950 1.0000 1024 intfloat/multilingual-e5-large ユークリッド ウィンドウ 5 ibm/granite-13b-chat-v2
Pattern3 0.6543 0.5144 1.0000 1024 intfloat/multilingual-e5-large ユークリッド シンプル 5 ibm/granite-13b-chat-v2
Pattern4 0.6216 0.5030 1.0000 1024 intfloat/multilingual-e5-large コサイン ウィンドウ 5 meta-llama/llama-3-70b-instruct
Pattern5 0.7369 0.5630 1.0000 1024 intfloat/multilingual-e5-large コサイン ウィンドウ 3 mistralai/mixtral-8x7b-instruct-v01

ローカルでテストするパターンを選択する

次のステップは、パターンを選択し、ローカルでテストすることだ。

best_pattern = rag_optimizer.get_pattern()
payload = {
    client.deployments.ScoringMetaNames.INPUT_DATA: [
        {
            "values": ["How to use new approach of providing credentials to APIClient?"],
        }
    ]
}

resp = best_pattern.query(payload)
print(resp["predictions"][0]["values"][0][0])

モデルの反応

According to the document, the new approach to provide credentials to APIClient is by using the Credentials class. Here's an example:


from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.ibm.com",
                   token = "***********",
                  )

client = APIClient(credentials)


This replaces the old approach of passing a dictionary with credentials to the APIClient constructor.

ヒント:

特定のパターンを取得するには、rag_optimizer.get_pattern()にパターン名を渡します。

ステップ5:パターンの展開

ローカルでパターンをテストした後、パターンをデプロイしてエンドポイントを取得し、アプリに組み込むことができる。 デプロイは、定義されたRAG関数を保存し、デプロイされたアセットを作成することで行われます。 デプロイメントの詳細については、AI資産のデプロイと管理オンラインデプロイメントを参照してください。

配置を作成するには

deployment_details = best_pattern.deploy(
    name="AutoAI RAG deployment - ibm_watsonx_ai documentataion",
    space_id=space_id
)

デプロイされたアセットのデプロイメント ID を取得します。

deployment_id = client.deployments.get_id(deployment_details)
deployment_scoring_href = client.deployments.get_scoring_href(deployment_details)
print(deployment_scoring_href)

RAGサービスは現在、あるスペースに配備され、テストが可能となっている。

配備されたパターンのテスト

このコード・サンプルは、デプロイされたソリューションをテストする方法を示しています。 ペイロードには以下のフォーマットでテスト問題を入力してください:

questions = ["How to use new approach of providing credentials to APIClient?"]

payload = {
    client.deployments.ScoringMetaNames.INPUT_DATA: [
        {
            "values": questions,
            "access_token": client.service_instance._get_token()
        }
    ]
}

resp = client.deployments.score(deployment_id, payload)
print(resp["predictions"][0]["values"][0][0])

モデルの反応

According to the document, the new approach to provide credentials to APIClient is by using the Credentials class. Here's an example:


from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.ibm.com",
                   token = "***********",
                  )

client = APIClient(credentials)


This replaces the old approach of passing a dictionary with credentials to the APIClient constructor.

Cloud Object Storageでの実験結果をレビューします。

実験の最終ステータスが失敗またはエラーである場合は、rag_optimizer.get_logs()を使うか、実験結果を参照して何が悪かったのかを理解する。 実験結果とログは、アカウントにリンクされているデフォルトのCloud Object Storageインスタンスに保存されます。 デフォルトでは、結果はdefault_autoai_rag_outディレクトリに保存されます。

結果はパターン別に整理されている。 例:

|-- Pattern1
|      | -- evaluation_results.json
|      | -- indexing_notebook.ipynb (Milvus)
|      | -- inference_notebook.ipynb (Milvus)
|-- Pattern2
|    ...
|-- training_status.json

各パターンはこれらの結果を含んでいる:

  • evaluation_results.jsonファイルには、各ベンチマーク問題の評価結果が含まれています。
  • indexing_notebook.ipynbにはベクターデータベースのインデックスを構築するためのpythonコードが含まれています。 データ検索、チャンキング、エンベッディング作成などのコマンドを紹介している。
  • inference_notebook.ipynbノートブックは、ユーザーのクエリに対して知識ベースから関連する文章を検索し、検索された文章を大規模な言語モデルに入力して応答を生成することに重点を置いています。

認証情報を追加することで、ノートブックをレビューしたり、実行したりすることができる。

注:

結果ノートブックindexing_notebook.ipynbには、ドキュメントを埋め込み、インデックスを作成するためのコードが含まれています。 vector_store.add_documents() vector_store.add_documents_async()に変更することで、文書のインデックス作成作業を高速化することができます。

推論ノートと索引ノートを入手する

サービスから指定された推論ノートブックをダウンロードするには、get_inference_notebook()を使います。 pattern_nameを空のままにすると、このメソッドは最上位のパターンのノートブックをダウンロードします。

rag_optimizer.get_inference_notebook(pattern_name='Pattern3')

今後のステップ

親トピック AutoAI SDKによるRAGパターンの自動化