AnmeldenKontaktKostenlos starten
Base URL and SDK Migration23. Juli 2026Flatkey Team

Stabile OpenAI-kompatible Basis-URL für Seedance-API-Produktteams

Behalte eine stabile OpenAI-kompatible Gateway-Verbindung bei und kapsle Seedance-Text-zu-Video-Jobs anschließend hinter einem sicheren asynchronen Adapter.

Stabile OpenAI-kompatible Basis-URL für Seedance-API-Produktteams

Die Migration eines Text-zu-Video-Produkts von einem Anbieter-Setup zu einem anderen sollte nicht erfordern, jeden Authentifizierungshelfer, jede Umgebungsvariable, jede Retry-Regel und jeden Observability-Hook umzuschreiben. Das sicherere Muster besteht darin, die Teile Ihrer Integration, die stabil bleiben können, von den Teilen zu trennen, die speziell für die Videoerzeugung sind.

Für Teams, die bereits einen OpenAI-ähnlichen Client verwenden, bietet Flatkey einen praktischen Ausgangspunkt: einen API-Schlüssel erstellen, die Base-URL des Clients auf https://router.flatkey.ai/v1 setzen, eine kleine kompatible Anfrage ausführen und die Anfrage in den Usage Logs bestätigen. Das belegt die gemeinsame Verbindungsschicht, bevor Sie einen Seedance-spezifischen asynchronen Video-Workflow anbinden.

Dieser Leitfaden zeigt, wie Sie diese Migration kontrolliert, reversibel und leicht überprüfbar machen.

Schnelle Antwort

Eine stabile OpenAI-kompatible Base-URL kann den Migrationsaufwand für die gemeinsam genutzten Teile einer KI-Integration reduzieren:

  • API-Schlüssel-Injektion
  • Umgebungskonfiguration
  • Client-Initialisierung
  • Anfragen-Korrelation
  • Retry- und Timeout-Richtlinie
  • Nutzungs- und Kostenüberwachung

Das bedeutet nicht, dass jeder Text-zu-Video-Anbieter denselben Request-Body oder denselben Endpunkt verwendet. Videoerzeugung benötigt häufig einen separaten asynchronen Ablauf: einen Job erstellen, die Job-ID speichern, pollen oder einen Webhook empfangen und das finale Asset abrufen.

Das Implementierungsziel ist daher nicht „Seedance durch eine Chat-Completions-Struktur erzwingen“. Es lautet: „Die Gateway-Verbindung stabil halten und dann den videospezifischen Job-Adapter hinter einer kleinen Schnittstelle isolieren.“

Warum die Stabilität der Base-URL für Text-zu-Video-Produkte wichtig ist

Anbieter-Migrationen scheitern meist an den Übergängen rund um den Modellaufruf und nicht an der einen Zeile, die ein Modell benennt. Eine Produktionsanwendung kann API-Schlüssel in einem Secrets Manager, HTTP-Clients in mehreren Diensten, Queue-Worker, Webhook-Handler, Audit-Logs, Ausgabenalarme und Rollback-Einstellungen haben.

Wenn jeder Anbieter direkt in all diese Ebenen eingebunden ist, wird das Hinzufügen eines neuen Videomodells zu einer breit angelegten Infrastrukturänderung. Eine stabile Gateway-Grenze begrenzt die Auswirkungsfläche.

Ebene Stabil halten Nur bei Bedarf ändern
Anmeldedaten Name des Secrets und Injektionsmuster Schlüsselwert und Rotationsprotokoll
Client Gemeinsame HTTP- oder OpenAI-ähnliche Client-Initialisierung Für die ausgewählte Route verwendeter Video-Adapter
Base-URL Eine über die Umgebung gesteuerte Gateway-URL Nur bei einem beabsichtigten Gateway-Rollback
Observability Korrelations-IDs, Logs, Latenz, Kostenprüfung Anbieterspezifische Job-Status-Felder
Zuverlässigkeit Timeout-Budgets, Retry-Verantwortung, Circuit-Breaker-Richtlinie Polling-Intervall und finale Video-Status
Produktlogik Benutzeranfrage, Berechtigung, Kontingent, Asset-Lebenszyklus Seedance-Prompt und Video-Parameter

