Noticias
Modelos
API
keyboard_arrow_down
Lector
Lea las URL y busque en la web para obtener una base más sólida para su LLM.
Incrustaciones
Integraciones multilingües y multimodales de clase mundial.
reclasificador
Recuperador neuronal de clase mundial para maximizar la relevancia de la búsqueda.
Servicio de inferencia elástica
Ejecuta modelos Jina de forma nativa dentro de Elasticsearch.
MCP terminalCLIarticlellms.txtsmart_toyAgentesdata_objectEsquemamenu_bookDocumentos



Acceso
login
RAG en Contexto
Anatomía de un sistema RAG
Instalar los Prerrequisitos
Conectarse a Mistral-Instruct a través de la API de inferencia de Hugging Face
Recuperación de información con Qdrant y Jina Embeddings
Jina AI y Qdrant
Contacta con Nosotros
Blog de tecnología
marzo 04, 2024

Construye un sistema RAG con Jina Embeddings y Qdrant

Crea un sistema RAG con Jina Embeddings v2, base de datos vectorial Qdrant, LlamaIndex y Mistral LLM.
Promotional graphic with "EMBEDDINGS 2" and Drant logo separated by a red cross, symbolizing a partnership.
Scott Martens
Scott Martens • 13 minutos de lectura

La generación aumentada por recuperación es un conjunto de técnicas en rápido crecimiento que fueron originalmente concebidas como una extensión de los modelos de lenguaje grandes (LLM), pero cada vez más se ven como un paradigma alternativo que reimagina completamente el papel de los modelos de IA.

Te mostraremos cómo crear un motor RAG básico usando el framework LlamaIndex, un LLM Mistral de código abierto, Jina Embeddings v2 y la base de datos vectorial preparada para IA de Qdrant.

tagRAG en Contexto

En un sistema RAG, el papel del modelo de IA sigue siendo central pero mucho más limitado. En lugar de responder a las preguntas desde su conocimiento interno, derivado de sus datos de entrenamiento, se le presenta la información relevante en su prompt. El papel del modelo es entonces entender y sintetizar la información en una respuesta.

Esto aprovecha las fortalezas de los modelos de IA y minimiza sus debilidades.

Por ejemplo, podríamos darle al modelo Mistral-Instruct el siguiente prompt:

Answer the query. Please be brief, concise, and complete.
Query: Why is Taylor Swift planning to attend the Superbowl?
Answer:

Cuando hice eso, el modelo respondió:

I don't have real-time information. However, as of my last update, 
Taylor Swift is not officially confirmed to attend or perform at 
the Superbowl. If there are any updates, I recommend checking the 
latest news sources.

Los modelos de lenguaje grandes son costosos de actualizar y reentrenar, por lo que su información interna nunca puede estar completamente actualizada.

Además, los modelos de lenguaje grandes son conocidos por "alucinar", es decir, confabular respuestas plausibles que pueden ser parcial o totalmente incorrectas y que deben ser verificadas.

Answer the query. Please be brief, concise, and complete.
Query: What was Weird Al Yankovic's first Taylor Swift parody?
Answer:

Weird Al Yankovic's first Taylor Swift parody was "TMZ," a spoof 
of Swift's song "Blank Space." The parody was released in 2014 
as part of Yankovic's album "Mandatory Fun." The song humorously 
addresses the obsession with celebrity gossip and scandals, as 
reported by the tabloid news website TMZ.

El TMZ de Weird Al Yankovic fue lanzado en 2011 en el álbum Alpocalypse y es una parodia de You Belong with Me de Swift.

La naturaleza de las redes neuronales hace que las alucinaciones sean difíciles, si no imposibles, de prevenir completamente y socava fuertemente cualquier plan de usar modelos de IA como fuentes de información.

En palabras de Sam Altman, CEO de OpenAI:

"Creo que la gente comete un gran error cuando piensa en estos modelos [LLM] como una base de datos. [...] Funcionará, más o menos. Pero es como la base de datos más cara, más lenta y menos precisa del mundo."

RAG minimiza la dependencia del conocimiento interno de hechos sobre el mundo de un modelo de IA y aprovecha sus mayores fortalezas: la comprensión del lenguaje natural y la generación fluida de lenguaje.

Veamos otro ejemplo de una pregunta que Mistral-Instruct no puede responder:

Answer the query. Please be brief, concise, and complete.

Query: What is the title of Taylor Swift's next album?
Answer:

