Skip to content

Anthropic-kompatible API: /v1/messages und die Schlüsselvereinbarung mit Claude Code ​

Wenn Sie Claude Code über das lokale Gateway leiten möchten, ohne die Anthropic-Protokollnutzung zu ändern, müssen Sie nur die Base URL auf Antigravity Tools umlenken und eine Anfrage mit /v1/messages erfolgreich ausführen.

Was ist die Anthropic-kompatible API? ​

Die Anthropic-kompatible API bezeichnet den Anthropic Messages-Protokoll-Endpunkt, den Antigravity Tools bereitstellt. Sie empfängt /v1/messages-Anfragen, führt lokal eine Nachrichtenbereinigung, Streaming-Verpackung und eine Wiederholungsrotation durch und leitet die Anfrage dann an Upstream weiter, wo die echte Modellkapazität bereitgestellt wird.

Was Sie nach diesem Kurs können ​

  • Nutzen Sie den /v1/messages-Endpunkt von Antigravity Tools, um Claude Code (oder jeden Anthropic Messages-Client) auszuführen
  • Klar verstehen, wie Base URL und Authentifizierungsheader konfiguriert werden, um 401/404-Fehler zu vermeiden
  • Wenn Sie Streaming benötigen, erhalten Sie Standard-SSE; wenn nicht, erhalten Sie auch JSON
  • Wissen, welche "Protokoll-Patches" der Proxy im Hintergrund durchführt (Warmup-Interception, Nachrichtenbereinigung, Signatur-Fallback)

Ihr aktuelles Dilemma ​

Sie möchten Claude Code/Anthropic SDK verwenden, aber Netzwerk-, Konto-, Kontingent- und Ratenbegrenzungsprobleme machen die Gespräche sehr instabil; Sie haben Antigravity Tools bereits als lokales Gateway ausgeführt, stoßen aber häufig auf diese Arten von Problemen:

  • Die Base URL wurde zu .../v1 oder vom Client "Pfad gestapelt", was direkt zu 404 führt
  • Proxy-Authentifizierung ist aktiviert, aber Sie wissen nicht, welchen Header der Client zur Übertragung des Keys verwendet, was zu 401 führt
  • Hintergrund-Warmup-/Zusammenfassungsaufgaben von Claude Code verbrauchen das Kontingent stillschweigend

Wann Sie diesen Ansatz verwenden ​

  • Sie möchten Claude Code CLI integrieren und hoffen, dass es "nach dem Anthropic-Protokoll" direkt mit dem lokalen Gateway verbunden wird
  • Ihr verfügbarer Client unterstützt nur die Anthropic Messages API (/v1/messages) und Sie möchten den Code nicht ändern

🎒 Vorbereitung vor dem Start ​

Voraussetzung

Dieser Kurs setzt voraus, dass Sie bereits den grundlegenden Kreislauf des lokalen Reverse-Proxys erfolgreich ausgeführt haben (kann auf /healthz zugreifen, kennen den Proxy-Port und ob die Authentifizierung aktiviert ist). Wenn dies noch nicht funktioniert, lesen Sie zuerst Starten Sie den lokalen Reverse-Proxy und integrieren Sie den ersten Client.

