ガイドラインとコードサンプルを確認し、 AutoAI RAG実験のベクトルストアとして Milvus データベースを使用する方法を学びましょう。
企業または生産用のRAGソリューションについては、 Milvus でベクターデータベースを設定してください。 ベクトル化されたコンテンツは、将来のパターンや統合のために持続する。 詳細は、 Milvus の操作を参照してください。
次のセクションでは、 Milvus データベース ノートブックを使用した RAG パターンの自動化で提供される注釈付きサンプル コードを拡張します。
ノートブックでは、watsonx.ai Python クライアントライブラリ(バージョン1.1.11以降)を使用しています。
以下の手順に従って、AutoAI RAG 実験をあなたのユースケースに合わせてコーディングしてください。
ステップ1:データを準備するための前提条件を整え、実験をセットアップする
実験の前提条件を準備する。
- 必要なモジュールと依存関係をインストールしてインポートします。 例:
pip install 'ibm-watsonx-ai[rag]>=1.1.11'
pip install langchain-community==0.2.4
タスクの認証情報を入力します。 タスクの資格情報を追加する」を参照。
watsonx.aiランタイムサービス。 サービスの作成」を参照。
APIキーを入力します。 ユーザーAPIキーの管理」を参照してください。
このコードを使ってクライアントを初期化する。 例:
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、プレーンテキスト
- 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 ベクターデータベースへの接続方法を示しています。
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')
今後のステップ
- 選択したRAGパターンを使用するために、新しい問題で推論ノートブックを実行します。
- Prompt Lab からこの実験のインデックス付きドキュメントを使用して、 foundation model のプロンプトを確定します。 AutoAI Ragインデックスを使用してドキュメントとチャットする方法を参照してください。
親トピック AutoAI SDKによるRAGパターンの自動化