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拡張を使用するSQLitepgvector拡張を使用する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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Embeddingとは何か(ベクトル表現)
- text-embedding-3でEmbeddingを生成する
- 検索におけるコサイン類似度
- Embeddingモデルの比較(OpenAI、Cohere、OSS)