Das Ergebnis ist eine kleinere Migrationsfläche. Ihr Produktcode hängt weiterhin von einer stabilen internen Schnittstelle ab, während der Adapter die Unterschiede in den Video-APIs übernimmt.

Die sicherste Migrationsreihenfolge

Verwenden Sie zwei separate Prüfungen, anstatt zu versuchen, den gesamten Video-Pfad in einer einzigen Anfrage zu validieren.

  1. Verbindungssmoke-Test: Authentifizierung, die OpenAI-kompatible Basis-URL, den Netzwerkzugriff und die Usage Logs überprüfen.
  2. Video-Workflow-Test: den aktuellen Seedance-Route, akzeptierte Parameter, asynchrone Statusübergänge, Asset-Bereitstellung und Abrechnungsverhalten überprüfen.

Diese Trennung macht Fehler leichter zu klassifizieren. Wenn der Smoke-Test fehlschlägt, liegt das Problem wahrscheinlich bei Anmeldedaten, der Basis-URL-Konfiguration, dem Networking oder der gemeinsamen Request-Verarbeitung. Wenn der Smoke-Test besteht, der Video-Job aber fehlschlägt, konzentrieren Sie sich auf die Modellroute und den Video-Adapter.

Schritt 1: die Basis-URL in die Konfiguration verschieben

Hinterlegen Sie keine Provider-URL hart im Anwendungscode. Legen Sie die Gateway-Verbindung in Umgebungsvariablen ab, damit Bereitstellung und Rollback keine Codeänderungen erfordern.

FLATKEY_API_KEY=sk-fk-replace-me
AI_BASE_URL=https://router.flatkey.ai/v1
AI_SMOKE_TEST_MODEL=gpt-4o-mini
VIDEO_PROVIDER=flatkey
VIDEO_MODEL=replace-with-current-seedance-route

Behandeln Sie den Wert des Videomodells als Einstellung zur Bereitstellungszeit. Modell-Aliase und unterstützte Fähigkeiten können sich ändern. Bestätigen Sie daher vor dem Rollout die aktuelle Route in Flatkey, statt eine alte Kennung aus einem Blogbeitrag zu kopieren.

Schritt 2: den vorhandenen OpenAI-ähnlichen Client einmal initialisieren

Wenn Ihre Anwendung bereits das OpenAI-Python-SDK verwendet, ist die gemeinsame Verbindungsänderung absichtlich klein.

import os
from openai import OpenAI


client = OpenAI(
    api_key=os.environ["FLATKEY_API_KEY"],
    base_url=os.getenv("AI_BASE_URL", "https://router.flatkey.ai/v1"),
)

Die entsprechende TypeScript-Konfiguration verwendet dieselbe Grenze:

import OpenAI from "openai";

export const aiClient = new OpenAI({
  apiKey: process.env.FLATKEY_API_KEY,
  baseURL: process.env.AI_BASE_URL ?? "https://router.flatkey.ai/v1",
});

Die wichtige Designentscheidung ist, dass Services einen konfigurierten Client importieren, statt über die gesamte Codebasis hinweg ihre eigenen providerspezifischen Clients zu erstellen.

Schritt 3: einen Verbindungssmoke-Test ausführen, bevor Sie Video-Jobs anfassen

Der Quickstart von Flatkey verwendet eine OpenAI-kompatible Chat-Completions-Anfrage und fordert Sie dann auf, den Aufruf in den Usage Logs zu überprüfen. Verwenden Sie diesen kleinen Test, um die gemeinsame Integrationsschicht zu verifizieren.

import os

from app.ai_client import client


def verify_gateway_connection() -> dict:
    response = client.chat.completions.create(
        model=os.getenv("AI_SMOKE_TEST_MODEL", "gpt-4o-mini"),
        messages=[
            {"role": "user", "content": "Reply with: gateway connection verified"}
        ],
        max_tokens=20,
    )

    return {
        "request_model": response.model,
        "finish_reason": response.choices[0].finish_reason,
        "usage": response.usage.model_dump() if response.usage else None,
    }

