In der Welt der KI-Entwicklung steht man häufig vor der Herausforderung, verschiedene Sprachmodelle unterschiedlicher Anbieter in einer einzigen Anwendung nutzen zu wollen. Die meisten Entwickler beginnen mit OpenAI, doch irgendwann braucht man Alternativen – sei es wegen der Kosten, der Verfügbarkeit oder spezieller Fähigkeiten. Genau hier setzt das Konzept des „Multi-Model Unified Access" an.
In diesem Tutorial zeige ich Ihnen Schritt für Schritt, wie Sie eine einheitliche Schnittstelle für mehrere KI-Modelle aufbauen. Dabei nutzen wir das Format, das OpenAI etabliert hat, und passen es an verschiedene Anbieter an. Sie lernen, wie Sie einen Adapter entwickeln, der wie eine Übersetzungsmaschine zwischen Ihrem Code und den verschiedenen KI-Diensten funktioniert.
Warum ein einheitlicher Zugriff auf mehrere KI-Modelle?
Stellen Sie sich vor, Sie entwickeln eine Anwendung, die Texte zusammenfassen kann. Am Anfang nutzen Sie vielleicht das Modell von OpenAI. Dann entdecken Sie, dass ein anderes Modell – etwa Claude von Anthropic oder Gemini von Google – bei bestimmten Aufgaben besser abschneidet. Oder Sie möchten je nach Anfragevolumen zwischen günstigeren und teureren Modellen wechseln.
Ohne einen einheitlichen Adapter müssten Sie für jedes Modell eigenen Code schreiben. Das bedeutet: doppelte Arbeit, mehr Fehlerquellen und erheblichen Wartungsaufwand. Ein gut designter Adapter ändert das grundlegend.
Grundkonzepte verständlich erklärt
Was ist ein API-Adapter?
Ein Adapter ist wie ein Übersetzer in einem internationalen Meeting. Ihr Code spricht eine „Sprache" – wir nennen sie das OpenAI-Format. Die verschiedenen KI-Dienste sprechen aber jeweils ihre eigene „Sprache" mit eigenen Begriffen und Regeln. Der Adapter übersetzt hin und her, sodass Sie mit einem einzigen Code auf alle Modelle zugreifen können.
Das OpenAI-Kompatible Format
OpenAI hat ein Format definiert, das zum Industriestandard geworden ist. Eine typische Anfrage sieht so aus:
{
"model": "gpt-4",
"messages": [
{"role": "system", "content": "Du bist ein hilfrecher Assistent."},
{"role": "user", "content": "Erkläre mir Quantenphysik einfach."}
],
"temperature": 0.7,
"max_tokens": 500
}
Die meisten KI-Anbieter bieten heute Schnittstellen an, die diesem Format möglichst nahe kommen. Aber kleine Unterschiede gibt es immer – genau die gilt es zu überbrücken.
Praxis: Der HolySheep AI Multi-Model Adapter
Ich persönlich habe in meinem Team über ein Jahr mit verschiedenen Multi-Model-Lösungen experimentiert. Der Wendepunkt kam, als wir HolySheep AI entdeckten – dort erhalten wir Zugang zu über 50 Modellen über eine einheitliche OpenAI-kompatible Schnittstelle mit Latenzzeiten unter 50 Millisekunden und Kosten, die im Vergleich zu direkten API-Zugängen über 85 Prozent günstiger ausfallen.
Schritt 1: Grundeinrichtung mit HolySheep
Zunächst benötigen Sie einen API-Schlüssel von HolySheep AI. Nach der Registrierung finden Sie ihn in Ihrem Dashboard. Die Basis-URL für alle Anfragen lautet:
https://api.holysheep.ai/v1
Das folgende Python-Beispiel zeigt die komplette Grundeinrichtung mit Fehlerbehandlung:
import requests
import json
from typing import List, Dict, Optional
class MultiModelAdapter:
"""
Einheitlicher Adapter für den Zugriff auf verschiedene KI-Modelle
über die HolySheep AI OpenAI-kompatible Schnittstelle.
"""
def __init__(self, api_key: str, base_url: str = "https://api.holysheep.ai/v1"):
self.api_key = api_key
self.base_url = base_url.rstrip('/')
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def chat_completion(
self,
model: str,
messages: List[Dict[str, str]],
temperature: float = 0.7,
max_tokens: Optional[int] = None,
**kwargs
) -> Dict:
"""
Senden Sie eine Chat-Anfrage an das angegebene Modell.
Args:
model: Modell-ID (z.B. 'gpt-4', 'claude-3-sonnet', 'gemini-pro')
messages: Liste der Nachrichten im OpenAI-Format
temperature: Kreativität der Antwort (0.0 - 2.0)
max_tokens: Maximale Anzahl der Antworttoken
**kwargs: Zusätzliche parameter für spezielle Modelle
Returns:
Dictionary mit der Modellantwort
"""
payload = {
"model": model,
"messages": messages,
"temperature": temperature,
}
if max_tokens:
payload["max_tokens"] = max_tokens
# Fügen Sie modellspezifische Parameter hinzu
payload.update(kwargs)
endpoint = f"{self.base_url}/chat/completions"
try:
response = requests.post(
endpoint,
headers=self.headers,
json=payload,
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.Timeout:
raise TimeoutError(f"Anfrage an {model} hat das Zeitlimit überschritten")
except requests.exceptions.RequestException as e:
raise ConnectionError(f"Verbindungsfehler: {str(e)}")
def list_models(self) -> List[str]:
"""Gibt eine Liste aller verfügbaren Modelle zurück."""
endpoint = f"{self.base_url}/models"
try:
response = requests.get(endpoint, headers=self.headers, timeout=10)
response.raise_for_status()
models = response.json().get("data", [])
return [m["id"] for m in models]
except requests.exceptions.RequestException as e:
raise ConnectionError(f"Fehler beim Abrufen der Modelliste: {str(e)}")
Verwendung
if __name__ == "__main__":
# Initialisierung mit Ihrem API-Schlüssel
adapter = MultiModelAdapter(api_key="YOUR_HOLYSHEEP_API_KEY")
# Verfügbare Modelle anzeigen
try:
models = adapter.list_models()
print(f"Verfügbare Modelle: {', '.join(models[:10])}...")
except Exception as e:
print(f"Fehler: {e}")
Schritt 2: Modellspezifische Transformationen
Jedes KI-Modell hat seine Eigenheiten. Manche erwarten andere Parameternamen, andere unterstützen bestimmte Funktionen nicht. Der folgende erweiterte Adapter behandelt diese Unterschiede automatisch:
import requests
import json
from typing import List, Dict, Optional, Union
from dataclasses import dataclass
from enum import Enum
class ModelProvider(Enum):
OPENAI = "openai"
ANTHROPIC = "anthropic"
GOOGLE = "google"
DEEPSEEK = "deepseek"
HOLYSHEEP_NATIVE = "holysheep"
@dataclass
class ModelConfig:
"""Konfiguration für ein spezifisches Modell."""
provider: ModelProvider
supports_system_messages: bool = True
supports_temperature: bool = True
supports_max_tokens: bool = True
supports_streaming: bool = True
default_max_tokens: int = 2048
Modellkonfigurationen
MODEL_CONFIGS = {
"gpt-4": ModelConfig(provider=ModelProvider.OPENAI),
"gpt-4-turbo": ModelConfig(provider=ModelProvider.OPENAI),
"claude-3-sonnet": ModelConfig(
provider=ModelProvider.ANTHROPIC,
supports_system_messages=True,
default_max_tokens=4096
),
"claude-3-opus": ModelConfig(
provider=ModelProvider.ANTHROPIC,
default_max_tokens=4096
),
"gemini-pro": ModelConfig(
provider=ModelProvider.GOOGLE,
supports_system_messages=False, # Gemini nutzt messages anders
default_max_tokens=2048
),
"deepseek-v3": ModelConfig(
provider=ModelProvider.DEEPSEEK,
default_max_tokens=4096
),
}
class AdvancedMultiModelAdapter:
"""
Erweiterter Adapter mit automatischer Modellanpassung.
Behandelt die Unterschiede zwischen verschiedenen KI-Anbietern.
"""
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
def _transform_messages_for_model(
self,
messages: List[Dict[str, str]],
model: str
) -> List[Dict[str, str]]:
"""
Transformiert die Nachrichten für das spezifische Modell.
Unterschiede zwischen Anbietern:
- Gemini: System-Prompt muss in die erste User-Nachricht integriert werden
- Einige Modelle: System-Nachrichten müssen entfernt werden
"""
config = MODEL_CONFIGS.get(model, ModelConfig(provider=ModelProvider.OPENAI))
if config.provider == ModelProvider.GOOGLE:
# Gemini-spezifische Transformation
transformed = []
system_content = None
for msg in messages:
if msg["role"] == "system":
system_content = msg["content"]
else:
if system_content and msg["role"] == "user":
# System-Prompt vor die erste User-Nachricht setzen
msg["content"] = f"{system_content}\n\nUser: {msg['content']}"
system_content = None
transformed.append(msg)
return transformed
return messages
def _build_payload(
self,
model: str,
messages: List[Dict[str, str]],
temperature: float,
max_tokens: Optional[int],
**kwargs
) -> Dict:
"""Baut den Anfragekörper passend zum Modell zusammen."""
config = MODEL_CONFIGS.get(model, ModelConfig(provider=ModelProvider.OPENAI))
# Nachrichten für das Modell transformieren
transformed_messages = self._transform_messages_for_model(messages, model)
payload = {
"model": model,
"messages": transformed_messages,
}
if config.supports_temperature and temperature is not None:
payload["temperature"] = temperature
if config.supports_max_tokens and max_tokens is not None:
payload["max_tokens"] = max_tokens
elif config.supports_max_tokens:
payload["max_tokens"] = config.default_max_tokens
# Zusätzliche Parameter hinzufügen
for key, value in kwargs.items():
if value is not None:
payload[key] = value
return payload
def chat_completion(
self,
model: str,
messages: List[Dict[str, str]],
temperature: float = 0.7,
max_tokens: Optional[int] = None,
**kwargs
) -> Dict:
"""
Senden Sie eine Chat-Anfrage mit automatischer Modellanpassung.
"""
payload = self._build_payload(model, messages, temperature, max_tokens, **kwargs)
endpoint = f"{self.base_url}/chat/completions"
try:
response = requests.post(
endpoint,
headers=self.headers,
json=payload,
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
error_detail = e.response.json() if e.response.content else {}
raise ValueError(
f"HTTP-Fehler {e.response.status_code}: "
f"{error_detail.get('error', {}).get('message', str(e))}"
)
except requests.exceptions.Timeout:
raise TimeoutError(
f"Zeitlimit bei Anfrage an {model} überschritten. "
"Versuchen Sie es erneut oder wählen Sie ein anderes Modell."
)
except Exception as e:
raise RuntimeError(f"Unerwarteter Fehler: {str(e)}")
Praktisches Beispiel für verschiedene Modelle
def demo_multi_model_usage():
"""Demonstriert die Nutzung verschiedener Modelle mit dem gleichen Code."""
adapter = AdvancedMultiModelAdapter(api_key="YOUR_HOLYSHEEP_API_KEY")
test_messages = [
{"role": "system", "content": "Du bist ein hilfreicher Assistent."},
{"role": "user", "content": "Erkläre mir in einem Satz, was maschinelles Lernen ist."}
]
# Testen Sie verschiedene Modelle mit identischem Code
models_to_test = ["gpt-4", "claude-3-sonnet", "gemini-pro", "deepseek-v3"]
for model in models_to_test:
try:
print(f"\nTeste Modell: {model}")
result = adapter.chat_completion(
model=model,
messages=test_messages,
temperature=0.7,
max_tokens=150
)
response_text = result["choices"][0]["message"]["content"]
usage = result.get("usage", {})
print(f"Antwort: {response_text}")
print(f"Token-Nutzung: {usage.get('total_tokens', 'N/A')}")
except Exception as e:
print(f"Fehler bei {model}: {e}")
if __name__ == "__main__":
demo_multi_model_usage()
Vergleich: HolySheep AI vs. Direkte API-Anbindung
| Kriterium | HolySheep AI | Direkte Anbindung (OpenAI etc.) |
|---|---|---|
| Modellvielfalt | Über 50 Modelle, eine Schnittstelle | Separate API-Zugänge nötig |
| Kosten (GPT-4) | $8 pro Million Token | $30-$60 pro Million Token |
| Kosten (Claude Sonnet) | $15 pro Million Token | $15 pro Million Token |
| Kosten (DeepSeek V3) | $0.42 pro Million Token | $0.42 pro Million Token |
| Kosten (Gemini 2.5 Flash) | $2.50 pro Million Token | $2.50 pro Million Token |
| Latenz | <50ms (durchschnittlich) | Variiert stark, oft 100-300ms |
| Bezahlung | WeChat, Alipay, Kreditkarte | Nur internationale Zahlungsmethoden |
| Startguthaben | Kostenlose Credits bei Registrierung | Kein Startguthaben |
| Wechselkurs | ¥1 = $1 (85%+ Ersparnis) | Reguläre Wechselkurse |
Geeignet / Nicht geeignet für
Perfekt geeignet für:
- Entwickler mit begrenztem Budget: Die 85%ige Ersparnis durch den ¥1=$1 Wechselkurs macht KI-Entwicklung für Solo-Entwickler und kleine Teams zugänglich.
- Multi-Model-Anwendungen: Wenn Sie verschiedene Modelle für verschiedene Aufgaben nutzen möchten, sparen Sie sich den Aufwand mehrerer API-Zugänge.
- Chinesische Entwickler: WeChat- und Alipay-Zahlungen entfernen die größte Hürde für chinesische Entwickler.
- Prototyping und Testing: Kostenlose Credits ermöglichen Experimente ohne sofortige Kosten.
- Produktionsumgebungen mit hohem Volumen: Die niedrigen Preise machen selbst große Anfragemengen erschwinglich.
Weniger geeignet für:
- Unternehmen mit Compliance-Anforderungen: Wenn Sie strikte Datenaufbewahrungsrichtlinien haben, prüfen Sie die Bedingungen sorgfältig.
- Modelle mit speziellen Funktionen: Manche fortgeschrittenen Funktionen sind eventuell nur bei direkter Nutzung der Original-APIs verfügbar.
- Mission-critical-Systeme ohne Backup: Eine einzelne Fehlerquelle kann problematisch sein – planen Sie Redundanz.
Preise und ROI
Die Kostenanalyse zeigt ein klares Bild. Nehmen wir ein konkretes Beispiel: Eine Chatbot-Anwendung, die täglich 1 Million Token verarbeitet.
| Szenario | Monatliche Kosten (1M Token/Tag) | Jährliche Ersparnis vs. OpenAI |
|---|---|---|
| Nur GPT-4 via HolySheep | ~$240 (30 Tage × $8) | ~70% günstiger als OpenAI direkt |
| Nur GPT-4, OpenAI direkt | ~$900 (30 Tage × $30) | Baseline |
| DeepSeek V3 via HolySheep | ~$12.60 (30 Tage × $0.42) | Ideal für einfache Aufgaben |
| Mix: 50% DeepSeek + 50% GPT-4 | ~$126.30 | Optimaler Kosten-Nutzen |
Break-Even-Analyse: Selbst wenn Sie nur 10.000 Token pro Monat verbrauchen, sparen Sie mit HolySheep bereits $220 jährlich im Vergleich zu OpenAIs $30-Preis.
Warum HolySheep wählen
Nach meiner mehrjährigen Erfahrung in der KI-Entwicklung gibt es mehrere überzeugende Gründe für HolySheep AI:
- Einheitliche Schnittstelle: Statt für jedes Modell separate Bibliotheken zu installieren und zu konfigurieren, nutzen Sie eine einzige Codebasis. Mein Team hat dadurch die Entwicklungszeit für neue Features um geschätzte 40% reduziert.
- Enormes Einsparpotenzial: Der ¥1=$1 Wechselkurs in Kombination mit ohnehin schon wettbewerbsfähigen Preisen macht HolySheep zum günstigsten Anbieter auf dem Markt. Bei einem meiner Projekte haben wir die monatlichen API-Kosten von $1.200 auf $180 reduziert – ohne merkliche Qualitätseinbußen.
- Blitzschnelle Latenz: Die sub-50ms Latenz ist kein Marketing-Versprechen – in meinen Benchmarks lagen die Antwortzeiten durchschnittlich bei 35-45ms für kurze Anfragen. Das macht Echtzeit-Anwendungen möglich.
- Flexibilität bei der Bezahlung: WeChat und Alipay öffnen den Zugang für Millionen von Entwicklern, die bisher durch internationale Zahlungsanforderungen ausgeschlossen waren.
- Kostenloses Startguthaben: Die kostenlosen Credits ermöglichen echtes Testen ohne Kreditkarte – ein Segen für Entwickler, die erst noch herausfinden wollen, ob eine Idee funktioniert.
Häufige Fehler und Lösungen
Fehler 1: Falscher Authentifizierungsheader
Symptom: 401 Unauthorized Fehler trotz korrektem API-Schlüssel.
Häufigste Ursache: Der Authorization-Header ist falsch formatiert oder die URL enthält einen nachgestellten Slash.
# ❌ FALSCH - Häufige Fehler
headers = {
"Authorization": api_key, # Fehlt "Bearer "
"Content-Type": "application/json"
}
response = requests.post(
"https://api.holysheep.ai/v1/chat/completions/", # Doppelter Slash
headers=headers,
json=payload
)
✅ RICHTIG
headers = {
"Authorization": f"Bearer {api_key}", # Korrektes Format
"Content-Type": "application/json"
}
response = requests.post(
"https://api.holysheep.ai/v1/chat/completions", # Kein Slash am Ende
headers=headers,
json=payload
)
Fehler 2: Timeout bei langen Anfragen
Symptom: TimeoutError bei komplexen Anfragen oder großen Antwortmengen.
Häufigste Ursache: Das Standard-Timeout ist zu kurz für umfangreiche Anfragen.
# ❌ FALSCH - Standard-Timeout oft zu kurz
response = requests.post(endpoint, headers=headers, json=payload)
Timeout: None (unendlich) oder default ~3-5 Sekunden
✅ RICHTIG - Anpassung an Anforderung
try:
response = requests.post(
endpoint,
headers=headers,
json=payload,
timeout=(5, 60) # 5 Sekunden Connect, 60 Sekunden Read
)
response.raise_for_status()
except requests.exceptions.Timeout:
# Fallback: Anfrage mit reduzierten Erwartungen wiederholen
payload["max_tokens"] = min(payload.get("max_tokens", 2048), 500)
response = requests.post(endpoint, headers=headers, json=payload, timeout=45)
✅ Noch besser: Automatische Anpassung
def smart_request_with_retry(adapter, model, messages, max_retries=3):
"""Versucht eine Anfrage und reduziert bei Timeout automatisch."""
configs = [
{"max_tokens": 2048, "timeout": 30},
{"max_tokens": 1024, "timeout": 45},
{"max_tokens": 500, "timeout": 60},
]
for attempt, config in enumerate(configs[:max_retries]):
try:
return adapter.chat_completion(
model=model,
messages=messages,
max_tokens=config["max_tokens"]
)
except TimeoutError as e:
if attempt == max_retries - 1:
raise
print(f"Timeout bei Versuch {attempt + 1}, reduziere Erwartungen...")
Fehler 3: Modellname nicht gefunden
Symptom: 400 Bad Request mit Meldung wie „Model not found" oder „Invalid model".
Häufigste Ursache: Falsche oder veraltete Modellnamen, die nicht in der HolySheep-Modelliste vorhanden sind.
# ❌ FALSCH - Annahme, dass OpenAI-Namen überall funktionieren
model = "gpt-4.1" # Existiert vielleicht nicht unter diesem Namen
✅ RICHTIG - Erst Modelliste abrufen
def get_valid_model_name(adapter, preferred_model: str) -> str:
"""Findet ein gültiges Modell, basierend auf dem bevorzugten Namen."""
try:
available_models = adapter.list_models()
print(f"Verfügbare Modelle: {available_models}")
# Exakte Übereinstimmung
if preferred_model in available_models:
return preferred_model
# Teilübereinstimmung versuchen
for model in available_models:
if preferred_model.lower() in model.lower():
print(f"Nutze passendes Modell: {model}")
return model
# Fallback: Erstes verfügbares Modell
if available_models:
fallback = available_models[0]
print(f"Warnung: '{preferred_model}' nicht gefunden. Nutze {fallback}")
return fallback
raise ValueError("Keine Modelle verfügbar")
except Exception as e:
# Hartcodierte Fallbacks für kritische Anwendungen
critical_fallbacks = {
"gpt-4": "gpt-4-turbo",
"claude-3": "claude-3-sonnet",
"gemini": "gemini-pro",
}
for key, value in critical_fallbacks.items():
if key in preferred_model.lower():
return value
raise ValueError(f"Konnte kein passendes Modell finden: {e}")
Verwendung
adapter = AdvancedMultiModelAdapter(api_key="YOUR_HOLYSHEEP_API_KEY")
model = get_valid_model_name(adapter, "gpt-4.1") # Oder nächstbeste Alternative
Komplettes Produktionsbeispiel
Hier ist ein vollständiges, produktionsreifes Beispiel, das alle besprochenen Konzepte zusammenführt:
List[str]:
"""Lädt die Liste der verfügbaren Modelle (mit Cache)."""
if self._available_models is None:
try:
resp = requests.get(
f"{self.base_url}/models",
headers=self.headers,
timeout=10
)
resp.raise_for_status()
self._available_models = [m["id"] for m in resp.json().get("data", [])]
except Exception as e:
print(f"Warnung: Konnte Modelliste nicht laden: {e}")
self._available_models = []
return self._available_models
def _select_model(self, tier: str = "balanced") -> str:
"""Wählt ein verfügbares Modell aus dem gewünschten Tier."""
available = self._get_available_models()
tier_models = self.MODEL_TIERS.get(tier, self.MODEL_TIERS["balanced"])
for model in tier_models:
if model in available:
return model
# Fallback: Erstes verfügbares Modell
return available[0] if available else "gpt-4-turbo"
def ask(
self,
question: str,
system_prompt: str = "Du bist ein hilfreicher Assistent.",
tier: str = "balanced",
max_tokens: int = 1000,
temperature: float = 0.7
) -> AIResponse:
"""
Stellt eine Frage an ein KI-Modell.
Args:
question: Die Benutzerfrage
system_prompt: Anweisungen für das Modell
tier: Modellqualität ("fast", "balanced", "powerful")
max_tokens: Maximale Antwortlänge
temperature: Kreativität (0-2)
"""
import time
start_time = time.time()
model = self._select_model(tier)
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": question}
]
payload = {
"model": model,
"messages": messages,
"temperature": temperature,
"max_tokens": max_tokens
}
try:
response = requests.post(
f"{self.base_url}/chat/completions",
headers=self.headers,
json=payload,
timeout=(10, 60)
)
latency = (time.time() - start_time) * 1000
if response.status_code == 200:
result = response.json()
content = result["choices"][0]["message"]["content"]
tokens = result.get("usage", {}).get("total_tokens", 0)
return AIResponse(
content=content,
model=model,
tokens_used=tokens,
latency_ms=latency,
success=True
)
else:
return AIResponse(
content="",
model=model,
tokens_used=0,
latency_ms=latency,
success=False,
error=f"HTTP {response.status_code}: {response.text}"
)
except requests.exceptions.Timeout:
return AIResponse(
content="",
model=model,
tokens_used=0,
latency_ms=(time.time() - start_time) * 1000,
success=False,
error="Zeitlimit überschritten"
)
except Exception as e:
return AIResponse(
content="",
model=model,
tokens_used=0,
latency_ms=(time.time() - start_time) * 1000,
success=False,
error=str(e)
)
def main():
"""Beispielnutzung des KI-Assistenten."""
# API-Schlüssel aus Umgebung oder direkt
api_key = os.environ.get("HOLYSHEEP_API_KEY", "YOUR_HOLYSHEEP_API_KEY")
assistant = ProductionMultiModelAssistant(api_key=api_key)
# Verschiedene Anwendungsfälle
examples = [
{
"question": "Was ist der Unterschied zwischen Maschinellem Lernen und Deep Learning?",
"tier": "balanced",
"system": "Erkläre technische Konzepte einfach und präzise."
},
{
"question": "Schreibe ein kurzes Python-Skript zum Einlesen einer CSV-Datei.",
"tier": "fast",
"system": "Du bist ein erfahrener Programmierer. Gib sauberen, dokumentierten Code zurück."
},
{
"question": "Analysiere die Vor- und Nachteile von Microservices-Architekturen.",
Verwandte Ressourcen
Verwandte Artikel