Que é un embedding nunha IA e para que serve?
Hai uns meses montei o buscador interno para unha tenda online de material de pesca, un cliente que xa levabamos co resto da web. Probou a buscar “caña spinning” e non saía nada, aínda que o produto se chamaba “caña de pescar para spinning” e estaba en stock, con fotos e todo. O buscador de toda a vida compara palabras: se a consulta non coincide máis ou menos letra a letra co título ou a descrición, non hai resultado. Cambiei o motor a un baseado en embeddings e o problema desapareceu nunha tarde, non nunha semana de ir metendo sinónimos á man un a un.
Un embedding é unha lista de números (un vector, normalmente de varios centos ou miles de posicións) que representa o significado dun texto, non as súas letras. “Caña spinning” e “caña de pescar para spinning” xeran vectores moi próximos entre si aínda que compartan poucas palabras exactas, e esa proximidade numérica é o que permite buscar por significado en vez de por coincidencia literal.
Para xeralos usei o modelo text-embedding-3-small de OpenAI: mándaslle un texto e devolveche un vector de 1536 números, por uns 0,02 dólares por millón de tokens, así que procesar o catálogo enteiro (uns 4.000 produtos) custou céntimos. Gardei eses vectores en Postgres coa extensión pgvector, cinco liñas de SQL para o índice, e xa podía comparar o vector de cada busca cos dos produtos e quedar cos máis próximos. Nada de infraestrutura nova nin de meter un servizo externo só para isto.
O que non esperaba é o mal que se explica isto a un cliente. Díxenlle “o sistema busca por significado” e mirou para min coma se lle estivese vendendo fume. O que funcionou foi ensinarlle capturas de antes e despois: mesmo termo, cero resultados co buscador vello, tres produtos relevantes co novo. Iso entendeuno en dez segundos; a explicación teórica non a entendería en dez minutos.
Os embeddings son tamén a peza que permite que un chatbot conteste cos documentos dunha empresa sen que o modelo se teña adestrado con eles: converte cada fragmento dun manual ou un PDF no seu vector, e cando alguén pregunta algo, busca os fragmentos co vector máis parecido á pregunta e pásallos ao modelo como contexto, dentro do que lle cabe na ventá de contexto. É a base técnica do que moita xente chama RAG, aínda que o nome técnico case nunca sae na conversa cun cliente.
O que si discuto con calma é que modelo de embeddings usar, porque non dá igual: hai modelos máis baratos e rápidos, e outros máis caros que captan matices máis finos, como sinónimos raros ou xerga dun sector moi concreto. Para o catálogo de pesca sobraba co modelo pequeno; para un buscador legal con terminoloxía moi específica probablemente non. Aínda non teño unha regra fixa para decidir isto de antemán. De momento probo os dous cunha mostra real de buscas do cliente antes de comprometerme cun.