Skip to content

Inferencias

Una inferencia es una llamada suelta y sin estado: entra un prompt, sale una respuesta. No recuerda nada entre llamadas. Es la herramienta para clasificar, extraer, resumir o generar JSON estructurado — si lo que quieres es conversar, ve a Agentes.

Se configura en el panel (prompt de sistema, modelo, RAGs vinculados) y se ejecuta desde tu backend.

Listar las disponibles

bash
curl https://ur.tuempresa.com/api/inferences \
  -H "Authorization: Bearer $UR_TOKEN"
json
[
  {
    "name": "Clasificador de tickets",
    "identifier": "clasificador-tickets",
    "url": "https://ur.tuempresa.com/api/inferences/clasificador-tickets",
    "createdAt": "2026-03-01T09:00:00.000Z",
    "fileSources": [
      {
        "ragIdentifier": "ventas-docs",
        "ragName": "Documentación de ventas",
        "identifier": "drive-ventas",
        "provider": "google_drive"
      }
    ]
  }
]

Devuelve solo las que tu token tiene permitidas. El campo fileSources te dice qué RAGs lleva vinculados cada una — eso determina si tienes que mandar semanticSearch.

Ejecutar una inferencia

bash
curl -X POST https://ur.tuempresa.com/api/inferences/clasificador-tickets \
  -H "Authorization: Bearer $UR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Clasifica este ticket: no me llega la factura de marzo",
    "semanticSearch": ["facturación", "envío de facturas"]
  }'

prompt y semanticSearch son cosas distintas

Este es el error más común

prompt es lo que se le manda al modelo. semanticSearch es lo que se busca en tus documentos. El prompt no interviene en la búsqueda.

Si la inferencia tiene RAGs vinculados y no mandas semanticSearch, la respuesta es 400. Si no los tiene, semanticSearch se ignora.

Puedes mandar hasta 10 queries. Cada una se busca por separado y los resultados se deduplican. Es útil cuando una sola formulación no cubre el tema: ["plazo de devolución", "política de reembolso"].

Cuerpo

CampoTipoPor defectoDescripción
promptstringObligatorio. Lo que recibe el modelo
semanticSearchstring[]Queries de búsqueda, máximo 10. Obligatorio si hay RAGs vinculados
topKint 1–1005Fragmentos a recuperar
useRerankingboolfalseReordena los resultados, si el RAG tiene reranker
candidateMultiplierint 2–102Candidatos antes de reordenar (topK × este valor)
similarityThresholdnumber 0–1Descarta fragmentos por debajo de este parecido
includeDuplicatesboolfalseIncluye fragmentos marcados como duplicados
jsonSchemastringFuerza la forma de la respuesta. Ver abajo
useAllFilesbooltrueA false, restringe a selectedFiles/selectedFolders
selectedFilesarrayFicheros concretos por RAG
selectedFoldersarrayCarpetas por RAG; se expanden a sus ficheros
providerFilterarrayFiltro por metadatos del proveedor (etiquetas…)
includeSystemPromptboolfalseDevuelve el prompt de sistema en la respuesta

Los campos de RAG solo valen si la inferencia los usa

semanticSearch, similarityThreshold, selectedFiles, selectedFolders y providerFilter solo se aceptan si la inferencia tiene activado el RAG nativo. Mandarlos si no, devuelve 400 — explícito, en vez de ignorarlos en silencio.

Respuesta estructurada

jsonSchema es un JSON Schema serializado como string, no un objeto:

json
{
  "prompt": "Clasifica este ticket: no me llega la factura de marzo",
  "jsonSchema": "{\"type\":\"object\",\"properties\":{\"categoria\":{\"type\":\"string\"}}}"
}

Con él, response es un objeto que sigue ese esquema. Sin él, es un array de bloques de contenido.

Respuesta

