埋め込み(Embeddings)
text-embedding-v4(Alibaba)でテキストをベクトル化できます。OpenAI Embeddings API と互換です。
RAG・意味検索・クラスタリングなどに利用します。
- Python
- TypeScript
- cURL
import os
import numpy as np
from openai import OpenAI
client = OpenAI(
api_key=os.environ["LYKURO_API_KEY"],
base_url="https://api.lykuro.ai/alibaba/compatible-mode/v1",
)
texts = ["猫はかわいい動物です。", "犬は忠実なペットです。", "株価が下落した。"]
resp = client.embeddings.create(model="text-embedding-v4", input=texts)
vectors = [np.array(d.embedding) for d in resp.data]
def cosine(a, b):
return a @ b / (np.linalg.norm(a) * np.linalg.norm(b))
# 「猫」と「犬」、「猫」と「株価」の類似度を比較
print("猫 vs 犬 :", cosine(vectors[0], vectors[1]))
print("猫 vs 株価 :", cosine(vectors[0], vectors[2]))
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.LYKURO_API_KEY,
baseURL: "https://api.lykuro.ai/alibaba/compatible-mode/v1",
});
const texts = ["猫はかわいい動物です。", "犬は忠実なペットです。", "株価が下落した。"];
const resp = await client.embeddings.create({ model: "text-embedding-v4", input: texts });
const vectors = resp.data.map((d) => d.embedding);
const cosine = (a: number[], b: number[]) => {
const dot = a.reduce((s, v, i) => s + v * b[i], 0);
const na = Math.hypot(...a);
const nb = Math.hypot(...b);
return dot / (na * nb);
};
console.log("猫 vs 犬 :", cosine(vectors[0], vectors[1]));
console.log("猫 vs 株価 :", cosine(vectors[0], vectors[2]));
curl https://api.lykuro.ai/alibaba/compatible-mode/v1/embeddings \
-H "Authorization: Bearer $LYKURO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "text-embedding-v4",
"input": ["猫はかわいい動物です。", "犬は忠実なペットです。"]
}'
レスポンスの data[].embedding がベクトルです。
:::note ベクトルDBとの併用
取得したベクトルは pgvector / Qdrant / Pinecone などに格納して類似検索に使えます。
インデックス作成時と検索時で同じモデル(text-embedding-v4)を使ってください。
:::