Sie müssen drei Dinge vorbereiten:

  1. Proxy-Adresse (Beispiel: http://127.0.0.1:8045)
  2. Ob die Proxy-Authentifizierung aktiviert ist (und der entsprechende proxy.api_key)
  3. Ein Client, der Anthropic Messages-Anfragen senden kann (Claude Code / curl sind beide geeignet)

Kernidee ​

Die Anthropic-kompatible API entspricht in Antigravity Tools einer Gruppe fester Routen: POST /v1/messages, POST /v1/messages/count_tokens, GET /v1/models/claude (siehe Router-Definition in src-tauri/src/proxy/server.rs).

Dabei ist /v1/messages der "Haupteinstiegspunkt". Bevor der Proxy die eigentliche Upstream-Anfrage sendet, führt er eine Reihe von Kompatibilitätsbehandlungen durch:

  • Bereinigen von Feldern in der Nachrichtenhistorie, die vom Protokoll nicht akzeptiert werden (z. B. cache_control)
  • Zusammenführen aufeinanderfolgender Nachrichten derselben Rolle, um Validierungsfehler bei "Rollenwechsel" zu vermeiden
  • Erkennen von Warmup-Nachrichten von Claude Code und direktes Zurückgeben einer simulierten Antwort, um Kontingentverschwendung zu reduzieren
  • Durchführen von Wiederholungen und Kontenrotation basierend auf dem Fehlertyp (maximal 3 Versuche), um die Stabilität langer Sitzungen zu verbessern

Gehen Sie mit mir durch ​

Schritt 1: Stellen Sie sicher, dass die Base URL nur bis zum Port geschrieben ist ​

Warum/v1/messages ist eine feste Route auf der Proxy-Seite. Wenn die Base URL zu .../v1 geschrieben wird, kann sie leicht vom Client erneut mit /v1/messages verkettet werden, was schließlich zu .../v1/v1/messages führt.

Sie können die Erreichbarkeit zunächst direkt mit curl testen:

bash
# Sie sollten sehen: {"status":"ok"}
curl -sS "http://127.0.0.1:8045/healthz"

Schritt 2: Wenn Sie Authentifizierung aktiviert haben, merken Sie sich diese 3 Header ​

Warum Die Authentifizierungs-Middleware des Proxys entnimmt den Key aus Authorization, x-api-key, x-goog-api-key; wenn die Authentifizierung aktiviert ist, aber der Header nicht übereinstimmt, erhalten Sie konsequent 401.

Welche Authentifizierungsheader akzeptiert der Proxy?

Authorization: Bearer <key>, x-api-key: <key>, x-goog-api-key: <key> können alle verwendet werden (siehe src-tauri/src/proxy/middleware/auth.rs).

Schritt 3: Verbinden Sie Claude Code CLI direkt mit dem lokalen Gateway ​

Warum Claude Code verwendet das Anthropic Messages-Protokoll; wenn Sie seine Base URL auf das lokale Gateway umlenken, können Sie den Vertrag /v1/messages wiederverwenden.

Konfigurieren Sie die Umgebungsvariablen nach dem Beispiel in der README:

bash
export ANTHROPIC_API_KEY="sk-antigravity"
export ANTHROPIC_BASE_URL="http://127.0.0.1:8045"
claude

Sie sollten sehen: Claude Code kann normal gestartet werden und nach dem Senden einer Nachricht eine Antwort erhalten.

Schritt 4: Listen Sie zuerst die verfügbaren Modelle auf (für curl/SDK) ​

Warum Verschiedene Clients übergeben model unverändert; wenn Sie die Modellliste zuerst zur Hand haben, wird die Fehlerbehebung viel schneller.

bash
curl -sS "http://127.0.0.1:8045/v1/models/claude" | jq

Sie sollten sehen: Ein JSON mit object: "list" wird zurückgegeben, wobei data[].id die verfügbaren Modell-IDs sind.

Schritt 5: Verwenden Sie curl, um /v1/messages aufzurufen (nicht-streaming) ​

Warum Dies ist die minimale reproduzierbare Kette: ohne Claude Code können Sie auch bestätigen, wo "Routing + Authentifizierung + Anfragetext" genau fehlschlägt.

bash
curl -i "http://127.0.0.1:8045/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk-antigravity" \
  -d '{
    "model": "<wählen Sie eines aus /v1/models/claude>",
    "max_tokens": 128,
    "messages": [
      {"role": "user", "content": "Hallo, stellen Sie sich kurz vor"}
    ]
  }'

Sie sollten sehen:

  • HTTP 200
  • Die Antwortheader können X-Account-Email und X-Mapped-Model enthalten (zur Fehlerbehebung)
  • Der Antwortkörper ist ein JSON im Anthropic Messages-Stil (type: "message")

Schritt 6: Wenn Sie Streaming benötigen, öffnen Sie stream: true ​

