Zum Hauptinhalt springen
Lektion 3 von 14 · Function Calling mit Grok

Grenzen und Best Practices

Lektion 3 von 14 Aktualisiert am 29. Juli 2026 Entwickler
Auf dieser Seite
  1. Technische Grenzen des Funktionsaufrufs
  2. Maximale 200 Tools pro Anfrage
  3. Das Modell garantiert keine Gültigkeit der Argumente
  4. Fehlerbehandlung
  5. Eindeutige und explizite Namen
  6. Beschreibungen: der wichtigste Qualitätsfaktor
  7. Optimierung der Tool-Anzahl
  8. Sicherheit: vertrauen Sie dem Modell nie
  9. Kernaussagen

Technische Grenzen des Funktionsaufrufs

Bevor Sie mit der Implementierung beginnen, müssen Sie die Grenzen des Systems verstehen. Der Funktionsaufruf von Grok ist leistungsfähig, funktioniert jedoch innerhalb spezifischer Einschränkungen, die Sie beherrschen müssen, um robuste Anwendungen zu entwickeln.

Maximale 200 Tools pro Anfrage

Die Grok-API akzeptiert bis zu 200 Tool-Definitionen in einer einzigen Anfrage. Dieser Grenzwert ist großzügig – die meisten Anwendungen nutzen lediglich 5 bis 20. Wenn Sie jedoch ein skalierbares System (Plugins, Tool-Marktplatz) entwickeln, müssen Sie diese Grenze berücksichtigen.

Jede Tool-Definition beansprucht Platz im Kontextfenster. Konkret gilt:

  • Ein einfaches Tool (2–3 Parameter) verbraucht etwa 50–100 Tokens
  • Ein komplexes Tool (10+ Parameter, detaillierte Beschreibungen) kann 300 Tokens überschreiten
  • 200 komplexe Tools = 60.000 Tokens allein für die Definitionen

Deshalb müssen Sie strategisch vorgehen: deklarieren Sie nur die Tools, die für die aktuelle Anfrage relevant sind.

Das Modell garantiert keine Gültigkeit der Argumente

Grok versucht zwar sein Bestes, um Argumente zu generieren, die dem Schema entsprechen, ist aber nicht unfehlbar. Das Modell kann:

  • Ein falsches Datumsformat generieren
  • Einen string übergeben, wo ein integer erwartet wird
  • In seltenen Fällen ein erforderliches Feld weglassen
  • Enum-Werte halluzinieren, die nicht existieren

Ihr Client-Code muss empfangene Argumente immer validieren, bevor die Funktion ausgeführt wird.

import json

def handle_tool_call(tool_call):
    args = json.loads(tool_call.function.arguments)

    # Validierung vor der Ausführung
    if "city" not in args:
        return {"error": "Der Parameter city ist erforderlich"}

    if not isinstance(args["city"], str):
        return {"error": "city muss ein String sein"}

    return get_weather(args["city"], args.get("unit", "celsius"))

Fehlerbehandlung

Wenn eine Funktion fehlschlägt, müssen Sie den Fehler an das Modell zurückgeben, statt stumm abzustürzen. Das Modell kann daraufhin:

  • Seine Anfrage mit korrigierten Parametern neu formulieren
  • Den Benutzer über das Problem informieren
  • Ein alternatives Tool versuchen
try:
    result = search_database(query=args["query"])
    return json.dumps(result)
except ConnectionError:
    return json.dumps({
        "error": "Datenbank nicht verfügbar",
        "suggestion": "Bitte in wenigen Sekunden erneut versuchen"
    })

Geben Sie immer strukturiertes JSON zurück, auch bei Fehlern. Das Modell versteht Fehlermeldungen und passt seine Antwort entsprechend an.

Eindeutige und explizite Namen

Funktionsnamen müssen in der Tool-Liste eindeutig sein. Wenn zwei Tools denselben Namen teilen, ist das Verhalten undefiniert – die API kann die Anfrage ablehnen oder eines der Tools ignorieren.

