Was Supabase Edge Functions sind

Edge Functions sind serverlose Deno-TypeScript-Funktionen, die global im Supabase Edge Network ausgeführt werden. Wenn ein Nutzer eine Aktion in deiner WeWeb- oder FlutterFlow-App auslöst, ruft das Frontend deine Edge Function auf, diese enthält Geschäftslogik, ruft externe APIs auf und gibt Ergebnisse zurück.

Für KI-Integrationen sind Edge Functions unverzichtbar: sie sind die Schicht, in der dein OpenAI API-Key sicher gespeichert wird, niemals dem Client exponiert. Kein Frontend-Code enthält je Geheimnisse.

Wichtig für den deutschen Markt: Supabase bietet EU-Regionen (eu-west-1 Frankfurt, eu-west-2 Irland). Edge Functions, die in diesen Regionen deployt werden, verarbeiten Daten innerhalb der EU, ein zentrales Anforderung für DSGVO-Konformität, insbesondere wenn du personenbezogene Daten an KI-Dienste weiterleitest.

Grundlegende Edge Function für OpenAI

Eine einfache Edge Function, die OpenAI aufruft, hat diese Struktur:

```typescript import { OpenAI } from "https://deno.land/x/openai/mod.ts";

Deno.serve(async (req) => { const { prompt, userId } = await req.json(); const openai = new OpenAI({ apiKey: Deno.env.get("OPENAI_API_KEY") }); const response = await openai.chat.completions.create({ model: "gpt-4o", messages: [{ role: "user", content: prompt }], max_tokens: 500 }); return new Response(JSON.stringify({ result: response.choices[0].message.content })); }); ```

Deploy mit supabase functions deploy ai-handler. Key setzen mit supabase secrets set OPENAI_API_KEY=sk-.... Der Key ist verschlüsselt gespeichert und niemals im Code sichtbar.

Für die Produktion: füge Authentifizierungs-Validierung hinzu (prüfe JWT des Nutzers), Ratenlimitierung (wie viele Anfragen pro Stunde pro Nutzer) und Nutzungsprotokollierung (speichere jeden Aufruf in Supabase für Abrechnung und Monitoring).

RAG mit Supabase pgvector implementieren

RAG (Retrieval Augmented Generation) ermöglicht KI-Antworten basierend auf deinen eigenen Daten, nicht auf OpenAIs allgemeinem Wissen. Die Architektur:

1. Ingest: Dokumente in Chunks aufteilen → OpenAI Embeddings generieren → in Supabase mit pgvector-Extension speichern 2. Retrieve: Nutzerfrage mit OpenAI einbetten → Ähnlichkeitssuche in Supabase → relevante Chunks zurückgeben 3. Generate: Relevante Chunks + Nutzerfrage → GPT-4o → faktisch korrekte Antwort

Die pgvector-Extension aktivieren: create extension vector in extensions schema;. Dann eine Tabelle mit einem Vektor-Spalte erstellen: embedding vector(1536). Für die Suche eine Funktion match_documents erstellen, die Kosinus-Ähnlichkeit berechnet.

Für deutsche B2B-Apps, die auf internen Dokumenten trainiert werden: dieser Ansatz hält sensible Unternehmensdaten in Supabase EU-Region und sendet nur nicht-identifizierbare Embedding-Vektoren an OpenAI, eine DSGVO-freundlichere Architektur als rohes Dokument-Sharing.

Streaming-Antworten implementieren

Streaming zeigt KI-Antworten token-für-token an, wie ChatGPT. Das verbessert die wahrgenommene Performance deutlich: Nutzer sehen sofort, dass etwas passiert, anstatt 3-8 Sekunden auf eine vollständige Antwort zu warten.

In der Edge Function: setze stream: true im OpenAI-Aufruf und gib den Stream als SSE (Server-Sent Events) zurück. In WeWeb: nutze einen EventSource-Aufruf oder einen Custom Action mit Fetch-Streaming.

Für FlutterFlow-Mobile: Streaming ist komplexer zu implementieren (Flutter hat keine native SSE-Unterstützung), aber machbar mit dem http-Package und einem Custom Dart-Decoder. Für die meisten Mobile-KI-Features ist nicht-streaming ausreichend, die 3-Sekunden-Latenz ist mit einem Ladeindikator akzeptabel.

Für deutsche B2B-Apps mit professionellen Nutzern, die täglich viele KI-Anfragen stellen, ist Streaming ein erheblicher UX-Vorteil und kann die wahrgenommene App-Qualität deutlich verbessern.

DSGVO-konforme KI-Verarbeitung

