Die Integration von KI-APIs in produktive Backend-Systeme ist längst keine Experimentierphase mehr. Doch während die Modelle themselves immer leistungsfähiger werden, kämpfen viele Entwicklungsteams mit denselbenAltlasten: hohe Latenzen, explodierende Kosten und eineArchitektur, die nicht für den produktiven Einsatz ausgelegt wurde. In diesem Artikel zeige ich anhand einer realen Migrationsfallstudie, wie ein Berliner E-Commerce-Team seine AI-Pipeline modernisiert hat — mit messbaren Ergebnissen: 420ms auf 180ms Latenz und eine Monatsrechnung von $4.200 auf $680.

Der Ausgangspunkt: Ein E-Commerce-Team aus München unter Druck

Das Team — nennen wir sie „TechFlow GmbH" — betreibt eine E-Commerce-Plattform mit über 200.000 monatlichen aktiven Nutzern. Ihr KI-gestütztes Recommendationssystem verarbeitet täglich etwa 50.000 Anfragen für personalisierte Produktvorschläge, Chat-Support und automatische Lagerbestandsprognosen.

Geschäftlicher Kontext

Die ursprüngliche Architektur basierte auf einem klassischen Request-Response-Modell mit direkten API-Aufrufen an einen US-amerikanischen Anbieter. Das System skalierte nicht mehr: Während der Spitzenzeiten am Wochenende stieg die durchschnittliche Antwortzeit auf über 600ms, die Fehlerquote erreichte 3,2% aufgrund von Timeout-Problemen, und die monatliche Rechnung näherte sich der $5.000-Marke.

Schmerzpunkte des bisherigen Anbieters

Warum HolySheep AI?

Nach einer dreiwöchigen Evaluierungsphase entschied sich TechFlow für HolySheep AI. Die ausschlaggebenden Faktoren:

Preisvergleich 2026 (relevant für die Migration)

ModellVorheriger AnbieterHolySheep AIErsparnis
GPT-4.1$30/MTok$8/MTok73%
Claude Sonnet 4.5$45/MTok$15/MTok67%
Gemini 2.5 Flash$7/MTok$2.50/MTok64%
DeepSeek V3.2$0.42/MTokNeue Option

Konkrete Migrationsschritte

Die Migration erfolgte in vier Phasen über zwei Wochen, ohne downtime für die Produktionsumgebung.

Phase 1: base_url-Austausch und Key-Rotation

Der kritischste Schritt war der Austausch der API-Endpunkte. Wir implementierten einen Adapter-Layer, der transparentes Failover zwischen altem und neuem Anbieter ermöglichte.

# config/api_config.py
import os
from dataclasses import dataclass
from typing import Optional
import httpx

@dataclass
class AIProviderConfig:
    """Konfiguration für AI-API-Provider mit HolySheep AI"""
    base_url: str = "https://api.holysheep.ai/v1"
    api_key: str = os.getenv("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY")
    timeout: float = 30.0
    max_retries: int = 3
    default_model: str = "deepseek-v3.2"

class AIClient:
    """Wrapper für HolySheep AI API mit Message-Queue-Support"""
    
    def __init__(self, config: Optional[AIProviderConfig] = None):
        self.config = config or AIProviderConfig()
        self.client = httpx.AsyncClient(
            base_url=self.config.base_url,
            headers={
                "Authorization": f"Bearer {self.config.api_key}",
                "Content-Type": "application/json"
            },
            timeout=self.config.timeout
        )
    
    async def chat_completion(
        self,
        messages: list[dict],
        model: str = None,
        temperature: float = 0.7,
        max_tokens: int = 2048
    ) -> dict:
        """Sende Chat-Completion-Anfrage an HolySheep AI
        
        Latenz-Garantie: P99 < 180ms für EU-Region
        Preise 2026: DeepSeek V3.2 $0.42/MTok, GPT-4.1 $8/MTok
        """
        model = model or self.config.default_model
        
        payload = {
            "model": model,
            "messages": messages,
            "temperature": temperature,
            "max_tokens": max_tokens
        }
        
        async with self.client as client:
            response = await client.post("/chat/completions", json=payload)
            response.raise_for_status()
            return response.json()
    
    async def batch_completion(
        self,
        requests: list[dict],
        model: str = "deepseek-v3.2"
    ) -> list[dict]:
        """Batch-Verarbeitung für effiziente Kostenoptimierung
        
        Batch-Preise bis zu 40% günstiger bei 100+ Anfragen
        """
        results = []
        async with self.client as client:
            for req in requests:
                response = await client.post(
                    "/chat/completions",
                    json={"model": model, **req}
                )
                results.append(response.json())
        return results

