コンテンツにスキップ

埋め込み

Show:

Schiftは、単一のエンドポイントセットを通じて複数のプロバイダー(OpenAI、Google、Voyage、Cloudflare、HuggingFaceなど)にプロキシする統一埋め込みAPIを提供します。すべての埋め込みはSchiftの標準投影レイヤーを通過するため、データを再埋め込みすることなくモデルを切り替えたり、次元を削減したりできます。

すべての埋め込みエンドポイントには、AuthorizationヘッダーにBearerトークンが必要です:

Authorization: Bearer sch_xxxxxxxxxxxxxxxxxxxx

APIキーはSchiftダッシュボードのSettings > API Keysで管理します。

ModelProviderDefault dimensionMax tokensVariable dimensions
schift-embed-1-smallSchift (auto)10248,192Yes
openai/text-embedding-3-smallOpenAI15368,191Yes
openai/text-embedding-3-largeOpenAI30728,191Yes
google/gemini-embedding-001Google30728,191Yes
google/gemini-embedding-002Google30728,191Yes
voyage/voyage-4-largeVoyage AI102432,000Yes
voyage/voyage-4Voyage AI102432,000Yes
voyage/voyage-4-liteVoyage AI102432,000Yes
dragonkue/bge-m3-koHuggingFace10248,192No
jinaai/jina-embeddings-v3HuggingFace10248,194Yes
sbintuitions/sarashina-embedding-v2-1bHuggingFace17928,192No

schift-embed-1-smallは自動ルーティングエイリアスです。Schiftは入力言語に基づいて最適な基礎モデルを選択し、結果を標準投影レイヤーを通して返します。解決されたモデルは、すべてのレスポンスのmodelフィールドに返されます。

Note: schift-embed-1-smallを使用した場合、内部バックエンドエイリアス(例:@cf/qwen/qwen3-embedding-0.6b)が解決されたモデルとして返されることがあります。

埋め込みエンドポイントはオプションでtask_typeを受け入れ、埋め込みがどのように使用されるかをSchiftに指示します。この値は、指示対応モデルに渡されるか、プレフィックススタイルモデルの内部プレフィックスに変換されます。

task_typeUse case
retrieval_query検索クエリ埋め込み
retrieval_documentドキュメント埋め込み
semantic_similarityセマンティック類似性比較
question_answering質問応答検索
clusteringクラスタリングまたはトピックグループ化
classification分類
code_retrievalコード検索
contradiction矛盾または反証検索
factcheckファクトチェック証拠検索

単一のテキスト文字列を埋め込みます。

ParameterTypeRequiredDefaultDescription
textstringYes埋め込むテキスト。
modelstringNoOrg routing configカタログからのモデルID。
dimensionsintegerNoModel default出力次元。可変次元を持つモデルのみサポート。
task_typestringNo埋め込みの意図。Task typesを参照。
FieldTypeDescription
embeddingnumber[]埋め込みベクトル。
modelstring実際に使用されたモデル。
dimensionsinteger埋め込みの出力次元。
usage.tokensinteger消費されたトークン数。
Terminal window
curl https://api.schift.io/v1/embed \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"text": "Schift enables seamless embedding model migration without re-embedding your data.",
"model": "openai/text-embedding-3-large"
}'
{
"embedding": [-0.01225, 0.00207, 0.03060],
"model": "openai/text-embedding-3-large",
"dimensions": 3072,
"usage": {"tokens": 14}
}

同期バッチ埋め込み。単一リクエストで最大100テキストを処理します。より大きな入力には、POST /v1/embed/jobsを使用してください。

ParameterTypeRequiredDefaultDescription
textsstring[]Yes埋め込むテキストのリスト(最大100)。
modelstringNoOrg routing configカタログからのモデルID。
dimensionsintegerNoModel default出力次元。
task_typestringNo埋め込みの意図。
FieldTypeDescription
embeddingsnumber[][]各入力テキストに対する埋め込みベクトルのリスト。
modelstring使用されたモデル。
dimensionsinteger出力次元。
usage.tokensintegerすべてのテキストにわたるトークンの合計。
usage.countinteger埋め込まれたテキストの数。
Terminal window
curl https://api.schift.io/v1/embed/batch \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"texts": [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables.",
"Photosynthesis converts light energy into chemical energy.",
"Shakespeare wrote Hamlet and A Midsummer Night'"'"'s Dream."
],
"model": "voyage/voyage-4-large"
}'
{
"embeddings": [
[-0.01225, 0.00207, 0.03060],
[0.00898, -0.00298, 0.01546],
[-0.06297, -0.04777, -0.10113]
],
"model": "voyage/voyage-4-large",
"dimensions": 1024,
"usage": {"tokens": 38, "count": 3}
}

非同期バルク埋め込みジョブを作成します。このエンドポイントは101から10,000テキストに使用します。

