メインコンテンツまでスキップ
バージョン: User Guides (Cloud)

OpenAI

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

モデルの選択肢

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パラメータを介して埋め込みのサイズを削減することをサポートしています。通常、より大きな埋め込みは、計算、メモリ、ストレージの観点からより高価です。次元数を調整できることで、全体的なコストとパフォーマンスをより細かく制御できます。各モデルの詳細については、Embedding modelsおよびOpenAI announcement blog postを参照してください。

開始する前に

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

  • 埋め込みモデルを選択

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

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

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

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

    コレクションスキーマには以下を含めるように計画してください。

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

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

  • 挿入時および検索時に生のテキストを扱う準備

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

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

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

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

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

  • 埋め込む生のデータを保存するVARCHARフィールド。

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

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

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"ベクトルフィールドに保存する関数モジュール(openai_embedding)を追加します。

# 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がデータの構造に基づいて最も適切なインデックスタイプを選択し、設定できるようにするオプションです。

# 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"
)

コレクションの作成

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

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

ステップ2: データの挿入

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

# 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は自動的にクエリを埋め込みベクトルに変換し、類似性に基づいて関連ドキュメントを取得し、最も一致する結果を返します。

# 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)

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