F13 Integration
1. Einführung
1.1 Überblick
F13 ist ein modulares, auf Mikroservices basierendes KI-System, entwickelt vom Land Baden-Württemberg. Das System nutzt KIVA LLM Gateway als zentralen LLM Gateway, um mit verschiedenen Large Language Model (LLM) Backends zu kommunizieren.
Diese Dokumentation beschreibt die Integration über das KIVA Gateway als zentrale Proxy-Schicht zwischen F13 und verschiedenen LLM-Backends.
Zielgruppe
Diese Dokumentation richtet sich an Entwickler und DevOps-Teams, die F13 mit KIVA LLM Gateway betreiben möchten.
Wichtig: Diese Dokumentation bezieht sich auf den KIVA LLM Gateway Fork (basierend auf LiteLLM v1.74.4), nicht auf das Standard-LiteLLM.
1.2 Was ist KIVA LLM Gateway?
KIVA LLM Gateway ist eine vollständig souveräne und modell-agnostische KI-Gateway-Lösung, die:
- ✅ Auf eigener Infrastruktur betrieben werden kann
- ✅ Eine einheitliche OpenAI-kompatible API bereitstellt
- ✅ Als Proxy-Layer zwischen F13 und verschiedenen Model-Backends fungiert
- ✅ Load Balancing, Fallbacks und Rate Limiting ermöglicht
- ✅ Vollständige Datenhoheit und DSGVO-Konformität gewährleistet
Technische Basis:
- Basiert auf: LiteLLM v1.74.4 (MIT-Lizenz)
- Enterprise Features: Entfernt (fokussiert auf Grundfunktionalitäten)
- Entwicklung: Land Baden-Württemberg / KIVA KI Plattform
- Lizenz: MIT
- Telemetrie: Standardmäßig deaktiviert
1.3 Architektur-Übersicht
(Proxy Layer – Port 4000)
Fork von LiteLLM v1.74.4"] Gateway --> vLLM["vLLM
(lokal)"] Gateway --> Ollama["Ollama
(lokal)"] Gateway --> OpenAI["OpenAI
(API)"] Gateway --> Azure["Azure
OpenAI"] style F13 fill:#e1f5ff,stroke:#01579b,stroke-width:2px style Gateway fill:#fff3e0,stroke:#e65100,stroke-width:2px style vLLM fill:#f3e5f5,stroke:#4a148c,stroke-width:1px style Ollama fill:#f3e5f5,stroke:#4a148c,stroke-width:1px style OpenAI fill:#e8f5e9,stroke:#1b5e20,stroke-width:1px style Azure fill:#e8f5e9,stroke:#1b5e20,stroke-width:1px
Wichtig:
- F13 kommuniziert nur mit KIVA LLM Gateway
- Die Backends (vLLM, Ollama, OpenAI, etc.) werden von KIVA Gateway verwaltet
- Standard-Port: 4000
1.4 Vorteile dieser Architektur
| Vorteil | Beschreibung |
|---|---|
| Einheitliche Schnittstelle | F13 nutzt immer die gleiche API, unabhängig vom Backend |
| Souveränität | Vollständige Kontrolle über Daten und Infrastruktur |
| Flexibilität | Backends können gewechselt werden ohne Änderungen in F13 |
| Zentrales Management | Load Balancing und Monitoring am Gateway |
| Einfache Integration | F13 nutzt Standard OpenAI Python Client |
| DSGVO-konform | Keine externen Datenübertragungen, keine Telemetrie |
2. F13 Systemarchitektur
2.1 Mikroservice-Übersicht
F13 besteht aus folgenden Hauptkomponenten:
(Svelte, Port 9999)"] Frontend --> Core["Core Service
(Orchestrierung, Business Logic)"] Core --> Chat["Chat"] Core --> RAG["RAG"] Core --> Parser["Parser"] Core --> Summary["Summary"] Core --> ES["Elasticsearch"] Chat --> Gateway["KIVA LLM Gateway"] RAG --> Gateway Summary --> Gateway style Frontend fill:#e3f2fd,stroke:#1565c0,stroke-width:2px style Core fill:#fff3e0,stroke:#e65100,stroke-width:2px style Chat fill:#f3e5f5,stroke:#4a148c,stroke-width:1px style RAG fill:#f3e5f5,stroke:#4a148c,stroke-width:1px style Parser fill:#f3e5f5,stroke:#4a148c,stroke-width:1px style Summary fill:#f3e5f5,stroke:#4a148c,stroke-width:1px style ES fill:#f3e5f5,stroke:#4a148c,stroke-width:1px style Gateway fill:#fff9c4,stroke:#f57f17,stroke-width:2px
2.2 Chat-Mikroservice
Der Chat-Mikroservice ist die primäre Komponente für LLM-Interaktion:
Verantwortlichkeiten:
- Entgegennahme von Chat-Anfragen vom Core-Service
- Anwendung von System-, User- und Assistant-Prompts
- Kommunikation mit KIVA Gateway über OpenAI-kompatible API
- Response-Streaming (optional)
- Fehlerbehandlung und Logging
Technische Implementierung:
# Kern-Komponenten des Chat-Service
from openai import AsyncOpenAI
class OpenAIChatCompletion:
def __init__(self, llm: LLM):
self.llm = llm
self.llm_client = AsyncOpenAI(
api_key=" ", # API Key aus Secret-Datei
base_url=str(self.llm.api.url), # KIVA Gateway URL
timeout=60,
max_retries=3
)
async def run_chat_completion(self, chat_input):
response = await self.llm_client.chat.completions.create(
model=self.llm.model, # Model name in KIVA Gateway
messages=messages,
temperature=self.llm.inference.temperature,
max_tokens=self.llm.inference.max_new_tokens
)
return response
2.3 Konfigurationsstruktur
F13 nutzt drei YAML-Konfigurationsdateien unter dem Verzeichnis configs/:
configs/
├── general.yml # Aktivierte Modelle, Log-Level
├── llm_models.yml # LLM-Definitionen und API-Endpunkte
└── prompt_maps.yml # Prompt-Templates pro Modell
Wichtig: Siehe Abschnitt 4 für detaillierte Konfigurationsbeispiele.
3. KIVA LLM Gateway als LLM Gateway
3.1 Rolle von KIVA LLM Gateway
KIVA LLM Gateway fungiert als LLM Gateway (Abstraktionsschicht) zwischen F13 und verschiedenen LLM-Backends:
Aus F13-Perspektive:
- F13 sendet Anfragen an einen einzigen Endpunkt (KIVA Gateway)
- F13 nutzt immer die gleiche API (OpenAI-kompatibel)
- F13 weiß nicht, welches Backend verwendet wird
- Einziger Endpunkt:
http://kiva-gateway:4000/v1
Aus Backend-Perspektive:
- KIVA Gateway kann mit beliebigen Backends kommunizieren:
- Lokale Modelle: vLLM, Ollama, LocalAI
- Cloud APIs: OpenAI, Anthropic, Azure OpenAI, Google Gemini
- Enterprise: AWS Bedrock, Azure ML, Hugging Face Inference
- KIVA Gateway übersetzt zwischen verschiedenen API-Formaten
- KIVA Gateway verwaltet Load Balancing und Fallbacks
3.2 Unterstützte Backends
KIVA LLM Gateway unterstützt über 100 Anbieter. Häufig verwendete Backends sind:
| Backend | Typ | Verwendung |
|---|---|---|
| vLLM | Lokal | Hochperformante lokale Inferenz mit GPU |
| Ollama | Lokal | Einfaches lokales Model-Hosting |
| OpenAI | Cloud | GPT-4, GPT-3.5-turbo |
| Anthropic | Cloud | Claude 3 Modelle |
| Azure OpenAI | Cloud | Enterprise OpenAI Integration |
| AWS Bedrock | Cloud | AWS-native LLM-Zugriff |
Hinweis: Die Konfiguration dieser Backends erfolgt in KIVA Gateway, nicht in F13.
3.3 OpenAI-kompatible API
F13 nutzt die OpenAI Python Client Library für die Kommunikation:
from openai import AsyncOpenAI
# F13 Chat-Service erstellt einen Client
client = AsyncOpenAI(
base_url="http://kiva-gateway:4000/v1", # KIVA Gateway Endpoint
api_key="your-key" # KIVA Gateway API Key
)
# Standard OpenAI API Call
response = await client.chat.completions.create(
model="gpt-4", # Model name configured in KIVA Gateway
messages=[
{"role": "system", "content": "Du bist F13."},
{"role": "user", "content": "Hallo!"}
]
)
Wichtig:
base_urlzeigt auf KIVA Gateway (Port 4000), nicht auf das Backendmodelentspricht einem in KIVA Gateway konfigurierten Modellnamen- KIVA Gateway routet die Anfrage zum entsprechenden Backend
3.4 Unterschiede zu Standard-LiteLLM
| Aspekt | Standard LiteLLM | KIVA LLM Gateway |
|---|---|---|
| Version | Latest (rolling) | v1.74.4 (festgefroren) |
| Port | 8000 | 4000 |
| Enterprise Features | Verfügbar | Entfernt (MIT-Lizenz) |
| Telemetrie | Optional | Standardmäßig deaktiviert |
| Branding | LiteLLM | Baden-Württemberg / KIVA |
| Dokumentation | Englisch | Deutsch |
| Fokus | Allgemein | Souveränität & Verwaltung |
4. F13 Konfiguration für KIVA Gateway
4.1 Konfigurationsdateien-Übersicht
4.1.1 general.yml
Definiert, welche Modelle aktiv sind:
# SPDX-FileCopyrightText: 2025 Land Baden-Württemberg <InnoLab@stm.bwl.de>
# SPDX-License-Identifier: MPL-2.0
active_llms:
chat:
- "gpt4_kiva"
- "claude_opus_kiva"
- "llama2_local_kiva"
log_level: INFO # DEBUG, INFO, WARNING, ERROR, CRITICAL
Felder:
active_llms.chat: Liste der Modell-IDs, die in F13 verfügbar sein sollenlog_level: Logging-Level für F13-Services
4.1.2 llm_models.yml
Definiert die Verbindung zu KIVA Gateway:
# SPDX-FileCopyrightText: 2025 Land Baden-Württemberg <InnoLab@stm.bwl.de>
# SPDX-License-Identifier: MPL-2.0
chat:
gpt4_kiva:
# Label für die Benutzeroberfläche
label: "GPT-4 (via KIVA Gateway)"
# Modellname wie in KIVA Gateway konfiguriert
model: "gpt-4"
# Prompt-Map (Referenz zu prompt_maps.yml)
prompt_map: "base_assistant"
# Ist das Modell extern gehostet?
is_remote: true # true für Cloud-APIs, false für lokale
# API-Konfiguration
api:
# KIVA Gateway Endpoint (Port 4000!)
url: "http://kiva-gateway:4000/v1"
# Health Check Endpoint
health_check: "/health/liveliness"
# Authentifizierung
auth:
type: "token" # oder "basic_auth"
secret_path: "/core/secrets/kiva_gateway_api.secret"
# Inferenz-Parameter
inference:
temperature: 0.7 # 0.0 - 2.0 (höher = kreativer)
top_p: 0.9 # 0.0 - 1.0 (Nucleus sampling)
max_new_tokens: 2048 # Maximale Antwortlänge
Wichtige Felder:
| Feld | Beschreibung | Beispiel |
|---|---|---|
label |
Anzeigename in der UI | "GPT-4 (via KIVA Gateway)" |
model |
Model name in KIVA Gateway | "gpt-4" |
prompt_map |
Prompt-Template | "base_assistant" |
is_remote |
Cloud API? | true/false |
api.url |
KIVA Gateway Endpoint | "http://kiva-gateway:4000/v1" |
api.health_check |
Health Check Path | "/health/liveliness" |
api.auth.type |
Auth-Typ | "token" oder "basic_auth" |
inference.temperature |
Kreativität | 0.0 - 2.0 |
inference.max_new_tokens |
Max. Antwortlänge | z.B. 2048 |
4.1.3 prompt_maps.yml
Definiert System-Prompts für verschiedene Anwendungsfälle:
# SPDX-FileCopyrightText: 2025 Land Baden-Württemberg <InnoLab@stm.bwl.de>
# SPDX-License-Identifier: MPL-2.0
chat:
base_assistant:
system:
generate: |
Anweisung: Du bist ein Chatbot, der immer auf Deutsch antwortet,
wenn er auf Deutsch angesprochen wird. Dein Name lautet F13.
Antworte hilfreich und direkt und verzichte auf eine direkte Anrede.
Wenn du zu einer Frage keine ausreichende Information hast, gib dies
ehrlich an und gebe an, dass du dazu keine Auskunft geben kannst.
administration_expert:
system:
generate: |
Du bist ein fortschrittlicher KI-basierter Assistent, der F13 heißt
und dafür entwickelt wurde, Mitarbeitenden der Verwaltung bei einer
Vielzahl von Aufgaben zu helfen. Deine Rolle besteht darin, hilfreiche,
höfliche und informative Gespräche zu führen.
Richtlinien:
1. Klarheit und Genauigkeit: Priorisiere klare, korrekte Informationen
2. Nutzerzentriert: Achte auf die Bedürfnisse des Nutzers
3. Empathie und Neutralität: Zeige Empathie, bleibe neutral
4.2 Konfigurationsbeispiele
Beispiel 1: Cloud-Modell via KIVA Gateway
chat:
gpt4_kiva:
label: "GPT-4"
model: "gpt-4"
prompt_map: "base_assistant"
is_remote: true
api:
url: "http://kiva-gateway:4000/v1"
health_check: "/health/liveliness"
auth:
type: "token"
secret_path: "/core/secrets/kiva_gateway_api.secret"
inference:
temperature: 0.7
top_p: 0.9
max_new_tokens: 4096
Beispiel 2: Lokales Modell (vLLM) via KIVA Gateway
chat:
llama2_local:
label: "Llama 2 7B Chat (Lokal)"
model: "llama-2-7b-chat" # Name in KIVA Gateway config
prompt_map: "base_assistant"
is_remote: false # Lokal gehostet
api:
url: "http://kiva-gateway:4000/v1"
health_check: "/health/liveliness"
# Keine auth nötig für interne KIVA Gateway-Instanz
inference:
temperature: 0.7
top_p: 0.9
max_new_tokens: 2048
Beispiel 3: Mehrere Modelle
chat:
# Schnelles Modell für einfache Anfragen
gpt35_fast:
label: "GPT-3.5 Turbo (Schnell)"
model: "gpt-3.5-turbo"
prompt_map: "base_assistant"
is_remote: true
api:
url: "http://kiva-gateway:4000/v1"
auth:
type: "token"
secret_path: "/core/secrets/kiva_gateway_api.secret"
inference:
temperature: 0.7
max_new_tokens: 1024
# Leistungsstarkes Modell für komplexe Aufgaben
gpt4_advanced:
label: "GPT-4 (Erweitert)"
model: "gpt-4"
prompt_map: "administration_expert"
is_remote: true
api:
url: "http://kiva-gateway:4000/v1"
auth:
type: "token"
secret_path: "/core/secrets/kiva_gateway_api.secret"
inference:
temperature: 0.6
max_new_tokens: 4096
# Lokales Modell für datenschutzsensible Anfragen
mistral_local:
label: "Mistral 7B (Lokal, DSGVO)"
model: "mistral-7b-instruct"
prompt_map: "base_assistant"
is_remote: false
api:
url: "http://kiva-gateway:4000/v1"
inference:
temperature: 0.7
max_new_tokens: 2048