Auteur: Sven Loesekann
Technologies: Angular, Angular-CLI, Angular-Material, TypeScript, Spring Boot, Spring AI, Openai, Olllama, PostgreSQL (Vector, HSTORE), Liquibase, JPA, Gradle, Java
Ceci est un projet pour montrer comment utiliser Springai pour discuter avec les documents d'une bibliothèque. Le document peut être téléchargé est ensuite stocké dans une base de données normale et vectorielle. L'IA est utilisée pour créer des intégres à partir des morceaux des documents stockés dans la base de données vectorielle. Dans le chat, des questions peuvent être posées qui sont transformées en intégres et sont utilisées pour les demandes de la base de données vectorielle. Le vecteur de document avec la distance la plus basse est utilisé pour charger le document de la base de données et demander une réponse à l'IA en fonction des jetons de contenu du document. Cela permet à l'IA de générer la réponse en fonction du contenu du document et limite les hallucinations. Un lien vers le document source est fourni pour des recherches supplémentaires.
Le projet utilise Spring Boot avec Spring AI pour accéder à OpenAI et à la base de données vectorielle. La DB PostgreSQL est utilisée avec les extensions vectorielles, hstore et uuid-osp. Liquibase est utilisé pour gérer les migrations de la base de données. JPA est utilisé pour l'accès à la base de données dans les services par les contrôleurs de repos. Pour le frontend angulaire, le matériau angulaire et le dactylographie sont utilisés pour créer le tableau des documents, la boîte de dialogue de téléchargement et le chat de document. Angular CLI est utilisé pour la construction Frontend et Gradle pour la construction du projet.
Olllama est utilisé pour utiliser des modèles AI / LLM exécutés localement. Olllama peut être installé ou exécuté comme une image Docker dans une machine locale. Olllama prend en charge une bibliothèque de modèles AI / LLM pour différents cas d'utilisation. Des modèles comme Llava pour la description de l'image, Falcon pour la réponse à la question basée sur les chiffons, SQLCoder pour la génération SQL et Mixtral pour l'appel de fonction peuvent être utilisés. Olllama peut utiliser des GPU s'ils sont disponibles et fonctionnent sur CPU sans eux. Spring AI a une prise en charge d'Olllama qui rend l'utilisation similaire à l'utilisation d'un service d'IA. Sur les processeurs actuels, il y a souvent des problèmes de performances. Les fournisseurs de processeurs souhaitent ajouter des moteurs d'IA à leurs CPU à l'avenir pour résoudre ces problèmes.
Le projet utilise Spring Boot avec Spring AI pour remettre en question une base de données d'image qui utilise PostgreSQL avec l'extension PGVector et Olllama. Les images pour les images importées et redimensionnées sont des descriptions générées avec le modèle LLAVA qui s'exécute localement sur Olllama. Ces descriptions sont transformées en intégres et sont stockées avec la description dans la base de données vectorielle. L'image et les métadonnées sont stockées dans la base de données relationnelle. Une question à la base de données d'images est transformée en intégres et la base de données vectorielle est interrogée pour le voisin le plus proche. Les meilleures correspondances sont retournées avec l'image et la description. Le résultat est affiché dans le frontend. Ceci est un nouveau type de recherche d'image qui n'était pas possible avant que AI / LLMS ne devienne utilisable.
Le projet utilise Spring AI pour tourner les questions avec un LLMS en requêtes SQL et afficher le résultat dans le frontend. Sur la base des métadonnées fournies pour l'ensemble de données relationnel, le LLM est capable de créer des incorporations pour les métadonnées des tables et des colonnes. Le projet crée également des intégres pour que le contenu de certaines colonnes puisse décider si la colonne doit être utilisée comme jointure dans la requête SQL. Avec ces métadonnées d'intégration, le LLM est en mesure de tourner une question dans une requête SQL raisonnable et d'afficher le résultat dans le frontend. Le frontend utilise une table de matériaux angulaires avec une quantité flexible de colonnes et de lignes.
Le projet utilise Spring IA pour transformer les questions sur les livres en un appel de fonction de repos à l'API OpenLibrary. Il utilise le modèle LLAMA3.1 et l'API d'appel de la fonction Spring AI. La réponse de l'API est utilisée pour créer la réponse.
Le projet utilise Spring IA pour générer des classes de test. Pour ce faire, la classe à tester est fournie et les classes que la classe à tester dépend. Une classe d'exemple de test peut également être fournie. L'AI / LLM basé sur Olllama obtient ensuite une invite avec toutes les informations et génère une ébauche de la source de la classe de test.
Le projet utilise Spring IA pour générer des résumés de livres. Pour générer les résumés, les en-têtes du chapitre et la rubrique après le dernier chapitre doivent être fournies. Ensuite, des résumés des chapitres sous forme de puces sont générés. Un résumé du livre est créé des résumés du chapitre.
Le projet montre comment utiliser Spring IA pour générer des réponses en fonction d'un ensemble de documents fournis avec un lien vers la source. Le frontend angulaire fournit l'interface utilisateur pour le backend et montre les réponses.
Le projet montre comment utiliser Spring IA pour générer des descriptions pour les images téléchargées et pour stocker l'image, les descriptions et les incorporations de description dans la base de données. Les questions posées à la base de données d'images sont transformées en intégres et les meilleures descriptions d'ajustement avec les images sont renvoyées. Le frontend angulaire fournit une interface utilisateur pour afficher le résultat et télécharger les images.
Le projet montre comment utiliser Spring AI pour générer des requêtes SQL en fonction des métadonnées fournies pour les tables / colonnes. Le frontend angulaire fournit une interface utilisateur pour afficher le résultat dans le tableau.
Le projet montre comment utiliser Spring AI pour sélectionner une interface de repos pour appeler et pour fournir les paramètres pour l'appel de repos. Le frontend angulaire fournit l'interface utilisateur pour poser la question et afficher le résultat de l'appel de repos.
Le projet montre comment utiliser Spring IA pour créer une base de données d'images qui peut être interrogée avec des questions en langage naturel et renvoie les images correspondantes les plus proches avec leurs descriptions.
Spring AI rend l'utilisation des services OpenAI / OLLAMA simples et utiles et ce projet le démontre.
Le projet a un diagramme de contexte système, un diagramme de conteneurs et un diagramme de composants. Les diagrammes ont été créés avec Structurizr. Le fichier runstructurizr.sh contient les commandes pour utiliser Structurizr et le répertoire structurizr contient le fichier DSL.
Dans le répertoire Helm se trouve une configuration Kubernetes pour exécuter le projet AidocumentLibraryChat avec Minikube. Le graphique de la barre déploie la base de données Postgres et le AidocumentLibraryChat avec les paramètres nécessaires (SpringProfile est en valeurs.yaml) à exécuter. Il utilise la prise en charge de la limite de ressources de JDK 16 pour limiter la mémoire. Kubernetes limite l'utilisation du processeur et utilise les startupprobes et lesprobes de LivelyProbes que l'actionneur de printemps fournit.
Dans le fichier runPostgreSQL.sh se trouvent les commandes pour extraire et exécuter l'image PostgreSQL Docker avec une extension vectorielle localement.
Pour obtenir la clé API OpenAI, vous devez créer un compte sur https://platform.openai.com et créer une clé dans les paramètres utilisateur. Cette clé doit être ajoutée dans l'application.properties à la clé: «printemps.ai.openai.api-key». Comme alternative, il peut être fourni comme variable d'environnement «ouverte-clés».
Olllama peut exécuter le modèle AI localement. Le fichier runollama.sh a les commandes pour l'exécuter en tant que conteneur Docker. L'application doit être construite avec la propriété «useollama = true» gradle build pour inclure les dépendances. L'application doit être démarrée avec le profil «Olllama» pour activer les configurations / fonctionnalités pour utiliser les modèles basés sur Olllama. Olllama soutient l'accélération du GPU.
PostgreSQL avec extension vectorielle 0.5.1 ou plus récent
Java 21 ou plus récent
Gradle 8.3 ou plus récent
Nodejs 18.13.x ou plus récent
NPM 8.19.x ou plus récent
CLI angulaire 17 ou plus récent