本文檔介紹如何在阿里雲百鍊平台叫用 Z.AI 直供的模型推理服務。
說明本文檔描述的功能僅在新加坡地區可用,如需使用模型,需從新加坡地區調用。
重要阿里雲百鍊為華北2(北京)、新加坡、中國香港地區推出了業務空間專屬網域名稱,能夠為推理請求提供卓越的效能和更高的穩定性,建議遷移至新網域名稱:
- 華北2(北京)地區:從
https://dashscope.aliyuncs.com遷移至https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com - 新加坡地區:從
https://dashscope-intl.aliyuncs.com遷移至https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com - 中國香港地區:從
https://cn-hongkong.dashscope.aliyuncs.com遷移至https://{WorkspaceId}.cn-hongkong.maas.aliyuncs.com
其中 {WorkspaceId} 為您的業務空間 ID,可在阿里雲百鍊控制台的業務空間詳情頁面查看。現有網域名稱仍可正常使用。
服務開通
- 前往百鍊控制台,搜尋 ZHIPU/GLM,找到Z.AIGLM系列文本模型卡片,單擊立即開通;
- 在彈窗內確認開通及授權。
完成以上步驟即可調用Z.AI提供的 GLM 模型服務。
快速開始
ZHIPU/GLM-5.3 是 GLM 系列最新模型,支援真正可用的 1M 上下文。運行以下代碼快速調用思考模式的 ZHIPU/GLM-5.3 模型。
需要已擷取與配置 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"),
# 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
messages = [{"role": "user", "content": "你是誰"}]
completion = client.chat.completions.create(
model="ZHIPU/GLM-5.3",
messages=messages,
# 通過 extra_body 設定 enable_thinking 開啟思考模式
# reasoning_effort 控制思考深度,可選值:max(預設)、high、low
extra_body={"enable_thinking": True, "reasoning_effort": "max"},
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,
// 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.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.3',
messages,
// 注意:在 Node.js SDK,enable_thinking 這樣的非標準參數作為頂層屬性傳遞,無需放在 extra_body 中
enable_thinking: true,
// reasoning_effort 控制思考深度,可選值:max(預設)、high、low
reasoning_effort: 'max',
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
# 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ZHIPU/GLM-5.3",
"messages": [
{
"role": "user",
"content": "你是誰"
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"enable_thinking": true,
"reasoning_effort": "max"
}'
流式工具調用
ZHIPU/GLM-5.3、ZHIPU/GLM-5.2支援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"),
# 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.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.3",
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,
// 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
baseURL: 'https://{WorkspaceId}.ap-southeast-1.maas.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.3',
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
# 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ZHIPU/GLM-5.3",
"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
}'
思考控制(thinking.type 與 reasoning_effort)
ZHIPU/GLM-5.3 始終以思考模式運行,不支援關閉思考,請保持 thinking.type 為 enabled(使用 enable_thinking 時保持為 true),並通過 reasoning_effort 控制推理深度。
參數 | 說明 | 支援的值 |
|---|---|---|
| 控制是否開啟思考,預設為 |
|
| 控制模型的推理深度。未傳入時預設為 |
|
清除歷史思考(clear_thinking)
clear_thinking 參數用於控制多輪對話中是否將歷史輪次的 reasoning_content(思考過程)作為上下文輸入給模型。僅 GLM 系列模型支援。
true:忽略歷史輪次的reasoning_content,僅使用可見文本、工具調用與結果等非推理內容作為上下文輸入,可降低上下文長度與成本。false(預設):保留歷史輪次的reasoning_content並隨上下文一同提供給模型。若希望啟用 Preserved Thinking,必須在 messages 中完整、未修改、按原順序透傳歷史reasoning_content,缺失、裁剪、改寫或重排會導致效果下降或無法生效。
說明該參數隻影響跨輪次的歷史思考內容,不改變模型在當前輪次內是否產生/輸出思考。
以下樣本使用同一組多輪 messages(assistant 訊息中攜帶 reasoning_content)。設定 clear_thinking=true 後,歷史思考內容不會被計入上下文,因此 prompt_tokens 少於 false(預設)的情況,實際數值取決於歷史 reasoning_content 的長度。
OpenAI相容
from openai import OpenAI
import os
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
# 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
# 多輪對話,assistant 訊息中攜帶 reasoning_content(歷史思考過程)
messages = [
{"role": "user", "content": "請計算 15 * 23 是多少?"},
{"role": "assistant", "content": "15 乘以 23 等於 345。", "reasoning_content": "15 * 23 = 345"},
{"role": "user", "content": "那再加上 55 呢?"},
{"role": "assistant", "content": "345 加上 55 等於 400。", "reasoning_content": "345 + 55 = 400"},
{"role": "user", "content": "剛才的中間結果是多少?"},
]
completion = client.chat.completions.create(
model="ZHIPU/GLM-5.3",
messages=messages,
extra_body={
"thinking": {
"type": "enabled",
"clear_thinking": False # False = 保留思考內容
}
}
)
print(completion.usage.prompt_tokens) # true 時少於 false
# 以下為新加坡地區的URL。請將 {WorkspaceId} 替換為您的百鍊業務空間ID,各地區的URL不同。
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ZHIPU/GLM-5.3",
"messages": [
{"role": "user", "content": "請計算 15 * 23 是多少?"},
{"role": "assistant", "content": "15 乘以 23 等於 345。", "reasoning_content": "15 * 23 = 345"},
{"role": "user", "content": "那再加上 55 呢?"},
{"role": "assistant", "content": "345 加上 55 等於 400。", "reasoning_content": "345 + 55 = 400"},
{"role": "user", "content": "剛才的中間結果是多少?"}
],
"thinking": {
"type": "enabled",
"clear_thinking": false
}
}'
其它功能
| 模型 | |||||||
|---|---|---|---|---|---|---|---|
ZHIPU/GLM-5.3 | 支援 | 支援 | 支援 | 不支援 | 支援 | 支援 | 支援
|
ZHIPU/GLM-5.2 | 支援 | 支援 | 支援
| 不支援 | 支援 | 支援 | 支援
|
上下文緩衝類型為隱式緩衝,自動開啟,與阿里雲百鍊的隱式緩衝服務有以下不同:
- 緩衝最少 Token 數為 512(百鍊為 256)。
參數預設值
模型 | enable_thinking | temperature | top_p | top_k | repetition_penalty |
|---|---|---|---|---|---|
ZHIPU/GLM-5.3 | true(不可關閉) | 1.0 | 0.95 | - | - |
ZHIPU/GLM-5.2 | true | 1.0 | 0.95 | - | - |
-表示沒有預設值,也不支援設定。
模型列表與計費
GLM 系列模型是Z.AI專為智能體設計的混合推理模型,提供思考與非思考兩種模式,其中 ZHIPU/GLM-5.3 僅支援思考模式。
模型上下文長度與價格資訊請參見百鍊控制台。
按照模型的輸入與輸出 Token 計費。
思考模式下,思維鏈按照輸出 Token 計費。
錯誤碼
如果執行報錯,請參見錯誤碼進行解決。
以下為Z.AI專屬的業務錯誤碼。HTTP 錯誤碼與百鍊通用錯誤碼一致,請參見上述連結。
錯誤分類 | 錯誤碼 | 錯誤資訊 |
|---|---|---|
基礎錯誤 | 500 | 內部錯誤 |
身分識別驗證錯誤 | 1000 | 身分識別驗證失敗 |
1001 | Header 中未收到 Authentication 參數,無法進行身分識別驗證 | |
1002 | Authentication Token 非法,請確認 Authentication Token 正確傳遞 | |
1003 | Authentication Token 已到期,請重建/擷取 | |
1004 | 通過 Authentication Token 的驗證失敗 | |
1100 | 賬戶讀寫 | |
賬戶錯誤 | 1110 | 您的賬戶當前處於非使用中。請檢查賬戶資訊 |
1111 | 您的賬戶不存在 | |
1112 | 您的賬戶已被鎖定,請聯絡客服解鎖 | |
1113 | 您的賬戶已欠費,請儲值後重試 | |
1120 | 無法成功訪問您的賬戶,請稍後重試 | |
1121 | 賬戶存違規行為,帳號已被鎖定 | |
API 呼叫錯誤 | 1200 | API 呼叫錯誤 |
1210 | API 呼叫參數有誤,請檢查文檔 | |
1211 | 模型不存在,請檢查模型代碼 | |
1212 | 當前模型不支援 | |
1213 | 未正常接收到 | |
1214 |
| |
1215 |
| |
1220 | 您無權訪問 | |
1221 | API | |
1222 | API | |
1230 | API 呼叫流程出錯 | |
1231 | 您已有請求: | |
1234 | 網路錯誤,錯誤id: | |
1261 | Prompt 超長 | |
API 策略阻止錯誤 | 1300 | API 呼叫被策略阻止 |
1301 | 系統檢測到輸入或產生內容可能包含不安全或敏感內容,請您避免輸入易產生敏感內容的提示,感謝您的配合 | |
1302 | 您當前使用該 API 的並發數過高,請降低並發,或聯絡客服增加限額 | |
1303 | 您當前使用該 API 的頻率過高,請降低頻率,或聯絡客服增加限額 | |
1304 | 該 API 已達今日調用次數限額,如有更多需求,請聯絡客服購買 | |
1305 | 該 API 已觸發流量限制 | |
1308 | 已達到 | |
1309 | 您的 GLM Coding Plan 套餐已到期,暫無法使用,前往官方續訂後即可恢複 https://bigmodel.cn/claude-code | |
1310 | 您已達到每周/每月使用上限,您的限額將在 | |
1311 | 當前訂閱套餐暫未開放 | |
1312 | 該模型當前訪問量過大,請您稍後再試,或切換其他模型如 | |
1313 | 您的賬戶當前使用模式不符合公平使用原則,請求頻率已受到限制。詳情請參閱《條款與協議-訂閱及自動續約協議》,如需恢複請前往個人中心-編程套餐總覽-頂部申請釋放保留 |