GLM-5.2 APIを使うと、Z.aiの最新オープンウェイト主力モデルへプログラムからアクセスできます。GLM-5.2は約753BパラメータのMoEモデルで、長時間のコーディングベンチマークで高いスコアを公開しています。この記事では、APIキーの取得、最初のcurl実行、Python SDK、thinking、ストリーミング、ツール呼び出し、コスト追跡までを実装手順ベースで進めます。
以前のリリースから移行する場合は、まずGLM-5.1との差分を確認してください。
GLM-5.1からの変更点
GLM-5.2はGLM-5.1世代の後継です。GLM-5.1 API向けの統合コードがすでにある場合、ワイヤーフォーマットはほぼ同じなので、多くのケースではモデルIDを差し替えるだけで移行できます。
主な変更点は次のとおりです。
IndexShare疎アテンションの導入
GLM-5.2は、4つの疎アテンション層で単一のインデクサーを再利用する「IndexShare」を導入しています。API利用者が直接制御する必要はありませんが、長いコンテキストでのアテンションコスト削減に関係します。エージェント型コーディング性能の向上
Z.aiが公開した結果では、Terminal-Bench 2.1のスコアがGLM-5.1の62.0からGLM-5.2では81.0に向上しています。コーディングエージェント用途では重要な指標です。2段階の推論努力レベル
GLM-5.2はHighとMaxの推論努力レベルを公開しています。Z.aiはコーディングタスクではMaxを推奨しています。
以降の例は、すべてglm-5.2を直接対象にします。
ステップ1:GLM-5.2 APIキーを取得する
Z.aiにサインインし、アカウントダッシュボードのAPIキーセクションを開きます。キーを作成してコピーしたら、コードに直書きせず、環境変数として保存してください。
export ZAI_API_KEY="your-glm-5.2-api-key"
APIキーはGitにコミットしないでください。漏洩するとアカウントに課金が発生します。GLM-5.2はトークン単位で課金されるため、無限ループや大量リクエストを送るスクリプトは実コストにつながります。
ステップ2:エンドポイントとbase_urlを確認する
GLM-5.2 APIはOpenAI互換です。OpenAI Chat Completions形式に対応するクライアントであれば、基本的にはbase_urlを差し替えるだけで利用できます。
| 設定 | 値 |
|---|---|
| チャット補完エンドポイント | https://api.z.ai/api/paas/v4/chat/completions |
| ベースURL(SDK用) | https://api.z.ai/api/paas/v4/ |
| モデルID | glm-5.2 |
| 認証 | Authorization: Bearer $ZAI_API_KEY |
Z.aiを直接呼び出す代わりにOpenRouter経由で使う場合、モデルエイリアスはz-ai/glm-5.2です。ローカル実行では、Ollamaがglm-5.2としてウェイトを公開しています(Ollamaライブラリ)。オープンウェイトはMITライセンスでHugging Faceにあります。
実装前に、上限も確認しておきます。
- コンテキストウィンドウ:1Mトークン(1,048,576)
- 最大出力:Z.aiのドキュメントでは最大128Kと記載
- OpenRouter側では最大出力の数値が公開されていないため、固定保証ではなくZ.aiの最新ドキュメントを確認してください
ステップ3:curlで最初のリクエストを送る
まずは最小構成のcurlで疎通確認します。
curl https://api.z.ai/api/paas/v4/chat/completions \
-H "Authorization: Bearer $ZAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.2",
"messages": [
{"role": "system", "content": "You are a concise backend engineer."},
{"role": "user", "content": "Write a SQL query that returns the 5 newest orders per customer."}
]
}'
レスポンスはOpenAI形式です。主に次を確認します。
-
choices[0].message.content:生成結果 -
usage.prompt_tokens:入力トークン数 -
usage.completion_tokens:出力トークン数 -
usage.total_tokens:合計トークン数
usageはコスト計算に使うため、ログに残す設計にしておくと後で便利です。
ステップ4:OpenAI SDKでPythonから呼び出す
OpenAI互換APIなので、専用SDKは不要です。標準のOpenAI Python SDKを使い、base_urlだけをZ.aiに向けます。
pip install openai
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["ZAI_API_KEY"],
base_url="https://api.z.ai/api/paas/v4/",
)
resp = client.chat.completions.create(
model="glm-5.2",
messages=[
{"role": "system", "content": "You are a concise backend engineer."},
{"role": "user", "content": "Explain idempotency keys in 3 sentences."},
],
)
print(resp.choices[0].message.content)
既存のOpenAI向けヘルパー、リトライ、ロギング、エラーハンドリングは基本的に流用できます。GLM系APIの共通的な考え方は、GLM-5 APIの概要でも確認できます。
ステップ5:thinkingとreasoning_effortで推論を制御する
GLM-5.2では、内部推論の有効・無効と、推論努力レベルを制御できます。
低遅延が必要な処理ではthinkingを無効化する
分類、短いリライト、ルーティングなど、深い推論が不要な処理ではthinkingを無効にします。
resp = client.chat.completions.create(
model="glm-5.2",
messages=[
{"role": "user", "content": "Classify: 'my card was charged twice'"}
],
extra_body={
"thinking": {"type": "disabled"}
},
)
print(resp.choices[0].message.content)
難しいコーディングではreasoning_effortをmaxにする
複雑なリファクタリング、設計判断、デバッグ、数学的な処理ではthinkingを有効化し、reasoning_effortをmaxにします。
resp = client.chat.completions.create(
model="glm-5.2",
messages=[
{
"role": "user",
"content": "Refactor this function to remove the N+1 query and explain the fix."
},
],
extra_body={
"thinking": {"type": "enabled"},
"reasoning_effort": "max",
},
)
print(resp.choices[0].message.content)
OpenAI Python SDKでは、Z.ai固有のフィールドをextra_body経由で渡します。curlで直接送る場合は、thinkingとreasoning_effortをmodelと同じトップレベルに配置します。
maxは品質向上が期待できる一方、推論トークンも出力トークンとしてカウントされるため、コストが増えます。分類や定型応答では無効化し、難しいコーディングタスクだけで有効化するのが実装上の基本方針です。
ステップ6:レスポンスをストリーミングする
チャットUIや長文生成では、完了まで待たずにストリーミングで表示します。Python SDKではstream=Trueを設定します。
stream = client.chat.completions.create(
model="glm-5.2",
messages=[
{
"role": "user",
"content": "Write a 200-word changelog entry for a rate-limit fix."
}
],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
curlの場合は、リクエストボディに"stream": trueを追加します。レスポンスはServer-Sent Eventsとして返り、各チャンクはdata:行で届き、最後にdata: [DONE]が返ります。
ストリーミングは料金体系を変えません。支払いは引き続きトークン数ベースですが、ユーザーは結果を早く確認できます。
ステップ7:関数とツールを呼び出す
ツール呼び出しは、GLM-5.2をエージェント的に使うための基本パターンです。Z.aiが公開した結果では、GLM-5.2はMCP-Atlasで77.0を記録し、Claude Opus 4.8に近いスコアとされています。
実装フローはOpenAI形式と同じです。
- ツールスキーマを定義する
- モデルにリクエストする
- モデルが
tool_callsを返す - アプリ側で関数を実行する
- 関数結果を
role: "tool"として再送する - モデルに最終回答を生成させる
以下は天気取得ツールの最小例です。
import json
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current temperature for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name, e.g. Berlin"
},
"unit": {
"type": "string",
"enum": ["c", "f"]
},
},
"required": ["city"],
},
},
}
]
messages = [
{
"role": "user",
"content": "What's the weather in Berlin in celsius?"
}
]
first = client.chat.completions.create(
model="glm-5.2",
messages=messages,
tools=tools,
)
call = first.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
# 実際のアプリではここで外部APIやDBを呼び出します。
def get_weather(city, unit="c"):
return {"city": city, "temp": 12, "unit": unit}
result = get_weather(**args)
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": call.id,
"content": json.dumps(result),
})
final = client.chat.completions.create(
model="glm-5.2",
messages=messages,
tools=tools,
)
print(final.choices[0].message.content)
このループは、複数ツールやエージェントフレームワークにも拡張できます。GLM-5.2固有の特殊な契約ではなく、OpenAI互換の標準的なツール呼び出しパターンです。
ツール呼び出しのリクエストを手作業で何度もcurlするのは面倒です。Apidogを使うと、GLM-5.2のエンドポイントを一度定義し、thinkingモード別のリクエストボディを保存し、ツール呼び出しのシーケンスを再実行できます。OpenAI形式のスキーマやストリーミングレスポンスも同じ場所で確認できます。
ステップ8:usageオブジェクトでコストを追跡する
非ストリーミングのレスポンスにはusageオブジェクトが含まれます。コスト計算ではこの値を使います。
resp = client.chat.completions.create(
model="glm-5.2",
messages=[
{
"role": "user",
"content": "Summarize REST vs gRPC in 4 bullets."
}
],
)
u = resp.usage
print(u.prompt_tokens, u.completion_tokens, u.total_tokens)
GLM-5.2の料金は、OpenRouterで確認されている数値として次のとおりです。
- 入力:100万トークンあたり$1.40
- 出力:100万トークンあたり$4.40
- キャッシュ済み入力:100万トークンあたり約$0.26(VentureBeatによる数値)
たとえば、入力8,000トークン、出力1,500トークンの呼び出しは概算で次のようになります。
(8000 / 1_000_000 * 1.40) + (1500 / 1_000_000 * 4.40)
= 0.0112 + 0.0066
= 約 $0.0178
reasoning_effort: "max"で発生する推論トークンは出力カウントに含まれます。そのため、Max努力のコーディング呼び出しは、thinkingを無効化した呼び出しより高くなる可能性があります。
VentureBeatは、GLM-5.2が「長期間にわたるコーディングにおいて、GPT-5.5を約1/6のコストで打ち負かす」と報じています。この主張はVentureBeatに帰属するものとして扱ってください。
従量課金APIではなく定額プランを使いたい場合、Z.aiはGLM Coding PlanのLite、Pro、Max、Teamティアも提供しています。料金は変わる可能性があるため、契約前にZ.aiで最新情報を確認してください。
料金の詳細はGLM-5.2の料金内訳で解説されています。ローカルウェイトを使う経路はGLM-5.2を無料で利用する方法を参照してください。
Claude Code内でGLM-5.2を使用する
GLM-5.2はAnthropic互換のパスも提供しており、Claude Codeから利用できます。コーディング用のベースURLをhttps://api.z.ai/api/coding/paas/v4に設定します。
一部のソースではopen.z.ai/api/paas/v4と表記されているため、実運用前にZ.aiの最新ドキュメントで確認してください。
export ANTHROPIC_BASE_URL="https://api.z.ai/api/coding/paas/v4"
export ANTHROPIC_API_KEY="your-glm-coding-plan-key"
export ANTHROPIC_DEFAULT_SONNET_MODEL="glm-5.2[1m]"
export ANTHROPIC_DEFAULT_OPUS_MODEL="glm-5.2[1m]"
export CLAUDE_CODE_AUTO_COMPACT_WINDOW=1000000
export API_TIMEOUT_MS=3000000
[1m]サフィックスは1Mコンテキストのバリアントを選択します。API_TIMEOUT_MSを長めに設定することも重要です。設定しないと、大規模コンテキストの呼び出しが返る前にClaude Code側がタイムアウトする可能性があります。
詳しい手順はClaude CodeでGLMを実行するガイドを参照してください。ツール比較はClaude Code vs Codex vs Cursor vs GLM Planで確認できます。
GLM-5.2の性能比較
統合時に確認したい主要値は次のとおりです。
| プロパティ | GLM-5.2 |
|---|---|
| モデルID(API) | glm-5.2 |
| アーキテクチャ | 約753B MoE、BF16、IndexShare疎アテンション |
| コンテキストウィンドウ | 1Mトークン(1,048,576) |
| 最大出力 | Z.aiのドキュメントによると最大128K(ライブで確認) |
| 思考モード | High / Max、または無効 |
| 入力料金 | $1.40 / 1Mトークン |
| 出力料金 | $4.40 / 1Mトークン |
| ライセンス | MIT、オープンウェイト |
ベンチマークの詳細について、Z.aiが公開した結果には次の値が含まれています。
- SWE-bench Pro:62.1(GPT-5.5は58.6)
- ツール付きHumanity’s Last Exam:54.7
- AIME 2026:99.2
詳細はGLM-5.2のベンチマークまとめで解説されています。横並び比較はGLM-5.2 vs GPT-5.5, Claude Opus, and Geminiを参照してください。
よくある質問
GLM-5.2 APIはOpenAI互換ですか?
はい。OpenAI SDKのbase_urlをhttps://api.z.ai/api/paas/v4/に設定し、モデルにglm-5.2を指定します。標準のチャット、ストリーミング、ツール呼び出しのコードは基本的にそのまま使えます。
送信すべきモデルIDは何ですか?
用途ごとに次のIDを使います。
- Z.ai API:
glm-5.2 - OpenRouter:
z-ai/glm-5.2 - Ollama:
glm-5.2 - Claude Codeの1Mコンテキストバリアント:
glm-5.2[1m]
速度を優先して推論をオフにするには?
thinking: {"type": "disabled"}を渡します。Python SDKではextra_body経由で指定します。
extra_body={
"thinking": {"type": "disabled"}
}
難しいコーディングタスクでは、thinkingを有効にし、Z.aiがコード用途に推奨するreasoning_effort: "max"を設定します。
GLM-5.2の呼び出しあたりのコストはいくらですか?
OpenRouterで確認されている料金は、入力100万トークンあたり$1.40、出力100万トークンあたり$4.40です。正確なコストは各レスポンスのusageオブジェクトから計算してください。
Max努力の推論トークンは出力としてカウントされる点に注意してください。
GLM-5.2にはビジョンモデルがありますか?
2026年6月現在、確認されているビジョンバリアントはありません。APIはテキスト入力、テキスト出力として扱ってください。Z.aiがサポートを文書化するまでは、画像入力に依存しない実装にしてください。
まとめ
GLM-5.2 APIはOpenAI互換なので、既存のOpenAI向けコードベースから移行しやすいモデルです。base_urlを差し替え、モデルIDにglm-5.2を指定するだけで、1Mコンテキスト、MITライセンス、調整可能な推論機能を持つコーディングモデルを利用できます。
実装手順は次の順番がおすすめです。
- curlで認証と疎通を確認する
- OpenAI SDKでPython統合する
-
usageをログに残してコストを追跡する - 用途に応じてthinkingを無効化または
maxに切り替える - UIではストリーミングを有効にする
- エージェント用途ではツール呼び出しループを実装する
エンドポイントをテストし、リクエストのバリアントを保存し、ツール呼び出しのシーケンスを毎回curlで書かずに検査したい場合は、ApidogをダウンロードしてGLM-5.2エンドポイントを一度設定してください。
モデル全体の概要はGLM-5.2とは何か、GLM-5.1との差分はGLM-5.2とGLM-5.1の比較で確認できます。

Top comments (0)