Förderjahr 2023 / Projekt Call #18 / ProjektID: 6716 / Projekt: shrinkwrap.legal
Da wir langjährige Erfahrung in der Softwareentwicklung mit Java und vor allem dem verbreiteten Spring Framework haben, ist es für uns naheliegend auch dieses Projekt mit Java umzusetzen.
Im Bereich Machine Learning ist Python als Programmiersprache stark verbreitet und auch viele wichtige Bibliotheken sind in dieser Sprache geschrieben. Eine sehr beliebte Bibliothek zum Arbeiten mit großen Sprachmodellen in Python ist LangChain (https://www.langchain.com).
Bei der Evaluierung von NLP Bibliotheken zum Sentence Splitting, wie im vorigen Beitrag beschrieben, hat sich dann auch herausgestellt, dass Bibliotheken in Python bessere Ergebnisse liefern.
Daher haben wir uns angesehen, wie sich einerseits Large Language Models in Java und Spring Anwendungen integrieren lassen, aber auch wie wir für einzelne Aufgaben Python einsetzen können.
Dabei haben wir uns drei Varianten näher angesehen:
- LangChain4J
- Spring AI
- GraalPy
LangChain4J
LangChain4J ist eine Bibliothek für Java zum Einbinden von großen Sprachmodellen in Java-Anwendungen, es handelt sich dabei um eine Adaption der verbreiteten Python Bibliothek LangChain. Es kann die API von OpenAI, ein lokales Sprachmodell mit Ollama und viele weitere eingebunden werden. Dies ist durch eine vereinheitlichte Abstraktion der Schnittstellen und konkreten Implementierungen für die jeweiligen Anbieter möglich. Zur Aufbereitung von eigenen Daten müssen diese in einer Vektor-Datenbank gespeichert werden und auch dafür gibt es viele Anbieter eine Integration.
Spring AI
Das Spring Framework ist ein Framework für Java zur Umsetzung für Geschäftsanwendungen, hierbei hat es eine große Verbreitung. Damit die mit Spring erstellten Web-Applikationen einfach mit Sprachmodellen zu integrieren sind, hat Spring das Spring AI Projekt ins Leben gerufen. Es bietet eine abstrahierte Integration und dadurch können ohne Code-Änderungen verschiedene lokale oder cloud-basierte Sprachmodelle aufgerufen werden. Des Weiteren können mit den bestehenden Datenbank-Abstraktionen nun auch Vektor-Datenbanken eingebunden werden.
https://spring.io/projects/spring-ai
GraalPy
GraalVM kann aus Java Code mit einer Ahead-Of-Time Kompilierung ein nativ für die jeweilige Hardware ausführbares Programm erstellen. Das ermöglicht es, dass Java Programme schneller gestartet werden können und mit einer besseren Performance sowie weniger Ressourcen ausgeführt werden können. Neben diesen Vorteilen für Java Programme unterstützt die GraalVM mit der Polyglot API noch weitere Programmiersprachen, die mit der Java Virtual Machine (JVM) ausgeführt werden können.
Mit GraalPy kann Python Programmcode in einer JVM ausgeführt werden und somit schafft man die Brücke, dass verbreitete Bibliotheken von Python für Machine Learning und LLM direkt innerhalb von Java ausgeführt werden können. Somit kann die Web-Anwendung weiterhin in Java bleiben aber einzelne Python Bibliotheken, welche im Machine Learning und bei großen Sprachmodellen eine hohe Verbreitung haben, können ohne eigenen Server aufgerufen werden.
https://github.com/oracle/graalpython