驱赶AI Agent当牛马
前言
三年前GPT刚出来, 我写过一篇文章, 叫ChatGPT编写俄罗斯方块. 当年还没有什么Agent, 只能让ChatGPT写代码, 然后自己把代码复制到IDE里运行. 但是这几年AI的发展真是日新月异, 现在已经有了很多Agent了. 这些Agent可以自己去搜索资料, 可以自己去写代码, 不会了还可以自己去搜索,自己去看文档, 甚至可以自己去运行代码, 看结果, 然后根据结果继续修改代码. 这就好像是有了一个AI的助理一样, 你让它帮你做一些事情, 它就会自己去完成. 这对广大于程序员来说, 真的是一个巨大的福音. 因为可以把一些重复性的工作交给AI来做, 然后就可以专注于一些更有创造性的工作了 (我不觉得AI能替代码农).
顺便吐槽一下中文翻译,Agent翻译成“智能体”,听起来就很高达上,但是到底是干什么的呢?我觉得“智能体”这个名字太抽象了,不太好理解。但是Agent这个词很多年前就已经在计算机领域存在了,以前还有人翻译成“代理”,但是这个翻译又太过于技术化了,不太适合大众理解,因为proxy也翻译成代理。其实Agent这个词在英语里是一个非常常见的词,意思就是一个代表你去做事情的东西。就像你买房子要有Agent,买房子的Agent就是代表你去找房子,去看房子,去谈价钱,去签合同的那个东西。就是“中介”么。所以我觉得Agent不如干脆就翻译成“中介”,当然这个可能太没有学术感了。同理还有Socket,翻译成“套接字”,听起来就很高大上,但是到底是干什么的呢?其实Socket这个词在英语里也是一个非常常见的词,意思就是一个插座,就是你插电器的那个东西。就像你家里有很多插座,你可以把不同的电器插到不同的插座上去。Socket就是计算机网络里的一个插座,你可以把不同的程序连接到不同的Socket上去。同理还有当年Windows编成里面的Handle,翻译成“句柄”,其实Handle这个词就是窗户把手,微软的Windows叫Windows就是因为有窗户嘛,所以Handle就是窗户把手,你拿到了这个Handle就好像拿到了这个窗户的把手一样,你就可以通过这个Handle来操作这个窗户了。总之我觉得有些翻译虽然听起来很高大上,但是其实不太好理解,反而不如直接用英文更好理解。
好了,废话少说,开始说正题吧.
之前Gemini CLI的失败(差钱)
现在商业的AI Agent已经有不少了,譬如Google的Gemini Cli, Anthropic的Claude Code等等。 但是这些Agent都是商业的,虽然号称免费用,但是你接入的AI模型可不免费,除了那些少得可怜的免费额度之外,后续的使用都是要收费的。对于个人用户来说,这个成本可能就有点高了。搞不好程序没写多少,钱包随时被掏空。我之前试过Google的Gemini Cli,感觉还不错,功能也挺强大的,但是跑着跑着就提示我免费额度用完了,要我输入信用卡信息继续使用,我就放弃了。毕竟我也不想冒这个风险。
干啥这么费token呢?因为我有一个博客,就是现在在写的这个了,里面有200多篇文章,是用静态的博客生成工具,基于Python的Pelican写的。已经10年了,我记得我2007年刚来新西兰的时候,那时候还没工作,正好我闲得慌,就把以前基于WordPress写的博客内容迁移到Pelican上面了。为什么选Pelican呢?因为当时我只会Python, 其它编程语言像Ruby什么的都不太会。我记得当时在图书馆里天天迁移博客,大概弄了一周吧,还写了好多辅助程序,基本弄了个差不多。没想到它能用10年。为什么又想到要迁移博客呢?因为我发现Pelican这个项目基本处于半死不活状态了,虽然还持续有更新,但是更新的频率非常低,然后基于Pelican的主题就更惨了,几乎没人做,大多数主题都是好多年前的了,相当过时。而Jekyll就不一样了,虽然它是基于Ruby的,但是它的社区非常活跃,主题也非常多,更新也非常频繁。可能最主要原因是GitHub Pages默认支持Jekyll,所以很多人都用Jekyll来写博客了。我工作中也经常用Jekyll来写文档,一些对外公开的文档,我们基本上就用Jekyll写,然后放在GitHub上面,直接用GitHub Pages来托管了。所以我也想把我的博客迁移到Jekyll上面来。
其实我第一次尝试用AI Agent来迁移博客是在一年前,用的就是Google的Gemini Cli,虽然因为token用光没有移植成功,但是它的表现还是让我很满意的。它不像ChatGPT那样基于对话给你来生成,而是你给它一个宏观的命令,譬如“把我的博客从Pelican迁移到Jekyll”,它就会自己去分析这个命令,然后自己去查看情况,自己列一个TODO list,自己去搜索资料,自己去写代码,自己去运行代码,自己去看结果,然后根据结果继续修改代码,直到把这个任务完成了。整个过程完全不需要我来干预,完全不需要我来指导它怎么做,它就能自己去完成这个任务了。虽然最后因为token用光了没有成功,但是它的表现已经让我非常满意了。
第一次尝试
最近正好Agentic AI这个话题又火了起来,尤其是OpenClaw这个项目,火到三天改了三次名字。让AI完全控制你的电脑。我是没胆子让AI完全控制我的电脑,但是让AI来帮我写代码还是可以的,毕竟有源码控制,大不了回滚。所以我又想起来之前的这个博客迁移的事情了,就想再试一次,看看现在的AI Agent能不能帮我把博客迁移到Jekyll上面来。鉴于上次Token不够的情况,这次我决定用本地模型了。正好学校有台Dell出的DGX Spark,配置还不错。128GB unified LPDDR5x memory, NVIDIA GB10 GPU. 这是NVIDIA出的性能小怪兽,外观看起来很像那些便宜的一体机,但是它的性能却非常强大,而且架构跟苹果的基于Apple Sillicon的MacBook Pro很像,都是ARM CPU跟共享内存的CPU。下面是它的配置情况:
~$ nvidia-smi
Thu Feb 19 11:16:29 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.95.05 Driver Version: 580.95.05 CUDA Version: 13.0 |
+-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GB10 On | 0000000F:01:00.0 Off | N/A |
| N/A 39C P8 3W / N/A | Not Supported | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
$ lscpu | grep -i model
Model name: Cortex-X925
Model: 1
Model name: Cortex-A725
Model: 1
$ free -h
total used free shared buff/cache available
Mem: 119Gi 7.9Gi 15Gi 920Ki 98Gi 111Gi
Swap: 15Gi 226Mi 15Gi
这个机器用来跑本地的GPT-OSS,Gemma什么的模型,Token速度简直快到你怀疑人生,眼睛根本跟不上它Token的速度。用来跑Agent正合适。
硬件解决了,然后是软件。那些Claude Code啊,Gemini Cli啊,都是商业的,只能接入他们自家的模型,所以我选择用 OpenCode了。OpenCode就一个好,几乎你知道的不知道的啥模型都能接入:免费的ollama, LMStudio,付费的Gemini, Anthropic, DeepSeek,阿里巴巴,甚至是小米,都可以接入,我都不知道小米还有模型卖Token。它完全开源,而且很活跃,几乎天天都有更新,我也不知道这帮用爱发电的开发者是怎么坚持每天更新的。
我就选择了本地的模型,叫Qwen3 Coder Next,是千问3的一个专门针对代码的版本,我选了qwen3-coder-next:q8_0这个模型,是一个8bit量化的模型,有85GB大小,正好放进我那个128GB的内存里了。估计比默认的4bit量化的模型更强大一些。其实一开始我还尝试了直接用Gemma3,号称谷歌Gemini的开源版本,但是似乎这个模型不是给编程打造的,有些tools的调用就不太行了,后来就放弃了,转而用这个专门针对代码的模型了。
说干就干。首先把blog的源代码从GitHub上面clone下来,然后cd到博客的目录下面,启动opencode,它其实跟ollama已经结合的很好了,直接通过ollama的命令启动opencode,都不用额外的配置,就能直接opencode里面调用ollama里面的本地模型。然后给它下命令:
This is my personal blog, which is generated by Pelican, a static site generator based on Python. I want to migrate it to Jekyll, which is another static site generator based on Ruby. Please help me to do this migration.
说实话Agent对第一个指令的反映让我还挺惊讶的。它没有直接就开始干活,而是先分析了这个指令,自己去分析了博客迁移的步骤,自己去列了一个TODO list,自己去分析了每个步骤需要做什么,最后才开始动手干活的。感觉比新手程序员强,因为很多年前我自己开始学编程的时候,遇到问题就想直接打开IDE开始写代码了,根本不想先分析问题,直接就是上来就写了,结果经常写着写着就发现自己根本不知道怎么写了,或者写着写着就发现自己写错了,结果就得重写了。这个Agent就不一样了,它先分析问题,先列TODO list,先分析每个步骤需要做什么,然后才开始动手干活的。
这第一波花费了大概半个小时的时间,然后跟我汇报,说改完了。中间我并没有一直盯着看,但是也偶尔看两眼。令我比较惊讶的是我发现它中间过程中会自己写一些Python小程序来帮助迁移,譬如说Jekyll和Pelican的配置文件格式不一样,blog的metadata的格式也不一样,它就自己写了一个Python小程序来把Pelican的配置文件转换成Jekyll的配置文件,把Pelican的博客文章的metadata转换成Jekyll的博客文章的metadata。而并不是一篇一篇的去手工的改。虽然AI手工改应该也不难,但是写个程序来改可能花费的token更少,时间也更快。这让我想起了大概10年前我自己把文章从WordPress迁移到Pelican的时候,我也是写了好几个Python小程序来把WordPress的数据库里的文章导出来,然后转换成Pelican的格式,最后再把它们放到Pelican的目录下面去。感觉挺聪明的。
它告诉我改完之后,我就告诉它,那就在本地起个服务器看看效果吧。因为我知道Jekyll跟Pelican一样,都可以起个本地的服务器来预览博客的效果的。谁知道,这竟成为了噩梦(美梦)的开始。
各种修改
因为没有预览环境的时候,AI只是改,它自己以为改完了就停手了,然后告诉你主人你给我的任务我完成。有了预览环境之后,AI可以自己完成一定程度的实现测试了。它起了服务器之后,可以自己用curl命令来访问这个服务器,虽然AI没有“眼睛”(这些coder模型普遍没有vision功能,不可能把网页自己截图然后自己视觉观赏),但是通过解析curl的HTML网页,它大概也能知道个八九不离十.
我第一个问题是你这个默认主题(theme)minima太素了,只有一栏,能不能换一个好一点的主题?AI给我推荐了几个主题,我选了一个叫Chirpy的主题,感觉还不错。就告诉AI换成这个主题吧。AI就自己去下载了这个主题,然后把博客的配置文件改成了这个主题的配置文件,然后再起个服务器来预览。然后呢,就陷入了token地狱,AI说它需要安装一些依赖包来支持这个主题的功能,然后死活装不上这些包,因为package之间有各种依赖关系,有些package之间还有版本限制,不能太新,不能太旧,活像当年Windows的DLL地狱一样。它不断的试错,不断的卸载,安装,再卸载,再安装。然后呢,系统包跟用户包之间还有各种权限问题。我在干别的事情,没有及时打断它,甚至还让它自己干,然后我出去购物去了,回来之后发现它还卡在安装各种包这里。也不知道中间尝试了多少种方案,我赶紧把它给叫停了。告诉他再给你半个小时,弄不好我们想其它方案。
然后半个小时过去了,它真没搞出来,然后它还真自己停下来,说running out of time了,还给我建议,说你别用这个主题了,臣妾做不到啊。活像遇到码农跟你说“这个功能做不了”一样。我想做不了就先不做吧,还有好多别的东西要做。我让它变回了最素的那个主题。这个时候我看了一下OpenCode的统计数据,发现已经用了一亿多(100 million)的token了。着实吓人。
我后来发现OpenCode里面有免费的模型,你可以无限随便用。叫Big Pickle(这肯定不是真名,不知道它到底是什么模型,就像GitHub Copilot有个免费模型叫Raptor,肯定也不是真名)然后我切换了模型,用人家免费的,然后又给它下命令:
- Jekyll的URL跟老的Pelican不一样,这样搜索引擎等的外部链接就失效了,能不能把URL改成跟老的一样的格式?
- 数学公式显示不出来,是不是少了什么配置?
- 暗色模式/浅色模式切换的按钮点了没反应。
- 链接向本博客内部的文章的时候,链接地址不对。
- 有些javascript或者css没加载出来了,导致一些功能不能用了,能不能修复一下?
- 我有一个统计用户访问量的链接,能不能帮我加上?
- 没有分页,几百篇博客都在一页上了,能不能加上分页?
- 源代码高亮不换行了,能不能改成换行的?
- 源代码边上有个复制按钮,按了没反应。
- 图片大小不对,所有的图片都太大了。
- 手机上看博客的时候,它自动变成了单栏模式了,然后双栏切换那个按钮点了没反应,能不能修复一下?
- 搜索栏搜索了内容没反应,能不能修复一下?
- 清理以前Pelican的遗留文件。
- 我的博客有好几个Github Actions,每次我有新内容,自动帮我编译博客,上传到Google Firebase上面去的,还有自动打包成一个container上传到Docker Hub上面去的,这些Actions都不能用了,能不能帮我改成新的基于Jekyll的GitHub Actions来实现同样的功能?
- 帮我改这20年博客里面的错别字……
这些小任务交给它,它倒是作的挺快的。因为大多数都比较容易测试。它自己实现完了之后就可以自己去起个服务器,自己验证自己改的对不对。这个其实很重要。
我一直往GitHub Pages上部署,没什么问题。但是后来往CloudFlare部署的时候,又遇到了问题,当然后来知道是CloudFlare不支持UTF-8编码的文件名了,要加两个环境变量告诉CloudFlare这个博客是UTF-8编码的,才能正常部署了。但是这个问题不是Agent帮我解决的,而是Google Gemini。 Agent一直尝试自己改自己的代码来解决这个问题,但是一直都没成功,后来我想是不是能自己改代码也不是好事,就把所有的东西都怪到自己身上了。这里面还有个小插曲,Agent实在是搞不定的时候,居然还建议我不要用CloudFlare了,用Github Pages,或者Netlify,或者Vercel之类的来部署了。感觉它也挺无奈的。但是我把这个告诉Gemini,Gemini就说这是搞笑,相当于汽车玻璃坏了,就建议你不要开车了,改骑自行车吧。感觉这个比喻还挺形象的。
后来Chirpy主题还是成功用上了,不是在QWen3 Coder Next这个模型上成功的,而是在那个免费的Big Pickle模型上成功的。我告诉Big Pickle说你帮我换主题,Big pickle直接帮我下载了一份到本地,然后本地部署,有啥问题直接改。没多久就成功了。
后记
前前后后也花了10天左右时间吧。整个过程中,跟上次写俄罗斯方块不一样,上次我搞到最后,是自己亲自下手写代码了。这次我可是一行代码都没有自己写,(其实我也不会写Ruby,哈哈)。我这次基本上就是个项目经理,或者用户的角度,不断的给它下命令,提意见。并不需要自己亲自动手。绝大多数情况,AI Agent完成的都挺好,其实还是挺出乎我预料之外的。
我不敢说AI Agent以后能代替程序员,但我觉得它能代替一些重复性工作,或者说一些比较机械性的工作了。当然也积累了一些经验教训。譬如AI搞不定的时候一定要叫停。否则就是这样:
$ opencode stats
┌────────────────────────────────────────────────────────┐
│ OVERVIEW │
├────────────────────────────────────────────────────────┤
│Sessions 10 │
│Messages 2,197 │
│Days 8 │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ COST & TOKENS │
├────────────────────────────────────────────────────────┤
│Total Cost $0.00 │
│Avg Cost/Day $0.00 │
│Avg Tokens/Session 22.7M │
│Median Tokens/Session 1.4M │
│Input 158.1M │
│Output 286.7K │
│Cache Read 68.5M │
│Cache Write 0 │
└────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────┐
│ TOOL USAGE │
├────────────────────────────────────────────────────────┤
│ bash ████████████████████ 1260 (57.9%) │
│ read ████████ 519 (23.8%) │
│ edit ███ 210 ( 9.6%) │
│ write █ 58 ( 2.7%) │
│ glob █ 50 ( 2.3%) │
│ grep █ 50 ( 2.3%) │
│ webfetch █ 11 ( 0.5%) │
│ todowrite █ 8 ( 0.4%) │
│ task █ 4 ( 0.2%) │
│ invalid █ 3 ( 0.1%) │
│ question █ 2 ( 0.1%) │
│ websearch █ 2 ( 0.1%) │
└────────────────────────────────────────────────────────┘
1.5亿的token可不是闹着玩的。我把这张图贴给Gemini,又把OpenAI的价格网页贴给了它,问你帮我算算,如果我这是用的ChatGPT,这些token那大概已经花了我多少钱了?Gemini说大概是3000多美元了。还告诉我,一个中档的显卡已经被我烧光了。或者一个程序员一个月的工资已经被我烧光了。
我突然就想到,大概25年前我在大学学会计的时候,有门课叫会计电算化,老师说会计电算化在中国最大的阻碍是价格。有土老板说,我800块钱一个月就可以雇佣一个会计,而且他/她每天还可以被我颐指气使的干活。你一个会计电算化软件卖给我好几万块钱,我还不如请个会计来呢,否则对着这个软件我不爽的时候我骂谁去阿?
这个好像也可以放在Agentic AI上面,我把码农解雇了,让AI给我当牛马,如果我心理不爽,我骂谁去?AI就只会跟我说“You are absolutely right.”
当然这一切都会变。AI Agent的技术还在不断的进步,未来可能会有更多更强大的Agent出现,价格也可能会越来越便宜。到时候我们就可以真正的让AI来当我们的牛马了。虽然我觉得AI Agent不太可能完全替代程序员,但是它可以帮我们做很多重复性的工作,让我们有更多的时间去做一些更有创造性的工作了。
