Capítulo 9 · convertir texto en geometría
"Refund my order" y "how do I get my money back"
no comparten palabras — pero sus embeddings son vecinos. El significado se vuelve distancia.
def embed(texts):
r = client.embeddings.create(
model="text-embedding-3-small", input=texts)
return [item.embedding for item in r.data]
Una llamada por batch, no por string. Mismo modelo → mismo largo → comparable.
def cosine(a, b):
dot = sum(x*y for x, y in zip(a, b))
na = math.sqrt(sum(x*x for x in a))
nb = math.sqrt(sum(y*y for y in b))
return dot / (na*nb) if na and nb else 0.0
1.0 = misma dirección. 0.0 = sin relación. La magnitud se ignora.
0.61 A dog is a loyal and affectionate pet.
0.58 Golden retrievers are gentle family companions.
0.11 The stock market fell sharply on Tuesday.
0.09 Photosynthesis converts sunlight into energy.
Cero keywords compartidas. El significado hizo el ranking.
Sin modelo de chat. Embed + coseno es todo el motor.
Embebe un batch, compara por coseno. Esas dos operaciones cargan una cantidad enorme de software en producción. Sigue: el loop de Python se topa con una base de datos vectorial.