ParameterTypeRequiredDefaultDescription
textsstring[]Yes埋め込むテキストのリスト(最大10,000)。
modelstringNoOrg routing configカタログからのモデルID。
dimensionsintegerNoModel default出力次元。
task_typestringNo埋め込みの意図。
FieldTypeDescription
idstringバルク埋め込みジョブID。
statusstring初期ステータス(queued)。
modelstringジョブに選択されたモデル。
usage.tokensintegerすべてのテキストにわたる検証済みトークンの合計。
usage.countinteger提出されたテキストの数。
chunk_sizeintegerワーカーチャンクサイズ(現在100)。
Terminal window
curl https://api.schift.io/v1/embed/jobs \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"texts": ["doc 1", "doc 2", "doc 3"],
"model": "schift-embed-1-small",
"task_type": "retrieval_document"
}'
{
"id": "job_123",
"status": "queued",
"model": "schift-embed-1-small",
"usage": {"tokens": 6, "count": 3},
"chunk_size": 100
}

バルク埋め込みジョブのステータスとメタデータを取得します。

ParameterTypeDescription
job_idstringバルク埋め込みジョブID。

ジョブステータスライフサイクル

Section titled “ジョブステータスライフサイクル”
StatusMeaning
queuedジョブが作成され、ワーカーを待っています。
embeddingワーカーがテキストチャンクを埋め込んでいます。
indexing結果が準備され、保存されています。
ready結果が取得可能です。
failedジョブが失敗しました。
cancelledジョブが処理前にキャンセルされました。
Terminal window
curl https://api.schift.io/v1/embed/jobs/job_123 \
-H "Authorization: Bearer $SCHIFT_API_KEY"
{
"id": "job_123",
"status": "ready",
"org_id": "org_abc",
"metadata": {
"mode": "embed_bulk",
"model": "schift-embed-1-small",
"dimensions": null,
"task_type": "retrieval_document",
"input_count": 3,
"chunk_size": 100,
"token_count": 6,
"completed_count": 3
}
}

キューに入っているバルク埋め込みジョブをキャンセルします。queuedステータスのジョブのみキャンセル可能です。

ParameterTypeDescription
job_idstringバルク埋め込みジョブID。
Terminal window
curl -X POST https://api.schift.io/v1/embed/jobs/job_123/cancel \
-H "Authorization: Bearer $SCHIFT_API_KEY"
{
"status": "cancelled"
}

完了したバルク埋め込みジョブのページネーションされた結果を取得します。

ParameterTypeDescription
job_idstringバルク埋め込みジョブID。
ParameterTypeDefaultDescription
offsetinteger0スキップする結果の数。
limitinteger100返す結果の最大数(最大1,000)。
FieldTypeDescription
objectstring常にlist
dataobject[]ページネーションされた埋め込み結果アイテム。
modelstring結果に使用されたモデル。
dimensionsinteger出力次元。
usage.countinteger埋め込まれたアイテムの総数。
pagination.offsetintegerリクエストされたオフセット。
pagination.limitintegerリクエストされた制限。
pagination.returnedintegerこのページで返されたアイテムの数。
pagination.totalinteger結果アイテムの総数。
pagination.has_morebooleanさらにページが残っているかどうか。
Terminal window
curl "https://api.schift.io/v1/embed/jobs/job_123/result?offset=0&limit=100" \
-H "Authorization: Bearer $SCHIFT_API_KEY"
{
"object": "list",
"data": [
{"object": "embedding", "index": 0, "embedding": [-0.01225, 0.00207]},
{"object": "embedding", "index": 1, "embedding": [0.00898, -0.00298]},
{"object": "embedding", "index": 2, "embedding": [-0.06297, -0.04777]}
],
"model": "schift-embed-1-small",
"dimensions": 1024,
"usage": {"count": 3},
"pagination": {
"offset": 0,
"limit": 100,
"returned": 3,
"total": 3,
"has_more": false
}
}

画像を埋め込むには、まずビジョン-言語モデルでテキストを抽出し、次に抽出されたテキストを埋め込みます。リクエストごとに最大20のbase64エンコードされた画像を受け入れます。

ParameterTypeRequiredDefaultDescription
imagesstring[]YesBase64エンコードされた画像データ。
modelstringNoOrg routing configカタログからのモデルID。
dimensionsintegerNoModel default出力次元。
FieldTypeDescription
embeddingsnumber[][]各画像に対する埋め込みベクトルのリスト。
modelstring使用されたモデル。
dimensionsinteger出力次元。
usage.image_countinteger処理された画像の数。
usage.tokensinteger消費されたトークンの合計。
Terminal window
curl https://api.schift.io/v1/embed/image \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"images": ["iVBORw0KGgoAAAANSUhEUg..."],
"model": "openai/text-embedding-3-large"
}'
{
"embeddings": [[-0.01225, 0.00207, 0.03060]],
"model": "openai/text-embedding-3-large",
"dimensions": 3072,
"usage": {"image_count": 1, "tokens": 14}
}

