メインコンテンツまでスキップ

Voyage AI

このトピックでは、Milvus で Voyage AI 埋め込み関数を構成および使用する方法について説明します。

モデルの選択​

Milvus は、Voyage AI が提供する埋め込みモデルをサポートしています。現在利用可能な埋め込みモデルの概要は以下の通りです。

モデル名次元数最大トークン数説明
voyage-4-large1024(デフォルト), 256, 512, 204832,000汎用および多言語の検索品質が最も優れています。4 シリーズで作成されたすべての埋め込みは相互に互換性があります。詳細については、ブログ記事 を参照してください。
voyage-41024(デフォルト), 256, 512, 204832,000汎用および多言語の検索品質向けに最適化されています。4 シリーズで作成されたすべての埋め込みは相互に互換性があります。詳細については、ブログ記事 を参照してください。
voyage-4-lite1024(デフォルト), 256, 512, 204832,000レイテンシとコスト向けに最適化されています。4 シリーズで作成されたすべての埋め込みは相互に互換性があります。詳細については、ブログ記事 を参照してください。
voyage-3-large1,024(デフォルト), 256, 512, 2,04832,000汎用および多言語の検索品質が最も優れています。
voyage-31,02432,000汎用および多言語の検索品質向けに最適化されています。詳細については、ブログ記事 を参照してください。
voyage-3-lite51232,000レイテンシとコスト向けに最適化されています。詳細については、ブログ記事 を参照してください。
voyage-code-31,024(デフォルト), 256, 512, 2,04832,000コード検索向けに最適化されています。詳細については、ブログ記事 を参照してください。
voyage-finance-21,02432,000金融検索および RAG 向けに最適化されています。詳細については、ブログ記事 を参照してください。
voyage-law-21,02416,000法務検索および RAG 向けに最適化されています。また、すべてのドメインでパフォーマンスが向上しています。詳細については、ブログ記事 を参照してください。
voyage-code-21,53616,000コード検索向けに最適化されています(代替手段より 17% 優れています) / 前世代のコード埋め込みです。詳細については、ブログ記事 を参照してください。

詳細については、Text embedding models を参照してください。

事前準備​

テキスト埋め込み関数を使用する前に、以下の前提条件を満たしていることを確認してください。

  • 埋め込みモデルを選択すること

    この選択によって埋め込みの動作と出力形式が決まるため、使用する埋め込みモデルを決定します。詳細については、埋め込みモデルを選択する を参照してください。

  • Voyage AI と統合して統合 ID を取得すること

    Voyage AI が提供する埋め込みモデルを使用する前に、Voyage AI とのモデルプロバイダー統合を作成し、統合 ID を取得する必要があります。詳細については、モデルプロバイダーとの統合 を参照してください。

  • 互換性のあるコレクションスキーマを設計すること

    コレクションスキーマには、次の項目が含まれるように計画してください:

    • 生の入力テキスト用のテキストフィールド(VARCHAR)

    • データ型と次元数が選択した埋め込みモデルと一致する密ベクトルフィールド

  • 挿入時と検索時に生テキストを扱う準備をすること

    テキスト埋め込み関数を有効にすると、生テキストを直接挿入およびクエリできます。埋め込みはシステムによって自動的に生成されます。

ステップ 1: テキスト埋め込み関数を使用してコレクションを作成する​

スキーマフィールドを定義する​

埋め込み関数を使用するには、特定のスキーマを持つコレクションを作成します。このスキーマには、少なくとも 3 つの必須フィールドを含める必要があります:

  • コレクション内の各エンティティを一意に識別する主フィールドです。

  • 埋め込む生データを格納する VARCHAR フィールドです。

  • テキスト埋め込み関数が VARCHAR フィールドに対して生成する密ベクトル埋め込みを格納するために予約されたベクトルフィールドです。

次の例では、テキストデータを格納する VARCHAR フィールド "document" と、テキスト埋め込み関数が生成する密ベクトル埋め込みを格納するベクトルフィールド "dense" を持つスキーマを定義します。ベクトルの次元数(dim)は、選択した埋め込みモデルの出力に一致するように設定してください。