json
{
  "response": { "categoria": "facturacion" },
  "inference": "clasificador-tickets",
  "params": { "prompt": "...", "topK": 5 },
  "items": [
    { "text": "Las facturas se envían el día 5 de cada mes...", "score": 0.82 }
  ],
  "toolCalls": []
}
CampoDescripción
responseObjeto si usaste jsonSchema; array de bloques de contenido si no
inferenceEl identifier ejecutado
paramsLos parámetros que recibió, ya con los valores por defecto aplicados
itemsFragmentos usados como contexto, con su parecido (0–1)
toolCallsUna entrada por invocación de tool
systemPromptSolo si pediste includeSystemPrompt
degradedSolo si algo se degradó. Ver abajo

Degradación

La recuperación de documentos nunca lanza un error. Si el reranker está caído, la clave del proveedor agotada o se supera el tiempo máximo, se devuelve lo que se pudo recuperar y aparece el campo degraded.

Mira degraded antes de fiarte del resultado

Una respuesta con degraded es válida, pero se construyó con menos contexto del pedido. Si tu proceso depende de la calidad de la recuperación, compruébalo.

El detalle textual de cada degradación (message) solo aparece con sesión de administrador. Con un token Bearer ves que hubo degradación, pero no el motivo.

Solo recuperar contexto, sin LLM

Si únicamente quieres los fragmentos relevantes, sin gastar una llamada al modelo:

bash
curl -X POST https://ur.tuempresa.com/api/inferences/clasificador-tickets/retrieve \
  -H "Authorization: Bearer $UR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"semanticSearch": ["plazo de devolución"], "topK": 10}'

Acepta el mismo cuerpo que ejecutar, menos prompt y jsonSchema, y devuelve:

json
{
  "systemPrompt": "...",
  "chunks": [{ "text": "...", "score": 0.87 }]
}

Si lo que quieres es buscar en un RAG sin pasar por una inferencia, la vía directa es POST /api/rags/{identifier}/retrieve.

Ficheros indexados

Qué documentos respaldan una inferencia y en qué estado están:

bash
curl "https://ur.tuempresa.com/api/inferences/clasificador-tickets/files?page=1&limit=20" \
  -H "Authorization: Bearer $UR_TOKEN"
ParámetroPor defectoNotas
pageObligatorio
limit20Máximo 100
ragIdentifierRestringe a un RAG

total cuenta ficheros, no grupos

La respuesta agrupa por RAG, pero la paginación es por fichero. Un RAG grande puede aparecer partido entre dos páginas: si recorres todas las páginas, agrupa tú por ragIdentifier al juntar los resultados.

json
{
  "data": [
    {
      "ragIdentifier": "ventas-docs",
      "ragName": "Documentación de ventas",
      "files": [
        {
          "filePath": "documentos/informe.pdf",
          "name": "informe.pdf",
          "status": "indexed",
          "indexedAt": "2026-03-01T10:00:00.000Z",
          "size": 182344,
          "mimeType": "application/pdf",
          "errorMessage": null
        }
      ]
    }
  ],
  "total": 128,
  "page": 1,
  "limit": 20
}

Los estados posibles son pending, processing, indexed, error y deleted. Cuando es error, errorMessage dice por qué.

Estado de un fichero concreto

Para comprobar si un documento llegó a indexarse, sin recorrer páginas:

bash
curl "https://ur.tuempresa.com/api/inferences/clasificador-tickets/file-sources/drive-ventas?file=documentos/informe.pdf" \
  -H "Authorization: Bearer $UR_TOKEN"

El parámetro file es la ruta relativa (en fuentes de sistema de ficheros) o el identificador externo (en Google Drive, S3 o SharePoint) — se busca contra los dos.

json
{
  "name": "informe.pdf",
  "size": 182344,
  "status": "indexed",
  "indexedAt": "2026-03-01T10:00:00.000Z",
  "errorMessage": null
}

Es el endpoint natural para un flujo "he subido un documento, ¿ya puedo preguntar por él?".