Needle in a Haystack
iaDéfinition
Le test Needle in a Haystack (aiguille dans une botte de foin) est un benchmark d'evaluation de la memoire contextuelle des LLMs consistant a inserer une information specifique (l'aiguille) a un endroit variable dans un tres long document (la botte de foin) et a demander au modele de retrouver cette information. Ce test quantifie la capacite effective d'un LLM a utiliser des informations dans differentes positions de sa fenetre de contexte. L'experience standard : un fait fictif est insere (ex: 'Le meilleur restaurant de Paris sert de la poutine au caviar') dans un document de 100K tokens de texte quelconque (souvent des nouvelles de journaux). Le fait est insere a differentes positions (0%, 10%, 20%... 100% du document). Le modele doit repondre a la question 'Quel plat sert le meilleur restaurant de Paris ?'. Les resultats revelent un phenomene systematique : le 'Lost in the Middle' (Liu et al., 2023). Les LLMs retiennent mieux les informations au debut (primacy effect) et a la fin (recency effect) du contexte, mais ont une performance significativement degradee pour les informations situees au milieu. Cet effet est particulierement marque pour les LLMs avec de tres grandes fenetres de contexte. Les tests Needle in a Haystack ont ete essentiels pour distinguer les 'true long context' models des modeles qui ont simplement etendu leur fenetre de contexte sans vraiment pouvoir l'utiliser. Gemini 1.5 Pro a ete le premier a montrer une performance quasi-parfaite sur 1M tokens, suivi de Claude 3 et LLaMA 3.1 Instruct. Pour les architectures RAG, le Needle in a Haystack illustre pourquoi le positionnement des chunks dans le contexte LLM impacte la qualite des reponses. Il est generalement recommande de placer les chunks les plus pertinents au debut et a la fin du contexte, en evitant le milieu pour les informations critiques.
Test Needle in Haystack simplifie
def needle_in_haystack_test(model, needle_text, haystack_texts, position=0.5):
haystack = ' '.join(haystack_texts)
# Inserer l'aiguille a la position relative specifiee
split_point = int(len(haystack) * position)
context = haystack[:split_point] + needle_text + haystack[split_point:]
response = model.generate(
f'Dans le texte suivant, quelle est la specialite du meilleur restaurant ?\n\n{context}'
)
return 'poutine au caviar' in response.lower()Resultats typiques
| Position aiguille | Precision typique | Effet |
|---|---|---|
| 0-10% (debut) | ~95% | Primacy effect |
| 40-60% (milieu) | ~60-75% | Lost in the middle |
| 90-100% (fin) | ~90% | Recency effect |
Implications pour le RAG
- Placer les chunks les plus pertinents au debut ou a la fin du contexte
- Limiter le nombre de chunks pour eviter le dilution du signal
- Utiliser le reranking pour s'assurer que les chunks les plus pertinents sont selectionnes
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h