Mientras que los modelos bi-encoder como Jina Embeddings pueden recuperar rápidamente muchos documentos coincidentes de una base de datos de embeddings pre-calculados, los modelos de reranking pueden refinar este conjunto utilizando un enfoque más lento pero más preciso de codificación cruzada entre las consultas de los usuarios y los documentos recuperados. Jina AI ha lanzado nuestro primer modelo de reranking, jina-reranker-v1-base-en, y en este artículo presentaremos un razonamiento detallado de por qué un reranker es esencial para optimizar la precisión de RAG y cómo empezar a construir un sistema RAG de última generación usando Jina Embeddings/Reranker, LlamaIndex, y el modelo de lenguaje Mixtral-8x7B-Instruct-v0.1
(alojado en HuggingFace).
Necesitarás:

Dado que los modelos Jina Embeddings y Reranker, así como Mixtral, se ejecutan de forma remota y se accede a ellos mediante una API RESTful, no necesitarás ningún hardware especial.
tag¿Qué es un reranker?
Antes de continuar con el tutorial, es importante destacar qué son los rerankers en primer lugar. Para una comprensión completa de qué es un reranker y por qué Jina Reranker V1 es la mejor opción para ti, te animamos a leer nuestro post de lanzamiento de Jina Reranker V1 antes de continuar.