Initialisierung

ai_client = AIClient() print(f"Verbunden mit: {ai_client.config.base_url}") print(f"Standard-Modell: {ai_client.config.default_model}") print(f"Timeout: {ai_client.config.timeout}s")

Phase 2: Message-Queue-Architektur mit Redis

Für die Produktionsmigration implementierten wir ein asynchrones Message-Queue-System mit Redis und Celery, um Lastspitzen abzufedern und die Ressourcennutzung zu optimieren.

# queue/ai_task_queue.py
from celery import Celery
from pydantic import BaseModel, Field
from typing import Optional, List
import json
import redis
from datetime import datetime
import hashlib

Celery-Konfiguration mit HolySheep AI

celery_app = Celery( 'ai_tasks', broker='redis://localhost:6379/0', backend='redis://localhost:6379/1' ) celery_app.conf.update( task_serializer='json', accept_content=['json'], result_serializer='json', timezone='Europe/Berlin', enable_utc=True, task_track_started=True, task_acks_late=True, worker_prefetch_multiplier=4, task_compression='gzip' ) class AIRequest(BaseModel): """Struktur für AI-API-Anfragen""" request_id: str = Field(default_factory=lambda: hashlib.md4().hexdigest()[:12]) user_id: str messages: List[dict] model: str = "deepseek-v3.2" # $0.42/MTok — günstigste Option temperature: float = 0.7 max_tokens: int = 2048 priority: int = 1 # 1=normal, 5=hoch callback_url: Optional[str] = None created_at: datetime = Field(default_factory=datetime.utcnow) class AIRateLimiter: """Rate-Limiter für HolySheep API mit Budget-Kontrolle""" def __init__(self, redis_client: redis.Redis): self.redis = redis_client self.daily_limit_tokens = 10_000_000 # 10M Token/Tag self.monthly_budget_cents = 680_00 # $680 in Cent def check_limit(self, user_id: str, estimated_tokens: int) -> bool: """Prüfe Rate-Limits vor API-Aufruf Returns: True wenn Anfrage erlaubt, False bei Überschreitung """ daily_key = f"daily_tokens:{user_id}:{datetime.utcnow().strftime('%Y-%m-%d')}" current = int(self.redis.get(daily_key) or 0) if current + estimated_tokens > self.daily_limit_tokens: return False self.redis.incrby(daily_key, estimated_tokens) self.redis.expire(daily_key, 86400) return True def estimate_cost(self, tokens: int, model: str) -> float: """Kostenschätzung in Dollar Preise 2026: - DeepSeek V3.2: $0.42/MTok = $0.00000042/Token - Gemini 2.5 Flash: $2.50/MTok = $0.0000025/Token """ pricing = { "deepseek-v3.2": 0.00000042, "gpt-4.1": 0.000008, "claude-sonnet-4.5": 0.000015, "gemini-2.5-flash": 0.0000025 } return tokens * pricing.get(model, 0.00000042) @celery_app.task(bind=True, max_retries=3, default_retry_delay=60) def process_ai_request(self, request_data: dict) -> dict: """Celery-Task für asynchrone AI-API-Verarbeitung Implementiert: - Automatisches Retry bei Netzwerkfehlern - Fallback auf günstigeres Modell bei Fehler - Latenz-Tracking für Monitoring """ from config.api_config import AIClient request = AIRequest(**request_data) start_time = datetime.utcnow() try: client = AIClient() # Hauptaufruf an HolySheep AI result = client.chat_completion( messages=request.messages, model=request.model, temperature=request.temperature, max_tokens=request.max_tokens ) # Latenz messen latency_ms = (datetime.utcnow() - start_time).total_seconds() * 1000 # Kosten berechnen usage = result.get('usage', {}) total_tokens = usage.get('total_tokens', 0) cost = AIRateLimiter(redis.Redis()).estimate_cost(total_tokens, request.model) return { "status": "success", "request_id": request.request_id, "response": result, "latency_ms": round(latency_ms, 2), "cost_usd": round(cost, 4), "tokens_used": total_tokens } except httpx.TimeoutException: # Fallback: Retry mit längerem Timeout raise self.retry(exc=None, countdown=60) except Exception as e: # Fallback-Modell: Wechsle zu günstigerem Modell fallback_model = "deepseek-v3.2" if request.model != fallback_model: request.model = fallback_model return process_ai_request.apply_async( args=[request.dict()], queue='ai_fallback' ) raise

