埋め込みは、単語、フレーズ、または画像を高次元空間のベクトルとして表現する方法です。この空間では、類似の単語は互いに近接していて、単語間の距離は類似性を測定するために使用できます。
Vercel AI SDK 6 : AI SDK Core – 埋め込み
作成 : Masashi Okumura (@classcat.com)
作成日時 : 02/01/2026
バージョン : ai@6.0.64
* 本記事は ai-sdk.dev/docs の以下のページを参考にしています :
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

Vercel AI SDK 6.x : AI SDK Core – 埋め込み
埋め込みは、単語、フレーズ、または画像を高次元空間のベクトルとして表現する方法です。この空間では、類似の単語は互いに近接していて、単語間の距離は類似性を測定するために使用できます。
単一値の埋め込み
AI SDK は単一値を埋め込むための embed 関数を提供しています、これは類似の単語やフレーズの検索やテキストのクラスタリングのようなタスクに有用です。例えば、openai.embeddingModel(‘text-embedding-3-large’) や mistral.embeddingModel(‘mistral-embed’) のような埋め込みモデルとともにそれを使用できます。
import { embed } from 'ai';
import { openai } from '@ai-sdk/openai';
// 'embedding' is a single embedding object (number[])
const { embedding } = await embed({
model: 'openai/text-embedding-3-small',
value: 'sunny day at the beach',
});
多数の値の埋め込み
データをロードする際、例えば、検索拡張生成 (RAG) 用のデータストアを準備する場合など、多くの値を一度に埋め込む (バッチ埋め込み) ことは役立つ場合が多いです。
AI SDK はこの目的で embedMany 関数を提供しています。embed と同様に、埋め込みモデル e.g. openai.embeddingModel(‘text-embedding-3-large’) や mistral.embeddingModel(‘mistral-embed’) とともに使用できます。
import { openai } from '@ai-sdk/openai';
import { embedMany } from 'ai';
// 'embeddings' is an array of embedding objects (number[][]).
// It is sorted in the same order as the input values.
const { embeddings } = await embedMany({
model: 'openai/text-embedding-3-small',
values: [
'sunny day at the beach',
'rainy afternoon in the city',
'snowy night in the mountains',
],
});
埋め込み類似度
値を埋め込んだ後、cosineSimilarity 関数を使用してそれらの間の類似度を計算できます。これは、例えばデータセットで類似の単語やフレーズを見つける場合に有用です。類似度に基づいて、関連項目をランク付けしたりフィルタリングすることもできます。
import { openai } from '@ai-sdk/openai';
import { cosineSimilarity, embedMany } from 'ai';
const { embeddings } = await embedMany({
model: 'openai/text-embedding-3-small',
values: ['sunny day at the beach', 'rainy afternoon in the city'],
});
console.log(
`cosine similarity: ${cosineSimilarity(embeddings[0], embeddings[1])}`,
);
トークン使用量
多くのプロバイダーは埋め込みを生成するために使用されたトークン数に基づいて課金します。embed と embedMany の両方は結果オブジェクトの usage プロパティでトークン使用量の情報を提供します :
import { openai } from '@ai-sdk/openai';
import { embed } from 'ai';
const { embedding, usage } = await embed({
model: 'openai/text-embedding-3-small',
value: 'sunny day at the beach',
});
console.log(usage); // { tokens: 10 }
設定
プロバイダーオプション
埋め込みモデルの設定は、プロバイダー固有のパラメータについては providerOptions を使用して構成できます :
import { openai } from '@ai-sdk/openai';
import { embed } from 'ai';
const { embedding } = await embed({
model: 'openai/text-embedding-3-small',
value: 'sunny day at the beach',
providerOptions: {
openai: {
dimensions: 512, // Reduce embedding dimensions
},
},
});
並列リクエスト
embedMany 関数は、パフォーマンスの最適化のために設定可能な maxParallelCalls により並列処理をサポートするようになりました :
import { openai } from '@ai-sdk/openai';
import { embedMany } from 'ai';
const { embeddings, usage } = await embedMany({
maxParallelCalls: 2, // Limit parallel requests
model: 'openai/text-embedding-3-small',
values: [
'sunny day at the beach',
'rainy afternoon in the city',
'snowy night in the mountains',
],
});
レスポンス情報
embed と embedMany の両方は、本来のプロバイダーレスポンスを含む、レスポンス情報を返します :
import { openai } from '@ai-sdk/openai';
import { embed } from 'ai';
const { embedding, response } = await embed({
model: 'openai/text-embedding-3-small',
value: 'sunny day at the beach',
});
console.log(response); // Raw provider response
埋め込みミドルウェア
wrapEmbeddingModel と EmbeddingModelV3Middleware を使用して、埋め込みモデルを拡張して、例えばデフォルト値を設定することができます。
組み込みの defaultEmbeddingSettingsMiddleware を使用する例が以下です :
import {
customProvider,
defaultEmbeddingSettingsMiddleware,
embed,
wrapEmbeddingModel,
gateway,
} from 'ai';
const embeddingModelWithDefaults = wrapEmbeddingModel({
model: gateway.embeddingModel('google/gemini-embedding-001'),
middleware: defaultEmbeddingSettingsMiddleware({
settings: {
providerOptions: {
google: {
outputDimensionality: 256,
taskType: 'CLASSIFICATION',
},
},
},
}),
});
以上