Diese Anfrage testet nicht die Seedance-Videoerstellung. Sie überprüft vier Voraussetzungen, von denen beide Workflows abhängen:

  • der Schlüssel ist vorhanden und wird akzeptiert
  • die Basis-URL ist korrekt
  • die Anwendung kann den Router erreichen
  • die Anfrage erscheint im Dashboard mit Nutzungsdaten

Für eine detaillierte Schritt-für-Schritt-Anleitung für die erste Anfrage verwenden Sie den Seedance-API-Quickstart für Produktteams.

Schritt 4: Seedance hinter einem asynchronen Video-Adapter kapseln

Die Text-zu-Video-Generierung dauert in der Regel länger als eine normale synchrone API-Anfrage. Der öffentliche Seedance-API-Flow beschreibt die Erstellung von Aufgaben, gefolgt von Statusprüfungen oder Webhook-Zustellung. Modellieren Sie diesen Lebenszyklus explizit.

export type VideoJobState =
  | "queued"
  | "running"
  | "succeeded"
  | "failed"
  | "cancelled";

export interface VideoJob {
  id: string;
  state: VideoJobState;
  outputUrl?: string;
  errorCode?: string;
}

export interface TextToVideoAdapter {
  createJob(input: {
    prompt: string;
    model: string;
    idempotencyKey: string;
  }): Promise<VideoJob>;

  getJob(jobId: string): Promise<VideoJob>;
}

Der Adapter sollte die stabilen internen Felder Ihres Produkts in das vom aktuellen Video-Endpunkt erforderliche Payload übersetzen. Halten Sie nur für den Anbieter relevante Parameter innerhalb dieses Adapters, statt sie in Controller, UI-Code oder Queue-Schemas durchsickern zu lassen.

Nehmen Sie nicht an, dass der Video-Endpunkt /chat/completions ist, und nehmen Sie nicht an, dass eine Chat-Antwort belegt, dass die ausgewählte Seedance-Route verfügbar ist. Bestätigen Sie den aktuellen Endpunkt, den Modell-Alias, die Parameter und die Statuswerte zum Zeitpunkt der Implementierung in der Produktdokumentation oder im Dashboard.

Schritt 5: Polling sicher und begrenzt machen

Ein Video-Worker benötigt andere Zuverlässigkeitsregeln als eine Chat-Anfrage. Endloses Polling ist keine Retry-Strategie.

import random
import time


TERMINAL_STATES = {"succeeded", "failed", "cancelled"}


def wait_for_video(adapter, job_id: str, deadline_seconds: int = 600):
    started_at = time.monotonic()
    attempt = 0

    while time.monotonic() - started_at < deadline_seconds:
        job = adapter.get_job(job_id)
        if job.state in TERMINAL_STATES:
            return job

        attempt += 1
        delay = min(30, 2 ** min(attempt, 4))
        time.sleep(delay + random.uniform(0, 1))

    raise TimeoutError(f"Video job {job_id} exceeded its processing deadline")

Das Polling in der Produktion sollte außerdem die Vorgaben des Anbieters und jeden Retry-After-Header berücksichtigen. Speichern Sie die externe Job-ID vor dem Polling, damit ein Neustart des Workers kein doppeltes Video erzeugt.

Wenn Webhooks verfügbar sind, überprüfen Sie Signaturen, bestätigen Sie schnell den Empfang und machen Sie den Handler idempotent. Ein Webhook kann mehr als einmal zugestellt werden oder erst eintreffen, nachdem ein Polling-Worker den Job bereits abgeschlossen hat.

Schritt 6: Observability auf beiden Ebenen hinzufügen

Überwachen Sie die Gateway-Anfrage und den Video-Job auf Produktebene getrennt.

Gateway-Felder

  • Umgebung und Dienstname
  • interne Anforderungs-ID
  • Route oder Modell-Alias
  • HTTP-Status
  • Latenz
  • Retry-Anzahl
  • Nutzungs- oder Kostendaten, die im Dashboard sichtbar sind

