opencode + GLM-5.3 上手体验:一次真实的博客升级实战

上一篇博客写了我现在的 AI 编程工作流,里面有一个观点:AI 工具让写代码变快了,但工程判断变得更重要了。这篇文章就是一次完整实战——顺便也当一次工具评测。

这次的”小白鼠”是我自己这个博客:一个 2021 年之后就没动过的 Hexo 5.4 + NexT 8.6 老站点。而干活的,是 opencode 终端里的 GLM-5.3。

AI Agent 升级旧博客的工作流示意图

先说说工具本身

opencode 是一个跑在终端里的开源 AI 编程工具,定位类似 Claude Code:直接在项目目录下对话,它可以自己读文件、执行命令、改代码、起本地服务。模型可插拔,我这次接的是智谱的 GLM-5.3。

之所以选这个组合试试,一是想验证”终端原生的 agent”到底比网页对话强多少;二是 GLM 的 coding plan 价格实在,适合当日常干活的牛马。

实战:把博客从 2021 年升到 2026 年

第一印象:摸底不瞎猜

会话的第一句话是”帮我查看下这是一个什么项目”。它没有上来就输出一堆正确的废话,而是先读目录结构、README、_config.ymlpackage.json,然后给出准确总结:Hexo 5.4 + NexT 主题、Gitalk 评论仓库、Live2D 看板娘、部署到 GitHub Pages。

接着我问”架构和技术栈需要更新吗”,它给出了具体到版本的差距表(Hexo 5→8、NexT 8.6→8.29、Gitalk 已归档),而不是泛泛地说”建议升级”。

升级方案:边界感很重要

我提的要求只有一个:稳妥,失败必须能回滚

它给出的方案比我预想的老练:

  1. 先打 tar 备份(含 .git),并验证备份内容完整;
  2. 复制出 blog-v2 副本,在副本上升级,原目录全程不动;
  3. 构建要求零警告,本地起服务逐路由验证 200;
  4. 验证通过才切换目录,旧目录保留。

整个过程它的动作是:删掉本地 themes/next(被 gitignore 的冗余副本)改用 npm 包管理、升级全部插件、构建、检查产物里暗黑模式/搜索索引/Gitalk 容器是否真的注入。中途还发现 npm 上 hexo-theme-next 的版本号和它自己的记忆不一致,先 npm view 查真实版本再定方案——没有凭训练数据里的旧知识硬写。

挖出一个潜伏多年的 bug

升级后验证搜索功能时,它注意到一个细节:配置里写的是 search.xml,实际生成的却是 search.json

顺着这个线索往下查,最后发现我的 _config.ymlsearch: 下面的子键全部顶格没缩进——YAML 里这个键的值其实是 null。也就是说:我配置的搜索参数从未生效过,站点这些年一直跑在插件默认值上,根目录那个 search.xml 是更早年代的遗留文件。

这个 bug 值得记录一下,因为它太典型了:

  • 配置不报错;
  • 功能”看起来正常”(本地搜索确实能用);
  • 人肉 review 时,缩进问题肉眼几乎不可见。

如果不是这次较真”为什么生成的是 json 不是 xml”,它会一直潜伏下去。

试错与回退:不硬凑方案

也有失败的部分。我想给文章页加”相关文章推荐”,它的探索路径是这样的:

  1. 按主题文档装了 hexo-related-popular-posts → 发现 NexT 8.29 实际依赖的是另一个插件;
  2. 换成 fork 版 @wangjiezhe/hexo-related-posts(因为原版 peer 依赖不支持 Hexo 8)→ 构建通过,但文章页没有输出;
  3. 写了个临时脚本直接调用插件内部逻辑打印中间结果 → 确认 TF-IDF 对中文内容计算出的相似度全部为 0(分词按空格切,中文整句成了一个词);
  4. 结论:方案不可行,卸载插件、回退配置,换成主题内置的其他功能。

我喜欢这个处理方式:构建通过不等于功能可用,它愿意钻到 node_modules 里读源码、写脚本验证中间态,最后老实承认”这条路对中文不成立”,而不是留一个看起来装上了的东西。

类似的还有一次:代码块复制按钮配置写错了层级(copy_button 应该挂在 codeblock 下面),构建同样不报错。它是顺着主题源码里 CSS 的生成条件 hexo-config('codeblock.copy_button.enable') 反推出正确配置路径的。

主题对比:零污染实验

升级完我想换个主题看看。它的做法不是在主项目里反复横跳,而是复制出两个独立副本,分别装上 Butterfly 和 Fluid,用 4000/4200/4300 三个端口让我并排对比。我逛完一圈决定还是留 NexT,它删掉两个副本,主项目没有任何残留。

对比类决策给隔离环境、多端口并排预览——这个交互模式确实比截图流高效。

整体感受

一句话总结:像一个做事有章法的同事,而且是不知疲倦的那种。

好的方面:

  • 工程习惯扎实:备份、副本、验证、回滚,全套动作一个不少;
  • 会读源码定位问题,不靠猜;
  • 失败会承认、会回退,不粉饰;
  • 并行能力强:同时读多个文件、同时跑多个探测命令,节奏很快。

需要注意的方面:

  • 长会话里它有过几次错误推断(插件依赖搞错、配置层级写错),虽然最终都自己发现修正了,但diff 必须亲自看,这条不能省;
  • 中文生态的坑(分词、CDN、已归档的 Gitalk)它也得踩一遍才知道,别期待先知;
  • 部署这类直接影响线上的动作,它坚持等我确认才执行——这个边界感是对的,人也应该守住这条线。

结语

AI 编程工具的真实差距,从来不在官方 demo 里,而在你自己的真实项目、真实的陈年烂摊子里。这次实测,一个下午完成了:Hexo 5→8 大版本升级、修复潜伏多年的配置 bug、开启暗黑模式等一批新功能、三主题对比选型。

以及——你正在读的这篇文章,从撰写、构建、提交到部署上线,也是同一个 agent 完成的。这大概就是最好的上手体验报告。