Elastic
Jina AI
Modèles
API
keyboard_arrow_down
Lecteur
Lisez les URL et effectuez des recherches sur le Web pour de meilleurs LLM de base.
Intégrations
Intégrations multimodales et multilingues.
Reclasseur
Outil de reclassement pour optimiser la pertinence des résultats de recherche.
Elastic Inference Service
Exécutez les modèles Jina nativement au sein d'Elasticsearch.
MCP
terminal
CLI
article
llms.txt
smart_toy
Agents
data_object
Schéma
menu_book
Documents
Se connecter
login
Le RAG en Contexte
Anatomie d'un système RAG
Installer les Prérequis
Se connecter à Mistral-Instruct via l'API Inference de Hugging Face
Récupération d'informations avec Qdrant et Jina Embeddings
Jina AI et Qdrant
Contactez-nous
Blog technique
mars 04, 2024

Construire un système RAG avec Jina Embeddings et Qdrant

Créer un système RAG avec Jina Embeddings v2, la base de données vectorielle Qdrant, LlamaIndex et le LLM Mistral.
Promotional graphic with "EMBEDDINGS 2" and Drant logo separated by a red cross, symbolizing a partnership.
Scott Martens • 13 minutes lues

La génération augmentée par recherche (RAG) est un ensemble de techniques en pleine expansion qui ont été initialement conçues comme une extension des grands modèles de langage (LLMs) mais sont de plus en plus considérées comme un paradigme alternatif qui réinvente entièrement le rôle des modèles d'IA.

Nous allons vous montrer comment créer un moteur RAG basique en utilisant le framework LlamaIndex, un LLM Mistral open-source, Jina Embeddings v2, et la base de données vectorielle Qdrant prête pour l'IA.

tagLe RAG en Contexte

Dans un système RAG, le rôle du modèle d'IA reste central mais beaucoup plus limité. Au lieu de répondre aux prompts à partir de ses connaissances internes, dérivées de ses données d'entraînement, il reçoit les informations pertinentes dans son prompt. Le rôle du modèle est alors de comprendre et de synthétiser ces informations en une sortie.

Cela exploite les points forts des modèles d'IA et minimise leurs faiblesses.

Par exemple, nous pourrions donner au modèle Mistral-Instruct le prompt suivant :

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

Quand j'ai fait cela, le modèle a répondu :

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.

Les grands modèles de langage sont coûteux à mettre à jour et à réentraîner, donc leurs informations internes ne peuvent jamais être totalement à jour.

De plus, les grands modèles de langage sont connus pour "halluciner", c'est-à-dire inventer des réponses plausibles qui peuvent être partiellement ou totalement incorrectes et qui doivent être vérifiées.

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.

Le TMZ de Weird Al Yankovic est sorti en 2011 sur l'album Alpocalypse et est une parodie de You Belong with Me de Swift.

La nature des réseaux neuronaux rend l'hallucination difficile, voire impossible, à prévenir complètement et compromet fortement tout projet d'utilisation des modèles d'IA comme sources d'information.

Selon les mots de Sam Altman, PDG d'OpenAI :

"Je pense que les gens font une grande erreur quand ils considèrent ces modèles [LLMs] comme une base de données. [...] Ça marchera, plus ou moins. Mais c'est la base de données la plus chère, la plus lente et la moins précise au monde."

Le RAG minimise la dépendance aux connaissances internes d'un modèle d'IA sur les faits du monde réel et tire parti de ses plus grands atouts : la compréhension du langage naturel et la génération fluide de langage.

Prenons un autre exemple de question à laquelle Mistral-Instruct ne peut pas répondre :

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.

Maintenant, un système RAG pourrait avoir une base de données d'articles d'actualité récents, ou peut-être rechercher sur Internet des textes liés au titre du prochain album de Taylor Swift. Ensuite, il insérerait les textes qu'il trouve dans le prompt.

Supposons qu'il identifie cet article AP comme pertinent pour la requête et construit le prompt suivant :

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 a répondu :

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

Ce type de prompting réduit aussi drastiquement la probabilité d'hallucinations. Par exemple :

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.

tagAnatomie d'un système RAG

Un système RAG comporte, au minimum, deux composants :

  • Un modèle d'IA génératif.
  • Un système de recherche d'information.