Warum Claude Code verwendet SSE; Sie können SSE auch selbst mit curl ausführen, um zu bestätigen, dass es keine Proxy-/Pufferprobleme gibt.

bash
curl -N "http://127.0.0.1:8045/v1/messages" \
  -H "Content-Type: application/json" \
  -H "x-api-key: sk-antigravity" \
  -d '{
    "model": "<wählen Sie eines aus /v1/models/claude>",
    "max_tokens": 128,
    "stream": true,
    "messages": [
      {"role": "user", "content": "Erklären Sie in 3 Sätzen, was ein lokaler Reverse-Proxy ist"}
    ]
  }'

Sie sollten sehen: Zeile für Zeile SSE-Ereignisse (event: message_start, event: content_block_delta usw.).

Checkpoint ✅ ​

  • GET /healthz gibt {"status":"ok"} zurück
  • GET /v1/models/claude kann data[].id erhalten
  • POST /v1/messages kann mit 200 zurückgeben (nicht-streaming JSON oder streaming SSE, wählen Sie eines)

Warnungen vor Fallstricken ​

1) Schreiben Sie die Base URL nicht zu .../v1 ​

Das Beispiel von Claude Code ist ANTHROPIC_BASE_URL="http://127.0.0.1:8045", da die Router-Route auf der Proxy-Seite bereits /v1/messages enthält.

2) Wenn die Authentifizierung aktiviert ist, aber proxy.api_key leer ist, wird direkt abgelehnt ​

Wenn die Proxy-Authentifizierung aktiviert ist, aber api_key leer ist, gibt die Middleware direkt 401 zurück (siehe Schutzlogik in src-tauri/src/proxy/middleware/auth.rs).

3) /v1/messages/count_tokens ist unter dem Standardpfad eine Platzhalter-Implementierung ​

Wenn die z.ai-Weiterleitung nicht aktiviert ist, gibt dieser Endpunkt direkt input_tokens: 0, output_tokens: 0 zurück (siehe handle_count_tokens). Verwenden Sie ihn nicht, um echte Tokens zu bestimmen.

4) Sie haben Streaming explizit nicht aktiviert, sehen aber, dass der Server "intern SSE verwendet" ​

Der Proxy hat eine Kompatibilitätsstrategie für /v1/messages: Wenn der Client kein Streaming anfordert, verwendet der Server möglicherweise intern erzwungenes Streaming und sammelt dann die Ergebnisse zu JSON zurück (siehe Logik von force_stream_internally in handle_messages).

Zusammenfassung des Kurses ​

  • Damit Claude Code/Anthropic-Clients funktionieren, sind es im Grunde 3 Dinge: Base URL, Authentifizierungsheader, /v1/messages-Anfragetext
  • Damit "das Protokoll funktioniert + lange Sitzungen stabil sind", bereinigt der Proxy die Nachrichtenhistorie, fängt Warmup ab und wiederholt/rotiert Konten bei Fehlern
  • count_tokens kann derzeit nicht als echter Maßstab verwendet werden (es sei denn, Sie haben den entsprechenden Weiterleitungspfad aktiviert)

Vorschau auf den nächsten Kurs ​

Im nächsten Kurs lernen wir Gemini native API: /v1beta/models und Endpunktintegration für Google SDK.


Anhang: Quellcode-Referenz ​

Klicken Sie hier, um die Quellcodepositionen anzuzeigen

Aktualisiert: 2026-01-23

FunktionDateipfadZeilen
---------
---------
---------
count_tokens (gibt 0 zurück, wenn z.ai nicht aktiviert ist)src-tauri/src/proxy/handlers/claude.rs1186-1210
---------
---------
Anfragebereinigung: Entfernen von cache_controlsrc-tauri/src/proxy/mappers/claude/request.rs68-148
Anfragebereinigung: Zusammenführen aufeinanderfolgender Nachrichten derselben Rollesrc-tauri/src/proxy/mappers/claude/request.rs253-296
---------

Wichtige Konstanten:

  • MAX_RETRY_ATTEMPTS = 3: Maximale Anzahl von Wiederholungen für /v1/messages