Adoptieren Sie eine konsistente Namenskonvention:

✅ Best Practices:
   get_weather          → Datenabruf
   search_products      → Suche
   create_ticket        → Erstellung
   update_order_status  → Aktualisierung
   delete_draft         → Löschung

❌ Vermeiden:
   fn1, fn2             → unverständlich
   doStuff              → zu vage
   getWeatherData       → camelCase (präferieren Sie snake_case)

Beschreibungen: der wichtigste Qualitätsfaktor

Die Qualität der Beschreibung bestimmt direkt die Zuverlässigkeit des Funktionsaufrufs. Hier ist ein Vergleichstabelle:

Schlechte Beschreibung Effektive Beschreibung
"Suche" "Suche nach Produkten im E-Commerce-Katalog nach Name, Kategorie oder Preisbereich"
"Nachricht senden" "Senden einer E-Mail an einen Empfänger. Erfordert Betreff und Nachrichtentext. Unterstützt keine Anhänge."
"Berechnen" "Berechnung des Endpreises inkl. MwSt. aus einem Netto-Betrag und einem Steuersatz. Gibt den Betrag in Euro mit zwei Dezimalstellen zurück."

Optimierung der Tool-Anzahl

Statt auf jeder Anfrage 200 Tools zu deklarieren, wählen Sie dynamisch diejenigen aus, die tatsächlich relevant sind. Der erste Filter ist der Kontext: Wenn der Nutzer über das Wetter spricht, fügt das Laden von Abrechnungstools nur Rauschen hinzu – eine leichte upstream-Verarbeitung (durch Schlüsselwörter oder einen ersten Klassifizierungsaufruf) reicht aus, um nur die relevante Familie anzuzeigen. Der zweite Filter ist die Rolle: Ein Support-Mitarbeiter benötigt keine Admin-Tools, und deren Entfernung ist eine Frage der Präzision genauso wie der Sicherheit. Der dritte ist der Schritt: In einem mehrstufigen Workflow hat jede Phase ihre eigenen Tools – das Laden dieser Tools im Verlauf hält das Modell auf das fokussiert, was es gerade tun muss.

Der Vorteil ist zweifach und sofort spürbar: weniger Eingabetokens pro Anfrage (Tool-Definitionen kosten Sie bei jedem Aufruf) und eine bessere Auswahlgenauigkeit – ein Modell, das zwischen sechs gut beschriebenen Tools wählen muss, macht selten einen Fehler, wohingegen dasselbe Modell vor zweihundert Definitionen verwirrt wird und ähnliche Varianten durcheinanderbringt.

Sicherheit: vertrauen Sie dem Modell nie

Der Funktionsaufruf ist ein potenzieller Injektionsvektor. Ein böswilliger Nutzer könnte seine Anfrage formulieren, um Argumente zu manipulieren, die an Funktionen übergeben werden. Sicherheitsregeln:

  • Validieren Sie alle Argumente serverseitig
  • Beschränken Sie Berechtigungen: Eine Lese-Funktion darf nicht schreiben
  • Protokollieren Sie Aufrufe: Verfolgen Sie jeden Funktionsaufruf zur Prüfung
  • Reinigen Sie Eingaben: Escapen Sie Sonderzeichen vor SQL- oder Shell-Abfragen

Kernaussagen

  • Maximale 200 Tools pro Anfrage – streben Sie jedoch 5–20 für Effizienz an
  • Validieren Sie Argumente clientseitig immer vor der Ausführung
  • Geben Sie Fehler an das Modell in strukturiertem JSON zurück
  • Namen müssen eindeutig, snake_case und explizit sein
  • Detaillierte Beschreibungen verbessern die Zuverlässigkeit drastisch
  • Wählen Sie für jede Anfrage dynamisch relevante Tools aus
  • Vertrauen Sie Argumenten niemals ohne Validierung