GLM-智谱

更新时间:
复制为 MD 格式

本文档介绍如何在阿里云百炼平台调用智谱直供的模型推理服务。

阿里云百炼提供两个推理服务供应商的GLM模型服务,智谱供应商支持更长回复长度;阿里云百炼供应商提供免费额度,且采取阶梯计费策略。
重要

本文档仅适用于“中国内地(北京)”地域。如需使用模型,需使用“中国内地(北京)”地域的API Key

模型列表

GLM 系列模型是智谱AI专为智能体设计的混合推理模型,提供思考与非思考两种模式。

模型名称

上下文长度

最大输入

最大思维链长度

最大回复长度

(Token数)

ZHIPU/GLM-5

204,800

203,776

131,072

131,072

默认65,536,可通过max_tokens调整。
不支持通过thinking_budget限制思考长度。

服务开通

  1. 前往百炼控制台,搜索 ZHIPU/GLM-5,找到智谱GLM系列文本模型卡片,单击立即开通;

  2. 在弹窗内确认开通及授权。

完成以上步骤即可调用智谱提供的 GLM 模型服务。

快速开始

glm-5 是 GLM 系列最新模型,支持通过enable_thinking参数设置思考与非思考模式。运行以下代码快速调用思考模式的 glm-5 模型。

需要已获取API Key并完成配置API Key到环境变量。如果通过SDK调用,需要安装SDK

OpenAI兼容

说明

enable_thinking非 OpenAI 标准参数,OpenAI Python SDK 通过 extra_body传入,Node.js SDK 作为顶层参数传入。

Python

示例代码

from openai import OpenAI
import os

