Búsqueda: embeddings y rerank
Las dos piezas de un RAG por la misma key: vectores para encontrar candidatos y rerank para ordenarlos por relevancia.
Embeddings
POST /v1/embeddings con el contrato de OpenAI. Recibe uno o varios textos y devuelve un vector de 1024 dimensiones por texto, en el mismo orden. Los guardas en tu base vectorial (pgvector, Qdrant, lo que uses) y buscas por similitud coseno.
El modelo es multilingüe: una pregunta en español encuentra un documento en inglés o en portugués sin traducir nada antes.
r = client.embeddings.create(
model="jina-embeddings-v5-omni-small",
input=["¿Cómo cambio mi contraseña?", "Olvidé la clave del correo"],
)
vectores = [d.embedding for d in r.data] # 1024 números cada unoRerank
POST /v1/rerank recibe una consulta y una lista de documentos, y devuelve los documentos ordenados por relevancia con un puntaje entre 0 y 1. No es parte del SDK de OpenAI, así que se llama con un POST directo y la misma key.
El patrón habitual es traer 20 a 50 candidatos con embeddings y pasarlos por rerank para quedarte con los 3 a 5 mejores antes de mandárselos al modelo de texto. Es más barato que darle al modelo todo el contexto y responde mejor.
import requests
r = requests.post(
"https://ai.truo.cloud/v1/rerank",
headers={"Authorization": "Bearer sk-…"},
json={
"model": "jina-reranker-v2-base-multilingual",
"query": "¿Cómo apunto mi dominio al hosting?",
"documents": [
"Cambia los DNS en tu registrador a ns1 y ns2 de tu plan.",
"Los respaldos se guardan 30 días.",
],
"top_n": 1,
},
)
print(r.json()["results"]) # [{"index": 0, "relevance_score": …}]Precio y planes
Los dos se cobran por token de entrada, a $0.065 por millón, del mismo presupuesto que el resto. Están en los tres planes. En rerank cuentan los tokens de la consulta y de los documentos juntos.