title: "KI-Apps entwickeln, die keine Nutzerdaten speichern: Zustandslose LLM-APIs und DSGVO" description: "Was zustandslose Inferenz bedeutet, warum sie für die DSGVO-Konformität wichtig ist und wie Sie eine produktionsreife Chat-Anwendung bauen, die Ihnen volle Kontrolle über die Datenspeicherung gibt." date: 2026-04-06 slug: stateless-llm-api-gdpr keywords: ["stateless llm api", "gdpr compliant llm", "zero data retention ai", "stateless inference gdpr", "llm no data retention"] category: guides schema_types: ["TechArticle", "FAQPage"]
KI-Apps entwickeln, die keine Nutzerdaten speichern: Zustandslose LLM-APIs und DSGVO
Die meisten LLM-APIs arbeiten standardmäßig zustandsbehaftet (stateful). Wenn Sie eine Anfrage an OpenAI senden, werden Prompt und Antwort gespeichert — in der Regel für 30 Tage — zum Zweck der Missbrauchserkennung, Analyse und des operativen Loggings. Diese gespeicherten Daten erzeugen DSGVO-Pflichten: Aufbewahrungsfristen, Löschmechanismen, Auftragsverarbeitungsverträge nach Art. 28 und Audit-Risiken.
Zustandslose Inferenz dreht dieses Prinzip um. Die API verarbeitet Ihre Anfrage im Arbeitsspeicher, generiert eine Antwort und verwirft anschließend alles sofort. Keine Logs mit Ihren Inhalten, keine Trainingsdaten, nichts, was gelöscht werden müsste.
Dieser Leitfaden erklärt, wie zustandslose LLM-Architektur funktioniert, wann sie für die DSGVO-Konformität relevant ist und wie Sie damit eine produktionsreife Chat-Anwendung bauen. Alle Beispiele verwenden die OpenAI-kompatible API von JuiceFactory.
Holen Sie sich Ihren kostenlosen API-Schlüssel: juicefactory.ai/api-key — keine Kreditkarte erforderlich.
Was zustandslose Inferenz tatsächlich bedeutet
Zustandslosigkeit bei einer LLM-API bedeutet, dass der Anbieter keinen Konversationsstatus zwischen Anfragen vorhält. Jede Anfrage ist unabhängig. Die API empfängt die gesendeten Nachrichten, verarbeitet sie, gibt eine Antwort zurück und gibt den Speicher frei. Nichts bleibt erhalten.
Das unterscheidet sich von der Art, wie Sie eine Chat-Anwendung bauen könnten, in der Sie den Gesprächsverlauf in Ihrer Datenbank speichern und bei jeder Anfrage mitsenden. Die Zustandsbehaftung liegt in Ihrer Anwendungsschicht — nicht im Inferenzdienst. Die API weiß nichts über vorherige Konversationen, es sei denn, Sie fügen sie in die aktuelle Anfrage ein.
Der entscheidende Unterschied aus Compliance-Sicht:
# Zustandsbehaftetes Muster — Anbieter speichert Verlauf
# Ihr Prompt geht an deren Server, wird geloggt, gespeichert, aufbewahrt
response = openai.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "My patient ID is 12345..."}]
)
# Diese Patienten-ID liegt jetzt 30 Tage in OpenAIs Logs
# Zustandsloses Muster — Anbieter verwirft alles
client = OpenAI(
api_key="jf-...",
base_url="https://api.juicefactory.ai/v1"
)
response = client.chat.completions.create(
model="qwen3-vl",
messages=[{"role": "user", "content": "My patient ID is 12345..."}]
)
# Anfrage im Arbeitsspeicher verarbeitet, Antwort zurückgegeben, Daten verworfen
Der Code sieht nahezu identisch aus. Die Compliance-Auswirkungen sind grundlegend verschieden.
Warum das für die DSGVO relevant ist
Die DSGVO stellt spezifische Anforderungen an den Umgang mit personenbezogenen Daten. Für LLM-Anwendungen sind folgende besonders relevant:
Artikel 5 Abs. 1 lit. c — Datenminimierung: Es dürfen nur die für den Zweck erforderlichen Daten verarbeitet werden. Prompts 30 Tage aufzubewahren, wenn die Antwort nur 200 ms benötigt wurde, ist schwer zu rechtfertigen.
Artikel 5 Abs. 1 lit. e — Speicherbegrenzung: Daten dürfen nicht länger als für ihren Zweck erforderlich gespeichert werden. Bei zustandsbehafteten APIs verlassen Sie sich auf den Aufbewahrungszeitraum des Anbieters, nicht auf Ihren eigenen.
Artikel 17 — Recht auf Löschung: Betroffene können die Löschung ihrer personenbezogenen Daten verlangen. Bei zustandsloser Inferenz gibt es nichts zu löschen — die Daten wurden nie gespeichert. Bei zustandsbehafteten Anbietern benötigen Sie einen Mechanismus, um Löschanfragen über deren Infrastruktur zu koordinieren.
Artikel 28 — Auftragsverarbeitungsverträge (AVV): Jeder Dienst, der in Ihrem Auftrag personenbezogene Daten verarbeitet, benötigt einen AVV. Zustandslose Anbieter haben einfachere AVVs, da der Umfang der Verarbeitung auf die unmittelbare Anfrage beschränkt ist.
Der Compliance-Vorteil ist nicht nur theoretisch. In einer Gesundheitsanwendung, die Patientenanfragen verarbeitet, oder einem Rechtstool, das Fallnotizen analysiert, möchten Sie Ihrem Datenschutzbeauftragten sagen können: „Der Inferenz-Anbieter verarbeitet Daten transient und speichert nichts." Das ist eine saubere Aussage. „Sie behalten unsere Prompts 30 Tage, hier ist unser AVV" ist ein deutlich schwierigeres Gespräch.
Architektur: Wo der Zustand liegt
flowchart LR
subgraph Your Infrastructure
A[User] --> B[Your App]
B --> C[(EU Database\nconversation history\nyour retention policy)]
end
subgraph JuiceFactory
B -->|full context per request| D[Stateless API\nRAM only]
D -->|response| B
D --> E[Memory freed\nnothing stored]
end
Sie besitzen die Daten. Sie bestimmen die Aufbewahrungsfrist. Der Inferenz-Anbieter ist eine reine Berechnungsschicht.
Eine zustandslose Chat-Anwendung bauen
Der etwas kontraintuitive Punkt: Zustandslose Inferenz bedeutet nicht, dass Sie keine Mehrfach-Turn-Konversationen führen können. Es bedeutet, dass Sie den Konversationsstatus verwalten, nicht der Anbieter. Sie speichern den Verlauf in Ihrer Datenbank, senden ihn bei jeder Anfrage mit und haben volle Kontrolle darüber, was wie lange aufbewahrt wird.
So richten Sie es ein:
Grundkonfiguration
from openai import OpenAI
client = OpenAI(
api_key="your-juicefactory-api-key",
base_url="https://api.juicefactory.ai/v1"
)
Das ist die einzige Konfigurationsänderung gegenüber einem Standard-OpenAI-Setup. Alles andere — Anfrageformat, Antwortverarbeitung, Streaming — ist identisch.
Konversationsstatus-Verwaltung
from openai import OpenAI
from typing import List
client = OpenAI(
api_key="your-juicefactory-api-key",
base_url="https://api.juicefactory.ai/v1"
)
def chat(history: List[dict], message: str) -> tuple[str, List[dict]]:
"""
Send a message with conversation history to the stateless API.
Returns the response and the updated history.
History lives in your application — the API never sees it
except as part of the current request.
"""
history.append({"role": "user", "content": message})
response = client.chat.completions.create(
model="qwen3-vl",
messages=history,
max_tokens=500,
temperature=0.7
)
assistant_message = response.choices[0].message.content
history.append({"role": "assistant", "content": assistant_message})
return assistant_message, history
# Example usage
conversation = []
reply, conversation = chat(conversation, "What is the GDPR right to erasure?")
print(reply)
reply, conversation = chat(conversation, "Does it apply to AI systems?")
print(reply)
Die API verarbeitet jede Anfrage von Grund auf neu. Sie kontrollieren, welchen Verlauf Sie einschließen — und wie lange Sie ihn in Ihrer eigenen Datenbank speichern.
Produktionsserver mit FastAPI
Ein vollständiger zustandsloser Chat-Server mit DSGVO-konformer Datenverarbeitung:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List, Dict
from openai import OpenAI
import uvicorn
client = OpenAI(
api_key="your-juicefactory-api-key",
base_url="https://api.juicefactory.ai/v1"
)
app = FastAPI()
class Message(BaseModel):
user_id: str
content: str
class Reply(BaseModel):
content: str
message_count: int
# ⚠️ NUR DEMO — In-Memory-Speicher. In der Produktion verwenden Sie eine
# EU-gehostete Datenbank (PostgreSQL etc.) mit Verschlüsselung im
# Ruhezustand und definierten Aufbewahrungsfristen.
conversations: Dict[str, List[dict]] = {}
@app.post("/chat", response_model=Reply)
async def chat(message: Message):
history = conversations.get(message.user_id, [])
history.append({"role": "user", "content": message.content})
response = client.chat.completions.create(
model="qwen3-vl",
messages=history,
max_tokens=500,
temperature=0.7
)
reply = response.choices[0].message.content
history.append({"role": "assistant", "content": reply})
conversations[message.user_id] = history
return Reply(content=reply, message_count=len(history))
@app.delete("/conversations/{user_id}")
async def delete_conversation(user_id: str):
"""
DSGVO Artikel 17 — Recht auf Löschung.
Nutzer fordert Löschung an: Konversationsverlauf entfernen.
Da der Inferenz-Anbieter nichts speichert, ist dies der einzige
Ort, an dem die Daten existieren.
"""
if user_id in conversations:
del conversations[user_id]
return {"status": "deleted"}
raise HTTPException(status_code=404, detail="No conversation found")
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
Der Endpunkt für das Recht auf Löschung ist trivial zu implementieren — denn Sie kontrollieren die einzige Kopie der Daten. Bei einem zustandsbehafteten Anbieter müssten Sie zusätzlich deren Infrastruktur koordinieren.
Was Null-Datenspeicherung abdeckt — und was nicht
„Null-Datenspeicherung" (Zero Data Retention) seitens des Inferenz-Anbieters bedeutet, dass dieser Ihre Prompts und Antworten nicht speichert. Es bedeutet nicht, dass Ihre Anwendung keine Datenspeicherung hat — das liegt in Ihrer Verantwortung.
Was JuiceFactory nicht speichert:
- Prompt-Inhalte
- Antwort-Inhalte
- Abgeleitete Daten aus Ihren Anfragen
- Trainingsdaten
Was die Betriebsprotokolle enthalten (nur Metadaten, keine Inhalte):
- Zeitstempel
- Anfrage-IDs
- Token-Anzahlen
- Latenz-Messungen
- Fehler-Statuscodes
Diese Metadatenfelder enthalten keine personenbezogenen Daten. Sie entsprechen dem, was jeder Infrastrukturanbieter für Abrechnung und Betriebssicherheit protokolliert.
Ihre Anwendungsschicht ist der Ort, an dem die DSGVO-Pflichten greifen:
- Konversationsverlauf in einer EU-gehosteten Datenbank speichern
- Konfigurierbare Aufbewahrungsfristen implementieren
- Lösch-Endpunkte bauen (wie im obigen Beispiel)
- Protokollieren, was Sie für Ihre Zwecke benötigen, unter Ihren eigenen Richtlinien
OpenAI vs. zustandslose EU-Anbieter: Die Unterschiede
Das Standard-API-Verhalten von OpenAI speichert Anfragedaten 30 Tage lang. Enterprise-Vereinbarungen können eine Null-Speicherung konfigurieren, erfordern aber ein Mindestvolumen und explizite Verhandlung.
Selbst wenn bei OpenAI Null-Speicherung konfiguriert ist, befindet sich die zugrunde liegende Infrastruktur in den USA, was eine CLOUD-Act-Exposition erzeugt — US-Behörden können die Herausgabe von Daten erzwingen, die von US-Unternehmen gehalten werden, unabhängig vom Standort der Server.
JuiceFactory ist ein schwedisches, EU-inkorporiertes Unternehmen ohne US-Muttergesellschaft. Die Daten verlassen nie die EU-Rechtshoheit, und es gibt keinen CLOUD-Act-Angriffsvektor.
Für die meisten Entwicklungsprojekte mit nicht-sensiblen Daten ändert dieser Unterschied den Arbeitsalltag nicht. Für Anwendungen, die regulierte Daten verarbeiten — Patienteninformationen, Finanzdaten, Rechtsdokumente — ist er oft der entscheidende Faktor.
Häufig gestellte Fragen
Bedeutet zustandslos, dass ich keine Mehrfach-Turn-Konversationen führen kann? Nein. Sie verwalten den Konversationsverlauf in Ihrer Anwendung und senden ihn bei jeder Anfrage mit. Die API verarbeitet den vollständigen Verlauf, den Sie senden, speichert aber nach der Antwort nichts.
Wie kann ich überprüfen, ob der Anbieter tatsächlich keine Daten speichert? Prüfen Sie den Auftragsverarbeitungsvertrag (verfügbar im JuiceFactory-Portal unter Einstellungen → Rechtliches). Dieser spezifiziert vertragliche Verbote der Datenspeicherung als DSGVO-Verpflichtung nach Art. 28. Sie können auch ein technisches Audit anfordern.
Ersetzt das meine Pflicht zur DSGVO-Konformitätsprüfung? Nein. Zustandslose Inferenz deckt die Auftragsverarbeiterseite der Verpflichtung ab. Sie benötigen weiterhin eine Rechtsgrundlage für die Verarbeitung, Transparenz gegenüber den Nutzern, eine Infrastruktur für Betroffenenrechte sowie Dokumentation als Verantwortlicher.
Was ist mit Embeddings — sind die auch zustandslos? Ja. Der Embedding-Endpunkt von JuiceFactory (Qwen3-Embed) hat dieselbe Null-Speicherungs-Architektur. Dokumente, die Sie einbetten, werden transient verarbeitet.
Ist zustandslose Inferenz langsamer? Nein. Es gibt keinen nennenswerten Leistungsunterschied. Zustandslose Verarbeitung erfordert keine zusätzliche Rechenleistung — sie ist sogar tendenziell etwas schneller, da kein Lese-/Schreib-Overhead für den Zustand anfällt.
Bereit loszulegen? Holen Sie sich Ihren kostenlosen JuiceFactory API-Schlüssel.
Verwandte Leitfäden: Von OpenAI zur EU-API migrieren · EU LLM API Vergleich 2026 · RAG in Python — DSGVO-konform