Est-il possible d’injecter des documents de taille moyenne (par exemple, jusqu’à 100 Ko) dans le contexte d’une session de bot de persona IA Discourse via l’invite système ?
CAS D’UTILISATION
Un Persona IA personnalisé lié à un LLM privé comme Llama3-8b dans une instance AWS où le coût est à l’heure, pas au token. c’est-à-dire que le nombre de tokens de requête/réponse n’a pas d’importance et le serveur dispose d’une puissance CUDA considérable, donc les performances sont bonnes. c’est-à-dire que le RAG pourrait être facultatif ?
(Cas d’utilisation alternatif : LLM Gemini.1.5, où il n’y a pas de frais pour les appels API)
OBJECTIF
Réduire les éléments mobiles dans le pipeline et améliorer la précision en évitant la récupération par similarité.
EXPÉRIENCE
Test informel de Persona IA avec Gemini 1.5 Pro où un document texte d’environ 20 000 tokens a été inséré dans l’invite système.
J’ai posé plusieurs questions dont je savais que les réponses se trouvaient uniquement dans le document. Il a répondu correctement à toutes les questions. J’en déduis donc qu’il a lu les 20 000 tokens de l’invite et les a analysés pour chaque question ?
Dans les cas où les sessions et le contenu du contexte ne sont pas trop volumineux, y a-t-il des inconvénients à cette approche ?
NOTE DE BAS DE PAGE - Supprimer le contexte de l’invite en milieu de session
Lorsque j’ai supprimé le contenu de l’injection d’invite en milieu de session et que j’ai continué à poser des questions, Gemini a continué à répondre correctement, mais après plusieurs questions, il n’a pas pu trouver le contexte et a échoué. Comme on pouvait s’y attendre, Gemini 1.5 peut conserver le contexte sur plusieurs tours de conversation dans une session, mais pas indéfiniment.
Toutes les réflexions, commentaires et conseils sont appréciés !
Oui, nous avons une logique de troncature qui dépend de la quantité de jetons autorisée par le LLM, nous avons défini le seuil assez haut pour les modèles gemini 1.5 (à 800k)
Cela devrait fonctionner, mais chaque interaction peut être très coûteuse.
Dans l’ensemble, j’ai constaté que limiter le contexte aide les modèles à rester plus concentrés, mais à long terme (dans 2 à 5 ans)… le RAG pourrait être inutile et nous aurons tellement de jetons et de concentration que cela n’aura pas d’importance.
Malgré mes questions sur le bourrage d’invites… J’adore vraiment le RAG.
À mon avis, le travail que vous faites avec les moteurs d’intégration de haut niveau est puissant et utile en ce moment… mais je suis aussi d’accord que le RAG… est peut-être voué à l’échec.
Comme l’a dit Sam Altman dans une récente interview… méfiez-vous des modèles économiques et des plans de projet qui entravent le LLM !! Nous vous écraserons ! ..ou quelque chose dans ce genre..
Alors finalement… peut-être voudrons-nous simplement donner nos affaires au LLM sans beaucoup de pipelines de prétraitement qui sont de faible dimension (entrée) puis de haute dimension (intégration) puis de faible dimension (invite) puis de haute dimension (inférence de transformateur) puis de faible dimension (sortie)… Bob est votre oncle !
Voici quelques informations sur le RAG par rapport au contexte long sur lesquelles je suis tombé… je ne l’ai pas encore tout écouté mais cela semble pertinent peut-être… (pas affilié à qui que ce soit dans cette vidéo :-))
J’ai regardé cette vidéo sur Llama3 à long contexte Gradient… elle nous rappelle que le contexte inclut tout ce qui est en jeu…
Entrée utilisateur
Sortie LLM
Jetons de contrôle
Instructions système
… au fur et à mesure que la fenêtre glisse, des éléments sont laissés de côté… mais ils ont mentionné qu’il peut y avoir une « protection » de l’invite système dans les sessions où la fenêtre de contexte est remplie…
il y a aussi les problèmes de « taille d’entrée maximale » et la « longueur de séquence » d’origine sur laquelle le modèle a été entraîné qui peuvent entrer en jeu.
ci-dessous un exemple de bourrage d’invite à long contexte en action…
En général, il semble possible de créer une équipe de personas d’IA Discourse qui ont chacun une grande partie de contenu spécialisé ou de base de code pour l’interrogation (en gardant à l’esprit la mise en garde concernant les coûts élevés lorsque l’on paie par jeton !)
Mais n’est-ce pas juste une version « statique » de RAG (très inefficace et) ?
Tout ce que RAG fait différemment de cette approche est de sélectionner et d’inclure des morceaux de contenu pertinents au lieu d’inclure tout le contenu.
Point juste, bien sûr… pas de réponse simple à mon avis
Je suppose que cela dépend du cas d’utilisation.
RAG fonctionne bien pour certaines applications, mais pour d’autres cas cibles assez déterministes (par exemple, questions/réponses clients, paiements, médical, etc.), moi et d’autres avons eu des problèmes pour obtenir une bonne précision avec la recherche vectorielle RAG au cours de la dernière année. Autrement dit, le bot manquera des choses ou en inventera (faible rappel, faible précision en termes de recherche d’information), ce qui est bien documenté par Stanford, Google, et autres.
La question se pose donc… pourquoi envoyer un tas de morceaux au LLM si on peut lui donner tout le corpus. Au moins avec l’injection de contexte, lorsque le LLM n’est pas précis, vous avez moins de choses à ajuster…
Ok, cela ne fonctionnera pas pour de vastes bibliothèques de documents/codes… mais pour des bases de contenu petites et modérées, cela semble très bien fonctionner jusqu’à présent… je travaille sur un projet qui teste cela formellement… ! Plus bientôt… merci
PS. → Pour rendre les choses encore plus intéressantes… j’ai eu de la chance avec l’injection de contexte + le fine-tuning… et il existe des approches émergentes qui combinent RAG et injection de contexte ! .. Etc etc.
Voici un test Q/R avec un livre blanc (~20k tokens) mis en contexte via injection de prompt vs RAG. (le contenu et les paramètres étaient aussi similaires que possible. LLM = Gemini-1.5-Pro)..
ANALYSE :
RAG est incohérent… trouve parfois la réponse, parfois la manque.
J’ai réussi à faire répondre le RAG aux questions du fichier téléchargé au début du document, et avec un peu de persuasion, il peut regarder le milieu et la fin… donc ce n’est pas un échec total… mais c’est incohérent… de manière constante, ou plus difficile à utiliser selon moi : )
Voici le fichier de test au cas où quelqu’un voudrait l’essayer :
Le fichier contient ces « aiguilles » de BME haystack qui sont garanties uniques, c’est-à-dire qu’elles ne sont pas présentes dans des copies externes de l’article sur Internet.
Début :
Relecteur : Felonius Monko
Milieu :
Note de l’éditeur : La série de stabilité de Goldich a été découverte par Maurice Goldrch. Alors que l’ordre original de potentiel d’altération minérale de Goldich était qualitatif, des travaux ultérieurs de Michal Kowalski et J. Donald Rimstidt l’ont placé dans la série en termes quantitatifs. Merci au Dr Gomez Pyle de la NMU pour cette clarification.
Fin :
Dang, S. et al. Cryo-EM structures of the TMEM16A calcium-activated chloride channel. Nature 552, 426429 (2017).
J’ai pu relancer le test ci-dessus avec GPT4o (contexte de 128k), en veillant à utiliser des paramètres de jetons / morceaux importants. Mais c’est toujours très instable pour mon cas d’utilisation de questions/réponses pour livre blanc (perdu au milieu, perdu à la fin, etc.). Voici mes paramètres si quelqu’un souhaite reproduire et affiner. J’adorerais que nous trouvions les bons paramètres pour ce cas :
|PERSONNALITÉ IA PERSONNALISÉE|
|—|—|
|||
|Activé ?|Oui|
|Priorité|Oui|
|Autoriser le chat|Oui|
|Autoriser les mentions|Oui|
|Vision activée|Non|
|||
|Nom|Rag Testing Bot 3|
|Description|Tester l’injection de prompt RAG vs contexte long|
|Modèle linguistique par défaut|GPT-4o-custom|
|Utilisateur| Rag_Testing_Bot_bot|
|Commandes activées|Catégories, Lire, Résumé|
|Groupes autorisés|trust_level_4|
|||
|Prompt système|Répondez aussi complètement que possible à partir du contexte fourni sur la recherche sur l’élimination du carbone d’Equatic dans le fichier ci-joint. N’inventez pas de contenu. N’utilisez pas de contenu extérieur à cette session. Concentrez-vous sur le contenu fourni et créez des réponses à partir de celui-ci aussi précisément et complètement que possible.|
|||
|Posts de contexte max|50|
|Température|0.1|
|Top P|1|
|||
| ||
|Téléchargements| Equatics-paper1-with-unique-haystack-needles-v116.txt|
|||
|Jetons de morceau de téléchargement|1024|
|Jetons de chevauchement de morceau de téléchargement|10|
|Morceaux de conversation de recherche|10|
|Modèle linguistique pour le consolidateur de questions|GPT-4o-custom|
|||
|BOT PERSONNALISÉ||
|||
|Nom à afficher|GPT-4o-custom||
|||
|Nom du modèle|gpt-4o||
|||
|Service hébergeant le modèle|OpenAI|
|URL du service hébergeant le modèle|https://api.openai.com/v1/chat/completions|
|Clé API du service hébergeant le modèle|D20230943sdf_fake_Qqxo2exWa91||
|||
|Tokeniseur|OpenAITokenizer|
|Nombre de jetons pour le prompt|30000|