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