As of the time I am providing this answer, Taylor Swift has 
not yet announced the title of her next album. She has released 
several re-recorded albums, but the title of her next original 
album remains unknown. I recommend checking her official social 
media channels or website for the latest updates.

Ahora, un sistema RAG podría tener una base de datos de artículos de noticias recientes, o tal vez buscar en Internet textos relacionados con el título del próximo álbum de Taylor Swift. Luego, insertaría los textos que encuentra en el prompt.

Supongamos que identifica este artículo de AP como relevante para la consulta y construye el siguiente prompt:

Context information is below.
---------------------
February 6, 2024
LOS ANGELES (AP) — Forget her "Reputation." Taylor Swift has a 
whole new album coming out.

Accepting the Grammy for best pop vocal album on Sunday night, 
Taylor said she'd been keeping a secret for two years.

"My brand-new album comes out April 19. It's called 'The Tortured 
Poets Department.' I'm going to go and post the cover right now 
backstage," she announced.

And so she did.

---------------------
Given the context information and not prior knowledge, answer the query. 
Please be brief, concise, and complete.
If the context information does not contain an answer to the query, 
respond with "No information".
Query: What is the title of Taylor Swift's next album?
Answer:

Mistral-Instruct respondió:

The title of Taylor Swift's next album is 'The Tortured Poets Department'.

Este tipo de prompting también reduce drásticamente la probabilidad de alucinaciones. Por ejemplo:

Context information is below.
---------------------
Alpocalypse is the thirteenth studio album by American parody 
musician "Weird Al" Yankovic, released on June 21, 2011.

Track List

1. Perform This Way (Parody of "Born This Way" by Lady Gaga)
2. CNR
3. TMZ (Parody of "You Belong with Me" by Taylor Swift)
4. Skipper Dan
5. Polka Face (Polka medley including songs by artists such as 
   Lady Gaga, Justin Bieber, Britney Spears, Ke$ha, and others)
6. Craigslist
7. Party in the CIA (Parody of "Party in the U.S.A." by Miley 
   Cyrus)
8. Ringtone
9. Another Tattoo (Parody of "Nothin' on You" by B.o.B featuring 
   Bruno Mars)
10. If That Isn't Love
11. Whatever You Like (Parody of "Whatever You Like" by T.I.)
12. Stop Forwarding That Crap to Me

---------------------
Given the context information and not prior knowledge, answer the 
query. Please be brief, concise, and complete.
If the context information does not contain an answer to the query, 
respond with "No information".
Query: What was Weird Al Yankovic's first Taylor Swift parody, what 
year was it released, and what song was he parodying?
Answer:

Weird Al Yankovic's first Taylor Swift parody was "TMZ," and it was 
released in 2011. He was parodying "You Belong with Me" by Taylor 
Swift.

tagAnatomía de un sistema RAG

Un sistema RAG tiene, como mínimo, dos componentes:

  • Un modelo de IA generativo.
  • Un sistema de recuperación de información.

En este artículo, usaremos Mistral-Instruct como el modelo de IA generativo y accederemos a él a través de la API de Inferencia de Hugging Face. Usaremos la base de datos vectorial Qdrant y Jina Embeddings juntos para el sistema de recuperación de información.

Como fuente de datos, usaremos el Plan Estratégico Nacional de Investigación y Desarrollo de Inteligencia Artificial Actualización 2023, publicado en mayo de 2023 por el Consejo Nacional de Ciencia y Tecnología, un organismo que asesora al Presidente de los Estados Unidos en asuntos científicos y técnicos. Este documento de aproximadamente 25,000 palabras es un documento de política y planificación estratégica para la política y el desarrollo de IA estadounidense.

También es un clásico documento de política gubernamental "muy largo; no lo leí". La mayor parte es muy aburrida, y a menos que tengas un interés o una participación cercana en esta área, probablemente no lo vas a leer. Pero aún podrías querer saber qué dice.

Este artículo te guiará a través de los pasos para crear un sistema RAG capaz de responder preguntas sobre el texto y su contenido.

tagInstalar los Prerrequisitos

Primero, asegúrate de tener todas las bibliotecas de Python relevantes instaladas. En tu entorno de Python, ejecuta lo siguiente:

pip install llama-index qdrant-client 
pip install pdfminer.six llama-index-vector-stores-qdrant
pip install llama-index-llms-openai llama-index-embeddings-jinaai 
pip install llama-index-llms-huggingface "huggingface_hub[inference]"