OpenAI互換の埋め込みエンドポイント。OpenAIの/v1/embeddingsと同じinput形式を受け入れ、OpenAI互換のレスポンス形式を返します。このエンドポイントは、/v1/embedおよび/v1/embed/batchと同じロジックの薄いラッパーです。

Note: 100以上の入力には、POST /v1/embed/jobsを使用してください。

ParameterTypeRequiredDefaultDescription
inputstring | string[]Yes埋め込むテキストまたはテキストのリスト。
modelstringNoOrg routing configカタログからのモデルID。
dimensionsintegerNoModel default出力次元。
task_typestringNoSchift拡張:埋め込みの意図。
encoding_formatstringNo互換性のために受け入れられ、現在は未使用。
userstringNo互換性のために受け入れられ、現在は未使用。
FieldTypeDescription
objectstring常にlist
dataobject[]objectindex、およびembeddingを含む埋め込みオブジェクト。
modelstring使用されたモデル。
usage.prompt_tokensinteger消費されたトークンの合計。
usage.total_tokensinteger消費されたトークンの合計。
Terminal window
curl https://api.schift.io/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"input": "Schift enables seamless embedding model migration.",
"model": "openai/text-embedding-3-large"
}'
{
"object": "list",
"data": [
{
"object": "embedding",
"index": 0,
"embedding": [-0.01225, 0.00207, 0.03060]
}
],
"model": "openai/text-embedding-3-large",
"usage": {
"prompt_tokens": 8,
"total_tokens": 8
}
}

Schiftによって返されるすべての埋め込みは、共有の標準潜在空間に投影されます。これにより、以下が可能になります:

  • 再埋め込みなしでのモデル切り替え。 OpenAIからVoyageに移行しても、ベクトルストアに触れる必要はありません。
  • クロスモデル検索。 あるモデルからのクエリベクトルで、別のモデルで埋め込まれたドキュメントを取得できます。
  • 次元削減。 ソースモデルのネイティブ次元に関係なく、任意の出力次元を要求できます。

投影は透過的に行われます。通常通りAPIを呼び出せば、Schiftが処理します。

ルーティングとフェイルオーバー

Section titled “ルーティングとフェイルオーバー”

組織はデフォルトの埋め込みモデルとオプションのフォールバックを設定できます。フェイルオーバーモードが有効な場合、Schiftはプライマリプロバイダーが利用できない場合に自動的にフォールバックモデルで再試行します。

ルーティングエンドポイントを使用してデフォルトを設定します:

Terminal window
curl -X PUT https://api.schift.io/v1/routing \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $SCHIFT_API_KEY" \
-d '{
"primary": "openai/text-embedding-3-large",
"fallback": "voyage/voyage-4-large",
"mode": "fallback"
}'

すべての埋め込みエンドポイントからのレスポンスには、使用されたモデルを常に知ることができるようにmodelフィールドが含まれています。

レート制限は組織ごとに適用されます。使用状況はリアルタイムで追跡されます。埋め込みエンドポイントに対しては、以下の軸がチェックされます:

EndpointQuota axis
POST /v1/embedembed
POST /v1/embed/batchembed_batch
POST /v1/embed/imageembed_image
POST /v1/embed/jobsembed_batch
POST /v1/embeddingsembed or embed_batch

現在の使用状況を取得するには:

Terminal window
curl https://api.schift.io/v1/usage/summary \
-H "Authorization: Bearer $SCHIFT_API_KEY"

バルク埋め込みジョブは、組織のプランに基づいて優先順位が割り当てられます:

PlanPriority
Enterprise0
Business1
Pro / Paid / Starter2
Free3

小さい数字が先に処理されます。

StatusMeaning
400不正なリクエスト — 不明なモデル、無効な次元、空の入力、またはトークン制限超過。
401無効または期限切れのAPIキー。
402クレジット不足またはクォータ超過。
403プランで利用できない機能または権利制限に達しました。
502上流の埋め込みプロバイダーが失敗しました(プライマリとフォールバックの両方)。
EndpointStatusMeaning
POST /v1/embed/batch400同期リクエストで100以上のテキスト。POST /v1/embed/jobsを使用してください。
POST /v1/embed/jobs400空のテキスト、10,000以上のテキスト、またはテキストがモデルのmax_tokensを超えています。
GET /v1/embed/jobs/\{job_id\}404ジョブが見つからないか、他の組織に属しています。
POST /v1/embed/jobs/\{job_id\}/cancel400ジョブはすでに処理中または完了しています。
POST /v1/embed/jobs/\{job_id\}/cancel409ジョブはもはやキューにありません。
GET /v1/embed/jobs/\{job_id\}/result404ジョブまたは結果が見つかりません。
GET /v1/embed/jobs/\{job_id\}/result409結果がまだ準備できていません。