Gen Ai - Exemples Springboot / Langchain4J
L'IA générative fait référence à un sous-ensemble de l'intelligence artificielle qui peut générer de nouveaux contenus basés sur des données d'entrée. Cela englobe des modèles capables de créer du texte, des images, de la musique et même des vidéos. Des exemples d'IA générative incluent des modèles de langage tels que GPT-3 et DALL-E d'OpenAI, qui peuvent respectivement générer du texte et des images de type humain à partir de descriptions textuelles.
Les modèles d’IA générative sont généralement formés sur de vastes ensembles de données et utilisent des techniques d’apprentissage en profondeur pour apprendre les modèles et les structures des données. Ils ont un large éventail d’applications, notamment :
- Traitement du langage naturel (NLP) : génération de texte de type humain pour les chatbots, les traductions et la création de contenu.
- Arts créatifs : création d’œuvres d’art, de musique et d’éléments de design.
- Augmentation des données : génération de données supplémentaires pour la formation d'autres modèles d'apprentissage automatique.
- Soins de santé : assistance à l’imagerie médicale et création de plans de traitement personnalisés.
Comment l'API LangChain4J Gen AI aide les développeurs à créer des applications Spring Boot AI
LangChain4J est une bibliothèque Java conçue pour simplifier l'intégration de grands modèles de langage (LLM) et de fonctionnalités d'IA dans les applications Java, y compris celles créées avec Spring Boot. Voici comment cela aide les développeurs :
- API unifiée pour les LLM : LangChain4J fournit une API unifiée qui prend en charge plusieurs fournisseurs LLM comme OpenAI et Google Vertex AI. Cette abstraction permet aux développeurs de basculer entre différents LLM sans modifier de manière significative leur base de code.
- Intégration du magasin d'intégration : il s'intègre à divers magasins d'intégration, permettant une gestion efficace des données vectorisées. Ceci est particulièrement utile pour les tâches de génération augmentée par récupération (RAG), où les informations pertinentes sont extraites d'une base de connaissances pour améliorer les réponses de l'IA.
- Boîte à outils de fonctionnalités : la bibliothèque comprend un ensemble complet d'outils pour la création de modèles d'invites, la gestion de la mémoire et l'analyse des résultats. Ces outils aident à créer des applications d'IA complexes en fournissant des abstractions de haut niveau et des composants prêts à l'emploi.
- Intégration de Spring Boot : LangChain4J prend en charge Spring Boot, permettant aux développeurs de créer plus facilement des applications d'IA robustes et évolutives. L'intégration permet une intégration transparente des services d'IA dans les applications Spring Boot, en tirant parti des fonctionnalités d'injection de dépendances et de gestion de configuration de Spring.
- Exemples et documentation : LangChain4J propose une documentation et des exemples complets, guidant les développeurs à travers divers cas d'utilisation et démontrant comment implémenter des fonctionnalités basées sur l'IA dans leurs applications.
Étude de cas : Application de soins de santé - Microservices de diagnostic activés par Gen Ai
Exemples Gen AI : comparaison de 8 LLM (3 basés sur le cloud et 5 locaux) sur les fonctionnalités d'entreprise
La comparaison suivante est basée sur les fonctionnalités disponibles dans l'API LangChain4J (prise en charge par OpenAI ChatGPT). Ces fonctionnalités sont essentielles pour le développement d’applications d’entreprise basées sur Gen AI.
# | Exemple | GPT4o | Méta Lama3 | Mistral | Microsoft Phi-3 | Google Gemme | TII Faucon 2 | Claude 3 | Gémeaux 1.5 |
---|
1. | Bonjour le monde | ? | ? | ? | ? | ? | ? | ? | ? |
2. | Monde complexe | ? | ? | ? M1 | ? | ? | ? | ? | ? |
3. | Données personnalisées | ? | ? | ? | ? | ? | ? F1 | ? | ? |
4. | Génération d'images | ? | ? L1 | ? M2 | ? P1 | ? | ? F2 | ? | ? |
5. | Modèle d'invite | ? | ? | ? M3 | ? | ? | ? | ? | ? |
6. | Outils | ? | ? L2 | ? M4 | ? P2 | ? G1 | ? F3 | ? | ? G1 |
7. | Mémoire de discussion | ? | ? | ? | ? P3 | ? G2 | ? | ? | ? G2 |
8. | Peu de tirs | ? | ? | ? M5 | ? | ? | ? | ? | ? G3 |
9. | Traducteur de langue | ? | ? | ? M6 | ? | ? | ? | ? | ? |
10. | Analyseur de sentiments | ? | ? | ? | ? | ? | ? | ? | ? |
11. | Extracteur de données | ? O1 | ? L3 | ? M7 | ? P4 | ? G3 | ? F4 | ? | ? G4 |
12. | Magasin persistant | ? | ? | ? M8 | ? P5 | ? G4 | ? | ? | ? |
Exemples de génération augmentée de récupération (RAG) de 8 LLM
# | Exemple | GPT4o | Méta Lama3 | Mistral | Microsoft Phi-3 | Google Gemme | TII Faucon 2 | Claude 3 | Gémeaux 1.5 |
---|
51. | Simple | ? | ? | ? | ? | ? | ? | ? | ? |
52. | Segments | ? | ? | ? | ? | ? | ? | ? | ? |
53. | Transformateur de requête | ? | ? | ? | ? | ? | ? | ? | ? |
54. | Routeur de requêtes | ? | ? L4 | ? M9 | ? P6 | ? G4 | ? F5 | ? | ? G5 |
55. | Reclassement | ? | ? | ? | ? | ? | ? | ? | ? |
56. | Métadonnées | ? | ? | ? | ? | ? | ? | ? | ? |
57. | Récupérateurs de contenu multiples | ? | ? | ? | ? | ? | ? | ? | ? |
58. | Ignorer la récupération de contenu | ? | ? | ? | ? | ? | ? | ? | ? |
59. | Application de soins de santé | ? | ? | ? | ? | ? | ? | ? | ? |
Meilleurs classements LLM basés sur les fonctionnalités d'entreprise
# | Rang | Entreprise | LLM | Score | Catégorie |
---|
1 | 1 | Anthropique | Claude 3 Haïku | 21/21 | Nuage |
2 | 2 | IA ouverte | Chat GPT 4o | 20/21 | Nuage |
3 | 3 | Méta | Lama 3 | 17/21 | Locale |
4 | 4 | TII | Faucon 2 | 16/21 | Locale |
5 | 4 | Google | Gémeaux 1.5 Pro | 16/21 | Nuage |
6 | 4 | Google | Gemme | 16/21 | Locale |
7 | 5 | Microsoft | DPS 3 | 15/21 | Locale |
8 | 6 | Mistral | Mistral | 21/12 | Locale |
Remarque : les LLM basés sur le cloud prendront en charge plus de 500 milliards de paramètres, tandis que les LLM locaux sont principalement basés sur 8 milliards de paramètres.
Découvrez plus de détails sur les résultats des tests
Installer des LLM locaux
Pour installer les LLM locaux à l'aide d'Ollama
- Méta Lama3
- Google Gemme
- MicrosoftPHI-3
- TII Faucon 2
- Mistral
- Assistant Mathématiques
Consultez le guide d'installation.
Obtenez les clés pour tester les LLM Cloud
Inscrivez-vous pour obtenir les clés API
- Open AI - ChatGPT (la clé API peut être créée ici : https://platform.openai.com/api-keys)
- Anthropic - Claude 3 (la clé API peut être créée ici : https://console.anthropic.com/settings/keys)
- Google Cloud - (https://console.cloud.google.com/ - Consultez AiConstants.java pour obtenir des instructions)
- Cohere - (Clé API ici : https://dashboard.cohere.com/welcome/register)
- HuggingFace - (Clé API ici : https://huggingface.co/settings/tokens)
- Rapid - (clé API ici : https://rapidapi.com/judge0-official/api/judge0-ce)
Définissez ces clés dans votre environnement
// API Keys -----------------------------------------------------------------------
// OpenAI API key here: https://platform.openai.com/account/api-keys
public static final String OPENAI_API_KEY = System.getenv("OPENAI_API_KEY");
// Cohere API key here: // https://dashboard.cohere.com/welcome/register
public static final String COHERE_API_KEY = System.getenv("COHERE_API_KEY");
// Anthropic API key here:: https://console.anthropic.com/settings/keys
public static final String ANTHROPIC_API_KEY = System.getenv("ANTHROPIC_API_KEY");
// HuggingFace API key here: https://huggingface.co/settings/tokens
public static final String HF_API_KEY = System.getenv("HF_API_KEY");
// Judge0 RapidAPI key here: https://rapidapi.com/judge0-official/api/judge0-ce
public static final String RAPID_API_KEY = System.getenv("RAPID_API_KEY");
Gen AI – Structure du package de code
Package io.fusion.air.microservice.ai.genai
- contrôleurs (Rest Endpoints pour tester les exemples)
- cœur
- assistants (Basé sur LangChain4J AiService)
- models (Modèles de données utilisés dans le code)
- invites (invites structurées pour avoir des sorties spécifiques)
- services (LLM Specific Business Logic réutilisée dans tous les exemples.)
- outils (fonctions invoquées en fonction de la recherche LLM)
- exemples (Claude 3, Falcon 2, GPT 4o, Gemini, Gemma, Llama3, Mistral, Phi-3, Wizard Math)
- utils (code générique pour créer des modèles et des configurations ChatLanguage, des clés API et un exécuteur de console)
Structure du code
Test rapide après le démarrage de l'application SpringBoot
Analyse des sentiments à l'aide de ChatGPT 4o
Modération de contenu à l'aide de ChatGPT 4o
ChatBot utilisant RAG (données personnalisées) - Étude de cas : service de location de voitures
Architecture RAG
La génération de récupération augmentée (RAG) améliore la sortie des grands modèles de langage (LLM) en incorporant des bases de connaissances externes faisant autorité. Alors que les LLM sont formés sur de vastes ensembles de données et utilisent des milliards de paramètres pour générer des réponses à des tâches telles que la réponse aux questions, la traduction et la complétion de textes, RAG optimise ces résultats en référençant des sources d'informations spécifiques et à jour au-delà des données de formation du modèle. Ce processus étend considérablement les capacités des LLM pour répondre à des domaines spécialisés ou aux connaissances internes d'une organisation sans nécessiter de recyclage du modèle. Par conséquent, RAG fournit une solution rentable pour garantir que le contenu généré reste pertinent, précis et contextuellement approprié.
Les grands modèles linguistiques (LLM) sont confrontés à plusieurs défis :
- Ils peuvent fournir de fausses informations s’il leur manque la bonne réponse.
- Ils peuvent fournir des informations obsolètes ou génériques lorsque des réponses spécifiques et actuelles sont attendues par l'utilisateur.
- Ils peuvent générer des réponses basées sur des sources ne faisant pas autorité.
- Ils peuvent produire des réponses inexactes en raison de la confusion terminologique, où différentes sources de formation utilisent les mêmes termes pour décrire différents concepts.
La génération de récupération augmentée (RAG) répond à plusieurs défis associés aux LLM en demandant au modèle de récupérer des informations pertinentes à partir de sources de connaissances faisant autorité et prédéterminées. Cette approche permet aux organisations d'exercer davantage de contrôle sur le contenu généré par le modèle, garantissant ainsi l'exactitude et la pertinence. De plus, il fournit aux utilisateurs des informations plus claires sur les sources et les processus utilisés par le LLM pour formuler ses réponses.
Conversation utilisant LLM avec (données personnalisées) contrat de service de location de voiture
Extractions de données à l'aide de ChatGPT 4o
LangChain4J fonctionne sur deux niveaux d'abstraction :
- Niveau bas. À ce niveau, vous avez le plus de liberté et d'accès à tous les composants de bas niveau tels que ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding, etc. Ce sont les « primitives » de votre application propulsée par LLM. Vous avez un contrôle total sur la façon de les combiner, mais vous devrez écrire plus de code de colle.
- Haut niveau. À ce niveau, vous interagissez avec les LLM à l'aide d'API de haut niveau comme AiServices et Chains, ce qui vous cache toute la complexité et le passe-partout. Vous avez toujours la possibilité d'ajuster et d'affiner le comportement, mais cela se fait de manière déclarative.
Lire la suite... LangChain4J Introduction
Structure du paquet
Pré-requis
- SpringBoot 3.2.4
- Java22
- Jakarta EE 10 (jakarta.servlet. , jakarta.persistence. , javax.validation.*)
- Base de données PostgreSQL 14
- Ollama 0.1.38
Par défaut, l'application utilisera la base de données H2 In-Memory. Aucune configuration de base de données requise pour cela.
Étape 1.1 - Mise en route
- clone git https://github.com/arafkarsh/ms-springboot-324-ai.git
- cd ms-springboot-324-ai
- base de données de CD
- Lisez le README.md pour configurer votre base de données (base de données PostgreSQL)
- Par défaut (mode Dev), l'application utilisera la base de données In-Memory H2
Étape 1.2 - Compiler (Une fois votre code prêt)
1.2.1 Compiler le code
Exécutez la "compilation" depuis ms-springboot-324-ai
- compile OR ./compile (fonctionne sous Linux et Mac OS)
- mvn propre; paquet mvn -e ; (Toutes les plateformes)
- Utilisez les options de compilation IDE
1.2.2 Ce que fera le script "Compile"
- Nettoyer le dossier cible
- Générez le numéro de build. et date de build (prend la sauvegarde application.properties)
- construire le pot de graisse SpringBoot de sortie finale et le pot mince maven
- copiez les fichiers jar (et les dépendances) dans le dossier src/docker
- copiez le fichier application.properties dans le dossier actuel et le dossier src/docker
À l'étape 1.2.2, le fichier application.properties sera généré automatiquement par le script « compiler ». Il s’agit d’une étape cruciale. Sans le fichier application.properties généré, le service ne fonctionnera PAS. Il existe un fichier de propriétés d'application prédéfini.
Étape 1.3 - Exécuter
1.3.1 Démarrer le service
- run OR ./run (fonctionne sous Linux ou Mac OS)
- exécuter prod (pour exécuter le profil de production, la valeur par défaut est le profil dev)
- mvn spring-boot:run (Toutes les plates-formes - Base de données en mémoire Profile dev H2)
- mvn spring-boot:run -Dspring-boot.run.profiles=prod (Toutes les plateformes - Profile prod PostgreSQL DB)
1.3.2 Tester le service
- test OU ./test (fonctionne sous Linux ou Mac OS)
- Exécutez les commandes curl directement (à partir du script de test)
Modèles de discussion
- OpenAI (Exemples disponibles)
- Ollama - exécutez des modèles d'IA sur votre machine locale (exemples disponibles)
- Azure Open AI
- Socle amazonien
- Commandement de Cohere
- Jurassic-2 d'AI21 Labs
- Le Lama 2 de Meta
- Le Titan d'Amazon
- Google Vertex AI Palm
- Google Gémeaux
- HuggingFace - accédez à des milliers de modèles, y compris ceux de Meta comme Llama2
- MistralAI
Modèles de texte en image
- OpenAI avec DALL-E (exemples disponibles)
- StabilitéIA
Modèles de transcription (audio vers texte)
Intégration de modèles
- OpenAI
- Ollama
- Azure OpenAI
- ONNX
- PostgresML
- Cohérence du substrat rocheux
- Titan du substrat rocheux
- Google VertexAI
- IA Mistal
L'API Vector Store offre la portabilité entre différents fournisseurs, avec une nouvelle API de filtrage des métadonnées de type SQL qui maintient la portabilité.
Bases de données vectorielles
- Recherche de vecteurs Azure
- Chroma
- Milvus
- Néo4j
- PostgreSQL/PGVector
- Pomme de pin
- Rédis
- Tisser
- Qdrant
Les modèles pris en charge sont
- OpenAI
- Azure OpenAI
- SommetAI
- Mistral IA
Découvrez les exemples d'opérations CRUD
- Configuration de Postman avec des points de terminaison REST pour les tests
- Exemples de CRUD
- Exemples de jetons JWT
Vérifiez le CRUD_Examples.md
(C) Copyright 2024 : Licence Apache 2 : Auteur : Araf Karsh Hamid
* Sous licence Apache, version 2.0 (la « Licence »);
* vous ne pouvez pas utiliser ce fichier sauf en conformité avec la Licence.
* Vous pouvez obtenir une copie de la licence à
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Sauf si requis par la loi applicable ou convenu par écrit, le logiciel
* distribué sous la Licence est distribué sur une BASE "EN L'ÉTAT",
* SANS GARANTIE NI CONDITIONS D'AUCUNE SORTE, expresses ou implicites.
* Voir la licence pour connaître la langue spécifique régissant les autorisations et
* limitations en vertu de la licence.