Offizielle API-Dokumentation für Function Calling
Dieser Endpunkt dient zur Erstellung einer Chat-Vervollständigung (Chat Completion). Durch die Bereitstellung einer Nachrichtenliste und einer optionalen Werkzeugliste (Functions) kann das Modell eine Textantwort generieren oder Parameter erzeugen, die einem spezifischen JSON-Schema entsprechen, um externe Funktionen aufzurufen.
1. API-Informationen
- API-Endpunkt:
https://api.codingplanx.ai/v1/chat/completions - Anfragemethode:
POST - Inhaltstyp (Content-Type):
application/json - Authentifizierung:
Authorization: Bearer {{YOUR_API_KEY}}
2. Anfrageparameter
2.1 Anfrage-Header (Headers)
| Parametername | Typ | Erforderlich | Beispiel | Beschreibung |
|---|---|---|---|---|
| Content-Type | string | Ja | application/json | Festgelegt auf application/json |
| Accept | string | Ja | application/json | Empfohlen: festlegen auf application/json |
| Authorization | string | Ja | Bearer sk-xxxxxx | API-Schlüssel-Authentifizierung |
2.2 Anfrage-Body (Body)
| Parametername | Typ | Erforderlich | Standardwert | Beschreibung |
|---|---|---|---|---|
| model | string | Ja | - | Die verwendete Modell-ID (z. B. gpt-4o, gpt-3.5-turbo usw.). |
| messages | array | Ja | - | Liste der bisherigen Konversationsnachrichten. Jedes Objekt enthält role ("system", "user", "assistant", "tool") und content. |
| tools | array | Ja | - | Liste der Werkzeuge, die das Modell aufrufen kann. Derzeit wird nur type: "function" unterstützt. Dient zur Definition von Funktionsnamen, Beschreibungen und Parametern. |
| tool_choice | object/str | Nein | auto | Steuert, welche Funktion das Modell aufruft. none: Kein Aufruf; auto: Automatische Auswahl; {"type": "function", "function": {"name": "xxx"}}: Erzwingt den Aufruf einer bestimmten Funktion. |
| temperature | number | Nein | 1 | Sampling-Temperatur (0-2). Höhere Werte machen die Ausgabe zufälliger, niedrigere Werte deterministischer. |
| top_p | number | Nein | 1 | Nucleus-Sampling-Wahrscheinlichkeit. |
| n | integer | Nein | 1 | Anzahl der für jede Eingabenachricht generierten Chat-Vervollständigungsoptionen. |
| stream | boolean | Nein | false | Ob gestreamt werden soll. Wenn auf true gesetzt, werden Tokens als Server-Sent Events (SSE) gesendet. |
| stop | string/array | Nein | null | Stopp-Sequenzen, bei denen die API die Generierung von Tokens beendet. |
| max_tokens | integer | Nein | inf | Maximale Anzahl der zu generierenden Tokens. |
| presence_penalty | number | Nein | 0 | Wert zwischen -2.0 und 2.0. Erhöht die Wahrscheinlichkeit, dass das Modell über neue Themen spricht. |
| frequency_penalty | number | Nein | 0 | Wert zwischen -2.0 und 2.0. Verringert die Wahrscheinlichkeit, dass das Modell denselben Inhalt wiederholt. |
| response_format | object | Nein | - | Legt das Ausgabeformat fest. Z. B. aktiviert {"type": "json_object"} den JSON-Modus. |
| seed | integer | Nein | - | Wenn angegeben, versucht das System deterministisch zu sampeln, sodass Anfragen mit demselben Seed und denselben Parametern das gleiche Ergebnis liefern. |
| user | string | Nein | - | Eindeutiger Identifikator für den Endbenutzer, dient zur Überwachung von Missbrauch. |
3. Anfragebeispiel
{
"model": "gpt-4o",
"messages": [
{
"role": "user",
"content": "Wie ist das Wetter heute in Peking?"
}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_current_weather",
"description": "Ruft das aktuelle Wetter für einen bestimmten Ort ab",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "Name der Stadt, z. B.: Peking"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto",
"temperature": 0.8
}
4. Antwortparameter
4.1 Struktur des Antwort-Bodys
| Parametername | Typ | Beschreibung |
|---|---|---|
| id | string | Eindeutiger Identifikator für diese Anfrage. |
| object | string | Objekttyp, normalerweise chat.completion. |
| created | integer | Unix-Zeitstempel (in Sekunden). |
| choices | array | Enthält die Liste der generierten Antworten. |
| └ message | object | Enthält role, content sowie mögliche tool_calls. |
| └ finish_reason | string | Stopp-Grund. stop (natürliches Ende), length (max_tokens erreicht), tool_calls (Werkzeugaufruf erforderlich). |
| usage | object | Token-Verbrauch: prompt_tokens, completion_tokens, total_tokens. |
4.2 Antwortbeispiel (Normaler Text)
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1677652288,
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Das Wetter in Peking ist heute sonnig bei einer Temperatur von 25 Grad Celsius."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 12,
"total_tokens": 21
}
}
5. FAQs (Häufig gestellte Fragen)
Q1: Was ist Function Calling (Werkzeugaufruf)? A: Dies ist eine Methode, um dem Modell die Fähigkeit zu geben, externe Funktionen aufzurufen. Das Modell führt den Code nicht direkt aus, sondern generiert basierend auf Ihrer Beschreibung ein JSON-Objekt, das den Funktionsnamen und die erforderlichen Parameter enthält. Sie müssen dieses JSON extrahieren, die Funktion lokal oder auf Ihrem Server ausführen und das Ergebnis dann an das Modell zurückgeben.
Q2: Warum habe ich tools eingerichtet, aber das Modell gibt keine tool_calls zurück?
A: Dies kann folgende Gründe haben:
- Das Modell ist der Ansicht, dass die Frage des Benutzers den Aufruf der Funktion nicht erfordert.
- Ihre Funktionsbeschreibung (
description) ist nicht klar genug, sodass das Modell die Absicht nicht zuordnen kann. tool_choicewurde explizit aufnonegesetzt.- Einschränkungen der Modellfähigkeiten (Es wird empfohlen, Modelle wie
gpt-4oodergpt-3.5-turbozu verwenden, die Werkzeugaufrufe priorisiert unterstützen).
Q3: Wie kann ich erzwingen, dass das Modell eine bestimmte Funktion aufruft?
A: Sie können tool_choice auf ein bestimmtes Objekt setzen, zum Beispiel:
"tool_choice": {"type": "function", "function": {"name": "get_current_weather"}}. Auf diese Weise wird das Modell versuchen, Parameter für diese Funktion zu generieren, auch wenn es dies nicht für notwendig erachtet.
Q4: Was soll ich tun, wenn der finish_reason den Wert length hat?
A: Das bedeutet, dass die generierte Antwort das max_tokens-Limit oder das Kontextfenster-Limit des Modells überschritten hat. Sie können versuchen, den Parameter max_tokens zu erhöhen oder die Länge des Nachrichtenverlaufs (messages) zu reduzieren.
Q5: Was ist bei der Verwendung des JSON-Modus (JSON Mode) zu beachten?
A: Wenn response_format: { "type": "json_object" } gesetzt ist, müssen Sie in der System- oder User-Nachricht explizit verlangen, dass das Modell den Inhalt im JSON-Format ausgibt (z. B. "Antworte im JSON-Format"). Andernfalls könnte das Modell in eine Endlosschleife geraten und nur Leerzeichen ausgeben.
Q6: Wie gehe ich mit mehreren Werkzeugaufrufen (Multiple Tool Calls) um?
A: In einer einzigen Anfrage kann das Modell gleichzeitig mehrere Werkzeugaufrufe generieren (z. B. gleichzeitige Abfrage des Wetters in Peking und Shanghai). Sie müssen über das Array choices[0].message.tool_calls iterieren und für jeden Aufruf die entsprechende lokale Logik ausführen.