Video-Job-Felder

  • externe Job-ID
  • Benutzer- oder Workspace-ID
  • Prompt-Version, ohne standardmäßig sensible Prompt-Inhalte zu protokollieren
  • Modell und Fähigkeitsmodus
  • Zeitstempel für Queue, Start und Abschluss
  • Endzustand und normalisierter Fehlercode
  • Speicherort des Ausgabe-Assets und Aufbewahrungsrichtlinie

Das Dashboard ist der gemeinsame operative Kontrollpunkt. Vergleichen Sie nach dem Smoke-Test und dem ersten kontrollierten Video-Job die Anwendungsprotokolle mit den Flatkey-Nutzungsaufzeichnungen. Untersuchen Sie fehlende Einträge, doppelte Jobs, unerwartete Modellnamen oder Kostenänderungen, bevor Sie den Traffic ausweiten.

Schritt 7: Verwenden Sie einen reversiblen Rollout-Plan

Die Änderung einer einzelnen Basis-URL ist einfach. Ein sicherer Rollout erfordert dennoch Kontrollen.

  1. Führen Sie den Smoke-Test aus einer Entwicklerumgebung aus.
  2. Führen Sie einen nicht sensiblen Seedance-Bewertungsjob aus.
  3. Bestätigen Sie die Behandlung des Job-Status, den Abruf von Assets und die Sichtbarkeit der Nutzung.
  4. Aktivieren Sie die Route für ein internes Konto oder einen kleinen Prozentsatz des Traffics.
  5. Vergleichen Sie Erfolgsrate, End-to-End-Latenz und Kosten pro abgeschlossenem Asset.
  6. Erhöhen Sie den Traffic erst, nachdem das Fehlerbudget akzeptabel bleibt.
  7. Halten Sie die vorherige Provider-Konfiguration verfügbar, bis die Rollback-Kriterien ablaufen.

Definieren Sie Rollback-Trigger vor dem Start. Beispiele sind wiederholte Authentifizierungsfehler, eine erhöhte Rate fehlgeschlagener Jobs, Jobs, die über die Verarbeitungsfrist hinaus hängen bleiben, fehlende Nutzungsaufzeichnungen oder Fehler beim Abruf der Ausgabe.

Migrations-Checkliste

Prüfung Bestehensbedingung
Schlüsselbesitz Ein benannter Verantwortlicher kann den Flatkey-Schlüssel rotieren und widerrufen
Geheimnisbehandlung Der Schlüssel liegt serverseitig vor und fehlt im Quellcode-Management und in Browser-Bundles
Stabile Basis-URL Alle gemeinsam genutzten Clients lesen AI_BASE_URL aus der Konfiguration
Verbindungstest Der OpenAI-kompatible Smoke-Test ist erfolgreich
Dashboard-Überprüfung Die Smoke-Test-Anfrage erscheint in den Usage Logs
Aktuelle Seedance-Route Der Modellalias und die Fähigkeit sind zum Rollout-Zeitpunkt bestätigt
Asynchroner Lebenszyklus Erstellen, Polling oder Webhook, Endzustand und Asset-Abruf sind getestet
Idempotenz Wiederholungen können keine unbeabsichtigten doppelten Videos erzeugen
Timeout-Budget Worker stoppen und eskalieren Jobs, die die Frist überschreiten
Beobachtbarkeit Gateway-Anfragen und Video-Jobs teilen sich eine Korrelations-ID
Rollback Die vorherige Konfiguration und der Entscheidungs-Verantwortliche sind dokumentiert

Häufige Migrationsfehler

OpenAI-Kompatibilität als universelle Endpunktkompatibilität behandeln

Ein OpenAI-kompatibler Client kann die Authentifizierung und unterstützte Anforderungsfamilien vereinfachen. Er garantiert nicht, dass jede multimodale oder Video-Operation dasselbe Schema hat. Halten Sie den Video-Adapter explizit.