Usaremos LlamaIndex para construir un sistema RAG alrededor del modelo de lenguaje Mistral-Instruct y pdfminer.six para procesar el archivo PDF en un almacén vectorial Qdrant.

tagConectarse a Mistral-Instruct a través de la API de inferencia de Hugging Face

Primero, configuremos el LLM. Necesitarás acceso a la API de inferencia de Hugging Face, incluyendo un token de acceso. Si tienes una cuenta de Hugging Face, puedes obtenerlo desde tu página de configuración de cuenta.

Si no tienes una cuenta, primero crea una, luego genera un token de acceso.

Coloca tu token en una variable para uso futuro:

hf_inference_api_key = '<your HuggingFace Inference API token>'

A continuación, construimos una plantilla de prompt:

from llama_index.core import PromptTemplate

qa_prompt_tmpl = (
    "Context information is below.\n"
    "---------------------\n"
    "{context_str}\\n"
    "---------------------\n"
    "Given the context information and not prior knowledge, "
    "answer the query. Please be brief, concise, and complete.\n"
    "If the context information does not contain an answer to the query, "
    "respond with \"No information\".\n"
    "Query: {query_str}\n"
    "Answer: "
)
qa_prompt = PromptTemplate(qa_prompt_tmpl)

Esta plantilla instruye al LLM a usar solo la información de contexto proporcionada en el prompt para responder preguntas. Este prompt ha funcionado bien para nosotros al trabajar con Mistral-Instruct, pero puedes experimentar con otras redacciones para ver qué funciona en tu caso de uso.

from llama_index.llms.huggingface import HuggingFaceInferenceAPI

mixtral_llm = HuggingFaceInferenceAPI(
    model_name="mistralai/Mixtral-8x7B-Instruct-v0.1", 
    token=hf_inference_api_key
)

Finalmente, crea e inicializa un objeto para el framework LlamaIndex que mantiene la conexión con Mistral-Instruct. El código siguiente proviene de la publicación anterior sobre crear sistemas RAG usando LlamaIndex.

Esto coloca la conexión al LLM Mistral en la variable mistral_llm.

tagRecuperación de información con Qdrant y Jina Embeddings

Para configurar el sistema de recuperación, necesitarás una clave API de Jina Embeddings. Puedes obtener una gratis con un presupuesto prepagado de 1 millón de tokens en el sitio web de Jina Embeddings.

Embedding API
Start with 1M free tokens. Top-performing, 8192 context length bilingual embeddings for your search and RAG systems.

Coloca tu clave de Jina Embeddings en una variable para uso futuro:

jina_emb_api_key = "<your Jina Embeddings API key>"

Luego, crea un objeto conector usando LlamaIndex para el servidor de Jina Embeddings, seleccionando específicamente el modelo monolingüe en inglés:

from llama_index.embeddings.jinaai import JinaEmbedding

jina_embedding_model = JinaEmbedding(
    api_key=jina_emb_api_key,
    model="jina-embeddings-v2-base-en",
)

tagCargar datos de texto

A continuación, cargaremos el documento y lo dividiremos en párrafos. Primero, descarga el PDF del sitio web de la Casa Blanca en la variable pdf_data:

import urllib.request

uri = "https://www.whitehouse.gov/wp-content/uploads/2023/05/National-Artificial-Intelligence-Research-and-Development-Strategic-Plan-2023-Update.pdf"
pdf_data = urllib.request.urlopen(uri).read()

Luego, procesaremos el PDF página por página, extrayendo el texto y dividiéndolo en párrafos separando por dobles saltos de línea. Estos se almacenan en la lista text_paras:

import regex as re
from io import BytesIO, StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser

text_paras = []
parser = PDFParser(BytesIO(pdf_data))
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
for page in PDFPage.create_pages(doc):
    output_string = StringIO()
    device = TextConverter(rsrcmgr, output_string, laparams=LAParams())
    interpreter = PDFPageInterpreter(rsrcmgr, device)
    interpreter.process_page(page)
    page_text = output_string.getvalue()
    text_paras.extend(re.split(r'\n\s*\n', page_text))

Verifica que todo esté cargado:

assert len(text_paras) == 615

A continuación, convertiremos esta lista de textos cortos en objetos Document de LlamaIndex:

from llama_index.core.readers import StringIterableReader

rag_docs = StringIterableReader().load_data(text_paras)

