0Pricing
AI Agents · レッスン

text-embedding-3でEmbeddingを生成する

OpenAIのtext-embedding-3-small/largeを使って、文字列を1536次元または3072次元のベクトルに変換します。

「text-embedding-3でEmbeddingを生成する」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。

OpenAIのEmbeddingモデル

OpenAIは、本番環境向けに2つのembeddingモデルを提供しています。

  • text-embedding-3-small — 1536次元、安価で高速
  • text-embedding-3-large — 3072次元、高品質で低速

ほとんどの場合はsmallを使い、コストより品質が重要な場合にのみlargeを使ってください。

初めてのEmbedding

SDKコード1行で実行できます。

from openai import OpenAI
client = OpenAI()

resp = client.embeddings.create(
    model='text-embedding-3-small',
    input='Hello, world!'
)
vector = resp.data[0].embedding
print(len(vector))      # 1536

バッチEmbedding

APIはリストに対応しているため、1件ずつ呼び出すよりもはるかに高速です。

texts = ['cat', 'dog', 'pizza', 'sushi']
resp = client.embeddings.create(
    model='text-embedding-3-small',
    input=texts
)
vectors = [d.embedding for d in resp.data]
# vectors[0] is for 'cat', vectors[1] for 'dog', etc.

トークン制限

各入力には最大トークン数の制限があります(text-embedding-3では8192)。長い文書は、先にチャンク分割する必要があります。

次元数を減らす

より少ない次元数を指定することもできます(Matryoshka embedding)。ストレージの節約に役立ちます。

resp = client.embeddings.create(
    model='text-embedding-3-large',
    input='Hello',
    dimensions=512    # default would be 3072
)

コスト

執筆時点では、次の料金です。

  • text-embedding-3-small:100万トークンあたり$0.02
  • text-embedding-3-large:100万トークンあたり$0.13

smallモデルで100万語をembeddingする費用は約$0.025で、実質的に無料です。

一度Embeddingして、永続的に再利用する

embeddingは再度embeddingしても変化しないため、一度計算して保存できます。本番システムではキャッシュが不可欠です。

ベクトルの正規化

OpenAIのembeddingは、すでにL2正規化されています(長さ = 1)。このため、余弦類似度 = 内積となり、計算量を減らせます。

import numpy as np
a = np.array(vec_a)
b = np.array(vec_b)
sim = np.dot(a, b)     # since |a| = |b| = 1

非同期Embedding

高スループットが必要な場合は、非同期クライアントを使用します。

from openai import AsyncOpenAI
import asyncio

client = AsyncOpenAI()

async def embed_batch(texts):
    resp = await client.embeddings.create(
        model='text-embedding-3-small',
        input=texts
    )
    return [d.embedding for d in resp.data]

vectors = asyncio.run(embed_batch(['a', 'b', 'c']))

失敗時のリトライ

embeddingの呼び出しも、他のHTTP呼び出しと同様に失敗します。指数バックオフ付きのリトライでラップしてください。

from tenacity import retry, wait_exponential, stop_after_attempt

@retry(wait=wait_exponential(multiplier=1, max=10), stop=stop_after_attempt(5))
def safe_embed(text):
    return client.embeddings.create(model='text-embedding-3-small', input=text)

Embeddingの保存

一般的な保存先は次の3つです。

  • sqlite-vec拡張を使用するSQLite
  • pgvector拡張を使用するPostgres
  • 専用のベクトルDB(Pinecone、Qdrant、Weaviate)

コストを意識する

text-embedding-3-smallで100万語をembeddingすると、おおよそいくらかかるでしょうか。

まとめ

text-embedding-3-smallを選び、呼び出しをバッチ化してベクトルを保存すれば、セマンティック検索の基盤が整います。

よくある質問

「text-embedding-3でEmbeddingを生成する」レッスンは無料ですか?

はい。「text-embedding-3でEmbeddingを生成する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。

「text-embedding-3でEmbeddingを生成する」で何を学びますか?

OpenAIのtext-embedding-3-small/largeを使って、文字列を1536次元または3072次元のベクトルに変換します。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

AI Agentsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「text-embedding-3でEmbeddingを生成する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このAI Agentsレッスンでコードを書いて実行できますか?

はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Embeddingとは何か(ベクトル表現)
  2. text-embedding-3でEmbeddingを生成する
  3. 検索におけるコサイン類似度
  4. Embeddingモデルの比較(OpenAI、Cohere、OSS)
← AI Agentsに戻る