Schlüssel, Basis-URL, Modell und Worker-Logik in einem Release ändern

Das erschwert das Isolieren von Fehlern. Beweisen Sie zuerst die Gateway-Verbindung und ändern Sie dann den Video-Pfad.

Die Erstellung von Jobs ohne Idempotenzstrategie erneut versuchen

Ein Netzwerk-Timeout kann auftreten, nachdem der Provider den Job angenommen hat. Blind ein weiterer Job kann zu einem doppelten Asset führen und dafür abgerechnet werden.

Das HTTP-Anfrage-Timeout als Video-Deadline verwenden

Die Anfrage zum Erstellen eines Jobs und der Lebenszyklus der Videoverarbeitung sind unterschiedliche Timer. Halten Sie die erste Anfrage kurz und verfolgen Sie dann die asynchrone Frist im dauerhaften Job-Status.

Die Dashboard-Überprüfung überspringen

Eine erfolgreiche Anwendungsantwort ist nicht die vollständige Betriebsprüfung. Stellen Sie sicher, dass Nutzungs-, Modell-, Latenz- und Kosteninformationen dort angezeigt werden, wo das Team sie erwartet zu überwachen.

FAQ

Kann ich Seedance integrieren, indem ich nur die OpenAI-Basis-URL ändere?

Das Ändern der Basis-URL kann die gemeinsame Verbindungsschicht für unterstützte OpenAI-kompatible Anfragen vereinfachen. Die Seedance-Videogenerierung kann dennoch einen dedizierten asynchronen Endpunkt und anbieterspezifische Parameter erfordern. Prüfen Sie vor der Implementierung die aktuelle Route.

Was sollte während der Migration unverändert bleiben?

Halten Sie Secret-Injektion, Umgebungsnamen, Korrelations-IDs, Logging, Alerting und die produktseitige Videooberfläche stabil. Beschränken Sie anbieterspezifische Änderungen auf Konfiguration und den Video-Adapter.

Warum einen Chat-Smoke-Test für ein Videoprodukt ausführen?

Der Smoke-Test isoliert Gateway-Authentifizierung, Basis-URL, Netzwerk und Usage Logs schnell vom längeren Video-Workflow. Er ist ein Verbindungstest, kein Test der Videofähigkeiten.

Sollte ich beim Abschluss von Videos pollen oder Webhooks verwenden?

Verwenden Sie den vom aktuellen Video-API und Ihrer Infrastruktur unterstützten Mechanismus. Polling ist einfacher, muss aber begrenzt sein und Backoff verwenden. Webhooks reduzieren Polling, erfordern aber Signaturprüfung, Idempotenz und Abgleich für verpasste Ereignisse.

Wie verhindere ich doppelte Video-Jobs?

Erstellen und speichern Sie einen Idempotenzschlüssel für die Produktanfrage, speichern Sie die externe Job-ID sofort und lassen Sie Wiederholungsversuche nach Möglichkeit den vorhandenen Job fortsetzen.

Wo sollte ich die Kosten vor dem Rollout vergleichen?

Lesen Sie die aktuelle Flatkey-Preisseite und vergleichen Sie dann die Kosten pro abgeschlossenem Video statt nur den Preis pro Anfrage oder pro Sekunde. Beziehen Sie fehlgeschlagene und doppelte Jobs in die Berechnung ein.

Erstellen Sie zuerst die stabile Grenze

Die schnellste Migration ist nicht diejenige mit den wenigsten am ersten Tag geänderten Zeilen. Es ist diejenige, die zukünftige Anbieterwechsel auf eine kontrollierte Konfigurationsänderung und einen kleinen Adapter reduziert.

Beginnen Sie mit einem Flatkey-Schlüssel, verschieben Sie den gemeinsamen Client auf die stabile Basis-URL, überprüfen Sie die Verbindung in den Usage Logs und testen Sie dann den aktuellen Seedance-Workflow als asynchrones Jobsystem. Wenn die Prüfungen bestanden sind, holen Sie sich einen Schlüssel und rollen Sie mit expliziten Metriken und Rollback-Triggern aus.