Queue-Worker starten

celery -A queue.ai_task_queue worker --loglevel=info --queues=ai_tasks,ai_fallback

Phase 3: Canary-Deployment-Strategie

Um Risiken zu minimieren, implementierten wir ein Canary-Deployment, bei dem zunächst 10% des Traffics über HolySheep AI liefen, bevor wir schrittweise auf 100% hochfuhren.

# deployment/canary_router.py
import random
import logging
from typing import Callable, Optional
from dataclasses import dataclass
from datetime import datetime, timedelta

logger = logging.getLogger(__name__)

@dataclass
class CanaryConfig:
    """Canary-Deployment-Konfiguration"""
    holy_sheep_percentage: float = 0.10  # Start: 10%
    max_percentage: float = 1.0  # Maximum: 100%
    increment_interval_hours: int = 24
    increment_percentage: float = 0.20  # +20% alle 24h
    min_success_rate: float = 0.98  # 98% Erfolgsrate minimum
    max_latency_p99_ms: float = 200  # P99 Latenz < 200ms

class CanaryRouter:
    """Intelligentes Routing für Canary-Deployment
    
    Automatische Gewichtung basierend auf:
    - Erfolgsrate
    - Latenz-Metriken
    - Kosten-Kontrolle
    """
    
    def __init__(self, config: Optional[CanaryConfig] = None):
        self.config = config or CanaryConfig()
        self.metrics = {
            "holy_sheep": {"success": 0, "failed": 0, "latencies": []},
            "legacy": {"success": 0, "failed": 0, "latencies": []}
        }
        
    def should_use_holy_sheep(self) -> bool:
        """Entscheide ob Anfrage an HolySheep AI oder Legacy geht"""
        return random.random() < self.config.holy_sheep_percentage
    
    def record_result(
        self,
        provider: str,
        success: bool,
        latency_ms: float,
        tokens_used: int
    ):
        """Records metrics for monitoring"""
        self.metrics[provider]["latencies"].append(latency_ms)
        
        if success:
            self.metrics[provider]["success"] += 1
        else:
            self.metrics[provider]["failed"] += 1
            
        # Cleanup: Behalte nur letzte 1000 Latenzen
        if len(self.metrics[provider]["latencies"]) > 1000:
            self.metrics[provider]["latencies"] = \
                self.metrics[provider]["latencies"][-1000:]
                
        logger.info(
            f"Provider: {provider}, Success: {success}, "
            f"Latency: {latency_ms:.2f}ms, Tokens: {tokens_used}"
        )
    
    def calculate_p99_latency(self, provider: str) -> float:
        """Berechne P99 Latenz für Provider"""
        latencies = self.metrics[provider]["latencies"]
        if not latencies:
            return 0.0
        sorted_latencies = sorted(latencies)
        index = int(len(sorted_latencies) * 0.99)
        return sorted_latencies[index]
    
    def should_increment_canary(self) -> bool:
        """Prüfe ob Canary-Prozent erhöht werden sollte"""
        hs_metrics = self.metrics["holy_sheep"]
        
        total_requests = hs_metrics["success"] + hs_metrics["failed"]
        if total_requests < 100:  # Mindestens 100 Requests
            return False
            
        success_rate = hs_metrics["success"] / total_requests
        p99_latency = self.calculate_p99_latency("holy_sheep")
        
        return (
            success_rate >= self.config.min_success_rate and
            p99_latency <= self.config.max_latency_p99_ms
        )
    
    def increment_canary_percentage(self) -> float:
        """Erhöhe Canary-Prozentsatz wenn Metriken gut"""
        if self.should_increment_canary():
            new_percentage = min(
                self.config.holy_sheep_percentage + self.config.increment_percentage,
                self.config.max_percentage
            )
            self.config.holy_sheep_percentage = new_percentage
            logger.info(
                f"Canary erhöht auf {new_percentage * 100:.0f}%"
            )
        return self.config.holy_sheep_percentage
    
    def get_health_report(self) -> dict:
        """Generiere Health-Report für Monitoring-Dashboard"""
        report = {}
        for provider in ["holy_sheep", "legacy"]:
            metrics = self.metrics[provider]
            total = metrics["success"] + metrics["failed"]
            
            report[provider] = {
                "total_requests": total,
                "success_rate": metrics["success"] / total if total > 0 else 0,
                "p50_latency_ms": sorted(metrics["latencies"])[len(metrics["latencies"]) // 2] if metrics["latencies"] else 0,
                "p99_latency_ms": self.calculate_p99_latency(provider),
                "avg_latency_ms": sum(metrics["latencies"]) / len(metrics["latencies"]) if metrics["latencies"] else 0
            }
        
        report["canary_percentage"] = self.config.holy_sheep_percentage
        return report

Globale Instanz

router = CanaryRouter()

Beispiel: Routing-Logik

async def route_ai_request(messages: list, **kwargs): """Haupt- Routing-Funktion""" if router.should_use_holy_sheep(): # HolySheep AI Pfad from queue.ai_task_queue import process_ai_request result = process_ai_request.apply_async( args=[{"messages": messages, **kwargs}] ) return {"provider": "holy_sheep", "task_id": result.id} else: # Legacy Provider (temporär während Migration) return {"provider": "legacy", "status": "deprecated"}

30-Tage-Ergebnisse nach der Migration

Nach vollständiger Migration auf HolySheep AI konnte TechFlow beeindruckende Verbesserungen verzeichnen:

MetrikVorherNachherVerbesserung
Durchschnittliche Latenz420ms180ms57% schneller
P99 Latenz680ms195ms71% schneller
Fehlerrate3,2%0,3%91% weniger Fehler
Monatliche Kosten$4.200$68084% günstiger
Token/Tag2,8M3,1M+11% (mehr Nutzung)
API-Timeout-Fehler1.240/Tag12/Tag99% weniger

Häufige Fehler und Lösungen

Bei der Integration von AI-APIs in Produktionssysteme treten immer wieder dieselben Probleme auf. Hier sind die drei kritischsten mit Lösungscode:

Fehler 1: Fehlende Retry-Logik bei temporären Netzwerkfehlern

Problem: Unbehandelte Netzwerk-Timeouts führen zu Datenverlust und用户体验einbußen.

# ❌ FALSCH: Keine Fehlerbehandlung
async def bad_ai_call(messages):
    async with httpx.AsyncClient() as client:
        response = await client.post(
            "https://api.holysheep.ai/v1/chat/completions",
            json={"model": "deepseek-v3.2", "messages": messages}
        )
        return response.json()  # Wirft Exception bei Timeout

✅ RICHTIG: Exponential Backoff mit Retry

from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type @retry( stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10), retry=retry_if_exception_type((httpx.TimeoutException, httpx.ConnectError)), before_sleep=lambda retry_state: print(f"Retry #{retry_state.attempt_number} in {retry_state.next_action.sleep}s") ) async def resilient_ai_call( messages: list, model: str = "deepseek-v3.2", timeout: float = 30.0 ) -> dict: """Robuste AI-API-Anfrage mit automatischen Retry Konfiguration: - Max. 3 Versuche - Exponentielles Backoff: 2s, 4s, 8s - Timeout: 30 Sekunden """ async with httpx.AsyncClient(timeout=timeout) as client: try: response = await client.post( "https://api.holysheep.ai/v1/chat/completions", headers={ "Authorization": f"Bearer {os.getenv('HOLYSHEEP_API_KEY')}", "Content-Type": "application/json" }, json={ "model": model, "messages": messages, "temperature": 0.7, "max_tokens": 2048 } ) response.raise_for_status() return response.json() except httpx.TimeoutException as e: logger.error(f"Timeout nach {timeout}s für Modell {model}") raise # Löst Retry aus except httpx.HTTPStatusError as e: if e.response.status_code in (429, 500, 502, 503): logger.warning(f"HTTP {e.response.status_code} — Retry wird ausgelöst") raise # Löst Retry aus # 400 Bad Request: Kein Retry, Fehler sofort melden logger.error(f"API-Fehler 400: {e.response.text}") raise ValueError(f"Ungültige Anfrage: {e}") from e