Dans cet article, nous utiliserons Mistral-Instruct comme modèle d'IA génératif et y accéderons via l'API d'inférence Hugging Face. Nous utiliserons la base de données vectorielle Qdrant et Jina Embeddings ensemble pour le système de recherche d'information.

Comme source de données, nous utiliserons le Plan Stratégique National de Recherche et Développement en Intelligence Artificielle - Mise à jour 2023, publié en mai 2023 par le Conseil National des Sciences et de la Technologie, un organisme qui conseille le Président américain sur les questions scientifiques et techniques. Ce document d'environ 25 000 mots est un document de politique et de planification stratégique pour la politique et le développement de l'IA américaine.

C'est aussi un exemple classique de document politique gouvernemental "trop long ; pas lu". La majeure partie est très ennuyeuse et, à moins d'avoir un intérêt direct ou un intérêt marqué dans ce domaine, vous ne le lirez probablement pas. Mais vous pourriez quand même vouloir savoir ce qu'il dit.

Cet article vous guidera à travers les étapes de création d'un système RAG capable de répondre aux questions sur le texte et son contenu.

tagInstaller les Prérequis

Tout d'abord, assurez-vous d'avoir installé toutes les bibliothèques Python pertinentes. Dans votre environnement Python, exécutez ce qui suit :

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]"

Nous utiliserons LlamaIndex pour construire un système RAG autour du modèle de langage Mistral-Instruct et pdfminer.six pour traiter le fichier PDF dans un magasin de vecteurs Qdrant.

tagSe connecter à Mistral-Instruct via l'API Inference de Hugging Face

Tout d'abord, configurez le LLM. Vous aurez besoin d'accéder à l'API Inference de Hugging Face, y compris un jeton d'accès. Si vous avez un compte Hugging Face, vous pouvez en obtenir un depuis votre page de paramètres de compte.

Si vous n'avez pas de compte, commencez par en créer un, puis créez un jeton d'accès.

Placez votre jeton dans une variable pour une utilisation future :

hf_inference_api_key = '<your HuggingFace Inference API token>'

Ensuite, nous construisons un modèle 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)

Ce modèle demande au LLM d'utiliser uniquement les informations contextuelles fournies dans le prompt pour répondre aux questions. Ce prompt a bien fonctionné pour nous avec Mistral-Instruct, mais vous pouvez expérimenter d'autres formulations pour voir ce qui convient à votre cas d'utilisation.

from llama_index.llms.huggingface import HuggingFaceInferenceAPI

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

Enfin, créez et initialisez un objet pour le framework LlamaIndex qui contient la connexion à Mistral-Instruct. Le code ci-dessous provient du précédent article sur la création de systèmes RAG utilisant LlamaIndex.

Cela place la connexion au LLM Mistral dans la variable mistral_llm.

tagRécupération d'informations avec Qdrant et Jina Embeddings

Pour configurer le système de récupération, vous aurez besoin d'une clé API Jina Embeddings. Vous pouvez en obtenir une gratuitement avec un budget prépayé d'un million de tokens sur le site web de Jina Embeddings.

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

Placez votre clé Jina Embeddings dans une variable pour une utilisation future :

jina_emb_api_key = "<your Jina Embeddings API key>"

Ensuite, créez un objet connecteur en utilisant LlamaIndex pour le serveur Jina Embeddings, en sélectionnant spécifiquement le modèle monolingue anglais :

from llama_index.embeddings.jinaai import JinaEmbedding

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

tagCharger les données textuelles

Ensuite, nous allons charger le document et le diviser en paragraphes. Tout d'abord, téléchargez le PDF depuis le site web de la Maison Blanche dans 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()

Ensuite, nous allons traiter le PDF page par page, extraire le texte puis le découper en paragraphes en séparant sur les doubles sauts de ligne. Ceux-ci sont stockés dans la liste 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))

Vérifiez que tout est chargé :

assert len(text_paras) == 615

Ensuite, nous allons convertir cette liste de textes courts en objets Document LlamaIndex :

from llama_index.core.readers import StringIterableReader

rag_docs = StringIterableReader().load_data(text_paras)

Et vous pouvez inspecter le texte :

print(rag_docs[0].text)

Résultat :

NATIONAL ARTIFICIAL INTELLIGENCE 
RESEARCH AND DEVELOPMENT 
STRATEGIC PLAN 
2023 UPDATE

