智谱直接在用户社群里宣布: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这么强,我也有点儿担忧:程序员们能干的事情真是越来越少了!
但这也没办法,这是大势所趋,我们还是多往软件生命周期的两端(产品定义和产品营销)多走一走吧,选什么东西做,判断什么是对的,如何推向市场,这将会变成新的护城河。
热门跟贴