Softwarearchitektur
Allgemeiner Überblick
Die F13-Softwarearchitektur besteht, wie im obigen Diagramm dargestellt, aus mehreren Schichten: Eine Applikations-/Frontend-Schicht, einer AI-Plattform und einer ML-Ops-Schicht.
Die Applikationsschicht wird durch ein Frontend gebildet. Dieses wird über eine REST-API mit F13 Core verbunden.
F13 Core kümmert sich optionạl um die Authentifzierung und Autorisierung von Benutzern. Die Benutzerbasis wird hierbei stets durch ein Keycloak gestellt. Die Authentifizierung ist standardmäßig ausgestellt, Keycloak wird in diesem Falle nicht benötigt ("Guest-Mode"). Dies kann in der Konfigurationsdatei bei Bedarf eingestellt werden. Näheres zur Authentifizierung und Autorisierung wird auf der Seite Sicherheitsarchitektur erklärt.
Desweiteren ist F13 Core die Basis, um andere Komponenten, sogenannte Microservices, von F13 über jeweils eine REST-API anzusprechen. Aktuell sind diese Microservices der Chat, RAG, Parser und Summary. Die Microservices werden über eine OpenAI-konforme REST-API mit Large Language Model (LLM) Inferencing-Services verbunden.
Über eine weitere REST-API wird User-Feedback in einer Datenbank gespeichert. Dies erlaubt, Feedback zu den Funktionalitäten oder gesamten Applikation einzusehen und diese dadurch zu verbessern.
Der Retrieval Augmented Generation (RAG) - Microservice verwendet zusätzlich eine Vektordatenbank.
Frontend
Das aktuelle Frontend, whitegelabelt im Open Source - Repository bereitgestellt, basiert auf dem JavaScript-Framework Svelte und ist containisiert. Es bietet Möglichkeiten, auf die Microservices zuzugreifen, Feedback zu diesen und der Applikation selbst zu geben, sowie eine Sektion zu Häufig gestellten Fragen (FAQ), welche individuell angepasst werden können. Zusätzlich bietet es die Möglichkeit Nutzungsbedingungen und Datenschutzerklärungen für Nutzerinnen und Nutzer bereit zu stellen. Das Frontend ist individualisierbar.
Neben dem Frontend könnten perspektivisch Plugins, beispielsweise in on-premise Office-Lösungen, angeboten werden.
F13 Microservices
Alle F13 Microservices sind in Python geschrieben, containisiert und über YAML-Konfigurationsdateien einstellbar. Diese sind mit dem "Haupt-"Microservice, dem Core verbunden, der wiederrum vom Frontend angesprochen wird. Die Microservices werden, über die Konfigurationsdatei definiert, mit dem LLM-Inference-Layer verbunden. Dieses kann on-premise sein, mit Lösungen wie vLLM oder Ollama, oder aus LLMs bestehen, die auf Grafikkarten in der Cloud eingesetzt werden. Dezidierte Model-Serving-Services bekannter Cloud-Anbieter können genauso eingebunden werden.
Durch die Microservice-Architektur besteht die einfach Möglichkeit, neue Services zu schreiben und diese mit über Core im Frontend verfügbar zu machen. Perspektivisch könnte dies ein Bildgenerierungs-Microservice, aber auch weitere sein.
Weitere Dienste
Feedbackdatenbank
Die Microservices bieten die Möglichkeit, Feedback zu Prompts und LLM-Antworten über F13 Core in einer Feedbackdatenbank zu speichern. Diese Datenbank basiert auf PostgreSQL. Das gespeicherte Feedback kann über zusätzliche Services eingesehen werden. Das Feedback wird automatisch nach drei Monaten gelöscht.
Vektordatenbank
Die Vektordatenbank wird für den RAG-Service verwendet und ist derzeit eine Elasticsearch-Datenbank. Sie kann über einen separaten Ingestion-Service, der nicht Teil des Open Source-Pakets von F13 ist, initial und periodisch mit Datenbankinhalten beladen werden. Diese Vektordatenbank wird unabhängig davon, ob sie befüllt ist oder nicht, für die RAG-Funktionalität genutzt.
Infrastruktur / DevOps
Alle Microservices sind per Docker containerisiert. Die Orchestrierung auf einem Zielsystem kann über Kubernetes oder OpenShift erfolgen, im Prinzip aber auch über Docker Compose. Automatisierte Build- und Deployment-Prozesse ermöglichen den einfachen Austausch von Microservices oder Kernkomponenten von F13. Über weitere Dienste, wie Prometheus und Grafana, ist ein Monitoring der Infrastruktur möglich.
Vorteile der Architektur
- Modularisierung einzelner Services
- Klare Trennung von Verantwortlichkeiten: Beispielsweise läuft der Chat unabhängig von RAG oder Zusammenfassung.
- Skalierbarkeit der Services
- Leichte Erweiterbarkeit der einzelnen Services
- On-Premise-, Cloud- oder Hybrid-Betrieb möglich