Vectorizar texto
Una frase no significa nada para una base de datos hasta que se convierte en una lista de números que una función de distancia pueda comparar. Este endpoint hace esa conversión al momento, para que su propia lógica de búsqueda, agrupamiento o recomendación tenga coordenadas con las que trabajar en lugar de texto plano.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Por qué el texto plano no se puede buscar por significado
La búsqueda por palabras clave compara caracteres, no intención, por eso una consulta como 'cancelar mi plan' no encuentra un documento que solo dice 'dar de baja la suscripción'. Los embeddings resuelven eso ubicando el texto en un espacio numérico donde los puntos cercanos significan cosas parecidas, sin importar las palabras exactas elegidas. search.embed es el paso que lleva un fragmento de texto a ese espacio.
Qué ocurre cuando lo llama
Haga POST a /search/embed con un texto, reciba un task_id y obtenga el vector resultante por webhook o mediante un enlace firmado de 24 horas cuando el trabajo termine. No hay que alojar ningún modelo, no hay GPU que aprovisionar ni versión de librería que mantener parchada: usted envía texto y recibe coordenadas, y toda la infraestructura detrás queda enteramente de nuestro lado.
Un poco de historia que vale la pena conocer
Las representaciones vectoriales de palabras vienen de la investigación en semántica distribucional de los años 2000 y despegaron con word2vec en 2013, para luego pasar de palabras sueltas a oraciones y pasajes completos conforme maduraron los modelos transformer. Lo que antes requería entrenar un modelo propio hoy es una sola llamada a la API, que es justamente el sentido de exponerlo así en lugar de distribuir una librería.
Un vector, muchos usos
Una sola llamada de embedding rara vez es el objetivo final: normalmente es el primer paso antes de una búsqueda por similitud, un proceso de clustering o un modelo de clasificación entrenado sobre los vectores. Por eso el endpoint devuelve solo el vector y un registro de uso, sin suponer nada sobre lo que hará con él después.
Dónde encaja en un sistema real
Los equipos que construyen generación aumentada por recuperación (RAG) llaman a esto por cada consulta y por cada fragmento candidato, comparando vectores para decidir qué contexto debe ver un modelo de lenguaje. Los sistemas de recomendación vectorizan descripciones de producto una sola vez y reutilizan los vectores durante meses. Como el precio es por solicitud más por 1000 tokens, sin ningún nivel de suscripción más allá de tener saldo activo, el costo sigue exactamente el uso, ya sea que vectorice diez consultas al día o diez mil.
Qué puede hacer con ella
Recuperación en tiempo real para RAG
Una aplicación vectoriza cada pregunta del usuario en el momento de la consulta y la compara contra un índice vectorial ya construido para traer el contexto correcto a un modelo de lenguaje.
Detección de preguntas duplicadas
Una plataforma de soporte vectoriza los tickets nuevos y compara sus vectores contra los recientes para marcar posibles duplicados antes de que un agente responda.
Etiquetado semántico liviano
Un equipo editorial vectoriza títulos de artículos para agruparlos automáticamente por tema sin mantener a mano una taxonomía.
Puntuación de recomendación a medida
Un equipo de comercio electrónico vectoriza descripciones de producto una sola vez y guarda los vectores para su propio ranking de similitud, aparte de cualquiera de nuestros endpoints de indexado.
Preguntas frecuentes
¿Cómo genero un embedding de texto con la API?
Envíe su texto a POST /search/embed, guarde el task_id devuelto y obtenga el vector por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API de embeddings de texto?
No, no hay plan gratuito ni prueba; cuesta $0.002 por solicitud más $0.002 por 1000 tokens, y una tarea fallida nunca se cobra.
¿Para qué puedo usar los vectores resultantes?
Búsqueda semántica, clustering, detección de duplicados, puntuación de recomendaciones y recuperación para RAG son los usos más comunes; el vector en sí es genérico y sirve con cualquier lógica de comparación posterior.
¿En qué se diferencia esto de search.index_text?
Este endpoint devuelve un vector en bruto para que usted lo guarde y consulte por su cuenta; search.index_text trocea, vectoriza y guarda el contenido en un índice listo para consultar de nuestro lado.
¿Hay un límite de tokens por solicitud?
Sí, revise la referencia del endpoint para conocer el máximo vigente; para documentos más largos, divida el texto o use los endpoints de lote o de indexado.
¿Puedo vectorizar texto que no esté en inglés?
Sí, el endpoint acepta texto en varios idiomas y devuelve un vector dentro del mismo espacio de embeddings compartido sin importar el idioma de origen.
¿Necesito saber cómo funciona la búsqueda vectorial para usar esto?
No, solo necesita guardar y comparar los vectores devueltos con una métrica de distancia como la similitud coseno; la lógica de generación del embedding ya está resuelta para usted.
¿Se guarda mi texto después de vectorizarlo?
No, el texto enviado y los resultados se eliminan después del período de retención y nunca se usan para entrenamiento.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/search/embed \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/search/embed", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/search/embed",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/search/embed", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/search/embed", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "search.embed",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_chunks | 10000 |
max_tokens | 20000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |