Vercel AI SDK 6 : AI SDK Core – 埋め込み

埋め込みは、単語、フレーズ、または画像を高次元空間のベクトルとして表現する方法です。この空間では、類似の単語は互いに近接していて、単語間の距離は類似性を測定するために使用できます。

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',
        },
      },
    },
  }),
});

 

以上