Y puedes inspeccionar el texto:

print(rag_docs[0].text)

Resultado:

NATIONAL ARTIFICIAL INTELLIGENCE 
RESEARCH AND DEVELOPMENT 
STRATEGIC PLAN 
2023 UPDATE

tagConfigurar una base de datos vectorial Qdrant

En este artículo, usaremos Qdrant Vector Search Cloud para implementar la base de datos del sistema RAG. El nivel gratuito de Qdrant incluye 1GB de almacenamiento, que es más que suficiente para este tutorial.

Necesitarás crear una cuenta en el sitio web de Qdrant Cloud antes de continuar.

Vector Search Database | Qdrant Cloud
Managed cloud solution of the Qdrant vector search engine. Cloud-native vector database for high performant vector similarity search.
Qdrant Cloud

Una vez que tengas una cuenta y hayas iniciado sesión, necesitarás crear un cluster. Sigue las instrucciones de "inicio rápido" en el sitio web de Qdrant para configurar un cluster gratuito y obtener una API y el nombre del servidor host de Qdrant.

Quickstart - Qdrant
Qdrant is an Open-Source Vector Database and Vector Search Engine written in Rust. It provides fast and scalable vector similarity search service with convenient API.
Edit on GitHub

Almacena la clave y el nombre del host en variables:

qdrant_api_key = "<your API key>"
qdrant_server = "https://<your server>"

A continuación, necesitaremos importar los componentes relevantes de los paquetes qdrant_client y llama_index:

import qdrant_client
from llama_index.vector_stores.qdrant import QdrantVectorStore

client = qdrant_client.QdrantClient(qdrant_server, api_key=qdrant_api_key)
vector_store = QdrantVectorStore(client=client, collection_name="NTSC")

Esto crea una colección llamada NTSC en tu clúster gratuito.

Puedes leer la documentación de Qdrant para obtener información sobre cómo construir un almacén de datos local en memoria o en disco y hospedar tu propia instancia del servidor Qdrant en un contenedor docker a través de una API web.

tagCompletar el sistema RAG

Ahora ensamblaremos estos componentes en un sistema RAG completo utilizando código base para LlamaIndex:

from llama_index.core.query_engine import RetrieverQueryEngine
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.storage.storage_context import StorageContext
from llama_index.core import (
		VectorStoreIndex,
		ServiceContext,
		get_response_synthesizer,
)

# set up the service and storage contexts
service_context = ServiceContext.from_defaults(
    llm=mixtral_llm, embed_model=jina_embedding_model
)
storage_context = StorageContext.from_defaults(vector_store=vector_store)

# create an index
index = VectorStoreIndex.from_documents(
    rag_docs, storage_context=storage_context, service_context=service_context
)

# configure retriever
retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=2,
)

# configure response synthesizer
response_synthesizer = get_response_synthesizer(
    service_context=service_context,
    text_qa_template=qa_prompt,
    response_mode="compact",
)

# assemble query engine
query_engine = RetrieverQueryEngine(
    retriever=retriever,
    response_synthesizer=response_synthesizer,
)

Este sistema utilizará Jina Embeddings para indexar los párrafos de nuestra fuente de texto y colocará las dos mejores coincidencias en el contexto de cada prompt. Para cambiar a las tres mejores, por ejemplo, solo modifica la inicialización de VectorIndexRetriever anterior para tener un parámetro similarity_top_k diferente:

# configure retriever
retriever = VectorIndexRetriever(
    index=index,
    similarity_top_k=3,
)

Ahora el sistema está listo para usar.

tagConsultar un Documento

Probemos una consulta sencilla:

response = query_engine.query("""
What is the Biden Administration's policy with regard to AI? 
""")
print(response.response)

El resultado (el tuyo puede no ser idéntico):

The Biden Administration prioritizes responsible AI systems that 
are ethical, trustworthy, and safe, and serve the public good. 
The Administration has committed to substantial funding for AI 
R&D, and has established the National AI Initiative Office to 
coordinate AI activities across the federal government. 

The Administration's AI policy focuses on developing evaluative
techniques for AI, workforce development, public-private
partnerships, and international collaboration in AI research.

O algo más específico:

response = query_engine.query("""
What protections does the AI Bill of Rights propose to offer?
""")

print(response.response)
The AI Bill of Rights proposes five core protections: Safe and 
Effective Systems; Algorithmic Discrimination Protections; Data 
Privacy; Notice and Explanation; and Human Alternatives, 
Consideration, and Fallback.