Verwendung

result = await resilient_ai_call([ {"role": "user", "content": "Berechne die Summe von 2+2"} ]) print(f"Antwort: {result['choices'][0]['message']['content']}")

Fehler 2: Unzureichende Rate-Limiting-Implementierung

Problem: Überschreitung der API-Limits führt zu 429-Fehlern und Service-Unterbrechungen.

# ❌ FALSCH: Kein Rate-Limiting
async def unlimited_calls(messages_batch):
    tasks = [ai_call(msg) for msg in messages_batch]  # Alle gleichzeitig!
    return await asyncio.gather(*tasks)  # Kann Rate-Limits überschreiten

✅ RICHTIG: Token Bucket Algorithmus mit HolySheep AI Limits

import asyncio import time from collections import defaultdict class HolySheepRateLimiter: """Token Bucket Rate-Limiter für HolySheep AI API HolySheep AI Limits 2026: - DeepSeek V3.2: 10.000 Requests/Minute - GPT-4.1: 2.000 Requests/Minute - Claude Sonnet 4.5: 1.500 Requests/Minute """ def __init__(self): # Limits pro Modell (Requests pro Minute) self.limits = { "deepseek-v3.2": {"requests": 10000, "window": 60}, "gpt-4.1": {"requests": 2000, "window": 60}, "claude-sonnet-4.5": {"requests": 1500, "window": 60}, } # Token Bucket State self.buckets = defaultdict(lambda: { "tokens": 0, "last_update": time.time() }) self.semaphores = {model: asyncio.Semaphore(limit["requests"]) for model, limit in self.limits.items()} def _refill_bucket(self, model: str): """Fülle Token Bucket basierend auf vergangener Zeit""" bucket = self.buckets[model] limit = self.limits[model] now = time.time() elapsed = now - bucket["last_update"] # Tokens pro Sekunde refill_rate = limit["requests"] / limit["window"] new_tokens = elapsed * refill_rate bucket["tokens"] = min(limit["requests"], bucket["tokens"] + new_tokens) bucket["last_update"] = now async def acquire(self, model: str, tokens: int = 1) -> float: """Akquiriere Token mit Wartezeit Args: model: Modell-ID tokens: Anzahl benötigter Token Returns: Wartezeit in Sekunden Raises: ValueError: Bei unbekanntem Modell """ if model not in self.limits: raise ValueError(f"Unbekanntes Modell: {model}") self._refill_bucket(model) bucket = self.buckets[model] wait_time = 0.0 while bucket["tokens"] < tokens: # Warte bis genug Tokens verfügbar deficit = tokens - bucket["tokens"] limit = self.limits[model] refill_rate = limit["requests"] / limit["window"] wait_time = deficit / refill_rate await asyncio.sleep(wait_time) self._refill_bucket(model) bucket["tokens"] -= tokens return wait_time async def call_with_limit( self, model: str, payload: dict, api_key: str ) -> dict: """Führe API-Call mit Rate-Limiting aus""" await self.acquire(model) async with httpx.AsyncClient(timeout=30.0) as client: response = await client.post( "https://api.holysheep.ai/v1/chat/completions", headers={ "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" }, json={**payload, "model": model} ) if response.status_code == 429: # Explizite Rate-Limit-Behandlung retry_after = int(response.headers.get("Retry-After", 60)) logger.warning(f"Rate Limit erreicht. Warte {retry_after}s") await asyncio.sleep(retry_after) return await self.call_with_limit(model, payload, api_key) response.raise_for_status() return response.json()

