Embeddings en IA: Qué Son y Cómo Usarlos [2026]
Guía completa sobre embeddings en inteligencia artificial. Qué son, cómo funcionan, y cómo usarlos para búsqueda semántica, RAG y recomendaciones.
Embeddings en IA: Qué Son y Cómo Usarlos [2026]
TLDR: Los embeddings son representaciones numéricas (vectores) de texto, imágenes u otros datos. Permiten búsqueda semántica, comparar similitud y construir sistemas RAG. Se generan con modelos como OpenAI text-embedding-3-small ($0.02/millón tokens).
Qué son los embeddings
Los embeddings son vectores numéricos que representan el significado semántico de un texto, imagen u otro dato.
Ejemplo simple
1"El gato duerme" → [0.12, -0.34, 0.87, ..., 0.23] (1536 números)2"El felino descansa" → [0.11, -0.33, 0.85, ..., 0.24] (muy similar)3"El coche es rojo" → [0.78, 0.12, -0.45, ..., -0.67] (muy diferente)
Por qué son útiles
| Aplicación | Descripción |
|---|---|
| Búsqueda semántica | Encontrar documentos por significado, no keywords |
| RAG | Recuperar contexto relevante para LLMs |
| Clustering | Agrupar textos similares automáticamente |
| Recomendaciones | Sugerir productos/contenido similar |
| Detección duplicados | Encontrar textos casi idénticos |
Cómo funcionan
El proceso
- Input: Un texto (o imagen, audio...)
- Modelo: Red neuronal entrenada
- Output: Vector de N dimensiones
Similitud del coseno
Para comparar dos embeddings, se usa la similitud del coseno:
1import numpy as np2 3def cosine_similarity(a, b):4 return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))5 6# Resultado: 0 (opuestos) a 1 (idénticos)
Dimensiones comunes
| Modelo | Dimensiones | Calidad |
|---|---|---|
| text-embedding-3-small | 1536 | Buena |
| text-embedding-3-large | 3072 | Excelente |
| Cohere embed-v3 | 1024 | Buena |
| Voyage AI | 1024-1536 | Muy buena |
Generar embeddings con OpenAI
Instalación
1pip install openai numpy
Código básico
1from openai import OpenAI2import numpy as np3 4client = OpenAI()5 6def get_embedding(text: str) -> list[float]:7 """Genera el embedding de un texto."""8 response = client.embeddings.create(9 model="text-embedding-3-small",10 input=text11 )12 return response.data[0].embedding13 14# Ejemplo15embedding = get_embedding("Hola mundo")16print(f"Dimensiones: {len(embedding)}") # 153617print(f"Primeros valores: {embedding[:5]}")
Procesar múltiples textos
1def get_embeddings_batch(texts: list[str]) -> list[list[float]]:2 """Genera embeddings para múltiples textos de una vez."""3 response = client.embeddings.create(4 model="text-embedding-3-small",5 input=texts6 )7 return [item.embedding for item in response.data]8 9# Más eficiente que llamar uno por uno10textos = ["Texto 1", "Texto 2", "Texto 3"]11embeddings = get_embeddings_batch(textos)
Búsqueda semántica
Implementación básica
1from openai import OpenAI2import numpy as np3 4client = OpenAI()5 6# Base de datos de ejemplo7documents = [8 "Python es un lenguaje de programación",9 "El café es una bebida popular",10 "JavaScript se usa para desarrollo web",11 "El té verde tiene antioxidantes",12 "TypeScript añade tipos a JavaScript"13]14 15# Generar embeddings de documentos16doc_embeddings = []17for doc in documents:18 response = client.embeddings.create(19 model="text-embedding-3-small",20 input=doc21 )22 doc_embeddings.append(response.data[0].embedding)23 24def search(query: str, top_k: int = 3) -> list[tuple[str, float]]:25 """Busca los documentos más similares a la query."""26 # Embedding de la query27 query_response = client.embeddings.create(28 model="text-embedding-3-small",29 input=query30 )31 query_embedding = query_response.data[0].embedding32 33 # Calcular similitudes34 similarities = []35 for i, doc_emb in enumerate(doc_embeddings):36 sim = np.dot(query_embedding, doc_emb) / (37 np.linalg.norm(query_embedding) * np.linalg.norm(doc_emb)38 )39 similarities.append((documents[i], sim))40 41 # Ordenar por similitud42 similarities.sort(key=lambda x: x[1], reverse=True)43 return similarities[:top_k]44 45# Prueba46results = search("programación en la web")47for doc, score in results:48 print(f"{score:.3f}: {doc}")49 50# Output:51# 0.823: JavaScript se usa para desarrollo web52# 0.801: TypeScript añade tipos a JavaScript53# 0.756: Python es un lenguaje de programación
Casos de uso prácticos
1. Sistema RAG simple
1def rag_query(question: str, documents: list[str]) -> str:2 """Responde preguntas usando documentos relevantes."""3 # Buscar documentos relevantes4 relevant_docs = search(question, top_k=3)5 context = "\n".join([doc for doc, _ in relevant_docs])6 7 # Generar respuesta con contexto8 response = client.chat.completions.create(9 model="gpt-4o-mini",10 messages=[11 {12 "role": "system",13 "content": f"Responde basándote en este contexto:\n{context}"14 },15 {"role": "user", "content": question}16 ]17 )18 19 return response.choices[0].message.content
2. Detector de duplicados
1def find_duplicates(texts: list[str], threshold: float = 0.95) -> list[tuple]:2 """Encuentra textos duplicados o muy similares."""3 embeddings = get_embeddings_batch(texts)4 duplicates = []5 6 for i in range(len(texts)):7 for j in range(i + 1, len(texts)):8 sim = cosine_similarity(9 np.array(embeddings[i]),10 np.array(embeddings[j])11 )12 if sim > threshold:13 duplicates.append((texts[i], texts[j], sim))14 15 return duplicates
3. Clustering de textos
1from sklearn.cluster import KMeans2 3def cluster_texts(texts: list[str], n_clusters: int = 5):4 """Agrupa textos similares."""5 embeddings = get_embeddings_batch(texts)6 7 kmeans = KMeans(n_clusters=n_clusters, random_state=42)8 labels = kmeans.fit_predict(embeddings)9 10 clusters = {}11 for text, label in zip(texts, labels):12 if label not in clusters:13 clusters[label] = []14 clusters[label].append(text)15 16 return clusters
Bases de datos vectoriales
Para proyectos de producción, necesitas una base de datos vectorial.
Comparativa
| Base de datos | Tipo | Precio | Mejor para |
|---|---|---|---|
| Pinecone | Cloud | Gratis hasta 100K | Producción fácil |
| Chroma | Local/Cloud | Gratis | Desarrollo |
| Weaviate | Self-hosted | Gratis | Control total |
| pgvector | PostgreSQL | Gratis | Ya usas Postgres |
| Qdrant | Cloud/Self | Gratis | Alto rendimiento |
Ejemplo con Chroma
1import chromadb2from chromadb.utils import embedding_functions3 4# Inicializar5client = chromadb.Client()6openai_ef = embedding_functions.OpenAIEmbeddingFunction(7 api_key="sk-...",8 model_name="text-embedding-3-small"9)10 11# Crear colección12collection = client.create_collection(13 name="mi_coleccion",14 embedding_function=openai_ef15)16 17# Añadir documentos18collection.add(19 documents=["Documento 1", "Documento 2"],20 ids=["id1", "id2"]21)22 23# Buscar24results = collection.query(25 query_texts=["mi búsqueda"],26 n_results=527)
FAQ
¿Cuánto cuestan los embeddings de OpenAI?
$0.02 por millón de tokens con text-embedding-3-small. Un documento de 1000 palabras ≈ 1300 tokens ≈ $0.000026.
¿Puedo generar embeddings gratis?
Sí, con modelos locales como sentence-transformers:
1from sentence_transformers import SentenceTransformer2model = SentenceTransformer('all-MiniLM-L6-v2')3embedding = model.encode("Tu texto")
¿Cuál es la diferencia entre embedding-3-small y large?
Large tiene más dimensiones (3072 vs 1536) y mejor calidad, pero cuesta el doble y ocupa más espacio.
¿Los embeddings expiran?
No, puedes guardarlos indefinidamente. Solo recalcula si cambias de modelo.
Conclusión
Los embeddings son fundamentales para aplicaciones modernas de IA:
- Búsqueda semántica - Encuentra por significado, no keywords
- RAG - Da contexto a tus LLMs
- Clustering - Agrupa contenido similar
- Recomendaciones - Sugiere items relacionados
Recursos relacionados:
Más contenido técnico en Javadex.es
Síguenos: YouTube @JavadexAI | TikTok @javadex
¿Listo para poner tu proyecto en producción?
Si estás siguiendo este tutorial, necesitas un servidor donde desplegarlo. Yo uso Hostinger para mis proyectos porque el panel es intuitivo, los VPS van con SSD NVMe, y a 4,99€/mes no hay nada comparable en relación calidad-precio.
* Enlace de afiliado. Si contratas a través de este enlace, nos ayudas a mantener este contenido gratuito.
Posts Relacionados
Consultoría IA en San Sebastián (Donostia): Agentes, Automatización y Modelos Privados para Empresas [2026]
Guía completa de servicios de inteligencia artificial en San Sebastián: agentes IA, automatización, modelos privados y consultoría para empresas vascas en 2026.
Kit Digital 2026 para IA: Cómo Solicitar Hasta 12.000€ para tu PYME Paso a Paso
Tutorial paso a paso para solicitar el Kit Digital 2026 con soluciones de IA. Requisitos, cuantías por segmento (hasta 12.000€), agentes digitalizadores y errores que rechazan tu solicitud.
Formación en Claude Code para Empresas en España: Proveedores, Precios y Qué Esperar [2026]
Guía de formación en Claude Code para empresas españolas: proveedores, precios (desde 4.000€), programas in-company, duración y resultados esperados.
Javier Santos Criado
Consultor de IA y Automatización | Fundador de Javadex
Experto en implementación de soluciones de Inteligencia Artificial para empresas. Especializado en automatización con n8n, integración de LLMs, y desarrollo de agentes IA.
Lleva tu proyecto a producción
Hosting web desde 2,99€/mes o VPS con SSD NVMe desde 4,99€/mes. Panel intuitivo, IP dedicada y soporte 24/7 en español.
¿Quieres más contenido de IA?
Explora nuestras comparativas y guías