Vectorizar un corpus entero
Vectorizar diez mil descripciones de producto una llamada a la vez es un problema de colas disfrazado de problema de embeddings. Este endpoint toma toda la lista de una vez, así que usted envía un corpus, no un bucle, y recibe todos los vectores juntos.
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.
El problema de repetir un endpoint de un solo elemento
Llamar miles de veces a un endpoint pensado para un solo texto implica manejar miles de task_id, miles de reintentos y miles de entregas pequeñas por webhook para lo que conceptualmente es un solo trabajo: vectorizar este conjunto de datos. search.embed_batch reduce todo eso a un solo envío, un solo task_id y un solo resultado que recoger al terminar.
Cómo es una llamada en lote
Haga POST a /search/embed-batch con un arreglo de textos, reciba un solo task_id que cubre todo el lote, y obtenga el conjunto completo de vectores —correlacionados con sus elementos originales— por webhook o mediante un enlace firmado de 24 horas cuando termine el procesamiento. Internamente el lote se paraleliza y se ordena por usted; no tiene que pensar en cómo se programaron las piezas.
Por qué el procesamiento por lotes tiene otro precio
El procesamiento por lotes ha sido siempre el camino eficiente en cómputo, desde los trabajos nocturnos de los mainframes hasta las colas de inferencia con GPU de hoy, porque agrupar trabajo similar reduce el costo fijo por unidad frente a solicitudes constantes de una en una. Esa eficiencia es la razón por la que procesar texto en este endpoint como lote, en lugar de miles de llamadas individuales, es la ruta más razonable cuando ya tiene toda la lista en mano.
Lo que no hace por usted
Este endpoint devuelve vectores, no un índice consultable; si quiere buscar en el corpus por similitud de inmediato sin manejar el almacenamiento usted mismo, search.index_text es el paso equivalente orientado a lotes que además construye el índice. Use este cuando necesite los vectores en bruto bajo su propio control, para un flujo de trabajo a medida, un almacén de datos o un modelo que esté entrenando.
Dónde encaja en un flujo de datos
Migrar un catálogo existente a un nuevo sistema de búsqueda semántica empieza aquí: vectorice todo una vez, guarde los vectores y de ahí en adelante solo vectorice lo nuevo o lo modificado. Equipos de ciencia de datos lo usan para preparar variables de entrenamiento a partir de grandes conjuntos de texto sin escribir su propia lógica de lotes y reintentos. Como se cobra por solicitud más por 1000 tokens sin tamaño mínimo de trabajo, tanto una migración única de un millón de registros como una pequeña actualización semanal caben en el mismo endpoint.
Qué puede hacer con ella
Migración de catálogo a búsqueda semántica
Una tienda en línea envía todo su catálogo de productos en un solo lote para generar vectores antes de cambiar su búsqueda de coincidencia por palabras a ranking por similitud.
Actualización incremental nocturna
Una plataforma de contenido agrupa solo los artículos publicados ese día y los vuelve a vectorizar en un único trabajo programado, en lugar de llamar al endpoint de un solo texto por artículo.
Preparación de variables para un modelo propio
Un equipo de ciencia de datos vectoriza en bloque un conjunto de entrenamiento etiquetado para usar los vectores como variables de entrada de un clasificador que entrena por separado.
Vectorización de archivo histórico para investigación
Un grupo de investigación vectoriza años de documentos históricos en unos pocos trabajos en lote, en vez de correr un script que llama en bucle a un endpoint de un solo elemento.
Preguntas frecuentes
¿Cómo vectorizo muchos textos a la vez con la API?
Envíe un arreglo de textos a POST /search/embed-batch, guarde el task_id devuelto y recoja todos los vectores resultantes por webhook o mediante un enlace firmado válido por 24 horas.
¿Es gratis la API de embeddings en lote?
No, no hay plan gratuito ni prueba; cuesta $0.002 por solicitud más $0.002 por 1000 tokens de todo el lote, y una tarea fallida nunca se cobra.
¿Hay un tamaño máximo de lote?
Sí, revise la referencia del endpoint para conocer los límites vigentes de elementos y tokens por lote; los corpus más grandes deben dividirse en varios envíos.
¿Cómo relaciono los vectores devueltos con mis elementos originales?
Cada vector del resultado se devuelve alineado con el orden o los identificadores de los elementos que envió, para que pueda emparejarlos sin ambigüedad.
¿Cuál es la diferencia con search.embed?
search.embed procesa un solo texto por llamada; search.embed_batch procesa una lista completa de textos en una sola tarea, lo cual es mucho más eficiente para corpus grandes.
¿Debo usar esto o search.index_text para una función de búsqueda?
Use search.embed_batch si va a guardar y consultar los vectores usted mismo; use search.index_text si quiere que el troceado, la vectorización y el índice queden resueltos de nuestro lado.
¿Cuánto tarda en procesarse un lote grande?
Depende del tamaño del lote y del total de tokens; como corre de forma asíncrona, se le notifica por webhook en lugar de tener que consultar el estado o esperar en línea.
¿Se conserva el texto enviado después de procesar el lote?
No, el texto enviado y los resultados generados 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-batch \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/search/embed-batch", {
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-batch",
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-batch", 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-batch", 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_batch",
"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. |