GLM-5.3-Flash是智譜GLM系列中的多模態模型。Z.ai官方介紹將Flash與FlashX的應用重點放在視覺程式開發、辦公與文件處理。對想開始用AI整理資料、輔助學習或做小工具的人,這些方向都有用;真正動手時,則需要知道材料怎麼傳、回應怎麼讀,以及結果要檢查到哪一步。
我用glm-5.3-flash做了三種任務:從報名表圖片整理資料、解條件機率題,以及生成離線分帳網頁。本文先說明它的定位,再用一個不需安裝額外套件的Node.js範例完成API呼叫,最後對照三個任務的實際結果,說明如何把輸出接進自己的工作。
「多模態」指的是輸入不只限於文字,例如可以連同圖片提出問題。實際接受哪些格式,仍要看API與使用的客戶端;本次圖片測試使用PNG,並未遍測官方列出的所有輸入類型。
型號也要分清楚:GLM-5.3官方文件將輸入、輸出列為文字,Flash則有多模態輸入的介紹,FlashX又是另一個型號。本文沒有測試FlashX,不能把它的規格或表現算在Flash身上。
Flash官方列出的輸出類型是文字。這代表它可以回傳分析、表格內容與程式碼;要把內容存成檔案、執行程式、顯示網頁,仍需要後續工具。寫作草稿、會議資料整理與文件分析都是可以嘗試的用途,但本次沒有測試寫作風格或長文件品質。