# 初始化OpenAI客户端
client = OpenAI(
    # 如果没有配置环境变量,请用阿里云百炼API Key替换:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

messages = [{"role": "user", "content": "你是谁"}]
completion = client.chat.completions.create(
    model="ZHIPU/GLM-5",
    messages=messages,
    # 通过 extra_body 设置 enable_thinking 开启思考模式
    extra_body={"enable_thinking": True},
    stream=True,
    stream_options={
        "include_usage": True
    },
)

reasoning_content = ""  # 完整思考过程
answer_content = ""  # 完整回复
is_answering = False  # 是否进入回复阶段
print("\n" + "=" * 20 + "思考过程" + "=" * 20 + "\n")

for chunk in completion:
    if not chunk.choices:
        print("\n" + "=" * 20 + "Token 消耗" + "=" * 20 + "\n")
        print(chunk.usage)
        continue

    delta = chunk.choices[0].delta

    # 只收集思考内容
    if hasattr(delta, "reasoning_content") and delta.reasoning_content is not None:
        if not is_answering:
            print(delta.reasoning_content, end="", flush=True)
        reasoning_content += delta.reasoning_content

    # 收到content,开始进行回复
    if hasattr(delta, "content") and delta.content:
        if not is_answering:
            print("\n" + "=" * 20 + "完整回复" + "=" * 20 + "\n")
            is_answering = True
        print(delta.content, end="", flush=True)
        answer_content += delta.content

返回结果

====================思考过程====================

让我仔细思考用户提出的这个看似简单但实际上很有深度的问题。

从语言特点来看,用户使用的是中文,这意味着我应该用中文来回应。这是一个最基础的自我介绍问题,但背后可能包含着多层次的含义。

首先需要明确的是,作为一个语言模型,我应该诚实地说明自己的身份和本质。我既不是人类,也不具备真正的情感意识,而是一个由深度学习技术训练的AI助手。这是最基本的事实。

其次,考虑到用户可能的需求场景,他们或许想了解:
1. 我能提供什么样的服务
2. 我的专业领域是什么
3. 我的局限性在哪里
4. 如何与我更好地互动

在回答中,我应该既表达友好和开放的态度,又保持专业和准确。要说明自己擅长的主要领域,比如知识问答、写作辅助、创意支持等,但同时也要坦诚地指出自己的局限性,比如缺乏真实的情感体验。

此外,为了让回答更加完整,我还应该表达出愿意帮助用户解决问题的积极态度。可以适当引导用户提出更具体的问题,这样可以更好地展现自己的能力。

考虑到这是一个开放式的开场白,回答时既要简洁明了,又要包含足够的信息量,让用户对我的基本情况有一个清晰的认识,同时为后续的对话奠定良好的基础。

最后,语气应该保持谦逊和专业,既不过于技术化,也不显得过分随意,让用户感到舒适和自然。
====================完整回复====================

我是智谱AI训练的GLM大语言模型,旨在为用户提供信息和帮助解决问题。我被设计用来理解和生成人类语言,可以回答问题、提供解释或参与各类话题讨论。

我不会存储您的个人数据,我们的对话是匿名的。有什么我能帮您了解或探讨的话题吗?
====================Token 消耗====================

CompletionUsage(completion_tokens=344, prompt_tokens=7, total_tokens=351, completion_tokens_details=None, prompt_tokens_details=None)

Node.js

示例代码

import OpenAI from "openai";
import process from 'process';

// 初始化OpenAI客户端
const openai = new OpenAI({
    // 如果没有配置环境变量,请用阿里云百炼API Key替换:apiKey: "sk-xxx"
    apiKey: process.env.DASHSCOPE_API_KEY, 
    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1'
});

let reasoningContent = ''; // 完整思考过程
let answerContent = ''; // 完整回复
let isAnswering = false; // 是否进入回复阶段

async function main() {
    try {
        const messages = [{ role: 'user', content: '你是谁' }];
        
        const stream = await openai.chat.completions.create({
            model: 'ZHIPU/GLM-5',
            messages,
            // 注意:在 Node.js SDK,enable_thinking 这样的非标准参数作为顶层属性传递,无需放在 extra_body 中
            enable_thinking: true,
            stream: true,
            stream_options: {
                include_usage: true
            },
        });

        console.log('\n' + '='.repeat(20) + '思考过程' + '='.repeat(20) + '\n');

        for await (const chunk of stream) {
            if (!chunk.choices?.length) {
                console.log('\n' + '='.repeat(20) + 'Token 消耗' + '='.repeat(20) + '\n');
                console.log(chunk.usage);
                continue;
            }

            const delta = chunk.choices[0].delta;
            
            // 只收集思考内容
            if (delta.reasoning_content !== undefined && delta.reasoning_content !== null) {
                if (!isAnswering) {
                    process.stdout.write(delta.reasoning_content);
                }
                reasoningContent += delta.reasoning_content;
            }

            // 收到content,开始进行回复
            if (delta.content !== undefined && delta.content) {
                if (!isAnswering) {
                    console.log('\n' + '='.repeat(20) + '完整回复' + '='.repeat(20) + '\n');
                    isAnswering = true;
                }
                process.stdout.write(delta.content);
                answerContent += delta.content;
            }
        }
    } catch (error) {
        console.error('Error:', error);
    }
}

main();

返回结果

====================思考过程====================

让我仔细思考用户的问题"你是谁"。这需要从多个角度来分析和回应。

首先,这是一个基础的身份认知问题。作为GLM大语言模型,需要准确表达自己的身份定位。应该清晰地说明自己是由智谱AI开发的AI助手。

其次,思考用户提出这个问题的可能意图。他们可能是初次接触,想了解基本功能;也可能想确认是否能提供特定帮助;或者只是想测试回应方式。因此需要给出一个开放且友好的回答。

还要考虑回答的完整性。除了身份介绍,也应该简要说明主要功能,如问答、创作、分析等,让用户了解可以如何使用这个助手。

最后,要确保语气友好亲和,表达出乐于帮助的态度。可以用"很高兴为您服务"这样的表达,让用户感受到交流的温暖。

基于这些思考,可以组织一个简洁明了的回答,既能回答用户问题,又能引导后续交流。
====================完整回复====================

我是GLM,由智谱AI训练的大语言模型。我通过大规模文本数据训练,能够理解和生成人类语言,帮助用户回答问题、提供信息和进行对话交流。

我会持续学习和改进,以提供更好的服务。很高兴能为您解答问题或提供帮助!有什么我能为您做的吗?
====================Token 消耗====================

{ prompt_tokens: 7, completion_tokens: 248, total_tokens: 255 }

HTTP

示例代码

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "ZHIPU/GLM-5",
    "messages": [
        {
            "role": "user", 
            "content": "你是谁"
        }
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    },
    "enable_thinking": true
}'

