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

OpenAI

埋め込みモデルを選択し、テキスト埋め込み関数を使用するコレクションを作成して、OpenAI の埋め込みモデルを Zilliz Cloud で使用します。

モデルの選択肢​

Zilliz Cloud は、OpenAI が提供するすべての埋め込みモデルをサポートしています。すぐに参照できるよう、利用可能な OpenAI 埋め込みモデルを以下に示します。

モデル名次元数最大トークン数説明
text-embedding-3-smallデフォルト: 1,536(1,536 未満の次元数に短縮可能)8,191コスト重視でスケーラブルなセマンティック検索に最適で、低価格ながら優れたパフォーマンスを提供します。
text-embedding-3-largeデフォルト: 3,072(3,072 未満の次元数に短縮可能)8,191検索精度の向上とより豊かなセマンティック表現を必要とするアプリケーションに最適です。
text-embedding-ada-002固定: 1,536(短縮不可)8,191旧世代のモデルで、レガシーパイプラインや後方互換性が必要なシナリオに適しています。

第 3 世代の埋め込みモデル(text-embedding-3)は、dim パラメーターを使用して埋め込みのサイズを縮小できます。一般に、埋め込みが大きいほど、コンピューティング、メモリ、ストレージの観点でコストが高くなります。次元数を調整できるため、全体のコストとパフォーマンスをより細かく制御できます。各モデルの詳細については、埋め込みモデル および OpenAI の発表ブログ記事 を参照してください。

事前準備​

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

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

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

  • OpenAI と統合し、統合 ID を取得する

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

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

    コレクションスキーマに次の項目を含めるよう計画します。

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

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

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

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

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

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

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

  • コレクション内の各エンティティを一意に識別するプライマリフィールド。

  • 埋め込み対象の生データを格納する VARCHAR フィールド。

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

次の例では、テキストデータを格納するための VARCHAR フィールド "document" と、テキスト埋め込み関数が生成する密ベクトル埋め込みを格納するためのベクトルフィールド "dense" を 1 つずつ含むスキーマを定義します。選択した埋め込みモデルの出力に一致するよう、ベクトルの次元数(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.
# For instance, OpenAI's text-embedding-3-small model outputs 1536-dimensional vectors.
# For dense vector, data type can be FLOAT_VECTOR or INT8_VECTOR
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=1536)

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

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

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

python
# Define embedding function (example: OpenAI provider)
text_embedding_function = Function(
name="openai_embedding", # Unique identifier for this embedding function
function_type=FunctionType.TEXTEMBEDDING, # Type of embedding function
input_field_names=["document"], # Scalar field to embed
output_field_names=["dense"], # Vector field to store embeddings
params={ # Provider-specific configuration (highest priority)
"provider": "openai", # Embedding model provider
"model_name": "text-embedding-3-small", # Embedding model
"integration_id": "YOUR_INTEGRATION_ID", # Integration ID generated in the Zilliz Cloud console for the selected model provider
# "dim": "1536", # Optional: shorten the vector dimension
# "user": "user123" # Optional: identifier for API tracking
}
)

# Add the embedding function to your 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)

検索およびクエリ操作の詳細については、基本的なベクトル検索 および クエリ を参照してください。