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).
Tabla de Contenidos
- Qué son los embeddings
- Cómo funcionan
- Generar embeddings con OpenAI
- Búsqueda semántica
- Casos de uso prácticos
- Bases de datos vectoriales
- FAQ
Qué son los embeddings {#que-son}
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 {#como-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 {#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 {#busqueda}
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 {#casos-uso}
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 {#vectordb}
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 {#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
Posts Relacionados
Cómo Usar Claude Code en Terminal: Tutorial Paso a Paso [2026]
Tutorial completo de Claude Code CLI. Aprende a usar el agente de código de Anthropic en terminal para automatizar desarrollo, refactoring y tareas complejas.
MCP Servers para Claude: Guía de Configuración en Español [2026]
Configura MCP Servers para Claude Code y Claude Desktop. Tutorial en español con ejemplos: filesystem, GitHub, bases de datos, APIs personalizadas.
Gemini 3 Deep Think: Cómo Usar el Modo Razonamiento de Google [2026]
Guía de Gemini 3 Deep Think, el modo de razonamiento avanzado de Google. Cómo activarlo, cuándo usarlo, comparativa con GPT-5.2 Thinking y casos de uso.
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.
¿Quieres más contenido de IA?
Explora nuestras comparativas y guías