流式工具调用

glm-5支持tool_stream参数(boolean,默认false),仅在streamtrue时生效。开启后,Function Calling 返回的 tool_call 参数(arguments)会以流式增量方式逐步返回。

streamtool_stream的组合行为如下:

stream

tool_stream

tool_call 返回方式

true

true

arguments 以增量方式分多个 chunk 返回

true

false(默认)

arguments 在一个 chunk 中完整返回

false

true/false

tool_stream 不生效,arguments 在完整响应中一次性返回

OpenAI兼容

Python

示例代码

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "获取指定城市的天气信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名称"}
                },
                "required": ["city"]
            }
        }
    }
]

messages = [{"role": "user", "content": "北京天气怎么样"}]

completion = client.chat.completions.create(
    model="ZHIPU/GLM-5",
    tools=tools,
    messages=messages,
    extra_body={
        "tool_stream": True,
    },
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in completion:
    if chunk.choices:
        delta = chunk.choices[0].delta
        if hasattr(delta, 'content') and delta.content:
            print(f"[content] {delta.content}")
        if hasattr(delta, 'tool_calls') and delta.tool_calls:
            for tc in delta.tool_calls:
                print(f"[tool_call] id={tc.id}, name={tc.function.name}, args={tc.function.arguments}")
        if chunk.choices[0].finish_reason:
            print(f"[finish_reason] {chunk.choices[0].finish_reason}")
    if not chunk.choices and chunk.usage:
        print(f"[usage] {chunk.usage}")

Node.js

示例代码

import OpenAI from "openai";
import process from 'process';

const openai = new OpenAI({
    apiKey: process.env.DASHSCOPE_API_KEY,
    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1'
});

const tools = [
    {
        type: "function",
        function: {
            name: "get_weather",
            description: "获取指定城市的天气信息",
            parameters: {
                type: "object",
                properties: {
                    city: { type: "string", description: "城市名称" }
                },
                required: ["city"]
            }
        }
    }
];

async function main() {
    try {
        const stream = await openai.chat.completions.create({
            model: 'ZHIPU/GLM-5',
            messages: [{ role: 'user', content: '北京天气怎么样' }],
            tools: tools,
            tool_stream: true,
            stream: true,
            stream_options: {
                include_usage: true
            },
        });

        for await (const chunk of stream) {
            if (!chunk.choices?.length) {
                if (chunk.usage) {
                    console.log(`[usage] ${JSON.stringify(chunk.usage)}`);
                }
                continue;
            }

            const delta = chunk.choices[0].delta;

            if (delta.content) {
                console.log(`[content] ${delta.content}`);
            }

            if (delta.tool_calls) {
                for (const tc of delta.tool_calls) {
                    console.log(`[tool_call] id=${tc.id}, name=${tc.function.name}, args=${tc.function.arguments}`);
                }
            }

            if (chunk.choices[0].finish_reason) {
                console.log(`[finish_reason] ${chunk.choices[0].finish_reason}`);
            }
        }
    } catch (error) {
        console.error('Error:', error);
    }
}

main();

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "ZHIPU/GLM-5",
    "messages": [
        {
            "role": "user",
            "content": "北京天气怎么样"
        }
    ],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "获取指定城市的天气信息",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {"type": "string", "description": "城市名称"}
                    },
                    "required": ["city"]
                }
            }
        }
    ],
    "stream": true,
    "stream_options": {"include_usage": true},
    "tool_stream": true
}'

模型功能

模型

多轮对话

Function Calling

结构化输出

联网搜索

前缀续写

上下文缓存

ZHIPU/GLM-5

支持

支持

支持

仅非思考模式

不支持

不支持

支持

上下文缓存类型为隐式缓存,自动开启,与阿里云百炼的隐式缓存服务有以下不同:

  • 命中缓存的输入 Token 折扣为 25%(百炼为 20%);

  • 缓存最少 Token 数为 512(百炼为 256)。

参数默认值

模型

enable_thinking

temperature

top_p

top_k

repetition_penalty

ZHIPU/GLM-5

true

1.0

0.95

-

-

-表示没有默认值,也不支持设置。

计费说明

按照模型的输入与输出 Token 计费。

错误码

如果执行报错,请参见错误信息进行解决。