tagConfigurer une base de données vectorielle Qdrant

Dans cet article, nous utiliserons le Qdrant Vector Search Cloud pour implémenter la base de données du système RAG. L'offre gratuite de Qdrant inclut 1 Go de stockage, ce qui est plus que suffisant pour ce tutoriel.

Vous devrez créer un compte sur le site web de Qdrant Cloud avant de continuer.

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

Une fois que vous avez un compte et que vous êtes connecté, vous devrez créer un cluster. Suivez les instructions de "démarrage rapide" sur le site web de Qdrant pour configurer un cluster gratuit et obtenir une API et le nom du serveur hôte 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

Stockez la clé et le nom d'hôte dans des variables :

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

Ensuite, nous devrons importer les composants pertinents des packages qdrant_client et 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")

Ceci crée une collection nommée NTSC dans votre cluster gratuit.

Vous pouvez consulter la documentation Qdrant pour plus d'informations sur la création d'un stockage de données local en mémoire ou sur disque et l'hébergement de votre propre instance de serveur Qdrant dans un conteneur docker via une API web.

tagCompléter le système RAG

Nous allons maintenant assembler ces composants en un système RAG complet en utilisant le code standard de 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,
)

Ce système utilisera Jina Embeddings pour indexer les paragraphes de notre source textuelle et placera les deux meilleures correspondances dans le contexte de chaque prompt. Pour passer aux trois meilleures correspondances par exemple, il suffit de modifier l'initialisation de VectorIndexRetriever ci-dessus pour avoir un paramètre similarity_top_k différent :

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

Le système est maintenant prêt à être utilisé.

tagInterroger un Document

Essayons une requête simple :

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

Le résultat (le vôtre peut être différent) :

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.

Ou quelque chose de plus spécifique :

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.

Ou même très spécifique :

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).

Vous pouvez également poser des questions plus fantaisistes :

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 et Qdrant

La fenêtre de contexte de 8k tokens de Jina Embeddings le rend particulièrement adapté à la génération augmentée par récupération car il peut travailler avec des blocs de texte beaucoup plus grands. Là où d'autres applications RAG doivent souvent stocker des phrases individuelles ou des paires de phrases, dans ce tutoriel, nous avons pu utiliser des paragraphes entiers sans nous soucier de leur taille.

Cela réduit le nombre d'éléments de texte qui doivent être stockés pour transporter la même information, réduisant les coûts de calcul, économisant la mémoire et rendant la récupération plus rapide.

La base de données vectorielle de Qdrant est simple à configurer, rapide et rentable, et comme vous l'avez vu, il ne faut que quelques lignes de Python pour l'intégrer dans un système RAG.

Pour en savoir plus sur la base de données prête pour l'IA et les offres cloud de Qdrant, vous pouvez visiter leur site 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

tagContactez-nous

Jina AI s'engage à apporter des technologies d'IA fiables et abordables aux entreprises de toute taille et de tout type. Nous aimerions en savoir plus sur vos cas d'utilisation et vous aider à intégrer l'IA dans vos processus métier. Pour plus d'informations sur les offres de Jina AI et pour nous contacter, consultez le site web de Jina AI ou rejoignez notre communauté sur 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
Catégories:
Blog technique
rss_feed

En savoir plus
mars 11, 2026 • 7 minutes lues
Bootstrapping Audio Embeddings from Multimodal LLMs
Han Xiao
Abstract illustration of a sound wave or heartbeat, formed by blue, orange, and gray dots on a white background.
mars 06, 2026 • 6 minutes lues
Identifying Embedding Models from Raw Numerical Values
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
septembre 09, 2025 • 11 minutes lues
Multimodal Embeddings in Llama.cpp and 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
Langue / thème actuel
Search Foundation
Lecteur
Intégrations
Reclasseur
Obtenir la clé API Jina
Limite de taux
À propos de nous
Nouvelles
Télécharger le logo Jina
open_in_new
Télécharger le logo Elastic
open_in_new
Statut de l'API
Elastic © 2026.Sécuritétermes et conditionsConfidentialitéGérer les cookiesNe vendez ni ne partagez mes informations personnelles
Ce site web et l'ensemble de son contenu, logiciels, produits et services sont destinés exclusivement à un usage professionnel. Leur utilisation par les consommateurs n'est ni prévue ni autorisée.