제목: GLM-5.3 실전 가이드: 항상 켜져 있는 사고 기능, 세 가지 노력 수준 및 API 지원 매트릭스
설명: 2026년 8월 GLM-5.3 가이드: 세 가지 reasoning_effort 수준의 항상 켜진 사고 기능, 추론 요약, 병렬 도구 호출, 구조화된 출력, 자동 캐싱, 그리고 검증된 AIHubMix Chat / Responses / Messages 예제.
이 글은 GLM-5.3의 주요 API 변경 사항과 사용 시 유의점을 다룹니다. GLM-5.3은 2026-08-14에 출시된 Z.ai의 플래그십 모델로, GLM-5.2와 정확히 동일한 기본 모델을 사용하며 모든 성능 향상은 사후 학습(post-training)에서 비롯됩니다. AIHubMix에서 모델 ID는coding-glm-5.3이며(현재 기간 한정 프리뷰 경로), Chat Completions, Responses, Claude 호환 Messages API에서 사용할 수 있습니다. 참고: Z.ai 공식 출시 블로그.
각 섹션의 "검증됨" 결론과 샘플 응답은 2026-08-14에 AIHubMix API(Chat Completions / Responses / Messages)를 실제 호출하여 얻은 결과입니다.
1. 모델 사양 한눈에 보기
| 항목 | 값 |
|---|---|
| 컨텍스트 윈도우 | 1M 토큰 (공식 정확한 값: 1,048,576) |
| 최대 출력 | 128K (max_tokens 검증된 상한: 131,072 — 이를 초과하면 400 반환) |
| 입력 모달리티 | 텍스트 |
| 사고(Thinking) | 항상 켜져 있으며 끌 수 없음; reasoning_effort는 세 가지 수준 — low / high / max, 기본값 max |
| GLM-5.2와의 관계 | 동일한 기본 모델이며 사후 학습으로 업그레이드됨: 코딩 및 장기 과제 수행 능력이 크게 향상되고, 새롭게 나타난 사이버 역량 포함 |
| AIHubMix 모델 ID | 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 vs 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 |
| 포지셔닝 | 범용 플래그십 | 코딩 및 장기 에이전트 작업에 맞게 강화되었으며, 새롭게 나타난 사이버 역량 포함 |
GLM-5.2 대비 GLM-5.3에서 가장 중요한 API 변경 사항은 다음 두 가지입니다:
thinking.type이 더 이상disabled를 지원하지 않음 — 사고 기능을 끌 수 없습니다. 공식 마이그레이션 권장 사항은, 기존에{"type": "disabled"}를 보내던 애플리케이션을{"type": "enabled"}로 바꾸고reasoning_effort를"low"로 설정하는 것입니다.reasoning_effort가 세 가지 수준으로 좁혀짐:low(가벼움) /high(강화) /max(깊음, 기본값). GLM-5.2 시기의 7개 값 호환성 매핑은 더 이상 적용되지 않으며, Z.ai는 코딩 작업에max를 권장합니다.
검증됨: AIHubMix를 통해thinking: {"type": "disabled"}를 보내면 200이 반환되고 사고는 여전히 수행됨(reasoning_content도 평소처럼 반환됨) — 이 값은 거부되지 않고, 공식 채널 의미에 따라 자동 변환됩니다. 클라이언트가 "토큰 절약을 위해 사고를 끄는" 방식에 의존했다면reasoning_effort: "low"로 바꾸십시오.
검증됨:reasoning_effort에 열거형 범위를 벗어난 값을 보내도 오류 없이 200이 반환됨(공식 문서에 따라 기본값max으로 대체).low와max를 같은 산술 문제에 적용했을 때 예상대로 사고량이 줄어드는 경향이 나타남(추론 토큰 27개 vs 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가 사고 사용량을 보고함 — 같은 질문에 대해reasoning_effort="low"일 때 27,"max"일 때 39.
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파라미터를 전혀 보내지 않은 경우)에도summary_text를 포함한reasoning항목이 이미 포함됨 — 별도의 명시적 옵트인이 필요 없음.
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 블록은 기본적으로 반환됨; 이 API에서도 thinking: {"type": "disabled"}를 보내면 200이 반환되고 사고는 여전히 수행됨(공식의 "disabled는 low로 변환되며 요청은 계속 처리됨" 채널 의미와 일치).3. 도구 호출과 병렬 도구
세 API 모두에서 함수 호출이 정상 작동하는 것을 검증했으며, Responses API에서는 한 턴 안에서 병렬 도구 호출도 관찰했습니다(Z.ai는 GLM-5.3에 대해 supports_parallel_tool_calls: true를 명시적으로 선언함). 상위 제한: tools에는 최대 128개의 함수; 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파라미터를 완전히 제거하거나, 대신 Chat Completions API에서tool_choice: "none"을 사용하십시오.
4. 구조화된 출력
response_format은 text와 json_object를 지원하며, 업스트림은 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입니다(참고 — OpenAI 프로토콜의 [0, 2]보다 좁음); top_p 범위는 [0.01, 1]이며 기본값은 0.95입니다. Z.ai는 둘 중 하나만 조정할 것을 권장합니다.
검증됨: 파라미터 검증은 API마다 다릅니다 — Messages API는 범위를 벗어난temperature: 3을 유효 범위[0,1]을 명시한 400 오류로 거부하지만, Chat Completions / Responses는 같은 범위 밖 값을 200으로 조용히 수용합니다. API 간 이전 시 게이트웨이가 범위를 벗어난 샘플링 값을 대신 잡아주리라 기대하지 마십시오.
# Messages API with temperature=3 -> HTTP 400
"temperature parameter invalid: value must be within [0,1]"
7. 기능 × API 지원 매트릭스
아래의 모든 셀은 2026-08-14에 AIHubMix 실시간 API를 통해 실제 호출로 검증되었으며, 각 셀에는 API별 파라미터/필드 표기가 표시됩니다.
| 기능 | Chat Completions | Responses | Messages |
|---|---|---|---|
| 기본 생성 / 스트리밍 | ✅ | ✅ | ✅ |
| 사고 내용 | ✅ reasoning_content 필드 |
✅ reasoning 출력 항목 (summary_text) |
✅ thinking 콘텐츠 블록 |
| 사고 강도 | ✅ reasoning_effort (low/high/max, 기본값 max) |
✅ 왼쪽과 동일 | ✅ 200으로 수용됨 |
| 사고 비활성화 | ❗ 불가능: disabled은 200을 반환하고 사고는 계속됨 (low로 변환되는 의미) |
➖ 토글 파라미터 없음 | ❗ Chat과 동일 |
| 함수 호출 | ✅ | ✅ | ✅ |
| 병렬 도구 호출 | — | ✅ 한 턴에 function_call 항목 2개 |
— |
| 도구 호출 비활성화 | ✅ tool_choice: "none" 작동 |
✅ 200 (호출 관찰되지 않음) | ❗ {"type": "none"} 설정 후에도 호출이 여전히 생성됨 |
| 구조화된 출력 (JSON 모드) | ✅ response_format: json_object |
✅ text.format: json_object |
✅ 프롬프트 규칙을 통해 |
json_schema 엄격 모드 |
❗ 업스트림에 나열되지 않음 — 프롬프트에 스키마 포함 | ❗ 왼쪽과 동일 | ❗ 왼쪽과 동일 |
| 자동 캐시 집계 | ✅ usage.prompt_tokens_details.cached_tokens |
✅ usage.input_tokens_details.cached_tokens |
✅ 필드 존재 (이번 검증에서 적중은 재현되지 않음) |
| 최대 출력 검증 | ✅ 범위 [1,131072]와 함께 400 | — | — |
| 범위 밖 샘플링 검증 | ❗ 조용한 200 | ❗ 조용한 200 | ✅ 범위 [0,1]과 함께 400 |
FAQ
AIHubMix에서 GLM-5.3 모델 ID는 무엇인가요? [1m] 접미사가 필요한가요?
모델 ID는 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와 어떤 관계인가요?
동일한 기본 모델입니다 — 모든 향상은 사후 학습에서 비롯됩니다(공식 문구: "GLM-5.2와 동일한 기본 모델을 사용하며, 모든 향상은 사후 학습에서 나온 것"). API의 두 가지 핵심 변경 사항은 사고 기능을 더 이상 끌 수 없다는 점, 그리고 reasoning_effort가 low/high/max(기본값 max) 세 가지 수준으로 좁혀졌다는 점입니다.
엄격한 json_schema 구조화된 출력이 필요하면 어떻게 하나요?
업스트림은 response_format: json_schema 모드를 나열하지 않습니다. 저희 테스트에서는 json_object JSON 모드가 세 API 모두에서 유효한 JSON을 생성했습니다. 엄격한 스키마가 필요하다면 JSON Schema를 프롬프트에 포함하고 클라이언트 측에서 검증하십시오.
Is coding-glm-5.3 the production release?
It is currently a limited-time preview route (Z.ai's model API docs mark the official API as "coming soon"); AIHubMix will follow up as soon as the commercial API ships. See the model page for current pricing and status.
최신 가격과 실시간 상태는 GLM-5.3 모델 페이지에서 확인할 수 있으며, 다른 모델은 모델 갤러리에서 살펴보실 수 있습니다.



