Möchten Sie testen, wie eine generative KI Sie unterstützen kann, und das möglichst einfach in Ihrem Rechenzentrum oder gar zuhause im Hobbykeller aufsetzen ? Kann Ihre CPU die anstehenden Aufgaben bewerkstelligen oder braucht es doch eine Gaming Grafikkarte irgendwo in einer Ecke Ihres Rechenzentrums ? Oracle bietet Ihnen gleich drei Umgebungen an für den Test aber auch für Entwicklung und Runtime von GenAI basierten Anwendungen. Kostenlos und container basiert für Python, Java und PL/SQL.
Natürlich hat Oracle an dieser Stelle das Rad nicht komplett neu erfunden. Es wurden drei Pakete aus gängigen und sinnvollen APIs und Komponenten geschnürt. Sie werden als Teil der Support Subskription für Oracle Datenbanken bereitgestellt, gepflegt und mit technischer Hilfe über github und Slack Kanäle unterstützt. Eine zentrale Leistung hinter den Paketen ist die Verknüpfung und Integration der bereitgestellten Komponenten sowie die Erstellung eigener Plugins und Treiber für die verwendeten Frameworks. Die wichtigste Leistung ist jedoch die Einfachheit, mittels derer man schnell zu einer Test-Umgebung kommt, sowie zu Prototypen und sogar fertigen, abgesicherten und skalierfähigen Anwendungen. Wie das konkret gemeint ist zeige ich am besten anhand von kurzen Beschreibungen der drei Pakete, die durchaus kombinierfähig miteinander und mit anderen Tools sind.
Das Paket bietet eine klickbare Browser-Oberfläche, um eine recht typische Chatbot-Lösung aufzubauen: Textdokumente können hochgeladen und für den Aufbau einer knowledge base durchsuchbar gemacht werden, eine chat Oberfläche dient dazu die gewählten large language models (LLMs) und auch die beispielhaften Prompts (System-Anweisungen in natürlicher Sprache an die KI, wie sie verfahren soll) zu testen und eigene Prompts zu formulieren. Die Anfragen des Endbenutzers im chat können per Mausklick auf Basis der geladenen Dokumente beantwortet werden (retrieval augmented generation, RAG), aber auch dem öffentlichen Wissensfundus und der wählbar kreativen Kombinationsgabe der KI entspringen.
Das Paket besteht aus drei miteinander verknüpften und vorbereiteten Containern, die man sowohl lokal per docker oder podman Kommando oder in einem kleinen Kubernetes Cluster (minikube, k3s o.ä.) mittels helm chart einrichten und betreiben kann. Das per github repository angebotene helm chart unterstützt im Moment leider nur eine Autonomous Database in der Oracle Cloud und müßte für onPrem Zwecke leicht angepaßt werden: statt einer Autonomous Database könnte dann ein lokales 23ai "slim" Container Image (mit knapp 800MB Image Größe) verwendet werden.
Die wesentlich kürzere und prägnantere Installation der Container über docker oder podman Kommandos beschreibt ein kleiner Walkthrough im gleichen github Repository.
Der erste Container ist der Anwendungs-Container, der das konfigurierbare User Interface bietet. Er kann mit den beiden anderen Containern verknüpft werden oder auch jeweils mit externen Datenbank- und GenAI Diensten. Die im Container genutzten Frameworks und seine Logik können selbst weiterentwickelt und ausgebaut werden, der Quellcode dafür liegt auf github bereit. Aktuell basiert die Logik im Container auf der Sprache Python, dem langchain-Framework mit offiziellen Plugins für die Oracle Datenbank zur Speicherung und Abfrage von Vektordaten und dem mit streamlit erstellten User Interface für den Chatbot.
Der zweite Container umfaßt eine Oracle 23ai FREE Datenbank. Sie wird genutzt zur Ablage, Indizierung und Durchsuchung von Vektor-Daten, sogenannten Embeddings. Oracle23ai FREE darf per Lizenzvereinbarung produktiv genutzt werden, ist aber größenbeschränkt mit maximal 20GB für Tabellen und oft nicht zu verachtenden Index-Daten.
Der dritte Container umfaßt ollama, eine Open Source GenAI für den lokalen Einsatz. Gängige large language models (LLMs) können geladen und genutzt werden. REST APIs für das Erzeugen von Vektordaten (Embeddings), für die Generierung von freien und strukturierten Texten (Antworten auf Anfragen, Zusammenfassungen, Bildbeschreibungen, Code Erzeugung, Klassifizierungen, Funktionsaufrufe...) und für einen Chatbot werden bereitgestellt. Eine Grafikkarte mit nvidia GPU auf dem betreibenden Rechner ist erwünscht, aber sehr kleine LLMs mit ca. 2GB Maximalgröße wie das recht neue llama3.2:3b laufen erträglich gut im streaming mode, d.h. zum mitlesen, auf einer regulären CPU.
Die Oracle AI Microservices Sandbox besitzt aktuell einen Developer Preview Status. Sie ist ein Nebenprodukt des zweiten Paketes Oracle Backend for Microservices and AI als Ergänzung zu dessen Fokus auf Java APIs. Und für besonders schnelle und einfache Tests.
Das Paket konzentriert sich vorrangig auf die umfassende Entwicklung und einen vollumfänglichen Betrieb von Backends, sprich Microservices aller Art, in Java. Ursprünglich ganz auf den Java Spring Framework ausgelegt werden inzwischen auch Komponenten unterstützt, die auf dem Helidon Framework (Eclipse Microprofile Standard) basieren. Das Oracle Backend for Microservices and AI wird unterstützt als Teil jeder Datenbank-Lizenz. Hilfe erfolgt per Slack Kanal, Mail-Liste und github issues. Es besitzt auch ein eigenes Kapitel in der Datenbank Dokumentation zum Thema Entwickler-Unterstützung. Die aktuellsten Infos und Versionen (z.B. 1.3.1 seit Ende Oktober 2024) liegen neben einer Installationsanleitung auf github parat.
Da beim Betrieb von Containern Themen wie Monitoring, automatisierte Deployments, Skalierung, Netzwerk-Anbindung und Security besonders wichtig sind kommen in diesem Paket viele weitere Container zum Einsatz, die miteinander integriert wurden. Eine nahtlose, vollständige Microservice Runtime Plattform soll hier geschaffen werden. Natürlich komplett Open Source und mit austauschbaren Komponenten, z.B. durch kommerzielle Produkte oder durch Cloud Services. Neben den bereits aus Paket 1 bekannten Containern mit einer Oracle 23ai Database FREE und einer lokalen ollama GenAI kommen hier u.a. zum Zuge:
Entwickler-Support:
Mehrere Visual Studio Code Plugins (Oracle Backend, Spring, Java, Oracle Database, Kubernetes, Oracle Cloud, Helidon)
Spring Framework, u.a. mit Spring AI (als Alternative zu langchain4j), Spring Database uvm.
mit zahlreichen Oracle Plugins und Kickstartern für die schnellere Nutzung
z.B. Oracle Database, Oracle Transaction Manager for Microservices, Oracle Transactional Event Queues, Oracle Vector Search, ...
Plattform "Microservices":
Kafka Messaging (Strimzi Operator), Oracle Database (OraOperator),
Netflix Conductor (Flow Engine), ollama GenAI, Oracle Coherence Operator
Deployment und Monitoring:
Spring Cloud Config Server, Spring Cloud Admin Server, Service Operations Center,
Spring Cloud Eureka Service Registry, Grafana, Loki, Prometheus, Jaeger, OpenTelemetry collector
Netzwerk, Security und Identity:
cert-manager, nginx ingress controller, HashiCorp Vault,
Spring Authorization Server, Apache APISIX (API Gateway)
Alle diese Dienste benötigen jeweils mindestens einen Container. Und gerade die Operatoren für Kafka, Oracle Database usw. erzeugen weitere Container. Daher ist es wenig verwunderlich, wenn Installation und Betrieb nur unter Kubernetes möglich sind. Doch auch minimalistische Installationen mit docker oder podman werden unterstützt. Ebenfalls werden einige Cloud Kubernetes Distributionen direkt bedacht, z.B. Azure und Oracle Cloud mit ansible playbooks bzw. einem terraform Stack. Für beliebige andere Distributionen wie minikube, Oracle OCNE, OpenShift und Tanzu wird ein generisches ansible playbook bereitgestellt. Und für schnelle Tests stehen VMs zur Verfügung mit einer vorbereiteten Umgebung auf Basis von minikube oder k3s, dies über den Oracle Cloud Marketplace.
Eine Beispiel-Anwendung (CloudBank) wird mit Hilfe eines Hands-on Labs als Teil der Dokumentation erstellt - mit mehreren REST Services, Microservice Transaktionen (SAGAs), und natürlich einem AI chatbot. Ein erklärendes Video zu dieser neuen Microservices Runtime Plattform von Oracle ist ebenfalls Teil der Dokumentation und wir dürfen in naher Zukunft noch weitere Neuerungen, Apps und Add-ons erwarten:
Die Python- und Java-Entwickler wurden mit Paket 1 und 2 bedacht, doch auch die PL/SQL Entwickler kommen definitiv nicht zu kurz. Denn prinzipiell geht das, was mit langchain für Python möglich ist und mit Spring AI bzw. langchain4j für Java, auch mit PL/SQL. Vorausgesetzt, Sie haben eine Oracle23ai Datenbank zur Hand, z.B. als FREE Variante im Container.
Paket 3 besteht daher aus einem Oracle23ai Database Container, einem ORDS Container für den Zugang zu Application Express (APEX) und zu REST Services innerhalb der Datenbank und wiederum einem ollama Container. Auch hier können Sie wie in Paket 1 alle Container einzeln per docker oder podman starten. Oder Sie verwenden unter Kubernetes den Oracle Database Operator, um eine Oracle Datenbank mit angeflanschtem ORDS zu provisionieren und richten Sie den ollama container separat unter Kubernetes ein wie in Paket 2, z.B. per helm chart.
Der Einfachheit halber finden Sie hier die Anleitungen für die docker und podman Varianten:
Beschreibung zum Start eines Datenbank 23ai FREE Containers mit docker oder podman auf container-registry.oracle.com
Beschreibung zum Start eines ORDS/APEX Containers mit docker oder podman auf container-registry.oracle.com
Beschreibung zum Start eines ollama Containers aus der "walkthrough" Anleitung der OpenAI sandbox (Paket 1)
Zum Datenbank Container:
Neue bereitgestellte APIs (Packages) in Oracle23ai ermöglichen den Umgang mit GenAIs und Vektor-Daten. Die neuen Packages tragen Namen wie DBMS_VECTOR, DBMS_VECTOR_CHAIN, und sie ermöglichen unter anderem sehr typische, bereits aus dem langchain Framework bekannte Funktionen:
Ein neu eingeführter VECTOR Datentyp wird durch eigene Indizes und Abfragen unterstützt, es werden mittlerweile neben Texten und Bildern auch JSON Dokumente besonders berücksichtigt und können hybrid abgefragt werden, d.h. es können in einer Abfrage sowohl CONTEXT Volltext - Indizes genutzt werden als auch VECTOR Indizes. Anders ausgedrückt findet dann eine kombinierte semantische und keyword-basierte Suche statt, die das Suchergebnis weiter verbessern soll.
Der Vector Search Funktionalität und der Anbindung externer GenAIs ist ein eigenes Handbuch in der Datenbank Dokumentation gewidmet.
Zum Application Express Container:
Application Express 24.1 besitzt Wizards wie das Generative AI Workspace Utility, um recht komfortabel eine AI Chatbot Anwendung zu erstellen. Sie müssen nur Zugang zu einer GenAI über deren REST Interface haben. Eine Oracle LiveLab Umgebung führt Sie durch die nötigen Schritte hindurch.
Zusätzlich zu einer textuellen Anleitung existieren verschiedene erklärende Youtube Videos zum gleichen Thema. So wie dieses:
Auch die Nutzung der VECTOR Datentypen und Abfragen darauf haben in APEX Wizards Einzug gehalten und werden in LiveLabs und Demos beschrieben.
Oracle APEX umfaßt eine eigene Flow bzw. Workflow Engine, um Abläufe in einem Prozess oder Programm grafisch zu formulieren und zu visualisieren. Sie könnten damit eigene AI Agenten bauen und auch per REST service call von außen aufrufbar machen. Aktuell habe ich ein Beispiel gefunden, um Arzttermine zu buchen. Ein mit APEX Workflows erstellter GenAI Agent ist aber wahrscheinlich einen eigenen Blog Eintrag wert.
Generell bietet APEX fortlaufend bessere GenAI Unterstützung noch während der Anwendungsentwicklung. Bereits im ersten genannten LiveLab werden Sie feststellen, dass ein AI basierter Helfer Ihnen SQL Abfragen und Oberflächen-Fragmente erzeugen kann. Weitere GenDev Features und Verbesserungen mit APEX Version 24.2 finden Sie in aufbereiteter Form auf der eigenen APEX Homepage.
Zum ollama Container:
Innerhalb der Oracle 23ai Database werden verschiedene GenAI Provider unterstützt, z.B. Oracle Cloud GenAI, Cohere, OpenAI, HuggingFace und mittlerweile auch ollama. Sie sind also nicht länger gezwungen, REST service calls an einen ollama Container von Hand zu formulieren und mit der UTL_HTTP Package aufzurufen. Sie können die Komfort Funktionen in DBMS_VECTOR_CHAIN verwenden um Embeddings oder Texte generieren zu lassen, indem Sie ollama als Provider angeben. Ein Beispiel dazu finden Sie in unserer Datenbank-Dokumentation. Die Dokumentation wurde jedoch noch nicht vollständig angepaßt, z.B. wird in der Liste der unterstützten Provider und jeweils nutzbarer Features noch darauf hingewiesen, daß man für ollama die UTL_HTTP Package verwenden möge. Ein Beispiel für den Aufruf des ollama Containers mittels UTL_HTTP finden Sie in einem weiteren github repository (für einen Vector Search Workshop in Deutscher Sprache, den Sie sehr gerne bei mir anfragen können).
Durch die Unterstützung und einfache Einbindung einer lokalen GenAI wie ollama als Container explodiert förmlich die Zahl der Möglichkeiten zu testen, zu entwickeln und auch in Betrieb zu setzen. Aufgrund einer container-basierten Microservice Architektur können bei besonderen Anforderungen jederzeit einzelne Container durch besonders leistungsfähige Cloud Services ausgetauscht werden. Oder es wird ein Umzug der Umgebung in eine Cloud oder in ein anderes Rechenzentrum generell vereinfacht. Versuchen und testen Sie die verschiedenen verfügbaren large language models auf CPU und GPU Performance und Anwendungsgebiete hin, formulieren Sie eigene Prompts an die GenAI um nicht nur Fragen zu beantworten, sondern auch zu entscheiden welche Funktionen aufgerufen werden sollen und welche Kategorien von Datentöpfen zu nutzen sind (relational, json, graph, text, ...). Die verwendete Programmiersprache ist dabei relativ egal, denn Oracle unterstützt Sie mit den gängigsten Umgebungen für Python, Java oder PL/SQL. Und das von klein auf und kostenlos dank frei verfügbarer Komponenten von Oracle und von anderen eingebetteten Anbietern.
Doing Java, Integration, Frameworks and Java Integration Frameworks since so many years and moved from Transaction Monitors to Application Servers to Containers and Clouds - all in the name of Oracle.
Previous Post