我將模型與後續工具各自負責的步驟整理成示意圖,並非模型操作電腦的畫面。
這個分工對第一次串API很實用:先確認有取得完整回應,再依輸出的用途檢查內容。下面先跑一個有明確參考答案的文字任務,讓第一個請求也有可以核對的結果。
官方API也能使用。選擇智譜開放平台BigModel或Z.ai時,使用對應平台的API Key、服務位址和參數即可;各服務的金鑰不能混用。這裡用Crazyrouter示範,因為後面的實測都透過這個入口完成。
想確認型號,可以查看Crazyrouter的智譜模型清單,並在自己的呼叫入口核對完整識別碼glm-5.3-flash。
安裝Node.js 22或更新版本後,在終端機輸入node --version,能看到版本號再繼續。此範例使用Node.js內建功能,不必先建立前端專案或安裝第三方套件。
登入Crazyrouter控制台,在API權杖管理頁面建立Key。若有設定模型限制,需包含glm-5.3-flash。建立一個本機資料夾,準備以下三個檔案:
| 檔案 | 放什麼內容 |
|---|---|
api-key.txt |
只放自己的API Key,不公開、不截圖 |
request.json |
模型名稱、訊息與本次參數 |
glm-flash.cjs |
讀取檔案並發送請求的程式 |
Windows可在資料夾位址列輸入powershell並按Enter,在該目錄開啟終端機。儲存時要確認副檔名,避免出現request.json.txt或glm-flash.cjs.txt。
這份JSON保留本次實測的原始提示詞,使用簡體中文。本文以繁體中文說明,但測試沒有改用繁體提示詞重跑,也不將結果視為繁體中文能力測試。後面程式裡的提示與錯誤文字亦保留原樣,方便對照執行輸出。
以UTF-8編碼儲存下列完整內容:
{
"model": "glm-5.3-flash",
"messages": [
{
"role": "system",
"content": "严格依据任务材料回答,区分计算、假设和未知信息。不声称运行过未执行的代码。"
},
{
"role": "user",
"content": "盒A有4个红球、2个蓝球,盒B有2个红球、4个蓝球。以1/3的概率选盒A、2/3的概率选盒B,选定后在同一盒里不放回连续抽3个球。已知前两次至少一次抽到红球,求第三次抽到红球的条件概率,以及在该条件下选中盒A的后验概率。请给精确分数、分步推导、容易犯错的解释,并提供可以用Node.js直接运行的枚举核验代码。所有球视为不同实物,不能以模拟代替精确枚举。不要声称已经运行代码。"
}
],
"max_tokens": 24000,
"stream": false
}
題目同時包含不相等的選盒機率、不放回抽樣與已知條件,適合檢查模型是否把規則看完整。本次的兩個參考答案是13/32與7/16,後文會交代核對方法。
max_tokens:24000是這道題的輸出上限;stream:false表示等完整回應傳回後才顯示。這不是所有任務都適用的固定設定,初次復現先保持原樣即可。
以下內容存為glm-flash.cjs:
const fs = require('node:fs');
const path = require('node:path');
async function main() {
const key = fs.readFileSync(path.join(__dirname, 'api-key.txt'), 'utf8').trim();
const body = JSON.parse(fs.readFileSync(path.join(__dirname, 'request.json'), 'utf8').replace(/^\uFEFF/, ''));
if (!key || /\s/.test(key)) throw new Error('key format');
const response = await fetch('https://api.crazyrouter.com/v1/chat/completions', {
method: 'POST',
redirect: 'error',
signal: AbortSignal.timeout(720000),
headers: { Authorization: 'Bearer ' + key, 'Content-Type': 'application/json' },
body: JSON.stringify(body)
});
if (!response.ok) {
console.error('请求失败,HTTP状态:' + response.status);
return;
}
const data = await response.json();
const choice = data.choices?.[0];
console.log('结束原因:' + String(choice?.finish_reason || '未提供').split(key).join('[已隐藏]'));
const answer = choice?.message?.content;
if (typeof answer !== 'string' || !answer.trim()) {
console.error('响应没有非空正文,请检查输出上限和接口支持情况。');
return;
}
console.log(answer.split(key).join('[已隐藏]'));
}
main().catch(() => console.error('调用未完成,请检查文件、网络和配置;敏感错误详情已隐藏。'));
程式將Key留在本機檔案中,執行時才讀入記憶體,並使用固定的HTTPS位址發送請求;不把Key放進命令列。接著在同一資料夾執行:
node glm-flash.cjs
這會發送一次真實API請求。程式只印出結束原因和回答,不會自動執行模型提供的程式碼。
若之後換成其他客戶端,注意以下兩個位址的用途不同:
| 欄位用途 | 位址 |
|---|---|
| 由客戶端自動補上聊天路徑的Base URL | https://api.crazyrouter.com/v1 |
| 自行發送HTTP請求的完整端點 | https://api.crazyrouter.com/v1/chat/completions |
本例程式用的是完整端點。不要把兩者填進錯誤欄位,詳細欄位可查Crazyrouter串接文件索引。
| 看到的狀況 | 下一步檢查 |
|---|---|
stop且有回答 |
對照13/32、7/16及推導,結束原因不代表答案一定正確 |
length |
檢查回答或程式碼是否被截斷,再評估任務長度與輸出上限 |
| HTTP401 | 檢查Key是否有效,且來自Crazyrouter |
| 找不到本機檔案 | 核對三個檔案的名稱、副檔名和位置 |
| 沒有非空正文或其他錯誤 | 依文件確認參數與介面支援,不連續重送相同失敗請求 |
確認流程能跑通後,再替換messages中的使用者訊息。若要處理圖片,需要另外加入image_url內容區塊;本節範例是文字請求,沒有把圖片讀取流程藏在程式裡。
測試日期為2026年10月30日,使用簡體中文提示詞,透過https://api.crazyrouter.com/v1/chat/completions呼叫glm-5.3-flash。模型沒有取得外部工具,程式執行與結果核對均由我在收到回應後另外完成。
本次為3個獨立任務、共4次請求。各次均設stream:false,未明確指定temperature、top_p或reasoning_effort,採服務端預設行為。
| 任務 | 請求次數與輸出上限 | 本次結果 |
|---|---|---|
| 報名表圖片整理 | 1次,16,000token | HTTP200,stop;明細與彙總核對通過 |
| 條件機率推理 | 1次,24,000token | HTTP200,stop;推導與程式執行結果核對通過 |
| 離線分帳網頁 | 首輪32,000token;補測48,000token | 首輪截斷;補測完整,計算檢查通過,瀏覽器操作未驗證 |
我製作了一張12筆記錄的模擬報名表,以PNG的Base64 Data URL放進image_url傳給模型。規則是依報名編號保留最後更新的記錄,取消者不列入有效報名,應收、已付、退款和未付差額分開計算;沒有把參考答案一起傳入。