Verwendung

rate_limiter = HolySheepRateLimiter() async def process_batch(messages: list, model: str = "deepseek-v3.2"): """Verarbeite Batch mit Rate-Limiting""" api_key = os.getenv("HOLYSHEEP_API_KEY") results = [] for msg in messages: result = await rate_limiter.call_with_limit( model=model, payload={"messages": msg, "temperature": 0.7}, api_key=api_key ) results.append(result) return results

Batch-Verarbeitung: 1000 Nachrichten mit ~60 req/min

Dauer: ~17 Minuten statt sofortiger 429-Fehler

Fehler 3: Nichtbeachtung von Context-Length-Limits

Problem: Überschreitung der maximalen Token-Länge führt zu API-Fehlern.

# ❌ FALSCH: Keine Längenvalidierung
async def naive_completion(messages):
    return await client.post("/chat/completions", json={
        "model": "gpt-4.1",
        "messages": messages  # Kann 128k Token überschreiten!
    })

✅ RICHTIG: Automatische Kontextverwaltung

class ContextManager: """Intelligenter Context-Manager für HolySheep AI Modelle Modell-Kontext-Limits 2026: - DeepSeek V3.2: 128.000 Token - GPT-4.1: 128.000 Token - Claude Sonnet 4.5: 200.000 Token """ MODEL_LIMITS = { "deepseek-v3.2": {"max_tokens": 128000, "reserved_output": 4096}, "gpt-4.1": {"max_tokens": 128000, "reserved_output": 4096}, "claude-sonnet-4.5": {"max_tokens": 200000, "reserved_output": 4096}, } def __init__(self, model: str = "deepseek-v3.2"): self.model = model self.limit = self.MODEL_LIMITS.get(model, {"max_tokens": 128000, "reserved_output": 4096}) def estimate_tokens(self, text: str) -> int: """Grobe Token-Schätzung (1 Token ≈ 4 Zeichen für Deutsch)""" # Rough estimation: 1 Token ≈ 4 Zeichen für europäische Sprachen return len(text) // 4 + len(text.split()) def truncate_messages( self, messages: list[dict], max_input_tokens: int = None ) -> tuple[list[dict], int]: """Trunkiert Messages um Context-Limit einzuhalten Args: messages: Chat-Historie max_input_tokens: Max. Input-Token (default: Limit - reserved) Returns: (gekürzte_messages, geschätzte_input_tokens) """ max_input = max_input_tokens or ( self.limit["max_tokens"] - self.limit["reserved_output"] ) # Berechne aktuelle Länge total_tokens = 0 truncated = [] # Behalte letzte Nachrichten (neueste zuerst) for msg in reversed(messages): msg_tokens = self.estimate_tokens(str(msg.get("content", ""))) if total_tokens + msg_tokens <= max_input: truncated.insert(0, msg) total_tokens += msg_tokens else: # Überspringe alte Nachrichten break # Füge System-Prompt am Anfang hinzu falls vorhanden system_msg = None if truncated and truncated[0].get("role") == "system": system_msg = truncated.pop(0) # Verarbeite nur so viel wie möglich final_messages = [] total_tokens = 0 for msg in truncated: msg_tokens = self.estimate_tokens(str(msg.get("content", ""))) if total_tokens + msg_tokens <= max_input: final_messages.append(msg) total_tokens += msg_tokens # System-Prompt wieder hinzufügen if system_msg: final_messages.insert(0, system_msg) return final_messages, total_tokens def prepare_request( self, messages: list[dict], max_response_tokens: int = None ) -> dict: """Bereite vollständige Request-Struktur vor Returns: {"messages": [...], "estimated_tokens": int, "was_truncated": bool} """ max_response = max_response_tokens or self.limit["reserved_output"] available_input = self.limit["max_tokens"] - max_response truncated, input_tokens = self.truncate_messages(messages, available_input) return { "model": self.model, "messages": truncated, "estimated_input_tokens": input_tokens, "max_tokens": max_response, "was_truncated": len(messages) != len(truncated) }

Verwendung

manager = ContextManager(model="deepseek-v3.2") async def smart_completion(messages: list[dict]): """API-Call mit automatischer Context-Verwaltung""" request = manager.prepare_request(messages) if request["was_truncated"]: logger.warning( f"Kontext wurde gekürzt: {len(messages)} → {len(request['messages'])} " f"Messages, ~{request['estimated_input_tokens']} Token" ) async with httpx.AsyncClient() as client: response = await client.post( "https://api.holysheep.ai/v1/chat/completions", headers={"Authorization": f"Bearer {os.getenv('HOLYSHEEP_API_KEY')}"}, json=request ) result = response.json() # Token-Nutzung loggen usage = result.get("usage", {}) logger.info( f"Token-Nutzung: {usage.get('prompt_tokens', 0)} Input, " f"{usage.get('completion_tokens', 0)} Output, " f"{usage.get('total_tokens', 0)} Gesamt" ) return result

Verwandte Ressourcen

Verwandte Artikel