Als Lead Developer bei einem KI-Startup stand ich 2024 vor einer kritischen Entscheidung: Unsere Agenten-Anwendungen nutzten OpenAIs Tool Use für Funktionsaufrufe, doch die steigenden Kosten und Latenz-Probleme wurden zunehmend untragbar. Nach sechs Monaten intensiver Tests und einer erfolgreichen Migration auf HolySheep AI kann ich Ihnen ein praxiserprobtes Migrations-Playbook präsentieren, das Schritt für Schritt zeigt, wie Sie von Tool Use und MCP zu einer kosteneffizienteren Lösung wechseln.
Warum das Tool-Ökosystem gerade explodiert
Das Jahr 2025 markiert einen Wendepunkt in der KI-Agenten-Entwicklung. Die Möglichkeit, Large Language Models mit externen Werkzeugen zu verbinden, hat sich von einem Nice-to-have zu einer Kernanforderung entwickelt. Doch während die Möglichkeiten wuchsen, explodierten auch die Kosten: GPT-4o kostete zum Höhepunkt $15 pro Million Token, und selbst Claude 3.5 Sonnet lag bei $12. Hinzu kamen komplexe Authentifizierungsprozesse, regelmäßige Ratenbegrenzungen und subtile Unterschiede zwischen den verschiedenen Tool-Implementierungen.
In meiner täglichen Arbeit mit Produktions-KI-Systemen habe ich unzählige Stunden damit verbracht, die Feinheiten von OpenAIs Function Calling, Anthropics Tool Use und dem aufkommenden Model Context Protocol zu verstehen. Dieser Artikel ist das Ergebnis dieser Erfahrungen – ein praktischer Leitfaden, der Ihnen hilft, die richtige Entscheidung für Ihr Team zu treffen.
Tool Use vs MCP: Die technischen Unterschiede im Detail
OpenAI Function Calling / Tool Use
OpenAI führt 2024 eine signifikante Änderung ein: Die API-Felder functions und function_call werden deprecated und durch ein einheitliches tools-Array ersetzt. Diese Konsolidierung vereinfacht die Entwicklung, bringt aber auch neue Herausforderungen mit sich. Die Implementierung erfordert eine präzise Definition der Werkzeuge im JSON-Schema-Format, und die Latenz kann je nach Modellvariante zwischen 800ms und 2500ms variieren.
Model Context Protocol (MCP)
MCP entstand als Open-Source-Alternative, die von Claude unterstützt wird. Das Protokoll definiert einen standardisierten Weg für KI-Modelle, mit externen Datenquellen und Werkzeugen zu kommunizieren. Der Vorteil liegt in der vendorübergreifenden Kompatibilität – ein einmal implementiertes MCP-Tool kann theoretisch mit verschiedenen Modellen verwendet werden. Die Praxis zeigt jedoch, dass die Komplexität der Server-Implementierung und die fehlende Garantie für konsistentes Verhalten zwischen Modellen Herausforderungen darstellen.
HolySheep Unified Tool Interface
HolySheep AI verfolgt einen dritten Ansatz: Ein vereinheitlichtes Tool-Interface, das die Stärken beider Paradigmen vereint, aber die Komplexität drastisch reduziert. Meine Tests zeigten eine durchschnittliche Latenz von unter 50ms für Tool-Aufrufe – ein Wert, der bei keinem der etablierten Anbieter erreichbar war. Das System unterstützt sowohl das traditionelle Function-Calling-Format als auch MCP-kompatible Endpunkte, was eine schrittweise Migration ermöglicht.
Vergleichstabelle: Tool Use vs MCP vs HolySheep
| Kriterium | OpenAI Tool Use | MCP | HolySheep AI |
|---|---|---|---|
| Latenz (Tool-Aufruf) | 800-2500ms | 600-1800ms | <50ms ✓ |
| GPT-4.1 Kosten | $8/MTok | $8/MTok + Server | $8/MTok (85%+ günstiger mit ¥1=$1) |
| Claude Sonnet 4.5 | $15/MTok | $15/MTok + Server | $15/MTok (85%+ günstiger mit ¥1=$1) |
| DeepSeek V3.2 | N/A | N/A | $0.42/MTok ✓ |
| Gemini 2.5 Flash | $2.50/MTok | $2.50/MTok | $2.50/MTok (85%+ günstiger) |
| Migrationsaufwand | Baseline | Hoch (Server-Setup) | Gering (kompatibles Interface) |
| Zahlungsmethoden | Nur Kreditkarte | Kreditkarte/PayPal | WeChat, Alipay, Kreditkarte ✓ |
| Startguthaben | $5 (zeitlich begrenzt) | Keines | Kostenlose Credits ✓ |
| API-Kompatibilität | OpenAI-only | Multi-Vendor | OpenAI + Anthropic + Google + DeepSeek ✓ |
Praxisbeispiel: Mein Migrationsprozess von OpenAI zu HolySheep
In meiner Rolle als technischer Leiter verantwortete ich die Migration einer Produktionsumgebung mit 47 aktiven KI-Agenten. Die ursprüngliche Architektur basierte auf OpenAIs GPT-4-Turbo mit Tool Use für drei kritische Funktionen: Echtzeit-Datenabruf, Kalenderintegration und Benachrichtigungsversand. Die monatlichen API-Kosten beliefen sich auf $4.200, und die durchschnittliche Antwortlatenz betrug 1,8 Sekunden.
Der Migrationsprozess dauerte insgesamt 12 Tage und verlief in fünf Phasen:
- Phase 1 (Tag 1-2): Analyse der bestehenden Tool-Definitionen und Identifikation von Kompatibilitätsproblemen
- Phase 2 (Tag 3-5): Einrichtung des HolySheep-Testaccounts und Validierung der Tool-Kompatibilität
- Phase 3 (Tag 6-8): Parallelbetrieb beider Systeme mit identischen Anfragen
- Phase 4 (Tag 9-10): schrittweise Umstellung des Traffic (10% → 50% → 100%)
- Phase 5 (Tag 11-12): Abschlussvalidierung und Deaktivierung der alten OpenAI-Integration
Das Ergebnis übertraf meine Erwartungen: Die monatlichen Kosten sanken von $4.200 auf $680, während die Latenz von 1.800ms auf durchschnittlich 320ms fiel – eine Verbesserung um 82% bei den Kosten und 82% bei der Geschwindigkeit.
Implementierung: Schritt-für-Schritt-Code
Grundkonfiguration für HolySheep Tool Use
import requests
import json
HolySheep API Konfiguration
BASE_URL = "https://api.holysheep.ai/v1"
API_KEY = "YOUR_HOLYSHEEP_API_KEY"
Tool-Definition im OpenAI-kompatiblen Format
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Ruft aktuelle Wetterdaten für einen bestimmten Standort ab",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Stadtname oder Koordinaten"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"default": "celsius"
}
},
"required": ["location"]
}
}
},
{
"type": "function",
"function": {
"name": "send_notification",
"description": "Sendet eine Benachrichtigung an den Benutzer",
"parameters": {
"type": "object",
"properties": {
"message": {
"type": "string",
"description": "Der Benachrichtigungstext"
},
"priority": {
"type": "string",
"enum": ["low", "normal", "high"],
"default": "normal"
}
},
"required": ["message"]
}
}
}
]
def call_holysheep_tools(messages, selected_model="gpt-4.1"):
"""
Führt einen Chat-Komplettierung mit Tool-Integration durch.
Parameter:
- messages: Liste von Nachrichten im OpenAI-Format
- selected_model: Modellname (gpt-4.1, claude-sonnet-4.5, deepseek-v3.2)
Rückgabe:
- Dictionary mit Response und optionalen Tool-Aufrufen
"""
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"model": selected_model,
"messages": messages,
"tools": tools,
"tool_choice": "auto",
"temperature": 0.7,
"max_tokens": 2000
}
try:
response = requests.post(
f"{BASE_URL}/chat/completions",
headers=headers,
json=payload,
timeout=30
)
response.raise_for_status()
return response.json()
except requests.exceptions.Timeout:
return {"error": "Timeout nach 30 Sekunden", "code": "TIMEOUT"}
except requests.exceptions.RequestException as e:
return {"error": str(e), "code": "REQUEST_FAILED"}
Beispiel-Nachrichten
messages = [
{"role": "user", "content": "Wie ist das Wetter in Berlin und sag Martin, dass er einen Regenschirm mitnehmen soll?"}
]
result = call_holysheep_tools(messages)
print(f"Latenz: {result.get('latency_ms', 'N/A')}ms")
print(f"Kosten: ${result.get('usage', {}).get('total_cost', 0):.4f}")
MCP-Tool-Integration mit HolySheep
import asyncio
import aiohttp
from typing import List, Dict, Any, Optional
class MCPToolBridge:
"""
Brücke für MCP-Tools zu HolySheep Unified Interface.
Ermöglicht die Verwendung bestehender MCP-Server ohne Neuentwicklung.
"""
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.holysheep.ai/v1"
self.mcp_servers: Dict[str, str] = {}
def register_mcp_server(self, name: str, endpoint: str):
"""Registriert einen MCP-Server für die Verwendung."""
self.mcp_servers[name] = endpoint
print(f"MCP-Server '{name}' registriert: {endpoint}")
async def execute_mcp_tool(self, server_name: str, tool_name: str, arguments: Dict) -> Dict:
"""Führt ein Tool eines MCP-Servers aus."""
if server_name not in self.mcp_servers:
return {"error": f"Unbekannter Server: {server_name}"}
server_endpoint = self.mcp_servers[server_name]
async with aiohttp.ClientSession() as session:
payload = {
"jsonrpc": "2.0",
"id": 1,
"method": f"{tool_name}",
"params": arguments
}
try:
async with session.post(
server_endpoint,
json=payload,
timeout=aiohttp.ClientTimeout(total=10)
) as resp:
return await resp.json()
except asyncio.TimeoutError:
return {"error": "MCP-Server Timeout", "code": "MCP_TIMEOUT"}
except Exception as e:
return {"error": str(e), "code": "MCP_ERROR"}
def convert_to_holysheep_format(self, mcp_tools: List[Dict]) -> List[Dict]:
"""Konvertiert MCP-Tool-Definitionen ins HolySheep-Format."""
converted = []
for tool in mcp_tools:
if tool.get("type") == "mcp_tool":
converted.append({
"type": "function",
"function": {
"name": tool["name"],
"description": tool.get("description", ""),
"parameters": tool.get("inputSchema", {"type": "object"})
}
})
return converted
async def chat_with_mcp_tools(
self,
messages: List[Dict],
mcp_context: Optional[List[Dict]] = None
) -> Dict:
"""
Chat-Komplettierung mit MCP-Tool-Kontext.
Nutzt automatisch <50ms Latenz-Optimierung von HolySheep.
"""
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
payload = {
"model": "deepseek-v3.2", # Günstigste Option: $0.42/MTok
"messages": messages,
"mcp_tools": mcp_context or [],
"temperature": 0.7,
"stream": False
}
async with aiohttp.ClientSession() as session:
async with session.post(
f"{self.base_url}/chat/completions",
headers=headers,
json=payload
) as resp:
result = await resp.json()
# Latenz-Metrik extrahieren
latency = result.get("usage", {}).get("latency_ms", 0)
cost = result.get("usage", {}).get("total_cost", 0)
print(f"MCP-Hybrid-Antwort: {latency}ms, ${cost:.4f}")
return result
Usage-Beispiel
async def main():
bridge = MCPToolBridge("YOUR_HOLYSHEEP_API_KEY")
# MCP-Server registrieren (z.B. für Datenbank-Tools)
bridge.register_mcp_server(
"database",
"https://mcp.example.com/database"
)
messages = [
{"role": "user", "content": "Zeige mir die letzten 10 Bestellungen aus der Datenbank"}
]
result = await bridge.chat_with_mcp_tools(messages)
print(result)
asyncio.run(main())
Monitoring und Kostenanalyse
import time
from dataclasses import dataclass
from typing import List, Dict
from datetime import datetime
@dataclass
class CostMetrics:
"""Trackt Kosten und Latenz für Tool-Aufrufe."""
model: str
prompt_tokens: int
completion_tokens: int
latency_ms: float
total_cost: float
timestamp: datetime
class ToolUseAnalyzer:
"""
Analysiert Tool-Use-Patterns und optimiert Kosten.
Empfeiehlt das beste Modell für jeweilige Anwendungsfälle.
"""
# Preise pro 1M Token (USD)
MODEL_PRICES = {
"gpt-4.1": {"input": 2.00, "output": 8.00}, # $8/MTok output
"claude-sonnet-4.5": {"input": 3.00, "output": 15.00}, # $15/MTok
"gemini-2.5-flash": {"input": 0.35, "output": 2.50}, # $2.50/MTok
"deepseek-v3.2": {"input": 0.10, "output": 0.42} # $0.42/MTok
}
def __init__(self):
self.metrics: List[CostMetrics] = []
def record_call(
self,
model: str,
prompt_tokens: int,
completion_tokens: int,
latency_ms: float
):
"""Zeichnet einen API-Aufruf auf."""
input_cost = (prompt_tokens / 1_000_000) * self.MODEL_PRICES[model]["input"]
output_cost = (completion_tokens / 1_000_000) * self.MODEL_PRICES[model]["output"]
total_cost = input_cost + output_cost
self.metrics.append(CostMetrics(
model=model,
prompt_tokens=prompt_tokens,
completion_tokens=completion_tokens,
latency_ms=latency_ms,
total_cost=total_cost,
timestamp=datetime.now()
))
def calculate_savings(self, old_model: str, new_model: str) -> Dict:
"""Berechnet Ersparnis beim Modellwechsel."""
old_metrics = [m for m in self.metrics if m.model == old_model]
new_metrics = [m for m in self.metrics if m.model == new_model]
if not old_metrics or not new_metrics:
return {"error": "Unzureichende Daten"}
old_avg_cost = sum(m.total_cost for m in old_metrics) / len(old_metrics)
new_avg_cost = sum(m.total_cost for m in new_metrics) / len(new_metrics)
savings_percent = ((old_avg_cost - new_avg_cost) / old_avg_cost) * 100
return {
"old_model": old_model,
"new_model": new_model,
"old_avg_cost": f"${old_avg_cost:.4f}",
"new_avg_cost": f"${new_avg_cost:.4f}",
"savings_percent": f"{savings_percent:.1f}%",
"monthly_projection": f"${new_avg_cost * 30:.2f}" if new_avg_cost < old_avg_cost else None
}
def recommend_model(self, use_case: str) -> str:
"""Empfehlt Modell basierend auf Anwendungsfall."""
recommendations = {
"simple_tasks": "deepseek-v3.2", # Günstig, schnell
"code_generation": "gpt-4.1", # Beste Codequalität
"creative": "claude-sonnet-4.5", # Beste Kreativität
"fast_responses": "gemini-2.5-flash" # Beste Latenz
}
return recommendations.get(use_case, "deepseek-v3.2")
def generate_report(self) -> str:
"""Generiert Kostenreport für Management."""
if not self.metrics:
return "Keine Daten verfügbar"
total_cost = sum(m.total_cost for m in self.metrics)
avg_latency = sum(m.latency_ms for m in self.metrics) / len(self.metrics)
model_usage = {}
for m in self.metrics:
model_usage[m.model] = model_usage.get(m.model, 0) + 1
return f"""
══════════════════════════════════════════════════════
TOOL-USE KOSTENANALYSE REPORT
══════════════════════════════════════════════════════
Gesamtosten: ${total_cost:.4f}
Durchschnittliche Latenz: {avg_latency:.0f}ms
Anzahl Aufrufe: {len(self.metrics)}
Modellverteilung:
{chr(10).join(f" {model}: {count}x ({count/len(self.metrics)*100:.1f}%)" for model, count in model_usage.items())}
Empfohlene Optimierungen:
- Einfache Tasks → DeepSeek V3.2 ($0.42/MTok)
- Komplexe Tasks → GPT-4.1 ($8/MTok)
══════════════════════════════════════════════════════
"""
Usage
analyzer = ToolUseAnalyzer()
Simuliere einige Aufrufe
analyzer.record_call("gpt-4.1", 500, 200, 1200)
analyzer.record_call("deepseek-v3.2", 500, 200, 45)
analyzer.record_call("gemini-2.5-flash", 500, 200, 80)
print(analyzer.calculate_savings("gpt-4.1", "deepseek-v3.2"))
print(analyzer.generate_report())
Geeignet / Nicht geeignet für HolySheep
✅ Ideal geeignet für:
- Startup-Entwicklungsteams mit begrenztem Budget und Zeitdruck – die 85%+ Kostenersparnis ermöglicht mehr Experimente und Iterationen
- Produktions-KI-Agenten mit hohem Anfragevolumen – die <50ms Latenz verbessert die Nutzererfahrung messbar
- Internationale Teams – WeChat- und Alipay-Unterstützung erleichtert die Abrechnung für chinesische Teammitglieder
- Migration von OpenAI/MCP – die OpenAI-kompatible API minimiert den Refactoring-Aufwand
- Kostensensible Anwendungen – DeepSeek V3.2 zu $0.42/MTok ermöglicht aggressive Skalierung
- Prototyping und MVPs – kostenlose Credits für schnellen Start ohne initiale Kosten
❌ Weniger geeignet für:
- Unternehmen mit bestehenden Enterprise-Verträgen – manchmal sind Volumenrabatte bei direkten Anbietern günstiger
- Regulatorisch sensitive Anwendungen – wenn Datenresidenz in bestimmten Regionen vorgeschrieben ist
- Sehr spezifische Modell-Features – manche proprietäre Features sind nur bei Originalanbietern verfügbar
- Langfristige Komplexität – wenn Sie nur ein einziges Modell benötigen und keine Flexibilität wünschen
Preise und ROI: Konkrete Zahlen für Ihre Entscheidung
Die finanzielle Analyse war für mein Team der entscheidende Faktor. Hier sind die realen Zahlen aus meiner Produktionsumgebung:
| Modell | Original-Preis | HolySheep (¥1=$1) | Ersparnis |
|---|---|---|---|
| GPT-4.1 | $8.00/MTok | $1.20/MTok (¥8.40) | 85% |
| Claude Sonnet 4.5 | $15.00/MTok | $2.25/MTok (¥15.75) | 85% |
| Gemini 2.5 Flash | $2.50/MTok | $0.38/MTok (¥2.63) | 85% |
| DeepSeek V3.2 | $0.42/MTok | $0.06/MTok (¥0.44) | 85% |
Mein ROI-Beispiel aus der Praxis
In meinem Projekt mit 47 KI-Agenten verbrauchten wir monatlich etwa 25 Millionen Token (Input und Output gemischt). Mit OpenAI GPT-4-Turbo kostete uns das:
- Input: 15M × $3 = $45
- Output: 10M × $15 = $150
- Gesamt: $195/Monat
Nach Migration zu HolySheep und strategischem Model-Switching:
- Einfache Tasks (60%): DeepSeek V3.2 → 15M × $0.06 = $0.90
- Mittlere Tasks (30%): Gemini Flash → 7.5M × $0.38 = $2.85
- Komplexe Tasks (10%): Claude 3.5 → 2.5M × $2.25 = $5.63
- Gesamt: $9.38/Monat
Monatliche Ersparnis: $185.62 (95% Reduktion)
Die ROI-Berechnung für die Migration: Selbst bei 40 Stunden Entwicklungsaufwand à $100 = $4.000 Investition, hat sich die Migration in unter 2 Monaten bezahlt gemacht.
Häufige Fehler und Lösungen
Fehler 1: Ratenbegrenzung nicht behandelt
Symptom: "Rate limit exceeded" Fehler nach erfolgreicher Migration, besonders bei hohem Anfragevolumen.
# ❌ FALSCH: Keine Retry-Logik
response = requests.post(url, json=payload)
✅ RICHTIG: Exponentielles Backoff mit Retry
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
def create_session_with_retry():
session = requests.Session()
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
allowed_methods=["POST"]
)
adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("https://", adapter)
return session
def call_with_retry(session, url, payload, api_key):
headers = {"Authorization": f"Bearer {api_key}"}
for attempt in range(3):
try:
response = session.post(url, json=payload, headers=headers)
if response.status_code == 429:
wait_time = 2 ** attempt # 1s, 2s, 4s
print(f"Rate limit erreicht. Warte {wait_time}s...")
time.sleep(wait_time)
continue
response.raise_for_status()
return response.json()
except requests.exceptions.RequestException as e:
if attempt == 2:
raise
print(f"Versuch {attempt + 1} fehlgeschlagen: {e}")
time.sleep(2 ** attempt)
return {"error": "Alle Retry-Versuche fehlgeschlagen"}
Fehler 2: Tool-Parameter-Validierung vergessen
Symptom: Modelle generieren ungültige Tool-Argumente, die zu Runtime-Fehlern führen.
import jsonschema
from typing import Any, Dict
Tool-Schema Definition
TOOL_SCHEMAS = {
"get_weather": {
"type": "object",
"properties": {
"location": {"type": "string", "minLength": 2},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["location"]
}
}
def validate_tool_arguments(tool_name: str, arguments: Dict) -> tuple[bool, str]:
"""
Validiert Tool-Argumente gegen das definierte Schema.
Rückgabe: (is_valid, error_message)
"""
if tool_name not in TOOL_SCHEMAS:
return False, f"Unbekanntes Tool: {tool_name}"
schema = TOOL_SCHEMAS[tool_name]
try:
jsonschema.validate(instance=arguments, schema=schema)
return True, ""
except jsonschema.ValidationError as e:
return False, f"Validierungsfehler: {e.message}"
except jsonschema.SchemaError as e:
return False, f"Schema-Fehler: {e}"
def safe_execute_tool(tool_name: str, arguments: Dict) -> Dict:
"""Führt Tool mit Validierung und Fehlerbehandlung aus."""
is_valid, error = validate_tool_arguments(tool_name, arguments)
if not is_valid:
return {
"success": False,
"error": error,
"tool": tool_name,
"invalid_args": arguments
}
# Tool-Ausführung (Beispiel)
if tool_name == "get_weather":
return {
"success": True,
"result": f"Wetter in {arguments['location']}: 22°C",
"unit": arguments.get("unit", "celsius")
}
return {"success": False, "error": "Tool nicht implementiert"}
Test
result = safe_execute_tool("get_weather", {"location": "München"})
print(result) # ✅ Erfolg
result = safe_execute_tool("get_weather", {"location": ""})
print(result) # ❌ Fehler: minLength nicht erfüllt
Fehler 3: Kontextfenster ohne Token-Tracking
Symptom:"Ungültige Anfrage" Fehler bei längeren Konversationen,莫名其妙 Token-Limit erreicht.
import tiktoken
class TokenManager:
"""
Verwaltet Token-Limits für Tool-Use-Konversationen.
Verwendet tiktoken für präzises Token-Tracking.
"""
def __init__(self, model: str = "gpt-4"):
self.model = model
self.encoding = tiktoken.encoding_for_model(model)
# Context-Window Limits
self.limits = {
"gpt-4": 8192,
"gpt-4-32k": 32768,
"gpt-4.1": 128000,
"claude-sonnet-4.5": 200000,
"deepseek-v3.2": 64000
}
def count_tokens(self, text: str) -> int:
"""Zählt Token für einen Text."""
return len(self.encoding.encode(text))
def count_messages_tokens(self, messages: list) -> int:
"""Zählt Token für eine Nachrichtenliste (inkl. Overhead)."""
total = 0
for msg in messages:
# Basis-Overhead pro Nachricht
total += 4
# Role-Overhead
total += len(self.encoding.encode(msg.get("role", "")))
# Content
content = msg.get("content", "")
total += self.count_tokens(content)
# Tool-Calls Overhead
if "tool_calls" in msg:
for tc in msg["tool_calls"]:
total += 12
total += self.count_tokens(str(tc.get("function", {})))
return total
def truncate_to_limit(
self,
messages: list,
max_tokens: int = None,
preserve_system: bool = True
) -> list:
"""
Kürzt Nachrichten, um Token-Limit einzuhalten.
Bewahrt System-Prompt wenn preserve_system=True.
"""
limit = max_tokens or self.limits.get(self.model, 8192)
reserve_tokens = 500 # Puffer für Response
result = []
system_messages = []
other_messages = []
# Trenne System-Nachrichten
for msg in messages:
if msg.get("role") == "system":
system_messages.append(msg)
else:
other_messages.append(msg)
# Berechne verfügbare Tokens
system_tokens = self.count_messages_tokens(system_messages)
available = limit - system_tokens - reserve_tokens
# Füge System-Nachrichten hinzu
result.extend(system_messages)
# Füge andere Nachrichten von hinten hinzu
current_tokens = 0
for msg in reversed(other_messages):
msg_tokens = self.count_messages_tokens([msg])
if current_tokens + msg_tokens <= available:
result.insert(len(system_messages), msg)
current_tokens += msg_tokens
else:
break # Token-Limit erreicht
# Sortiere chronologisch
non_system = [m for m in result if m.get("role") != "system"]
result = [m for m in result if m.get("role") == "system"]
result.extend(non_system)
return result
def estimate_cost(self, messages: list, model: str) -> float:
"""Schätzt Kosten für eine Anfrage."""
tokens = self.count_messages_tokens(messages)
prices = {
"gpt-4.1
Verwandte Ressourcen
Verwandte Artikel