智譜直接在用戶社群里宣布:Coding Plan全體用戶即刻用上最新旗艦GLM-5.1。
有意思的是,這次更新很“DeepSeek”:不放benchmark,不放跑分,直接把模型推給用戶,用體驗來說服用戶,智譜這次在技術上非常有自信啊!
GLM-5.1最大的特點就是Long Horizon的巨大升級,什么是Long Horizon?
Long Horizon= 在長時間、多步驟、不確定環境下,持續推進并最終完成目標的能力。
更通俗地說就是任務的時間被拉長,它不是寫一個函數或者回答一個問題,馬上就能結束,而是持續幾小時 / 幾天 / 幾周,分階段不斷推進。
更關鍵的是,任務不是固定流程,可能中途會發生變化,例如出現需求變了,用戶反饋不好,需要對原來的設計進行大規模修改,這就要求模型能記住過去干了什么事情,不能從零開始。
咱們程序員一看就明白, Long Horizon Task(長程任務)其實就是咱們日常開發經常面對的情況,如果GLM-5.1把這個搞定了,程序員們堅守的陣地,可以說是又被AI攻陷了一塊兒。
01
挑戰GLM-5.1
我決定找個項目測試一下,這個項目如果是爛大街的簡單項目,簡單邏輯,別家的模型也能做,根本就測不出來GLM-5.1的能力。
思來想去,我想讓它實現一個簡版的SQLite數據庫,因為它涉及到手寫Tokenizer,Parser,AST表達式,事務實現、B+Tree......是非常復雜的。
由于功能很多,任務分成了9輪:
第1輪:存儲底座(KV +持久化)
第2輪:引入表結構(Table)
第3輪:查詢能力(Select)
第4輪:DDL
第5輪:實現DML:Insert, Update ,Delete
第6輪:實現事務
第7輪:對外提供簡單的API接口
第8輪:把底層存儲替換成BTree
第9輪:實現按列select,order by
值得注意的是,在第8輪我給GLM-5.1設置了一個陷阱,讓它把第一輪的存儲底座給改掉,相當于大廈已經蓋好了,然后把地基干掉重來。
這個挑戰是相當大的,如果GLM-5.1不記得之前的工作,肯定實現不了,如果第一輪GLM-5.1寫代碼的時候,耦合度太高,換地基的時候樓恐怕就要塌了。
02
系好安全帶,出發!
首先,我在Claude 中配置使用GLM-5.1 :
![]()
然后告訴GLM-5.1一些必須遵守的規矩,特別值得一提的是,一定要有測試,并且確保所有測試都通過。
你正在使用Go語言逐步構建一個簡化版 SQLite 數據庫系統,名稱叫做MiniSQL。
我會告訴你每一輪都做什么事情,要求如下:
1. 每一輪只能在上一輪基礎上擴展,不得破壞已有功能
2. 每一輪必須提供:
- 完整可運行代碼
- 測試代碼
3. 所有舊測試必須繼續通過(回歸測試)
4. 代碼必須保持單文件或明確模塊結構
5. 不允許使用第三方數據庫庫(可以用標準庫)
03
第1輪:存儲底座
先從最底部的存儲層開始:
你現在要設計一個極簡數據庫的第一版存儲層。
要求:
- 實現一個最簡單的 Key-Value 存儲系統
- 支持 set(key, value), get(key), delete(key)
- 數據必須持久化到本地文件(不能只在內存)
- 重啟程序后數據必須能恢復
約束:
- 不允許使用現成數據庫
- 可以自由選擇文件格式(JSON / text / binary)
輸出要求:
- 給出整體設計,解釋存儲結構,寫入Design.md
- 給出代碼實現(注意要有測試代碼)
GLM5.1很快寫出了實現代碼,測試代碼。
![]()
文檔也寫得非常完善:
![]()
04
第2輪:引入表結構(Table)
現在要支持關系型表結構:
功能:
- 可以創建一張表(比如 users,包含 id、name,age 兩個字段)
- 可以往表里插入一條數據(比如一行用戶信息)
- 可以讀取一張表里的所有數據
要求:
- 在現有存儲系統上實現(不能重新設計存儲層)
- 設計 schema 管理方式
- KV 存儲必須繼續作為底層持久化方式
輸出:
- 修改后的系統架構design.md
- 如何映射 table → KV
- 實現代碼(包括測試代碼)
![]()
這一輪寫出的代碼如下:
![]()
05
第3~5輪:支持SQL
這幾輪主要用來實現SQL,包括DDL和DML,SQL例子如下:
- CREATE TABLE users ( id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
- DROP TABLE users;
- SELECT * FROM users
- SELECT * FROM users WHERE age = 20
- SELECT * FROM users WHERE age > 18 AND name = "Alice"
- INSERT INTO users VALUES (1, 'Alice', 20);
- UPDATE users SET name = 'Alicia' WHERE id = 1;
- DELETE FROM users;
- DELETE FROM users WHERE id = 2;
雖然這些實現很重要,由于細節很多,我這里不再詳細描述,大家可以看看GLM-5.1寫的技術文檔,相當不錯:
![]()
![]()
另外,這三輪的工作量很大,一共耗時15m38s + 20m59s + 11m38s = 48分15秒, 我拿著手機都看了一集甄嬛傳了。
06
第6輪:支持事務
這絕對是重頭戲了,一個關系數據庫如果不支持事務就是一個玩具了,所以我讓它用用WAL來實現數據庫的可靠性和事務。
使用WAL(Write-Ahead Log) 實現事務支持,讓數據庫具備兩件能力: 不會因為崩潰丟數據(可靠性) , 一組操作要么全成功,要么全失敗(事務)
1.WAL(寫日志)
所有“寫操作”都必須先寫日志,再真正修改數據。
寫操作包括: 插入 更新 刪除
2.崩潰恢復
程序重啟時:
- 讀取日志
- 把“已提交”的操作重新執行
- 忽略“未完成”的操作
3.事務
支持三個操作:
- BEGIN(開始一組操作)
- COMMIT(提交這一組操作)
- ROLLBACK(撤銷這一組操作)
規則:
- BEGIN 后的操作暫時不生效
- COMMIT 后才真正生效
- ROLLBACK 直接取消
輸出:
- 事務處理方案,寫入到transction.md中
- 代碼實現(包括測試代碼)
這次改動相當大,又耗費了近40分鐘。
![]()
07
第7輪 對外提供簡單接口
這一輪相當于做一個包裝,方便對外使用,這里模擬了SQLite的API
對外提供一個簡單數據庫接口,讓用戶像用 SQLite 一樣使用:
示例:
(1)打開數據庫:db, err := Open("test.db")
如果test.db文件不存在,則創建出來。
(2)執行SQL:
db.Execute("INSERT INTO users VALUES (1, 'Alice', 20)")
db.Execute("UPDATE users SET age = 21 WHERE id = 1")
db.Execute("DELETE FROM users WHERE id = 1")
(3)查詢數據:
rows := db.Query("SELECT * FROM users")
for rs.Next() {
row := rs.Row()
fmt.Println(row)
(4) 事務支持:
db.Begin()
db.Execute("INSERT INTO users VALUES (2, 'Bob', 25)")
db.Commit()
db.Begin()
db.Execute("INSERT INTO users VALUES (3, 'Tom', 30)")
db.Rollback()
看到這些API,你可能會感受到做系統開發的特點:沒有漂亮的界面,看到的全是API接口。
雖然代碼看起來很復雜,但是執行起來卻是最簡單的,畢竟只是一層封裝而已,10分鐘不到就搞定。
![]()
08
第8輪 替換底層存儲引擎
終于到了我最喜歡的挖坑環節,把它的地基替換了,看看GLM-5.1會不會崩掉。
將底層的KV存儲替換成為 B+Tree 索引結構,要求:
支持有序存儲 key
支持范圍查詢(Range Scan)
允許節點分裂與合并
保持基本 KV 接口不變(向上兼容)
這次GLM-5.1耗時很久,用了長達47分鐘,表現很穩,不但沒有崩潰,反而又是一次通過。
![]()
我并沒有在提示詞中讓它修改設計文檔,它也聰明地修改了:
![]()
09
第9輪 :再加一點兒需求
把第三輪沒有實現的部分功能讓GLM-5.1實現了,考察它是不是還記得之前的任務。
(1)現在只支持select * from users這樣的語法,需要改成可以按列來選擇,例如:select id ,name ,age from users
(2)需要支持order by 語句 例如:select id ,name ,age from users order by age desc
經歷了第8輪的考驗,第9輪對GLM-5.1來說沒有任何挑戰,我就不展開了。
10
感想
其實這還是一個簡單的數據庫,還有好多特性可以加上去,但是對測試而言,這條路已經走了足夠遠了。
從下午1點到5點半,我經常是一邊看手機,一邊等他做完。
這四個多小時,Token的使用量也非常巨大,達到了一千七百多萬:17,062,578,幸虧有智譜的Coding Plan套餐,要不然我就“破產”了。
![]()
在整個長程任務執行的過程中,GLM-5.1給我印象最深刻的就是一個字:穩。
每次我提出需求,GLM-5.1寫出的代碼經常是一次就通過測試,很少失敗,讓我很驚訝。
還有就是無論我如何拷打它,挑戰它,給他挖坑,它始終能瞄準最終目標來修改代碼,表現非常穩健。
要知道像數據庫這樣的系統級軟件,比一般的項目邏輯要復雜得多,GLM-5.1能夠輕松應對數據庫,寫其他軟件(Web應用、桌面應用、工具等)自然是不在話下。
GLM-5.1 在項目級Long Horizon任務的表現,簡直就是一個有經驗的中高級程序員,非常讓人放心,以后應該是我的主力編程大模型了。
不過,看到GLM-5.1這么強,我也有點兒擔憂:程序員們能干的事情真是越來越少了!
但這也沒辦法,這是大勢所趨,我們還是多往軟件生命周期的兩端(產品定義和產品營銷)多走一走吧,選什么東西做,判斷什么是對的,如何推向市場,這將會變成新的護城河。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.