本文档介绍如何在阿里云百炼平台调用智谱直供的模型推理服务。
阿里云百炼提供两个推理服务供应商的GLM模型服务,智谱供应商支持更长回复长度;阿里云百炼供应商提供免费额度,且采取阶梯计费策略。
本文档仅适用于“中国内地(北京)”地域。如需使用模型,需使用“中国内地(北京)”地域的API Key。
模型列表
GLM 系列模型是智谱AI专为智能体设计的混合推理模型,提供思考与非思考两种模式。
模型名称 | 上下文长度 | 最大输入 | 最大思维链长度 | 最大回复长度 |
(Token数) | ||||
ZHIPU/GLM-5 | 204,800 | 203,776 | 131,072 | 131,072 默认65,536,可通过max_tokens调整。 |
不支持通过thinking_budget限制思考长度。服务开通
前往百炼控制台,搜索 ZHIPU/GLM-5,找到智谱GLM系列文本模型卡片,单击立即开通;
在弹窗内确认开通及授权。
完成以上步骤即可调用智谱提供的 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),仅在stream为true时生效。开启后,Function Calling 返回的 tool_call 参数(arguments)会以流式增量方式逐步返回。
stream与tool_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
}'模型功能
模型 | ||||||
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 计费。
错误码
如果执行报错,请参见错误信息进行解决。