如果你已经在用 OpenAI 的 Python SDK,集成 GLM 5.2 大约只需要两分钟:换掉 base_url、改一下模型名,你现有的代码就跑在一个 753B 参数的模型上——吞吐 158 token/秒,输入价格 $1.40/M token。本指南覆盖从安装到流式输出、函数调用、异步用法和 JSON 模式的全部内容,代码可直接复制。
前置条件
写代码之前,先确认以下条件:
- 机器上装有 Python 3.8 或更高版本
- 一个 Z.ai API key——在 z.ai 注册,从控制台生成 key(GLM 5.2 通过 Z.ai 的推理 API 提供服务)
- 环境里有可用的 pip
- 对 Python 和 REST API 有基本了解(不需要任何 GLM 使用经验)
如果你想通过 OpenRouter 而不是 Z.ai 直连来使用 GLM 5.2,你需要一个 OpenRouter 账号和 key。下面两种方式都会覆盖到。
第 1 步:安装 OpenAI Python SDK
GLM 5.2 的 API 与 OpenAI SDK 完全兼容——不需要单独的客户端库。用 pip 安装:
pip install openai
如果你在使用虚拟环境(推荐),先激活它:
python -m venv glm-env
source glm-env/bin/activate # Windows: glm-env\Scripts\activate
pip install openai
验证安装:
python -c "import openai; print(openai.__version__)"
openai 包从 1.0.0 起的任何版本都能用。SDK 的 base_url 参数正是把请求路由到 Z.ai 而非 OpenAI 服务器的地方。
第 2 步:发出你的第一次 API 调用
创建一个名为 glm_hello.py 的文件,粘贴以下内容:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_ZAI_KEY", # replace with your Z.ai API key
base_url="https://api.z.ai/v1", # GLM 5.2 endpoint
)
response = client.chat.completions.create(
model="glm-5.2",
messages=[
{"role": "user", "content": "Explain the Mixture of Experts architecture in two sentences."}
],
)
print(response.choices[0].message.content)
运行它:
python glm_hello.py
你应该能在两秒内看到响应。GLM 5.2 的中位首 token 时间是 1.54 秒,所以即使输出很长,第一个字也会很快出现。
刚才发生了什么: OpenAI 客户端向 https://api.z.ai/v1/chat/completions 发送了一个带 Authorization 头(你的 key)的 HTTPS POST 请求。Z.ai 把请求路由到 GLM 5.2(753B 参数,混合专家,每次前向传播激活 40B),返回一个 OpenAI 格式的 JSON 响应。你的代码从头到尾都不知道对面不是 OpenAI。
第 3 步:添加系统提示词
系统提示词以第一条消息、"role": "system" 的形式发送。GLM 5.2 的 1M token 上下文窗口(1,048,576 token)意味着你可以放入大型指令集、大量示例,甚至整份文档上下文而不触碰限制。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_ZAI_KEY",
base_url="https://api.z.ai/v1",
)
response = client.chat.completions.create(
model="glm-5.2",
messages=[
{
"role": "system",
"content": (
"You are a senior Python engineer. "
"Always respond with production-quality code and include error handling. "
"Add type hints and docstrings to every function."
),
},
{
"role": "user",
"content": "Write a function that retries an HTTP request up to 3 times with exponential backoff.",
},
],
)
print(response.choices[0].message.content)
系统消息会塑造模型整个会话的行为。有了 1M token 窗口,你可以把整个代码库作为上下文传进去——实际限制和成本影响见 GLM 5.2 上下文窗口详解。
第 4 步:开启流式输出
对于长输出或实时应用,设置 stream=True。响应变成一个迭代器;从每个 chunk 读取 delta.content:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_ZAI_KEY",
base_url="https://api.z.ai/v1",
)
stream = client.chat.completions.create(
model="glm-5.2",
messages=[
{"role": "user", "content": "Write a 500-word essay on the history of transformer models."}
],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
print() # newline after streaming finishes
158 token/秒的吞吐让 GLM 5.2 在前沿模型中吞吐排名第三。流式让这种速度对用户可见——文字随模型生成即时出现,而不是等整段响应缓冲完。
把流式响应收集成字符串:
full_response = ""
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
full_response += delta.content
print(delta.content, end="", flush=True)
print()
print(f"\nTotal characters: {len(full_response)}")
第 5 步:函数调用(工具使用)
GLM 5.2 支持与 OpenAI 相同 schema 的函数调用。定义你的 tools,通过 tools 参数传入,在响应里处理模型的工具调用:
import json
from openai import OpenAI
client = OpenAI(
api_key="YOUR_ZAI_KEY",
base_url="https://api.z.ai/v1",
)
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a given city.",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city name, e.g. Tokyo",
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Temperature unit",
},
},
"required": ["city"],
},
},
}
]
messages = [
{"role": "user", "content": "What is the weather like in Tokyo right now?"}
]
response = client.chat.completions.create(
model="glm-5.2",
messages=messages,
tools=tools,
tool_choice="auto",
)
choice = response.choices[0]
if choice.finish_reason == "tool_calls":
tool_call = choice.message.tool_calls[0]
function_name = tool_call.function.name
arguments = json.loads(tool_call.function.arguments)
print(f"Model wants to call: {function_name}")
print(f"Arguments: {arguments}")
# In production, call your actual function here:
# result = get_weather(**arguments)
# Then add the result back to messages and call the API again.
GLM 5.2 在 SWE-bench Pro 上拿到 62.1%,说明它的代码和工具使用推理对智能体工作流是扎实的。对多步智能体任务,持续把工具结果加回消息列表并重新调用 API,直到 finish_reason 变为 "stop"。
第 6 步:JSON 模式
需要结构化输出时,使用 response_format={"type": "json_object"}。模型保证其响应是合法 JSON:
from openai import OpenAI
import json
client = OpenAI(
api_key="YOUR_ZAI_KEY",
base_url="https://api.z.ai/v1",
)
response = client.chat.completions.create(
model="glm-5.2",
messages=[
{
"role": "system",
"content": "You always respond with valid JSON.",
},
{
"role": "user",
"content": (
"Return a JSON object with fields: "
"model_name (string), parameter_count (string), "
"speed_tps (number), context_tokens (number)."
),
},
],
response_format={"type": "json_object"},
)
data = json.loads(response.choices[0].message.content)
print(json.dumps(data, indent=2))
JSON 模式适合分类管道、结构化数据提取,以及任何需要直接 json.loads() 结果而不用防御式解析的下游代码。
第 7 步:异步用法
对高并发应用——批处理、FastAPI 端点、异步管道——使用 AsyncOpenAI:
import asyncio
from openai import AsyncOpenAI
client = AsyncOpenAI(
api_key="YOUR_ZAI_KEY",
base_url="https://api.z.ai/v1",
)
async def summarize(text: str) -> str:
response = await client.chat.completions.create(
model="glm-5.2",
messages=[
{"role": "system", "content": "Summarize the following text in one paragraph."},
{"role": "user", "content": text},
],
)
return response.choices[0].message.content
async def main():
texts = [
"Mixture of Experts (MoE) is an architecture where only a subset of parameters...",
"The attention mechanism in transformers computes queries, keys, and values...",
"Reinforcement learning from human feedback (RLHF) fine-tunes language models...",
]
# Run all three requests concurrently
results = await asyncio.gather(*[summarize(t) for t in texts])
for i, result in enumerate(results):
print(f"Summary {i + 1}: {result}\n")
asyncio.run(main())
并行异步请求是批处理任务的正确做法。GLM 5.2 的 158 t/s 意味着一个 500 token 的摘要约 3 秒完成;10 个并发跑完的墙钟时间大致和 1 个相同。
第 8 步:OpenRouter 备选方案
如果你更喜欢 OpenRouter 的统一计费,或者想用一个 key 对 GLM 5.2 和其他模型做 A/B 测试,把 base_url 指向 OpenRouter:
from openai import OpenAI
client = OpenAI(
api_key="YOUR_OPENROUTER_KEY",
base_url="https://openrouter.ai/api/v1",
)
response = client.chat.completions.create(
model="z-ai/glm-5.2", # note the OpenRouter model identifier
messages=[
{"role": "user", "content": "What is 158 tokens per second in practical terms?"}
],
)
print(response.choices[0].message.content)
唯一的区别是 base_url、你的 OpenRouter key 和模型字符串("z-ai/glm-5.2" 而不是 "glm-5.2")。其他一切——流式、工具、JSON 模式、异步——完全一样。
GLM 5.2 API 速查表
| 参数 | 值 |
|---|---|
| Base URL(Z.ai) | https://api.z.ai/v1 |
| Base URL(OpenRouter) | https://openrouter.ai/api/v1 |
| 模型名(Z.ai) | glm-5.2 |
| 模型名(OpenRouter) | z-ai/glm-5.2 |
| 上下文窗口 | 1,048,576 tokens(1M) |
| 输入价格 | $1.40/M tokens |
| 输出价格 | $4.40/M tokens |
| 缓存命中价格 | $0.26/M tokens |
| 速度 | 158 t/s |
| 中位 TTFT | 1.54s |
| 模态 | 仅文本 |
规模化定价
扩容之前理解成本很重要。GLM 5.2 的混合专家架构让价格保持低位,因为每次请求只有 753B 参数中的 40B 被激活。
| 工作负载 | Token | 输入成本 | 输出成本 | 总计 |
|---|---|---|---|---|
| 单条聊天消息 | 约 500 入 / 约 300 出 | $0.00070 | $0.00132 | $0.00202 |
| 代码评审(大文件) | 约 4,000 入 / 约 800 出 | $0.0056 | $0.00352 | $0.00912 |
| 文档摘要 | 约 10,000 入 / 约 500 出 | $0.014 | $0.0022 | $0.0162 |
| 1M token 上下文调用 | 1,000,000 入 / 约 2,000 出 | $1.40 | $0.0088 | $1.4088 |
| 10,000 次聊天补全 | 平均约 500 入 / 约 300 出 | $7.00 | $13.20 | $20.20 |
缓存命中 $0.26/M 让重复的大上下文调用便宜得多。如果你每次请求都带上静态系统提示词或固定文档,缓存命中能把输入成本中那一部分降低约 81%。完整定价背景见 GLM 5.2 定价明细。
常见问题排查
| 问题 | 原因 | 解决办法 |
|---|---|---|
AuthenticationError | API key 错误或缺失 | 检查 api_key 值;确保用的是 Z.ai key 而非 OpenAI key |
模型报 404 Not Found | 模型名错误 | Z.ai 用 "glm-5.2",OpenRouter 用 "z-ai/glm-5.2" |
响应为 None | 流式输出未读取 delta | 打印前检查 delta.content is not None |
JSON 模式后出现 JSONDecodeError | 提示词没有指示输出 JSON | 加上系统提示词 "You always respond with valid JSON." |
| 首 token 慢 | 某些请求冷启动 | TTFT 中位数约 1.54s;会话中的首次调用可能略高 |
| 工具调用未触发 | 模型选择不调用 | 用 tool_choice="required" 强制调用 |
| 超出上下文限制 | 输入超过 1,048,576 token | 截断或分块输入;GLM 5.2 的 1M 窗口很慷慨但并非无限 |
常见问题
用 GLM 5.2 需要专门的 SDK 吗?
不需要。标准的 openai Python 包无需修改即可使用。GLM 5.2 的 API 完全遵循 OpenAI Chat Completions 格式——相同的请求 schema、相同的响应结构、相同的流式协议。唯一要改的是 base_url 和 model。
GLM 5.2 可以用于生产吗?
可以。Z.ai 运行带标准 SLA 的生产基础设施。GLM 5.2 本身是 MIT 许可的开放权重模型(Hugging Face 上的 THUDM/GLM-5.2),所以模型权重公开、可审计。通过 Z.ai 的 API 服务就是托管版本。
我能在本地运行 GLM 5.2 吗?
可以,因为 MIT 许可证允许。从 Hugging Face 下载权重。但 753B 参数的 FP16 需要大量 GPU 显存——多块 H100。对大多数团队来说,$1.40/M 输入 token 的托管 API 比自托管更实际。
GLM 5.2 支持图片或音频吗?
不支持。GLM 5.2 仅支持文本。它不接受图像、音频或视频输入。如果你的应用需要视觉能力,需要多模态模型。GLM 5.2 的强项是编码(HumanEval 90%+、SWE-bench Pro 62.1%)和长上下文推理。
每次请求的 token 上限是多少?
上下文窗口是 1,048,576 token(1M)。这涵盖输入 token(消息、系统提示词、工具定义)和输出 token 的总和。对大多数应用来说,这个限制不是实际约束——1M token 窗口大约能容纳 75 万词文本。
GLM 5.2 和 GPT-4o 在编码任务上相比如何?
GLM 5.2 在 SWE-bench Pro 拿到 62.1%、HumanEval 90%+。与其他前沿模型的直接基准对比见 GLM 5.2 vs GPT-4o。GLM 5.2 输入 $1.40/M 对比 GPT-4o 的 $2.50/M,以更低成本提供强劲的编码能力。
GLM 5.2 能和 LangChain 或 LlamaIndex 一起用吗?
可以。两个框架都支持自定义 OpenAI 兼容端点。在 LangChain 里用 ChatOpenAI(api_key="YOUR_ZAI_KEY", base_url="https://api.z.ai/v1", model="glm-5.2")。在 LlamaIndex 里给 OpenAI(...) 传相同参数。不需要专门的适配器。
下一步
基础跑通之后,接下来可以看这里:
- 探索 1M 上下文窗口 —— 单次调用传入整个代码库或长文档;分块与单发策略见 GLM 5.2 上下文窗口
- 与其他模型对比成本 —— GLM 5.2 的 $1.40/M 输入和 158 t/s 吞吐定位独特;GLM 5.2 定价 有完整成本对比表
- 构建智能体循环 —— 把函数调用和重试至 stop 的循环结合,用于多步推理任务;GLM 5.2 的 SWE-bench Pro 62.1% 让它足以胜任真实代码智能体
- 为你的场景基准测试延迟 —— 1.54s 的 TTFT 是中位数;用你的典型提示词长度测试,在承诺 SLA 之前搞清 p95 延迟
试用 GLM 5.2——无需 API key:glm5.app/chat。




