Title: GLM-5.3 Hands-On Guide: Always-On Thinking, Three Effort Levels & API Support Matrix
Description: Посібник із GLM-5.3 на серпень 2026 року: завжди увімкнене мислення, три рівні reasoning_effort, підсумки міркувань, паралельні виклики інструментів, структурований вивід і автоматичне кешування — з перевіреними прикладами для AIHubMix Chat / Responses / Messages.
Ця стаття описує ключові зміни в API та особливості використання GLM-5.3. GLM-5.3 — флагманська модель Z.ai, випущена 2026-08-14; вона використовує ту саму базову модель, що й GLM-5.2, а всі покращення досягнуто за рахунок післятренування. На AIHubMix ідентифікатор моделі —coding-glm-5.3(наразі маршрут попереднього перегляду з обмеженим часом), доступна через API Chat Completions, Responses та сумісний із Claude API Messages. Див. також: офіційний блог Z.ai про випуск.
Висновки «Verified» і зразки відповідей у кожному розділі отримано з реальних викликів, виконаних 2026-08-14 через API AIHubMix (Chat Completions / Responses / Messages).
1. Технічні характеристики моделі
| Параметр | Значення |
|---|---|
| Контекстне вікно | 1M токенів (точне офіційне значення: 1,048,576) |
| Максимальний вивід | 128K (перевірена межа max_tokens: 131,072 — перевищення повертає 400) |
| Модальності вводу | Текст |
| Мислення | Завжди увімкнене, вимкнути не можна; reasoning_effort має три рівні — low / high / max, за замовчуванням max |
| Зв'язок з GLM-5.2 | Та сама базова модель, покращена через післятренування: значно сильніші результати в кодуванні та довгих агентних завданнях, а також нові кіберможливості |
| Ідентифікатор моделі в AIHubMix | coding-glm-5.3 (маршрут попереднього перегляду з обмеженим часом; ми оновимо статтю одразу після запуску офіційного комерційного API) |
Перевірено: max_tokens: 999999 повертає 400 з вказаним у тілі помилки допустимим діапазоном — межа справді перевірена, а не мовчки обрізана.# max_tokens=999999 -> HTTP 400
"max_tokens parameter invalid: value must be within [1,131072]"
2. GLM-5.3 проти GLM-5.2: завжди увімкнене мислення, інтенсивність через reasoning_effort
| Параметр | GLM-5.2 | GLM-5.3 |
|---|---|---|
| Базова модель | — | Ідентична 5.2 (усі покращення від післятренування) |
thinking.type |
enabled / disabled — можна вимкнути |
enabled лише — вимкнути не можна |
reasoning_effort |
Сумісність зі 7 значеннями (фактичні рівні: max/high) | Три рівні low / high / max, за замовчуванням max |
| Позиціонування | Універсальна флагманська модель | Посилена для кодування та довгих агентних завдань, з новими кіберможливостями |
Ось дві найважливіші зміни API у GLM-5.3 порівняно з GLM-5.2:
thinking.typeбільше не підтримуєdisabled— мислення не можна вимкнути. Офіційна порада щодо міграції: застосунки, які раніше надсилали{"type": "disabled"}, мають перейти на{"type": "enabled"}і встановитиreasoning_effortу"low".reasoning_effortзвужено до трьох рівнів:low(легкий) /high(посилений) /max(глибокий, за замовчуванням). Сумісність зі 7 значеннями, що діяла в GLM-5.2, більше не застосовується; Z.ai рекомендуєmaxдля завдань з кодування.
Перевірено: надсиланняthinking: {"type": "disabled"}через AIHubMix повертає 200, і мислення все одно відбувається (reasoning_contentповертається як зазвичай) — значення автоматично перетворюється відповідно до офіційної семантики каналу, а не відхиляється. Якщо ваш клієнт покладався на «вимкнути мислення для економії токенів», перейдіть наreasoning_effort: "low".
Перевірено: значення поза переліком дляreasoning_effortтакож повертають 200 без помилки (із переходом до значення за замовчуваннямmaxзгідно з офіційною документацією);lowпротиmaxпоказує очікувану тенденцію до легшого мислення (27 проти 39 токенів міркування для одного й того самого арифметичного питання).
Chat Completions
Вміст мислення повертається в полі reasoning_content; у потоковому режимі він надходить як delta.reasoning_content.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
completion = client.chat.completions.create(
model="coding-glm-5.3",
reasoning_effort="max", # low / high / max, default max
extra_body={"thinking": {"type": "enabled"}},
messages=[
{"role": "user", "content": "Compute the square root of (17*23-19*11), rounded down. Digits only."}
],
)
print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content) # Observed: "13"
Перевірено:usage.completion_tokens_details.reasoning_tokensпоказує витрати на мислення — 27 приreasoning_effort="low"і 39 при"max"для одного й того самого питання.
Responses
Вміст мислення повертається як елемент виводу reasoning, а текст у масиві summary має тип summary_text.
from openai import OpenAI
client = OpenAI(
base_url="https://aihubmix.com/v1",
api_key="<AIHUBMIX_API_KEY>",
)
response = client.responses.create(
model="coding-glm-5.3",
input="What is the capital of France? City name only.",
)
# Observed response.output item types: ["reasoning", "message"]
# reasoning item: {"type": "reasoning", "summary": [{"type": "summary_text", "text": "The user is asking..."}]}
# usage.output_tokens_details.reasoning_tokens: 80
Перевірено: стандартний запит (без параметраreasoningвзагалі) вже містить елементreasoningзsummary_text— явне ввімкнення не потрібне.
Messages
Вміст мислення повертається як нативні блоки вмісту thinking.
from anthropic import Anthropic
client = Anthropic(
api_key="<AIHUBMIX_API_KEY>",
base_url="https://aihubmix.com"
)
response = client.messages.create(
model="coding-glm-5.3",
max_tokens=4096,
messages=[
{"role": "user", "content": "What is the capital of France? City name only."}
],
)
# Observed response.content block types: ["thinking", "text"]
Перевірено: блоки thinking повертаються за замовчуванням; thinking: {"type": "disabled"} у цьому API так само повертає 200, а мислення триває (узгоджується з офіційною семантикою «disabled перетворюється на low, запит продовжується»).3. Виклики інструментів і паралельні інструменти
Виклики функцій перевірено як працюючі в усіх трьох API; у Responses API ми також спостерігали паралельні виклики інструментів в одному ході (Z.ai прямо оголошує supports_parallel_tool_calls: true для GLM-5.3). Обмеження з боку upstream: до 128 функцій у tools; tool_choice нативно підтримує лише auto.
Chat Completions
completion = client.chat.completions.create(
model="coding-glm-5.3",
messages=[{"role": "user", "content": "What's the weather in Beijing today?"}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
},
}],
)
# Observed: finish_reason "tool_calls", with a get_weather call in tool_calls
Перевірено: tool_choice: "none" працює — на те саме питання про погоду повертається звичайний текст без виклику інструмента.Responses
response = client.responses.create(
model="coding-glm-5.3",
input="Check today's weather in Shanghai and Beijing",
parallel_tool_calls=True,
tools=[{
"type": "function",
"name": "get_weather",
"description": "Get weather for a city",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
)
# Observed: a single turn returns 2 parallel function_call output items (one for each city)
Перевірено: 2 паралельні виклики інструментів в одному ході, що відповідає офіційному оголошенню supports_parallel_tool_calls: true.Messages
response = client.messages.create(
model="coding-glm-5.3",
max_tokens=4096,
tools=[{
"name": "get_weather",
"description": "Get weather for a city",
"input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
}],
messages=[{"role": "user", "content": "What's the weather in Beijing today?"}],
)
# Observed: stop_reason "tool_use"; content contains a tool_use block
❗ Перевірено: у цьому API модель все ще створює виклики інструментів післяtool_choice: {"type": "none"}— щоб вимкнути інструменти, повністю видаліть параметрtoolsабо використовуйтеtool_choice: "none"в API Chat Completions.
4. Структурований вивід
response_format підтримує text і json_object; upstream не вказує режиму json_schema. Якщо потрібна сувора відповідність схемі, вбудуйте JSON Schema в промпт і валідуйте на боці клієнта.
Chat Completions
completion = client.chat.completions.create(
model="coding-glm-5.3",
messages=[
{"role": "user", "content": "What is the capital of France? Answer in JSON with the key \"answer\"."}
],
response_format={"type": "json_object"},
)
# Observed response content: {"answer": "Paris"}
Перевірено: вивід є коректним JSON із потрібним ключем.
Responses
response = client.responses.create(
model="coding-glm-5.3",
input="What is the capital of France? Answer in JSON with the key \"answer\".",
text={"format": {"type": "json_object"}},
)
# Observed output text: {"answer": "Paris"}
Messages
# Specify the JSON structure in the prompt; observed output is valid JSON
response = client.messages.create(
model="coding-glm-5.3",
max_tokens=4096,
messages=[
{"role": "user", "content": "What is the capital of France? Answer in JSON with the key \"answer\"."}
],
)
# Observed response text: {"answer": "Paris"}
5. Кешування контексту працює автоматично
Неявне кешування увімкнено за замовчуванням, жодних параметрів передавати не потрібно; повторювані довгі префікси повідомляють про попадання в кеш у полі usage (назва поля залежить від API).
Chat Completions
# usage of the second call with an identical long prefix
"prompt_tokens_details": {"cached_tokens": 960}
Перевірено: другий із двох послідовних викликів отримав 960 токенів з кешу.
Responses
# usage of the second call with an identical long prefix
"input_tokens_details": {"cached_tokens": 960}
Messages
# hits are reported via usage.cache_read_input_tokens
"cache_read_input_tokens": 0
Перевірено: у цьому раунді попадання в кеш на цьому API відтворити не вдалося (кеші прогріваються окремо для кожного каналу; перемикання балансувальника може спричинити промах). Поле обліку попадань відповідає семантиці Anthropic.
6. Семплінг і валідація параметрів
Семплінг відповідає конвенціям ендпоінтів сімейства GLM: temperature у діапазоні [0, 1] зі значенням за замовчуванням 1.0 (зверніть увагу — вужче, ніж [0, 2] у протоколі OpenAI); top_p у діапазоні [0.01, 1] зі значенням за замовчуванням 0.95. Z.ai рекомендує змінювати лише один із двох параметрів.
Перевірено: валідація параметрів різниться між API — Messages API відхиляє поза діапазономtemperature: 3з помилкою 400, у тілі якої вказано допустимий діапазон[0,1], тоді як Chat Completions / Responses мовчки приймають те саме значення поза діапазоном з відповіддю 200. Під час міграції між API не покладайтеся на шлюз, що він сам відловить некоректні значення семплінгу.
# Messages API with temperature=3 -> HTTP 400
"temperature parameter invalid: value must be within [0,1]"
7. Матриця підтримки можливостей за API
Кожну клітинку нижче перевірено реальними викликами через живі API AIHubMix 2026-08-14; у клітинках наведено написання параметра або поля для кожного API.
| Можливість | Chat Completions | Responses | Messages |
|---|---|---|---|
| Базова генерація / потокова передача | ✅ | ✅ | ✅ |
| Вміст мислення | ✅ поле reasoning_content |
✅ елемент виводу reasoning (summary_text) |
✅ блок вмісту thinking |
| Інтенсивність мислення | ✅ reasoning_effort (low/high/max, за замовчуванням max) |
✅ так само, як зліва | ✅ приймається з 200 |
| Вимкнути мислення | ❗ Неможливо: disabled повертає 200, а мислення триває (семантика перетворення на low) |
➖ немає перемикача-параметра | ❗ так само, як у Chat |
| Виклики функцій | ✅ | ✅ | ✅ |
| Паралельні виклики інструментів | — | ✅ 2 елементи function_call в одному ході |
— |
| Вимкнути виклики інструментів | ✅ tool_choice: "none" працює |
✅ 200 (викликів не спостерігалося) | ❗ виклики все ще створюються після {"type": "none"} |
| Структурований вивід (режим JSON) | ✅ response_format: json_object |
✅ text.format: json_object |
✅ через домовленість у промпті |
Суворий режим json_schema |
❗ не вказано в upstream — вбудуйте схему в промпт | ❗ так само, як зліва | ❗ так само, як зліва |
| Автоматичний облік кешу | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ поле присутнє (попадання в цьому раунді не відтворено) |
| Валідація максимального виводу | ✅ 400 з діапазоном [1,131072] | — | — |
| Валідація параметрів семплінгу поза діапазоном | ❗ мовчазне 200 | ❗ мовчазне 200 | ✅ 400 з діапазоном [0,1] |
FAQ
Який ідентифікатор моделі GLM-5.3 на AIHubMix? Чи потрібен суфікс [1m]?
Ідентифікатор моделі — coding-glm-5.3, використовуйте його без змін. glm-5.3[1m] — це синтаксис назви моделі Z.ai для клієнта Claude Code, який не стосується викликів AIHubMix; жодному з трьох API суфікс не потрібен.
Чи можна вимкнути мислення?
Ні. Мислення GLM-5.3 завжди увімкнене, а thinking.type підтримує лише enabled; у наших тестах надсилання disabled повертає 200, а мислення триває (перетворюється на рівень low відповідно до офіційної семантики). Щоб економити токени мислення, надішліть reasoning_effort: "low".
Який зв'язок між GLM-5.3 і GLM-5.2?
Та сама базова модель — усі покращення отримано за рахунок післятренування (офіційне формулювання: «It uses the same base model as GLM-5.2 — every gain comes from post-training»). Дві жорсткі зміни API: мислення більше не можна вимкнути, а reasoning_effort звужено до трьох рівнів low/high/max (за замовчуванням max).
Що робити, якщо потрібен суворий структурований вивід json_schema?
Upstream не вказує режиму response_format: json_schema. У наших тестах режим JSON json_object створював коректний JSON на всіх трьох API; для суворих схем вбудуйте JSON Schema в промпт і валідуйте на боці клієнта.
Чи є coding-glm-5.3 продуктовим релізом?
Наразі це обмежений у часі прев'ю-маршрут (документація API моделей Z.ai позначає офіційний API як "coming soon"); AIHubMix повідомить про оновлення, щойно комерційний API стане доступним. Актуальні ціни та статус дивіться на сторінці моделі.
Ціни та статус у реальному часі дивіться на сторінці моделі GLM-5.3; більше моделей — у галереї моделей.