O incluso muy específico:

response = query_engine.query("Who is Kei Koizumi?")
print(response.response)
Kei Koizumi is the Principal Deputy Director for Policy at the Office 
of Science and Technology Policy (OSTP).

También puedes hacer preguntas más imaginativas:

response = query_engine.query("""
What rights will AI's receive under President Biden's proposed 
AI Bill of Rights?
""")
print(response.response)
The proposed AI Bill of Rights does not grant rights to AI systems, but 
rather outlines principles to ensure that AI technologies are 
developed and used in a manner that respects human rights and values. 
The principles include safety, transparency, fairness, disclosure, 
data privacy, non-discrimination, and the ability for individuals to 
opt out of certain AI systems.
response = query_engine.query("""
Why is President Biden's proposing an AI Bill of Rights?
Does AI really need rights?
""")
print(response.response)
President Biden's proposed AI Bill of Rights aims to ensure that AI 
technologies are developed and used ethically, legally, and with 
societal considerations in mind. The Bill of Rights is not granting 
"rights" to AI, but rather setting guidelines for the responsible 
development and deployment of AI systems to protect individuals and 
communities from potential negative impacts.
response = query_engine.query("""
Has Donald Trump weighed in on AI?
Will he Make Humans Great Again?
""")
print(response.response)
No information. The context information does not mention Donald 
Trump's views on AI.

tagJina AI y Qdrant

La ventana de contexto de 8k tokens de Jina Embeddings lo hace especialmente adecuado para la generación aumentada por recuperación porque puede trabajar con bloques de texto mucho más grandes. Mientras que otras aplicaciones RAG a menudo tienen que almacenar oraciones individuales o pares de oraciones, en este tutorial, pudimos usar párrafos completos sin preocuparnos por su tamaño.

Esto reduce el número de elementos de texto que deben almacenarse para llevar la misma información, reduciendo los costos de computación, ahorrando memoria y haciendo la recuperación más rápida.

La base de datos vectorial de Qdrant es simple de configurar, rápida y rentable, y como has visto, solo se necesitan unas pocas líneas de Python para integrarla en un sistema RAG.

Para más información sobre la base de datos preparada para IA y las ofertas en la nube de Qdrant, puedes visitar su sitio web.

Qdrant - Vector Database
Qdrant is an Open-Source Vector Database and Vector Search Engine written in Rust. It provides fast and scalable vector similarity search service with convenient API.
Vector Database

tagContacta con Nosotros

Jina AI está comprometida a llevar tecnologías de IA confiables y asequibles a empresas de todos los tamaños y tipos. Nos encantaría conocer tus casos de uso y ayudarte a integrar la IA en tus procesos de negocio. Para más información sobre las ofertas de Jina AI y para contactarnos, visita el sitio web de Jina AI o únete a nuestra comunidad en Discord.

Jina AI - Best Embeddings and Perfect Prompts
Jina AI provides best-in-class embedding API and prompt optimizer, easing the development of multimodal AI applications.
Best Embeddings and Perfect Prompts
Join the Jina AI Discord Server!
Check out the Jina AI community on Discord - hang out with 4493 other members and enjoy free voice and text chat.
Discord
Categorías:
Blog de tecnología
rss_feed

Leer más
marzo 11, 2026 • 7 minutos de lectura
Generación de embeddings de audio a partir de LLM multimodales
Han Xiao
Abstract illustration of a sound wave or heartbeat, formed by blue, orange, and gray dots on a white background.
marzo 06, 2026 • 6 minutos de lectura
Identificación de modelos de embeddings a partir de valores numéricos brutos
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
septiembre 09, 2025 • 11 minutos de lectura
Vectores multimodales en Llama.cpp y GGUF
Andrei Ungureanu
Alex C-G
Cartoon llama in the center of a white background, emitting laser-like beams from its eyes. The illustration creates a playfu
Fundación de búsqueda
Lector
Incrustaciones
reclasificador
Servicio de inferencia elástica
open_in_new
Obtener la clave API de Jina
Límite de velocidad
Estado de la API
Compañía
Sobre nosotros
Contactar con ventas
Sala de prensa
Programa de prácticas
Descargar el logotipo de Jina
open_in_new
Descargar el logotipo de Elastic
open_in_new
Términos
Seguridad
Términos y condiciones
Privacidad
Administrar cookies
email
Elástico © 2020-2026.