Text
Dokumentacja API GLM-5.3
Pola żądań GLM-5.3, rozumowanie, narzędzia, strumieniowanie, zużycie i kompletne przykłady Chat, Responses oraz Messages.
GLM-5.3 przyjmuje tekst i zwraca tekst lub wywołania narzędzi. Zawsze rozumuje, obsługuje poziomy low, high i max oraz wyjście do 131 072 tokenów. Dla wariantu Default użyj glm-5.3. Domyślna grupa to glm; glm-5.3:glm pozostaje jawnym wyborem tej samej grupy. Dodatkowe grupy mają własny sufiks modelu.
Bazowy URL: https://api.seedrouter.ai. Uwierzytelniaj przez Authorization: Bearer $SEEDROUTER_API_KEY. Przechowuj dane dostępowe na serwerze. Messages akceptuje też zgodny nagłówek x-api-key.
Dokumentacja opiera się na kontrakcie Chat Z.ai, schemacie Responses producenta i jego przewodniku zgodności Messages. Limity modelu pochodzą z przewodnika GLM-5.3. Zgodność z dokumentacją nie potwierdza każdego zachowania w rzeczywistych wywołaniach. Testy z 29 października 2026 r. zakończyły żądania tekstowe i strumieniowe we wszystkich trzech formatach, wywołania funkcji Chat, wyjście jako obiekt JSON i kontynuację zapisanej odpowiedzi. Nie potwierdzono trafień w cache, jawnych okresów przechowywania ani każdego ustawienia zgodności. Poniższe pola referencyjne Messages odróżniamy od pól GLM udokumentowanych przez producenta.
Specyfikacja OpenAPI · Dokumentacja Markdown · Model i Playground · Przewodnik po cenach
Szybki start
Każdy przykład wysyła jedno żądanie Chat Completions. max_tokens: 2048 to przykładowy budżet, nie wartość domyślna. Rozumowanie i widoczna odpowiedź dzielą ten budżet; sprawdź finish_reason, zanim uznasz odpowiedź za kompletną.
curl https://api.seedrouter.ai/v1/chat/completions \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"glm-5.3","messages":[{"role":"user","content":"Explain an idempotency key with one concrete example."}],"reasoning_effort":"low","max_tokens":2048}'import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["SEEDROUTER_API_KEY"], base_url="https://api.seedrouter.ai/v1")
response = client.chat.completions.create(
model="glm-5.3",
messages=[{"role": "user", "content": "Explain an idempotency key with one concrete example."}],
max_tokens=2048,
extra_body={"reasoning_effort": "low"},
)
print(response.choices[0].message.content)
print(response.usage)import OpenAI from 'openai';
const client = new OpenAI({apiKey: process.env.SEEDROUTER_API_KEY, baseURL: 'https://api.seedrouter.ai/v1'});
const response = await client.chat.completions.create({
model: 'glm-5.3',
messages: [{role: 'user', content: 'Explain an idempotency key with one concrete example.'}],
reasoning_effort: 'low',
max_tokens: 2048,
});
console.log(response.choices[0].message.content);
console.log(response.usage);package main
import (
"bytes"
"fmt"
"io"
"net/http"
"os"
"time"
)
func main() {
body := []byte(`{"model":"glm-5.3","messages":[{"role":"user","content":"Explain an idempotency key with one concrete example."}],"reasoning_effort":"low","max_tokens":2048}`)
req, err := http.NewRequest("POST", "https://api.seedrouter.ai/v1/chat/completions", bytes.NewReader(body))
if err != nil { panic(err) }
req.Header.Set("Authorization", "Bearer " + os.Getenv("SEEDROUTER_API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{Timeout: 3 * time.Minute}
res, err := client.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
data, err := io.ReadAll(res.Body)
if err != nil { panic(err) }
if res.StatusCode != http.StatusOK { panic(fmt.Sprintf("HTTP %d: %s", res.StatusCode, data)) }
fmt.Println(string(data))
}Chat Completions
POST /v1/chat/completions przyjmuje 16 pól najwyższego poziomu. Pola nie dopuszczają null, chyba że wskazano to jawnie. Pola opcjonalne można pominąć; nie wysyłaj null zamiast pominięcia.
| Pole | Typ | Wymagane | Wartość domyślna i ograniczenia |
|---|---|---|---|
model | ciąg znaków | Tak | glm-5.3 (Default) |
messages | tablica | Tak | Co najmniej jedna wiadomość; musi zawierać wiadomość user lub tool |
do_sample | logiczny | Nie | true; false sprawia, że temperature i top_p nie działają |
stream | logiczny | Nie | false |
thinking | obiekt | Nie | type: enabled; clear_thinking: true |
reasoning_effort | ciąg znaków | Nie | low, high, max; domyślnie max |
temperature | liczba | Nie | 0–1 włącznie; domyślnie 1 |
top_p | liczba | Nie | 0.01–1 włącznie; domyślnie 0.95 |
max_tokens | liczba całkowita | Nie | 1–131072; brak opublikowanej wartości domyślnej Chat |
tool_stream | logiczny | Nie | false; true wymaga stream: true |
tools | tablica | Nie | Function, retrieval lub web_search; do 128 elementów |
tool_choice | ciąg znaków | Nie | Tylko auto |
stop | tablica ciągów | Nie | Do czterech ciągów w oficjalnym schemacie; cztery przyjęto w rzeczywistym żądaniu, ale dopasowania zatrzymania nie sprawdzano |
response_format | obiekt | Nie | Wymagany type: text lub json_object; domyślnie text |
request_id | ciąg znaków | Nie | 6–64 znaki; unikalny identyfikator żądania wywołującego |
user_id | ciąg znaków | Nie | 6–128 znaków; unikaj danych osobowych |
Wiadomości system i user wymagają ciągu content. Wiadomość assistant może zawierać ciąg content, reasoning_content i tool_calls. Wiadomość tool wymaga content i tool_call_id. Przy thinking.clear_thinking: false zachowaj dokładne wcześniejsze rozumowanie, w tym kolejność wywołań asystenta i wyników narzędzi. Rozumowania nie można wyłączyć.
Narzędzie funkcji używa {type:"function", function:{name, description, parameters}}. Nazwa zawiera 1–64 litery ASCII, cyfry, podkreślenia lub łączniki. Schemat maszynowy wymaga description i parameters; opis wspomina o pominięciu dla funkcji bez parametrów. Do rozwiązania tej sprzeczności używaj pełnej postaci. parameters to JSON Schema twojej funkcji; nie jest interpretowane jako treść wiadomości.
Narzędzie wyszukiwania w bazie używa {type:"retrieval", retrieval:{knowledge_id, prompt_template?}}. ID bazy wiedzy należy do konta obsługującego żądanie; deklaracja narzędzia nie tworzy bazy wiedzy.
Narzędzie wyszukiwania w sieci używa {type:"web_search", web_search:{search_engine:"search_pro_jina"}}. Opcjonalne pola obejmują enable, search_query, count (1–50), search_domain_filter, search_recency_filter (oneDay, oneWeek, oneMonth, oneYear, noLimit), content_size (medium, high), result_sequence (before, after), search_result, require_search i search_prompt. Dokładne typy znajdziesz w OpenAPI. Dostępność wyszukiwania i retrieval dla konkretnego konta wymaga rzeczywistej weryfikacji.
Tryb obiektu JSON tworzy JSON, ale nie wymusza zgodności z przekazaną JSON Schema. Umieść oczekiwane pola w prompcie i sprawdź wynik w aplikacji.
Responses
POST /v1/responses przyjmuje 15 pól tworzenia najwyższego poziomu. Jest zgodny ze schematem Responses producenta dostosowanym do GLM-5.3; dokładne zachowanie w poszczególnych serwisach nadal wymaga weryfikacji.
curl https://api.seedrouter.ai/v1/responses \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"model":"glm-5.3","input":[{"type":"message","role":"user","content":"Give a concise example of a safe retry."}],"reasoning":{"effort":"low"},"max_output_tokens":2048,"store":false}'| Pole | Typ | Wymagane | Wartość domyślna i ograniczenia |
|---|---|---|---|
model | ciąg znaków | Tak | glm-5.3 |
input | ciąg lub tablica | Tak | Natywne elementy wejścia opisane poniżej |
instructions | ciąg znaków | Nie | Instrukcje systemowe |
stream | logiczny | Nie | false |
temperature | liczba | Nie | 0–1, najwyżej dwa miejsca po przecinku; domyślnie 1 |
top_p | liczba | Nie | 0.01–1, najwyżej dwa miejsca po przecinku; domyślnie 0.95 |
max_output_tokens | liczba całkowita | Nie | 1–131072; domyślnie 65536, łącznie z rozumowaniem |
stop | tablica ciągów | Nie | Brak zadeklarowanego limitu liczby w tym protokole |
tools | tablica | Nie | Function, namespace, custom lub web_search |
tool_choice | ciąg znaków | Nie | none lub auto |
reasoning | obiekt | Nie | effort: low, high, max; domyślnie max |
text | obiekt | Nie | format.type: text lub json_object |
prompt_cache_key | ciąg znaków | Nie | Klucz wyboru cache; brak udokumentowanego limitu długości |
previous_response_id | ciąg znaków | Nie | Odwołanie do wcześniej zapisanej odpowiedzi |
store | logiczny | Nie | false; czy zapisać tę odpowiedź |
Elementy wiadomości na wejściu wymagają type: "message", roli (user, system, assistant, developer) i treści. Treść może być ciągiem, jednym blokiem tekstu lub tablicą bloków tekstu. Użyj input_text lub output_text asystenta z ciągiem text. Ogólne schematy obrazów/plików nie nadają zdolności wzrokowych temu modelowi tekstowemu.
Wejściowe elementy wywołania funkcji wymagają type: "function_call", name, call_id i ciągu JSON arguments; namespace jest opcjonalne. Wyniki wymagają type: "function_call_output", call_id i ciągu output. Elementy rozumowania używają type: "reasoning" i pojedynczego obiektu content: {type:"reasoning_text", text:"..."}. Zachowaj go bez konwersji na tablicę.
Narzędzia funkcji wymagają type: "function" i name, z opcjonalnymi description i parameters. Narzędzia przestrzeni nazw wymagają type: "namespace" i name oraz mogą zawierać funkcje tools. Narzędzia niestandardowe wymagają type: "custom" i name. Narzędzia wyszukiwania w sieci wymagają type: "web_search". Nie kopiuj tu wymaganych pól funkcji z Chat.
Poprzednia wskazana odpowiedź musi być zapisana. Zapis bieżącej odpowiedzi jest osobnym wyborem; previous_response_id nie wymusza bieżącego store: true. Okres przechowywania producenta wynosi siedem dni. Rzeczywisty test zapisał odpowiedź i kontynuował ją po ID przy bieżącym store: false; nie potwierdza to wszystkich operacji na zapisanych odpowiedziach.
Operacje na zapisanych odpowiedziach
Po powodzeniu store: true zachowaj zwrócone ID odpowiedzi bez zmian. Te uwierzytelnione operacje używają tego samego konta, które ją utworzyło:
GET /v1/responses/{response_id}pobiera zapisaną odpowiedź.GET /v1/responses/{response_id}/input_itemswyświetla elementy wejścia. Opcjonalne pola zapytania:order(asclubdesc, domyślniedesc),limit(liczba całkowita 1–100, domyślnie 20) iafter(last_id poprzedniej strony).DELETE /v1/responses/{response_id}usuwa zapisaną odpowiedź.
Następne żądanie tworzenia może użyć zapisanego ID jako previous_response_id. Pierwotny użytkownik musi nadal mieć dostęp do modelu. Przechowywanie trwa najwyżej siedem dni; wygasłych lub usuniętych odpowiedzi nie można kontynuować. Pobieranie, usuwanie i kontynuacja zachowują powiązanie z pierwotnym kontem. Punkt anulowania nie jest udokumentowany. Operacje są objęte lokalnymi testami kontraktu. Test rzeczywisty z 29 października potwierdził zapis i kontynuację; pobranie i lista elementów wejścia zwróciły 404, a usuwania nie testowano. Nie polegaj na pobieraniu, listowaniu ani usuwaniu przed potwierdzeniem dostępności.
Zgodność Messages
POST /v1/messages używa formatu zgodnego z Anthropic. Dodaj anthropic-version: 2023-06-01. Producent bezpośrednio pokazuje model, messages, max_tokens i stream. Nie publikuje pełnego schematu GLM Messages i ostrzega o różnicach względem Claude. Pozostałe ustawienia to pola dokumentacji zgodności, nie indywidualnie zweryfikowane możliwości GLM.
curl https://api.seedrouter.ai/v1/messages \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-H 'Content-Type: application/json' \
-H 'anthropic-version: 2023-06-01' \
-d '{"model":"glm-5.3","messages":[{"role":"user","content":"Explain a safe retry in two sentences."}],"max_tokens":2048}'| Pole | Postać i walidacja | Dowód |
|---|---|---|
model | Wymagany ciąg glm-5.3 | Przykład GLM |
messages | Wymagana niepusta tablica user/assistant; ciąg lub natywne bloki tekstu/narzędzi | Przykład tekstowy GLM; postacie bloków z dokumentacji zgodności |
max_tokens | Wymagana liczba całkowita 1–131072 | Przykład GLM i limit wyjścia modelu |
stream | Logiczny; domyślnie false | Przykład GLM |
system | Ciąg lub tablica bloków tekstu | Dokumentacja zgodności |
temperature | Liczba 0–1 | Dokumentacja zgodności; mapowanie niezweryfikowane |
top_p | Liczba 0.01–1 | Dokumentacja zgodności; mapowanie niezweryfikowane |
top_k | Nieujemna liczba całkowita | Dokumentacja zgodności; mapowanie niezweryfikowane |
stop_sequences | Tablica ciągów | Dokumentacja zgodności |
tools | Narzędzia klienta: name, input_schema, opcjonalny description | Dokumentacja zgodności |
tool_choice | Obiekt z type auto, none, any lub tool; nazwane narzędzie wymaga name | Dokumentacja zgodności |
thinking | enabled z budget_tokens lub adaptive; nie można wyłączyć rozumowania | Dokumentacja zgodności oraz reguła stałego rozumowania GLM |
output_config | Obiekt z effort low, high lub max | Zgodna nazwa pola; mapowanie niezweryfikowane |
metadata | Obiekt z opcjonalnym user_id | Dokumentacja zgodności |
cache_control | Znacznik ephemeral, opcjonalny ttl 5m lub 1h | Tylko dokumentacja protokołu; jawne zachowanie TTL GLM niezweryfikowane |
Zgodny budżet enabled thinking wynosi co najmniej 1024 i mniej niż max_tokens. Bloki tekstowe wymagają text; historia rozumowania wymaga thinking i signature; ukryte rozumowanie wymaga data. Bloki użycia narzędzi wymagają id, name i input; bloki wyniku wymagają tool_use_id. Bloki obrazów, dźwięku i wideo nie są przyjmowane. Jawne znaczniki cache nie potwierdzają trafienia, okresu przechowywania ani osobnej stawki. Udokumentowany cache kontekstu modelu działa automatycznie.
Wyjście, strumieniowanie i zużycie
Chat zwraca id, created, model, choices i usage, opcjonalnie request_id i web_search. Odczytaj choices[].message.content, reasoning_content i tool_calls. Odpowiedź wywołująca narzędzie może nie mieć tekstu. SSE wysyła fragmenty rozumowania, tekstu i argumentów narzędzi, a potem [DONE]. Łącz fragmenty argumentów według indeksu wywołania. Pole stream_options nie należy do oficjalnego żądania GLM Chat.
Responses zwraca natywną unię output: wiadomości, rozumowanie i wywołania narzędzi. SSE obejmuje response.created, response.in_progress, zdarzenia elementów wyjścia i części treści, fragmenty tekstu/rozumowania/argumentów funkcji, postęp wyszukiwania i końcowe response.completed, response.incomplete lub response.failed. Nie wymaga znacznika [DONE]. Zachowaj indeksy i numery sekwencji.
Messages zwraca natywny format wiadomości z blokami treści, stop_reason i usage. Zdarzenia obejmują message_start, content_block_start/delta/stop, message_delta i message_stop. Zachowaj podpisy rozumowania i ID narzędzi jako nieinterpretowaną historię.
| Format | Całe wejście | Wejście z cache | Wyjście |
|---|---|---|---|
| Chat | prompt_tokens | prompt_tokens_details.cached_tokens | completion_tokens |
| Responses | input_tokens | input_tokens_details.cached_tokens | output_tokens |
| Messages | input_tokens plus cache_read_input_tokens i ewentualne cache_creation_input_tokens | cache_read_input_tokens | output_tokens |
Rozumowanie jest częścią wyjścia, nie dodatkową opłatą. Wejście z cache Chat/Responses jest częścią całego wejścia. Odejmij osobno wykazane części z cache przed zastosowaniem zwykłej stawki wejścia. Publiczne odpowiedzi pokazują zużycie tokenów, nie kwoty. Bieżące ceny pochodzą z aktualnych ustawień rozliczeń; nieudane żądania nie są naliczane.
Walidacja i błędy
Nieprawidłowe typy, wyłączone rozumowanie, nieobsługiwany poziom, nadmierny budżet wyjścia i media na wejściu nie przechodzą walidacji. tool_stream Chat wymaga stream. Nieobsługiwane pola najwyższego poziomu są pomijane, a nie przekazywane dalej. Wymagane są dane dostępowe; niewystarczające saldo uniemożliwia płatne żądanie. Błędy używają publicznego formatu błędu (Messages ma własną postać). Nigdy nie uznawaj przerwanego strumienia za kompletną odpowiedź ani nie ponawiaj automatycznie żądania o niepewnym wyniku.
Playground udostępnia te same dopuszczone pola wybranego formatu. Puste opcjonalne wartości są pomijane; jawne false i zero są zachowane. Zmiana formatu rozpoczyna nową rozmowę. Szacunek zużycia wymaga zarówno zwróconych danych, jak i bieżących stawek.
