Gen Ai – Springboot/Langchain4J-Beispiele
Generative KI bezeichnet eine Teilmenge der künstlichen Intelligenz, die auf Basis von Eingabedaten neue Inhalte generieren kann. Dazu gehören Modelle, die Texte, Bilder, Musik und sogar Videos erstellen können. Beispiele für generative KI sind Sprachmodelle wie GPT-3 und DALL-E von OpenAI, die aus Textbeschreibungen menschenähnliche Texte bzw. Bilder generieren können.
Generative KI-Modelle werden typischerweise auf riesigen Datensätzen trainiert und nutzen Deep-Learning-Techniken, um Muster und Strukturen in den Daten zu lernen. Sie haben ein breites Anwendungsspektrum, darunter:
- Natural Language Processing (NLP): Generieren von menschenähnlichem Text für Chatbots, Übersetzungen und Inhaltserstellung.
- Kreative Künste: Erstellen von Kunstwerken, Musik und Designelementen.
- Datenerweiterung: Generieren zusätzlicher Daten zum Trainieren anderer Modelle des maschinellen Lernens.
- Gesundheitswesen: Unterstützung bei der medizinischen Bildgebung und Erstellung personalisierter Behandlungspläne.
Wie die LangChain4J Gen AI API Entwicklern beim Erstellen von Spring Boot AI-Apps hilft
LangChain4J ist eine Java-Bibliothek, die die Integration großer Sprachmodelle (LLMs) und KI-Funktionen in Java-Anwendungen, einschließlich solcher, die mit Spring Boot erstellt wurden, vereinfachen soll. So hilft es Entwicklern:
- Einheitliche API für LLMs: LangChain4J bietet eine einheitliche API, die mehrere LLM-Anbieter wie OpenAI und Google Vertex AI unterstützt. Diese Abstraktion ermöglicht es Entwicklern, zwischen verschiedenen LLMs zu wechseln, ohne ihre Codebasis wesentlich zu ändern.
- Einbettungsspeicher-Integration: Die Integration mit verschiedenen Einbettungsspeichern ermöglicht die effiziente Verarbeitung vektorisierter Daten. Dies ist besonders nützlich für RAG-Aufgaben (Retrieval-Augmented Generation), bei denen relevante Informationen aus einer Wissensdatenbank abgerufen werden, um KI-Reaktionen zu verbessern.
- Toolbox mit Funktionen: Die Bibliothek enthält einen umfassenden Satz an Tools für die Erstellung von Eingabeaufforderungsvorlagen, die Speicherverwaltung und die Ausgabeanalyse. Diese Tools helfen beim Aufbau komplexer KI-Anwendungen, indem sie Abstraktionen auf hoher Ebene und gebrauchsfertige Komponenten bereitstellen.
- Spring Boot-Integration: LangChain4J unterstützt Spring Boot und erleichtert Entwicklern so die Erstellung robuster und skalierbarer KI-Anwendungen. Die Integration ermöglicht die nahtlose Integration von KI-Diensten in Spring Boot-Anwendungen und nutzt die Abhängigkeitsinjektions- und Konfigurationsverwaltungsfunktionen von Spring.
- Beispiele und Dokumentation: LangChain4J bietet umfangreiche Dokumentation und Beispiele, die Entwickler durch verschiedene Anwendungsfälle führen und demonstrieren, wie sie KI-gestützte Funktionen in ihren Anwendungen implementieren.
Fallstudie: Gesundheits-App – Gen Ai-fähige Diagnose-Microservices
Gen AI-Beispiele: Vergleich von 8 LLMs (3 Cloud-basiert und 5 lokal) zu Unternehmensfunktionen
Der folgende Vergleich basiert auf den in der LangChain4J-API verfügbaren Funktionen (die von OpenAI ChatGPT unterstützt werden). Diese Funktionen sind für die auf Gen AI basierende Unternehmens-App-Entwicklung unerlässlich.
# | Beispiel | GPT 4o | Meta Lama3 | Mistral | Microsoft Phi-3 | Google Gemma | TII Falcon 2 | Claude 3 | Zwillinge 1.5 |
---|
1. | Hallo Welt | ? | ? | ? | ? | ? | ? | ? | ? |
2. | Komplexe Welt | ? | ? | ? M1 | ? | ? | ? | ? | ? |
3. | Benutzerdefinierte Daten | ? | ? | ? | ? | ? | ? F1 | ? | ? |
4. | Bilderzeugung | ? | ? L1 | ? M2 | ? P1 | ? | ? F2 | ? | ? |
5. | Eingabeaufforderungsvorlage | ? | ? | ? M3 | ? | ? | ? | ? | ? |
6. | Werkzeuge | ? | ? L2 | ? M4 | ? P2 | ? G1 | ? F3 | ? | ? G1 |
7. | Chat-Speicher | ? | ? | ? | ? P3 | ? G2 | ? | ? | ? G2 |
8. | FewShot | ? | ? | ? M5 | ? | ? | ? | ? | ? G3 |
9. | Sprachübersetzer | ? | ? | ? M6 | ? | ? | ? | ? | ? |
10. | Stimmungsanalysator | ? | ? | ? | ? | ? | ? | ? | ? |
11. | Datenextraktor | ? O1 | ? L3 | ? M7 | ? P4 | ? G3 | ? F4 | ? | ? G4 |
12. | Persistenter Speicher | ? | ? | ? M8 | ? P5 | ? G4 | ? | ? | ? |
Retrieval Augmented Generation (RAG) Beispiele für 8 LLMs
# | Beispiel | GPT 4o | Meta Lama3 | Mistral | Microsoft Phi-3 | Google Gemma | TII Falcon 2 | Claude 3 | Zwillinge 1.5 |
---|
51. | Einfach | ? | ? | ? | ? | ? | ? | ? | ? |
52. | Segmente | ? | ? | ? | ? | ? | ? | ? | ? |
53. | Abfragetransformator | ? | ? | ? | ? | ? | ? | ? | ? |
54. | Router abfragen | ? | ? L4 | ? M9 | ? P6 | ? G4 | ? F5 | ? | ? G5 |
55. | Neubewertung | ? | ? | ? | ? | ? | ? | ? | ? |
56. | Metadaten | ? | ? | ? | ? | ? | ? | ? | ? |
57. | Mehrere Content Retriever | ? | ? | ? | ? | ? | ? | ? | ? |
58. | Überspringen des Inhaltsabrufs | ? | ? | ? | ? | ? | ? | ? | ? |
59. | Gesundheits-App | ? | ? | ? | ? | ? | ? | ? | ? |
Top-LLM-Rankings basierend auf Unternehmensfunktionen
# | Rang | Unternehmen | LLM | Punktzahl | Kategorie |
---|
1 | 1 | Anthropisch | Claude 3 Haiku | 21/21 | Wolke |
2 | 2 | Offene KI | Chat GPT 4o | 20/21 | Wolke |
3 | 3 | Meta | Lama 3 | 17/21 | Lokal |
4 | 4 | TII | Falke 2 | 16/21 | Lokal |
5 | 4 | Google | Gemini 1.5 Pro | 16/21 | Wolke |
6 | 4 | Google | Gemma | 16/21 | Lokal |
7 | 5 | Microsoft | PHI 3 | 15/21 | Lokal |
8 | 6 | Mistral | Mistral | 21.12 | Lokal |
Hinweis: Cloudbasierte LLMs unterstützen mehr als 500 Milliarden Parameter, während die lokalen LLMs größtenteils auf 8 Milliarden Parametern basieren.
Weitere Informationen zu Testergebnissen finden Sie hier
Installieren Sie lokale LLMs
So installieren Sie die lokalen LLMs mit Ollama
- Meta Lama3
- Google Gemma
- Microsoft PHI-3
- TII Falcon 2
- Mistral
- Zauberer Mathe
Sehen Sie sich die Installationsanleitung an.
Holen Sie sich die Schlüssel zum Testen von Cloud-LLMs
Registrieren Sie sich, um die API-Schlüssel zu erhalten
- Open AI – ChatGPT (API-Schlüssel kann hier erstellt werden: https://platform.openai.com/api-keys)
- Anthropic – Claude 3 (API-Schlüssel kann hier erstellt werden: https://console.anthropic.com/settings/keys)
- Google Cloud – (https://console.cloud.google.com/ – Anweisungen finden Sie in AiConstants.java)
- Cohere – (API-Schlüssel hier: https://dashboard.cohere.com/welcome/register)
- HuggingFace – (API-Schlüssel hier: https://huggingface.co/settings/tokens)
- Rapid – (API-Schlüssel hier: https://rapidapi.com/judge0-official/api/judge0-ce)
Legen Sie diese Schlüssel in Ihrer Umgebung fest
// 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 – Codepaketstruktur
Paket io.fusion.air.microservice.ai.genai
- Controller (Rest Endpoints zum Testen der Beispiele)
- Kern
- Assistenten (Basierend auf LangChain4J AiService)
- Modelle (im Code verwendete Datenmodelle)
- Eingabeaufforderungen (strukturierte Eingabeaufforderungen mit bestimmten Ausgaben)
- Dienste (LLM-spezifische Geschäftslogik wird in allen Beispielen wiederverwendet.)
- Tools (Funktionen, die basierend auf der LLM-Suche aufgerufen werden)
- Beispiele (Claude 3, Falcon 2, GPT 4o, Gemini, Gemma, Llama3, Mistral, Phi-3, Wizard Math)
- Utils (generischer Code zum Erstellen von ChatLanguageModels und Konfigurationen, API-Schlüsseln und Console Runner)
Codestruktur
Schnelltest nach dem Start der SpringBoot-App
Stimmungsanalyse mit ChatGPT 4o
Inhaltsmoderation mit ChatGPT 4o
ChatBot mit RAG (Custom Data) – Fallstudie: Autovermietung
RAG-Architektur
Retrieval-Augmented Generation (RAG) verbessert die Ausgabe großer Sprachmodelle (LLMs) durch die Einbindung maßgeblicher externer Wissensdatenbanken. Während LLMs auf riesigen Datensätzen trainiert werden und Milliarden von Parametern verwenden, um Antworten für Aufgaben wie die Beantwortung von Fragen, die Sprachübersetzung und die Vervollständigung von Texten zu generieren, optimiert RAG diese Ergebnisse, indem es auf spezifische, aktuelle Informationsquellen verweist, die über die Trainingsdaten des Modells hinausgehen. Dieser Prozess erweitert die Fähigkeiten von LLMs erheblich, um auf spezielle Domänen oder das interne Wissen einer Organisation zuzugreifen, ohne dass eine Neuschulung des Modells erforderlich ist. Folglich bietet RAG eine kostengünstige Lösung, um sicherzustellen, dass die generierten Inhalte relevant, korrekt und kontextbezogen bleiben.
Große Sprachmodelle (LLMs) stehen vor mehreren Herausforderungen:
- Sie können falsche Informationen liefern, wenn ihnen die richtige Antwort fehlt.
- Sie können veraltete oder allgemeine Informationen liefern, wenn der Benutzer spezifische, aktuelle Antworten erwartet.
- Sie generieren möglicherweise Antworten auf der Grundlage nicht maßgeblicher Quellen.
- Sie können aufgrund terminologischer Verwirrung, wenn verschiedene Schulungsquellen dieselben Begriffe zur Beschreibung unterschiedlicher Konzepte verwenden, zu ungenauen Antworten führen.
Retrieval-Augmented Generation (RAG) geht mehrere mit LLMs verbundene Herausforderungen an, indem es das Modell anweist, relevante Informationen aus maßgeblichen, vorab festgelegten Wissensquellen abzurufen. Dieser Ansatz ermöglicht es Unternehmen, mehr Kontrolle über die vom Modell generierten Inhalte auszuüben und so Genauigkeit und Relevanz sicherzustellen. Darüber hinaus erhalten Benutzer klarere Einblicke in die Quellen und Prozesse, die das LLM zur Formulierung seiner Antworten verwendet.
Gespräch über LLM mit (Custom Data) Car Rental Service Agreement
Datenextraktionen mit ChatGPT 4o
LangChain4J arbeitet auf zwei Abstraktionsebenen:
- Niedriges Niveau. Auf dieser Ebene haben Sie die größte Freiheit und Zugriff auf alle Low-Level-Komponenten wie ChatLanguageModel, UserMessage, AiMessage, EmbeddingStore, Embedding usw. Dies sind die „Primitive“ Ihrer LLM-basierten Anwendung. Sie haben die vollständige Kontrolle darüber, wie Sie sie kombinieren, müssen jedoch mehr Klebercode schreiben.
- Hohes Niveau. Auf dieser Ebene interagieren Sie mit LLMs über High-Level-APIs wie AiServices und Chains, wodurch Ihnen die gesamte Komplexität und das Grundgerüst verborgen bleibt. Sie haben immer noch die Flexibilität, das Verhalten anzupassen und zu verfeinern, dies geschieht jedoch auf deklarative Weise.
Weiterlesen... LangChain4J Einführung
Paketstruktur
Voraussetzungen
- SpringBoot 3.2.4
- Java 22
- Jakarta EE 10 (jakarta.servlet. , jakarta.persistence. , javax.validation.*)
- PostgreSQL-Datenbank 14
- Ollama 0.1.38
Standardmäßig verwendet die App die H2-In-Memory-Datenbank. Hierfür ist kein Datenbank-Setup erforderlich.
Schritt 1.1 – Erste Schritte
- Git-Klon https://github.com/arafkarsh/ms-springboot-324-ai.git
- cd ms-springboot-324-ai
- CD-Datenbank
- Lesen Sie die README.md, um Ihre Datenbank einzurichten (PostgreSQL-Datenbank).
- Standardmäßig (Dev-Modus) verwendet die App die In-Memory-H2-Datenbank
Schritt 1.2 – Kompilieren (sobald Ihr Code fertig ist)
1.2.1 Kompilieren Sie den Code
Führen Sie die „Kompilierung“ von ms-springboot-324-ai aus
- kompilieren ODER ./compile (Läuft unter Linux und Mac OS)
- mvn sauber; mvn -e Paket; (Alle Plattformen)
- Verwenden Sie die IDE-Kompilierungsoptionen
1.2.2 Was das „Compile“-Skript tun wird
- Bereinigen Sie den Zielordner
- Generieren Sie die Build-Nr. und Erstellungsdatum (erfordert ein application.properties-Backup)
- Erstellen Sie die endgültige Ausgabe SpringBoot Fat Jar und Maven Thin Jar
- Kopieren Sie die JAR-Dateien (und Abhängigkeiten) in den Ordner src/docker
- Kopieren Sie die Datei application.properties in den aktuellen Ordner und den Ordner src/docker
In Schritt 1.2.2 wird die Datei „application.properties“ automatisch vom „Compile“-Skript generiert. Dies ist ein entscheidender Schritt. Ohne die generierte application.properties-Datei wird der Dienst NICHT ausgeführt. Es gibt eine vorgefertigte Anwendungseigenschaftendatei.
Schritt 1.3 – Ausführen
1.3.1 Starten Sie den Dienst
- run ODER ./run (Läuft unter Linux oder Mac OS)
- prod ausführen (um das Produktionsprofil auszuführen, ist die Standardeinstellung Dev-Profil)
- mvn spring-boot:run (Alle Plattformen – Profil dev H2 In-Memory-Datenbank)
- mvn spring-boot:run -Dspring-boot.run.profiles=prod (Alle Plattformen – Profile prod PostgreSQL DB)
1.3.2 Testen Sie den Dienst
- test ODER ./test (Läuft unter Linux oder Mac OS)
- Führen Sie die Curl-Befehle direkt aus (aus dem Testskript).
Chat-Modelle
- OpenAI (Beispiele verfügbar)
- Ollama – Führen Sie KI-Modelle auf Ihrem lokalen Computer aus (Beispiele verfügbar)
- Azure Open AI
- Amazonas-Grundgestein
- Coheres Befehl
- Jurassic-2 von AI21 Labs
- Metas Lama 2
- Amazons Titan
- Google Vertex AI Palm
- Google Gemini
- HuggingFace – Greifen Sie auf Tausende von Modellen zu, darunter auch solche von Meta wie Llama2
- MistralAI
Text-zu-Bild-Modelle
- OpenAI mit DALL-E (Beispiele verfügbar)
- StabilitätKI
Transkriptionsmodelle (Audio zu Text).
Einbetten von Modellen
- OpenAI
- Ollama
- Azure OpenAI
- ONNX
- PostgresML
- Grundgesteinszusammenhalt
- Grundgesteins-Titan
- Google VertexAI
- Mistal-KI
Die Vector Store API bietet Portabilität zwischen verschiedenen Anbietern und verfügt über eine neuartige SQL-ähnliche Metadatenfilter-API, die die Portabilität gewährleistet.
Vektordatenbanken
- Azure-Vektorsuche
- Chroma
- Milvus
- Neo4j
- PostgreSQL/PGVector
- Tannenzapfen
- Redis
- Weben
- Qdrant
Unterstützte Modelle sind
- OpenAI
- Azure OpenAI
- VertexAI
- Mistral-KI
Schauen Sie sich die CRUD-Operationsbeispiele an
- Einrichten von Postman mit REST-Endpunkten zum Testen
- CRUD-Beispiele
- Beispiele für JWT-Token
Überprüfen Sie die CRUD_Examples.md
(C) Copyright 2024: Apache 2 Lizenz: Autor: Araf Karsh Hamid
* Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“);
* Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden.
* Eine Kopie der Lizenz erhalten Sie unter
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart, handelt es sich um Software
* unter der Lizenz vertrieben wird auf einer „AS IS“-BASIS verteilt,
* OHNE GEWÄHRLEISTUNGEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend.
* Die spezifische Sprache, die die Berechtigungen regelt, finden Sie in der Lizenz
* Einschränkungen im Rahmen der Lizenz.