python
from pymilvus import MilvusClient, DataType, Function, FunctionType

# Initialize Milvus client
client = MilvusClient(
uri="YOUR_CLUSTER_ENDPOINT",
token="YOUR_CLUSTER_TOKEN"
)

# Create a new schema for the collection
schema = client.create_schema()

# Add primary field "id"
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)

# Add scalar field "document" for storing textual data
schema.add_field("document", DataType.VARCHAR, max_length=9000)

# Add vector field "dense" for storing embeddings.
# IMPORTANT: Set dim to match the exact output dimension of the embedding model.
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1024)

テキスト埋め込み関数を定義する​

テキスト埋め込み関数は、VARCHAR フィールドに格納された生データを自動的に埋め込みに変換し、明示的に定義されたベクトルフィールドに格納します。

次の例では、スカラーフィールド "document" を埋め込みに変換し、得られたベクトルを先ほど定義した "dense" ベクトルフィールドに格納する Function モジュール(voya)を追加します。

埋め込み関数を定義したら、それをコレクションスキーマに追加します。これにより、Milvus は指定された埋め込み関数を使用して、テキストデータから埋め込みを処理および格納するようになります。

python
# Define embedding function specifically for embedding model provider
text_embedding_function = Function(
name="voya", # Unique identifier for this embedding function
function_type=FunctionType.TEXTEMBEDDING, # Indicates a text embedding function
input_field_names=["document"], # Scalar field(s) containing text data to embed
output_field_names=["dense"], # Vector field(s) for storing embeddings
params={ # Provider-specific embedding parameters (function-level)
"provider": "voyageai", # Must be set to "voyageai"
"model_name": "voyage-3-large", # Specifies the embedding model to use
# Zilliz Cloud only: "integration_id": "YOUR_INTEGRATION_ID"
# "credential": "apikey_dev", # Optional: Credential label specified in milvus.yaml
# "url": "https://api.voyageai.com/v1/embeddings", # Defaults to the official endpoint if omitted
# "dim": "1024", # Output dimension of the vector embeddings after truncation
# "truncation": "true", # Whether to truncate the input texts to fit within the context length. Defaults to true.
}
)

# Add the configured embedding function to your existing collection schema
schema.add_function(text_embedding_function)

インデックスを構成する​

必要なフィールドと組み込み関数を含むスキーマを定義したら、コレクションのインデックスを設定します。このプロセスを簡素化するには、index_type として AUTOINDEX を使用します。これは、データの構造に基づいて Zilliz Cloud が最適なインデックスタイプを選択して構成できるようにするオプションです。

python
# Prepare index parameters
index_params = client.prepare_index_params()

# Add AUTOINDEX to automatically select optimal indexing method
index_params.add_index(
field_name="dense",
index_type="AUTOINDEX",
metric_type="COSINE"
)

コレクションを作成する​

次に、定義したスキーマとインデックスパラメーターを使用してコレクションを作成します。

python
# Create collection named "demo"
client.create_collection(
collection_name='demo',
schema=schema,
index_params=index_params
)

ステップ 2: データを挿入する​

コレクションとインデックスを設定したら、生データを挿入する準備が整います。このプロセスでは、生テキストを提供するだけで済みます。先ほど定義した Function モジュールは、各テキストエントリに対応するスパースベクトルを自動的に生成します。

python
# Insert sample documents
client.insert('demo', [
{'id': 1, 'document': 'Milvus simplifies semantic search through embeddings.'},
{'id': 2, 'document': 'Vector embeddings convert text into searchable numeric data.'},
{'id': 3, 'document': 'Semantic search helps users find relevant information quickly.'},
])

ステップ 3: テキストで検索する​

データを挿入したら、生のクエリテキストを使用してセマンティック検索を実行します。Milvus はクエリを自動的に埋め込みベクトルに変換し、類似性に基づいて関連するドキュメントを取得して、最も一致する結果を返します。

python
# Perform semantic search
results = client.search(
collection_name='demo',
data=['How does Milvus handle semantic search?'], # Use text query rather than query vector
anns_field='dense', # Use the vector field that stores embeddings
limit=1,
output_fields=['document'],
)

print(results)