En resumen, los rerankers son modelos de codificación cruzada que toman como entrada un par documento-consulta, y emiten una puntuación de relevancia combinada para ese par de entrada. Usando rerankers, los usuarios pueden ordenar los documentos del más al menos relevante para una consulta dada.
tag¿Por qué usar jina-reranker-v1-base-en?
El reranking proporciona información mucho más relevante que usar únicamente un modelo de embeddings. En nuestro post de lanzamiento del modelo, demostramos que Jina Reranker destaca en comparación con sus competidores de código abierto y cerrado y puede mejorar los sistemas de búsqueda en un 8% en tasa de aciertos y un 33% en rango recíproco medio.
Esto tiene un impacto directo en la calidad de las respuestas obtenidas a través de la solución RAG aplicada. Con la teoría respaldando esta afirmación, te mostraremos un ejemplo práctico para que puedas ver con tus propios ojos qué efecto tiene Jina Reranker en un pipeline RAG construido con LlamaIndex.
tagAntes de empezar: Una nota sobre los Node-Postprocessors de LlamaIndex
Los node-postprocessors en LlamaIndex son módulos que transforman o filtran nodos después de la recuperación y antes de la síntesis de respuesta dentro de un motor de consulta. Como parte de este paquete, LlamaIndex ofrece tanto opciones integradas como una API para adiciones personalizadas.
Jina Reranker ahora ha sido integrado en LlamaIndex como un postprocesador de nodos. Para aumentar la precisión de la respuesta, los nodos recuperados se reordenan según su relevancia para la consulta, y se devuelven los N nodos principales.
tagSigue el tutorial en Google Colab
Este tutorial tiene un notebook complementario que puedes ejecutar en Google Colab o localmente.
tagEl conjunto de datos: Catálogo de Productos Nike Kids 2024
Para mostrar el aumento de rendimiento de Jina Reranker en aplicaciones RAG, hemos elegido el Catálogo de Productos Nike Kids 2024 como nuestro conjunto de datos. El documento contiene un conjunto estructurado de productos para niños ofrecidos por Nike en 2024. Seleccionamos este conjunto de datos ya que muestra claramente el efecto de usar un reranker y es relevante para la mayoría de los usuarios.
tagInstala los prerrequisitos
Para instalar los requisitos, ejecuta:
pip install llama-index-postprocessor-jinaai-rerank
pip install llama-index-embeddings-jinaai
pip install llama-index
pip install llama-index-llms-huggingface
pip install "huggingface_hub[inference]"
tagAccede al LLM Mixtral
Para usar el LLM Mixtral-8x7B-Instruct-v0.1
, necesitas un token de HuggingFace.
from llama_index.llms.huggingface import HuggingFaceInferenceAPI
hf_inference_api_key = "<tu token de acceso de HuggingFace aquí>"
mixtral_llm = HuggingFaceInferenceAPI(
model_name="mistralai/Mixtral-8x7B-Instruct-v0.1",
token=hf_inference_api_key,
)
tagAccede a Jina Embeddings y Jina Reranker
Para usar nuestros Jina Embeddings y Jina Reranker, necesitas una clave API dedicada. Almacénala en una variable llamada api_key
y llama al modelo Jina Embeddings desde LlamaIndex:
from llama_index.embeddings.jinaai import JinaEmbedding
api_key = "<tu clave Jina aquí>"
jina_embeddings = JinaEmbedding(api_key=api_key)
De manera similar, puedes llamar al modelo Jina Reranker. Al establecer el parámetro top_n
, puedes decidir cuántos de los documentos más relevantes devolver en la salida final. En este caso, establecemostop_n=2
:
from llama_index.postprocessor.jinaai_rerank import JinaRerank
jina_rerank = JinaRerank(api_key=api_key, top_n=2)
tagDescargar el Catálogo de Productos Nike Kids 2024
Para descargar los datos, ejecuta el siguiente código:
from llama_index.core import SimpleDirectoryReader
import requests
url = '<https://niketeam-asset-download.nike.net/catalogs/2024/2024_Nike%20Kids_02_09_24.pdf?cb=09302022>'
response = requests.get(url)
with open('Nike_Catalog.pdf', 'wb') as f:
f.write(response.content)
reader = SimpleDirectoryReader(
input_files=["Nike_Catalog.pdf"]
)
documents = reader.load_data()
tagGenerar e indexar embeddings con Jina Embeddings
Ahora que la configuración está completa, generaremos los vectores de embedding (nodos) y los indexaremos. Los modelos Jina Embeddings v2 aceptan entradas de hasta 8192 tokens, lo suficientemente grandes como para que, en un documento como este, no necesitemos hacer ninguna segmentación adicional del texto ni verificar si alguna sección tiene demasiados tokens. Para embeber e indexar el documento, ejecuta el siguiente código:
from llama_index.core import VectorStoreIndex
index = VectorStoreIndex.from_documents(
documents=documents, embed_model=jina_embeddings
)
tagConsultar resultados sin Jina Reranker
Cuando consultamos información específica de este conjunto de textos, el query_engine
de LlamaIndex hace lo siguiente:
- Con Jina Embeddings V2, crea un embedding para la consulta.
- Utiliza el índice para obtener los
top_k = 10
embeddings almacenados con el mayor coseno respecto al embedding de la consulta y devuelve su posición en el índice. - Buscará el texto correspondiente en el array de datos vectoriales.
Preguntemos cuál es el mejor pantalón acolchado que vende Nike:
query_engine = index.as_query_engine(
similarity_top_k=10, llm=mixtral_llm
)
response = query_engine.query(
"What are the best padded pants that Nike sells?",
)
print(response.source_nodes[0].text)
Resultado:
NIKE KIDS EQUIPMENT87NIKE BRASILIA SMALL DUFFEL 9.5
DM3976 $37.00
SIZES: Misc OFFER DATE: 07/01/22 END DATE: 07/01/25
Tough 600D polyester • Durable 300D polyester • Detachable shoulder
strap • Ventilated shoe or wet/dry storage • Secure zip pocket •
Limited lifetime guarantee • Screened Swoosh design trademark
DIMENSIONS: 20" L x 10" W x 11" H
010 Black/Black/(White) 068 Iron Grey/Black/(White)
...
tagConsultar resultados con Reranker
Ahora queremos aplicar el reranker para ver si la aplicación RAG produce un resultado diferente y más relevante. Para hacerlo, necesitamos agregar los node_postprocessors
al query_engine
:
query_engine = index.as_query_engine(
similarity_top_k=10, llm=mixtral_llm, node_postprocessors=[jina_rerank]
)
response = query_engine.query(
"What are the best padded pants that Nike sells?",
)
print(response.source_nodes[0].text)
Ten en cuenta que, en comparación con el caso anterior sin el reranker, el query_engine
ahora también contiene el parámetro node_postprocessors establecido en [jina_rerank]
.
Resultado:
NIKE KIDS FOOTBALL – STOCK10
DJ5731 $47.00
SIZES: XS, S, M, L, XL, 2XL, 3XL
FABRIC: Body/panels lining: 100% polyester. Pad: 100%
ethylene vinyl acetate.
OFFER DATE: 04/01/23
END DATE: 04/01/27
Take the field ready to give it your all in the Nike Recruit
Pants. They're made from lightweight, stretchy fabric with
sweat-wicking power to help keep you dry and moving freely
when the game heats up. With integrated pads shaped for a
comfortable fit, you'll be prepared for a performance you can
be proud of. Choose from 6 different colors to outfit your
team. Nike Dri-FIT technology moves sweat away from your skin
for quicker evaporation, helping you stay dry and comfortable.
Lightweight knit fabric stretches with you to let you move
naturally. Thigh, knee, hip and tailbone pads are shaped for
an optimal fit, without compromising on coverage. A
body-hugging fit is designed to help keep the padding in place
and close to the body. Belt at the waist lets you dial in your
perfect fit to maximize comfort. Elastic at hems.
Hip width: 15", Inseam length: 11.75" (size medium).
010 Black/(White) 060 Team Anthracite/(White) 100 White/(Black)
419 Team Navy/(White) 493 Team Royal/(White) 657 Team Scarlet/(White)
tagConclusión
Como podemos ver, la consulta sin el reranker lleva a un resultado principal que menciona "malla trasera para transpirabilidad" y "ajuste delgado con tacto suave". En comparación, al usar un reranker, obtenemos un resultado principal que está "diseñado para una óptima transpirabilidad", tiene un "diseño que expulsa la humedad" que "te ayuda a mantenerte seco y fresco bajo la presión del día del partido", y presenta "tela ligera en un ajuste relajado y cómodo".
El segundo resultado es mucho más preciso y apropiado para la consulta que realizamos. Con nuestros últimos dos posts, mostramos tanto desde una perspectiva teórica como práctica que agregar Jina Reranker a tu pipeline RAG aumenta la precisión de recuperación y mejora la calidad de las respuestas que obtienes de él.