DocumentationEmbeddings
Construire
Embeddings
Un embedding traduit un texte en une liste de nombres. Deux textes proches par le sens donnent des listes proches.
Créer des vecteurs
Envoyez un texte ou une liste de textes. Chacun revient avec son vecteur, dans le même ordre.
passages = [
"Either party may terminate with three months' notice.",
"Invoices are payable within thirty days.",
]
result = client.embeddings.create(
model="learnya-embed", input=passages
)
vectors = [item.embedding for item in result.data]
print(len(vectors), "vectors of", len(vectors[0]), "numbers")const passages = [
"Either party may terminate with three months' notice.",
"Invoices are payable within thirty days.",
]
const result = await client.embeddings.create({
model: "learnya-embed",
input: passages,
})
const vectors = result.data.map((item) => item.embedding)
console.log(
vectors.length,
"vectors of",
vectors[0].length,
"numbers",
)const passages: string[] = [
"Either party may terminate with three months' notice.",
"Invoices are payable within thirty days.",
]
const result = await client.embeddings.create({
model: "learnya-embed",
input: passages,
})
const vectors: number[][] = result.data.map(
(item) => item.embedding,
)
console.log(
vectors.length,
"vectors of",
vectors[0].length,
"numbers",
)curl https://api.learnya.ai/v1/embeddings \
-H "Authorization: Bearer $LEARNYA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "learnya-embed",
"input": ["Invoices are payable within thirty days."]
}'Réponse
{
"object": "list",
"model": "learnya-embed",
"data": [
{ "object": "embedding", "index": 0, "embedding": [0.0123, -0.0481, 0.0277, -0.0019] }
],
"usage": { "prompt_tokens": 9, "total_tokens": 9 }
}Chercher par le sens
Comparez le vecteur d’une question à ceux de vos passages. Le plus proche en parle, même avec d’autres mots.
import math
def cosine(a, b):
dot = sum(x * y for x, y in zip(a, b))
return dot / (
math.sqrt(sum(x * x for x in a))
* math.sqrt(sum(y * y for y in b))
)
question = client.embeddings.create(
model="learnya-embed",
input=["Can we end the contract early?"],
)
q = question.data[0].embedding
best = max(
range(len(passages)), key=lambda i: cosine(q, vectors[i])
)
print(passages[best])const cosine = (a, b) => {
let dot = 0,
na = 0,
nb = 0
for (let i = 0; i < a.length; i++) {
dot += a[i] * b[i]
na += a[i] * a[i]
nb += b[i] * b[i]
}
return dot / (Math.sqrt(na) * Math.sqrt(nb))
}
const question = await client.embeddings.create({
model: "learnya-embed",
input: ["Can we end the contract early?"],
})
const q = question.data[0].embedding
const scores = vectors.map((v) => cosine(q, v))
console.log(passages[scores.indexOf(Math.max(...scores))])const cosine = (a: number[], b: number[]): number => {
let dot = 0,
na = 0,
nb = 0
for (let i = 0; i < a.length; i++) {
dot += a[i] * b[i]
na += a[i] * a[i]
nb += b[i] * b[i]
}
return dot / (Math.sqrt(na) * Math.sqrt(nb))
}
const question = await client.embeddings.create({
model: "learnya-embed",
input: ["Can we end the contract early?"],
})
const q: number[] = question.data[0].embedding
const scores = vectors.map((v) => cosine(q, v))
console.log(passages[scores.indexOf(Math.max(...scores))])