我製作的模擬資料,記錄與金額均為虛構。這是原始簡體中文測試圖片,保留原貌供核對,並非重新製作的繁體測試。
回應保留9筆最新記錄。逐欄位核對後,明細與10項彙總全部符合獨立參考值:有效報名7人、應收720元、淨收580元、未付差額140元;取消報名已付200元、已退80元。
模型也標出A004取消後沒有退款記錄,以及A006只支付部分金額;對於取消原因和退款規則,則明確說明原圖沒有提供。這些提醒有助於找出待確認項目,但不能直接認定A004違反退款規則。
內部74項檢查涵蓋63個明細欄位、10項彙總,以及記錄數與編號唯一性的組合檢查;它們來自同一張圖片,不是74個獨立任務。清晰模擬表格的結果,也不代表模糊掃描、手機拍照、多頁或複雜合併儲存格的表現。
如果要接到自己的資料流程,我會讓模型同時輸出「保留的明細」與「彙總」。只留下總數,一旦有錯就很難知道是看錯圖片、選錯記錄,還是計算規則沒有套用。
上面JSON的題目中,盒A有4紅2藍,盒B有2紅4藍,選盒的先驗機率分別為1/3、2/3。知道前兩次至少一紅後,第三次紅球的條件機率是13/32,選中盒A的後驗機率是7/16。
模型先分別處理兩個盒子滿足已知條件的機率,再納入選盒先驗;推導沒有把不放回抽樣當成互相獨立,也沒有將兩個盒子設成等機率。
參考結果在測試前獨立算好:將球視為不同實物,每盒枚舉120種有序抽取。收到模型回應後,我另行執行它產生的JavaScript程式,程式使用BigInt做精確分數運算,得到相同的13/32和7/16。
這項任務的推導與程式執行結果都通過了核對。若換成自己的課堂題目或分析公式,可以沿用這種檢查方式:保留題目條件、要求可重算的過程,再用獨立參考驗算。本次只測一題一次,沒有據此估計一般數學題的正確率。
分帳工具的題面要求一個可離線使用的HTML檔,包含人員新增、改名、刪除,每筆費用指定參與者,以及費用編輯、刪除和重設。金額以整數「分」計算,餘數依顯示順序分配。
第一輪的HTTP狀態是200,但finish_reason為length。32,000token上限用完時,HTML只寫到費用處理部分的開頭,不能當成完整作品。
這次completion_tokens包含推理部分,其中reasoning_tokens為25,707,因此不能把32,000token理解成全是最終HTML。保持題面與系統訊息不變、只把輸出上限增加到48,000token後,補測回傳stop與完整HTML;沒有人工續寫或修改模型程式。
之後我做了完整腳本的語法檢查,並取出原樣的計算與驗證函式,在Node.js中執行40項檢查,全部通過。其中一項涵蓋132種金額與人數組合,檢查總額守恆、餘數分配順序,以及每份金額相差不超過一分。
| 已測規則 | 核對結果 |
|---|---|
| 100元分給3人 | 33.34、33.33、33.33元 |
| 0.01元分給3人 | 0.01、0、0元 |
| 只讓指定兩人分攤 | 已測計算符合參與者設定 |
| 無效金額與刪除唯一分攤人 | 已測驗證函式拒絕不符合規則的操作 |
目前尚未驗證真實瀏覽器中的版面、按鈕、編輯與重設。函式收到輸入後能算對,還不足以證明畫面上的操作一定會正確傳入那些資料。要交給其他人使用,這部分仍需補驗。

依本次兩次網頁請求及程式檢查記錄整理,並非瀏覽器實錄。40項檢查中的一項涵蓋132種組合,兩者不能相加當作獨立任務數。
補測也是一次新的生成,因此能確認的是這次提高上限後取得完整輸出,不能推論提高上限必定解決所有截斷。
初次使用,可以從一份規則清楚、能拿原始材料核對的任務開始。整理圖片資料時,要求保留明細;解題時,要求列出條件與推導;生成程式時,把正常輸入、邊界情況和介面操作分別檢查。
就這次觀察,報名表整理與機率推理都在各自一次請求中得到正確結果;網頁生成取得了完整程式與通過檢查的計算邏輯,介面驗證仍未完成。這些結果可用來決定先試哪一類任務,還不足以支持長期穩定性或速度排名。
下一次換成自己的材料時,也保留請求條件、原始回答和核對結果。當輸出不符合預期,這些記錄能幫助分清楚:問題發生在輸入規則、模型回答、程式計算,還是畫面操作。
資料與測試日期:2026年10月30日。模型背景依據文中官方文件,實測依據Crazyrouter API原始回應及獨立核對;圖片來源見圖說。