# ChatGPT with Retrieval-Augmented-Generation ## Contexte * Création d'un équivalent à ChatGPT à partir d'un corpus de documents internes à une entreprise. * Limites de ChatGPT : hallucinations, imprécisions sur des questions spécifiques, sources... * [Workshop](https://moaw.dev/workshop/?src=gh:Azure-Samples/azure-openai-rag-workshop/docs/workshop-java-quarkus.md) ## Prérequis * Compte Azure (pour déploiement) \[Optionnel\] * Client HTTP (ex: curl) * Connaissances de base en Quarkus * devcontainer (intégré à VSCode pour avoir tout l'environnement de travail opérationnel) * Ollama (outil pour exécuter des LLM en local) ## Architecture  ## Retrieval-Augmented Generation * Combinaison de 2 approches : "retrieval-based methods" et "generative models" * Génération de réponses contextuellement cohérentes et plus riches en informations * Création d'un "embedding" qui sera comparé aux données dans la BDD vectorielle * Prompt enrichi avec le contexte et les informations des documents sélectionnés ## Utilisation de Ollama * Met à disposition un ensemble de LLM pour les faire tourner en local * Nécessite beaucoup de puissances de calcul (optimisation GPU possible) * J'ai pas réussi à le faire tourner sur ma machine ;( mais c'est prometteur ## BDD vectorielle * Ingestion de données : extraction des informations à partir de documents PDF * Traitement pour associer à chaque fragment de texte un vecteur, qui va correspondre à la pertinence de cette information par rapport à une demande * Plusieurs alternatives avec LangChain4j (ici on utilise [Qdrant](https://qdrant.tech/)) ## Chat API * ModelProducer : utilisation du LLM souhaité  * ChatResource : endpoint contenant tous les éléments pour la conversation (prompt, enrichissement par les documents, génération des réponses)