如何用 Python 调用 GLM 5.2 API:完整集成指南
Jul 20, 2026

如何用 Python 调用 GLM 5.2 API:完整集成指南

GLM 5.2 兼容 OpenAI SDK:改一下 base_url 和模型名,你现有的 Python 代码就能直接跑。含流式输出、函数调用、异步用法的逐步教程。

如果你已经在用 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
中位 TTFT1.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 定价明细


常见问题排查

问题原因解决办法
AuthenticationErrorAPI 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_urlmodel

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


参考来源

Start Using GLM 5 Today

Try GLM 5 free — reasoning, coding, agents, and image generation in one platform.