Wenn deine App KI nutzt und DSGVO-relevant ist (also immer für deutsche Unternehmen mit EU-Nutzern), gibt es konkrete Anforderungen:

Auftragsverarbeitungsvertrag (AVV): OpenAI muss als Auftragsverarbeiter eingestuft werden. Schließe einen AVV über die OpenAI-Unternehmens-Einstellungen ab.

Datensparsamkeit: Sende niemals mehr Daten an OpenAI als nötig. Anonymisiere oder pseudonymisiere personenbezogene Daten vor dem Senden, wenn möglich.

Verarbeitungsverzeichnis: Dokumentiere in deinem DSGVO-Verarbeitungsverzeichnis, welche Daten du für welchen Zweck an OpenAI sendest.

Drittlandübermittlung: OpenAI verarbeitet in den USA. Dokumentiere dies in deiner Datenschutzrichtlinie mit Hinweis auf Standardvertragsklauseln (SCCs).

Für besonders sensible Daten (Gesundheit, Finanz, Rechtliches) erwäge Azure OpenAI mit EU-Region oder Mistral AI (französisches Unternehmen, EU-Infrastruktur) als DSGVO-freundlichere Alternativen.

Edge Functions in WeWeb und FlutterFlow aufrufen

In WeWeb: erstelle eine REST API Resource, die auf deine Edge Function URL zeigt (https://[project-id].supabase.co/functions/v1/[function-name]). Konfiguriere den Authorization-Header mit dem Supabase-Anon-Key. Erstelle eine Action, die die Resource aufruft und das Ergebnis in einer Variablen speichert.

In FlutterFlow: nutze eine Custom Action oder einen API-Call in den Backend-Calls-Einstellungen. Füge deine Edge Function URL als POST-Endpunkt hinzu, konfiguriere den Authorization-Header und parse die JSON-Antwort in FlutterFlow-Variablen.

Für beide: füge Loading States hinzu (Spinner während des API-Aufrufs), Error States (Fehlermeldung wenn die Edge Function 500 zurückgibt) und Rate-Limit-Handling (Hinweis an den Nutzer wenn 429 zurückgegeben wird). Diese Details machen den Unterschied zwischen einer App, die sich professionell anfühlt, und einer, die sich unfertig anfühlt.

Cold-Start-Optimierung für Edge Functions

Supabase Edge Functions basieren auf Deno und laufen im globalen Edge-Netzwerk von Deno Deploy. Ein Cold Start, der erste Aufruf einer Funktion, die längere Zeit nicht aufgerufen wurde, dauert typischerweise 200 bis 500ms. Für KI-Features, bei denen Nutzer sofortiges Feedback erwarten, kann diese Cold-Start-Latenz spürbar sein.

Mehrere Optimierungsstrategien reduzieren die Auswirkung von Cold Starts. Erstens: Importiere nur, was du brauchst. Eine Funktion, die das gesamte OpenAI-SDK importiert, fügt mehr Bundle-Gewicht hinzu als eine, die nur den ChatCompletion-Typ importiert. Verwende benannte Imports und Tree-Shaking-freundliche Muster. Zweitens: Wärme kritische Funktionen mit einem Zeitplan vor. Ein Supabase-Cron-Job, der deine KI-Funktion alle 5 Minuten mit einer synthetischen Anfrage aufruft, hält die Instanz warm, zu den Kosten weniger API-Aufrufe pro Tag.

Drittens: Nutze Response-Caching für deterministische Prompts. Wenn Nutzer häufig denselben Fragetyp stellen (Dokumentzusammenfassung, Kategorieklassifikation), cache den Output in einer Supabase-Tabelle mit einem Hash des Inputs als Schlüssel. Gib das gecachte Ergebnis sofort für wiederholte Inputs zurück, kein Cold Start, keine API-Kosten, Antwort unter 10ms. Das ist besonders wirksam für Klassifikationsaufgaben, bei denen die Menge möglicher Inputs begrenzt ist.

KI-Inferenz am Edge: OpenAI und Anthropic aus Edge Functions aufrufen

Sowohl das OpenAI-SDK als auch das Anthropic-SDK funktionieren in Denos Laufzeitumgebung, die Supabase Edge Functions verwenden. Du importierst sie über npm:-Spezifizierer: import OpenAI from 'npm:openai' und import Anthropic from 'npm:@anthropic-ai/sdk'. Beide SDKs übernehmen die HTTPS-Aufrufe, Retry-Logik und Fehlerbehandlung für ihre jeweiligen APIs.

Für ein produktives KI-Feature solltest du die Modellwahl dynamisch handhaben. Speichere den Modellnamen als Supabase Edge Function Secret statt ihn hart zu kodieren. Das erlaubt dir, von gpt-4o zu gpt-4o-mini (für kostengünstigere Aufgaben) oder von claude-3-5-sonnet zu claude-3-haiku zu wechseln, ohne die Funktion neu zu deployen. Du aktualisierst das Secret, und die nächste Anfrage nutzt das neue Modell.

Kostenmanagement ist entscheidend für KI-Funktionen mit offenem Nutzerzugang. Protokolliere jeden API-Aufruf mit der in der Antwort zurückgegebenen Token-Anzahl. Setze monatliche Ausgabenwarnungen in deinem OpenAI- oder Anthropic-Dashboard. Begrenze für Free-Tier-Nutzer die Nutzung auf ein Token-Budget pro Monat und erzwinge es in der Edge Function vor dem API-Aufruf. Wir bauen diese Kosten-Tracking-Ebene in jedes KI-Feature ein, das wir ausliefern, sie hat auf mehr als einem Kundenprojekt unerwartete Rechnungen von 3.000 US-Dollar pro Monat verhindert.

Edge Functions als Webhook-Handler nutzen

Edge Functions sind eine ausgezeichnete Wahl für die Verarbeitung von Webhooks von externen Diensten, Stripe-Zahlungsereignisse, GitHub-Push-Benachrichtigungen, Twilio-SMS oder jeden Dienst, der Daten an eine URL postet. Sie sind immer verfügbar (kein Server-Hochfahren nötig), global verteilt (geringe Latenz vom Rechenzentrum des Webhook-Senders) und haben direkten Supabase-Datenbankzugriff, um Datensätze als Reaktion auf Ereignisse zu aktualisieren.

Eine Stripe-Webhook-Edge-Function validiert die Webhook-Signatur, parst den Event-Typ und aktualisiert den relevanten Supabase-Datensatz. Für ein Abonnement-Upgrade-Event: verifiziere die Signatur mit stripe.webhooks.constructEvent() mit deinem Webhook-Secret, extrahiere die Kunden-ID und den neuen Plan, aktualisiere die subscriptions-Tabelle in Supabase und gib innerhalb von 5 Sekunden (Stripes Timeout) eine 200-Antwort zurück. Das ist der komplette Zahlungslebenszyklus-Handler, kein separater Server nötig.

Für KI-Anwendungen werden Webhooks für asynchrone Verarbeitung genutzt. Wenn ein Nutzer ein Dokument zur KI-Analyse hochlädt, lässt du ihn nicht warten, du reihst die Aufgabe über eine Supabase-Zeileneinfügung ein, ein Hintergrundjob übernimmt sie und ruft die KI-API auf, und wenn das Ergebnis bereit ist, sendet ein Supabase-Trigger eine Push-Benachrichtigung oder aktualisiert das Dashboard über Realtime. Edge Functions handhaben sowohl den eingehenden Webhook als auch die ausgehende Benachrichtigung.

Sicherheitsmuster für KI-Edge-Functions

Die wichtigste Sicherheitsmaßnahme für jede KI-Edge-Function ist, die Identität des Aufrufers zu verifizieren, bevor irgendein API-Aufruf gemacht wird. Extrahiere immer das JWT aus dem Authorization: Bearer-Header, rufe supabase.auth.getUser(token) auf, um es zu verifizieren, und prüfe, dass der Nutzer die passende Rolle oder Abonnementstufe für die angeforderte Operation hat. Eine unauthentifizierte KI-Funktion ist ein direkter Weg zu unbegrenzten API-Ausgaben für jeden, der deine Endpoint-URL entdeckt.

Secrets-Management in Supabase Edge Functions nutzt den supabase secrets set CLI-Befehl und Deno.env.get() zur Laufzeit. Kodiere API-Keys niemals hart im Funktions-Quellcode, selbst in einem privaten Repository, Secrets gehören in den Secrets-Store, nicht in die Versionskontrolle. Rotiere Secrets sofort, wenn ein Repository versehentlich öffentlich gemacht wird oder ein Key in Fehlerprotokollen geloggt wird.

Eingabevalidierung verhindert Prompt-Injection-Angriffe, bei denen ein böswilliger Nutzer einen Input konstruiert, der das Verhalten der KI ändert. Validiere die Eingabelänge, entferne gefährliche Zeichen, und wenn die Funktion einen System-Prompt verwendet, der nutzerseitig gelieferte Daten enthält, bereinige die Nutzereingabe vor der Interpolation. Eine einfache Längenprüfung (if (prompt.length > 2000) return error) eliminiert eine Kategorie von Missbrauch, bei der Nutzer extrem lange Prompts konstruieren, um die Rechenkosten zu maximieren.