智谱直接在用户社群里宣布: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这么强,我也有点儿担忧:程序员们能干的事情真是越来越少了!

但这也没办法,这是大势所趋,我们还是多往软件生命周期的两端(产品定义和产品营销)多走一走吧,选什么东西做,判断什么是对的,如何推向市场,这将会变成新的护城河。