0 / 0
資料の 英語版 に戻る
AutoAI Chromaベクターストアを使ったRAG実験のコーディング
最終更新: 2025年2月21日
AutoAI Chromaベクターストアを使ったRAG実験のコーディング

AutoAI RAG 実験をベクターストアとしてデフォルトのインメモリ Chroma データベースを使用してコーディングする方法を学ぶために、ガイドラインとコードサンプルを確認してください。

ベクター化されたコンテンツをChromaデータベースに保存

AutoAIRAG実験をセットアップし、ベクターストアへの接続を指定しない場合、ベクター化されたコンテンツはデフォルトのインメモリChromaデータベースに保存されます。 このコンテンツは実験終了後も存続しないため、RAGパターンを展開する制作方法としては実行不可能である。 しかし、これはRAGパターンを作成するための早道を提供する。

以下のセクションでは、Automating RAG pattern with Chroma database ノートブックで提供されている注釈付きサンプルコードを拡張します。

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

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

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

ステップ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)
    
  • 自分の仕事のためのプロジェクトやスペースを作る。 プロジェクトの作成またはスペースの作成を参照してください。

  • プロジェクトまたはスペースのIDを取得する。 プロジェクトIDを探すを参照してください。

  • デフォルトのプロジェクトまたはスペースを設定します:

client.set.default_project("<Project ID>")
client.set.default_space("<Space GUID>")

接地に関する文書

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

  • サポートされているフォーマット:PDF、HTML、DOCX、Markdown、プレーンテキスト
  • 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)
asset_id

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/watsonx-ai-samples/blob/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)]

ステップ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 パターンを作成する。 このChroma実験を実行するコードサンプルでは、タスクはインタラクティブモードで実行されます。 background_modeをTrueに変更すると、タスクをバックグラウンドで実行できます。

run_details = rag_optimizer.run(
    input_data_references=input_data_references,
    test_data_references=test_data_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

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

次のステップは、パターンを選択し、ローカルでテストすることだ。 Chromaはインメモリであるため、ドキュメントインデックスを再作成する必要があります。

ヒント:

以下のコードサンプルでは、core_api.htmlfm_embeddings.htmlの文書でインデックスを構築しています。

from langchain_community.document_loaders import WebBaseLoader

best_pattern = rag_optimizer.get_pattern()

urls = [
    "https://ibm.github.io/watsonx-ai-python-sdk/core_api.html",
    "https://ibm.github.io/watsonx-ai-python-sdk/fm_embeddings.html",
]
docs_list = WebBaseLoader(urls).load()
doc_splits = best_pattern.chunker.split_documents(docs_list)
best_pattern.indexing_function(doc_splits)

RAGパターンをローカルに問い合わせる。

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

best_pattern.query(payload)

モデルの反応はこうだ:

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()にパターン番号を渡します。

Cloud Object Storageにおける実験結果のレビュー

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

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

|-- Pattern1
|      | -- evaluation_results.json
|      | -- indexing_inference_notebook.ipynb (Chroma)
|-- Pattern2
|    ...
|-- training_status.json

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

  • evaluation_results.jsonファイルには、各ベンチマーク問題の評価結果が含まれています。
  • indexing_inference_notebook.ipynbには、ベクトルデータベースのインデックスを構築するためのPythonコードと、検索・生成機能を構築するためのPythonコードが含まれています。 このノートブックでは、データの取得、チャンキング、埋め込み作成、チャンクの取得、プロンプトの作成、回答の生成などのコマンドを紹介している。
注:

結果ノートブック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パターンの自動化