两年深入体验,一只脚踏入Vibe Coding的门
Vibe Coding ?
?
这个词,我觉得到现在还有很多人不知道是什么意思,只知道是用AI开发。这个词的意思是“用‘感觉’和AI一起写程序”。
也就是,我不管细节,我也懒得看,我觉得写出来了,那就是写出来了。
刚入门的新人可能觉得vibe coding很简单,毕竟写代码是ai去做,我只给ai提要做什么就行了。其实我觉得并非,vibe coding也是一门学问,因为即使不会代码,也要学会如何去用会ai,这又是一门全新的学问。
到目前为止,我使用ai进行深度开发也已经接近两年了,期间尝试过各式各样的方案。积累了这么久,现在肯定也是有了一套属于自己的方案,也算是一只脚踏入Vibe Coding领域了。
接下来介绍一下自己两年下来所积攒的一点点理解。
都知道AI要跑,那我用什么工具带呢
都行都行,怎么顺怎么来
两年间,在各种各样的工具之间辗转腾挪,我既用过如cursor、qoder、trae这样的ide,也用过claude code、iflow、crash、qoder cli这样的cli工具。到目前为止,我保留下来的主要使用的开发工具是opencode。
当然我不是不使用其他的工具,opencode是使用bun作为工具链进行开发的,在windows上经常会出现各种各样的问题,尤其是在我忍不住尝试新feature自动更新后,opencode经常会有用着用着就炸掉的问题,经常一时间内得不到修复。基于群友的选择,最近又使用了pi coding agent作为自己的备用选择,估计慢慢把pi调教好了,我也就不会再用opencode了吧。后续会单独出一篇调教pi的文章。
为什么我留住了opencode,究其原因主要还是综合了他的使用便捷性、生态以及开放程度。在各大模型厂商百花齐放的当下,再使用只能使用单一厂商模型的coding agent就有失偏颇了,opencode作为第一批开源coding tool,在开源界到目前为止也是人气最高的一位。至于其他的coding agent,我并不知道现在的性能如何,但每个人有自己的想法,对自己来说,用着最舒服的,能够满足自己需求的,就是好工具。
AI能不能不当傻子,我说什么他不懂什么
能
到现在为止,Skill应该是比较重要的一环了吧,这可是很重要的教给agent如何做事的一环,如果到现在还不知道skill是什么,我建议赶紧拿你的搜索引擎搜索一下。
目前各大agent对于skill的兼容性其实都很好,作为ai的“技能”,就像我们学习技能一样,网络上存在不少skill,我们可以直接拿来照搬来用,当然也可以自己或者直接让agent写,作为给agent学习知识的一部分,我认为像人一样,学会用成自己的才是最重要的。
Skill Market现在也不在少数了,我目前在用的是 skills.sh,它的cli搭配它家的skill finder的skill真的很好用。跟人最重要的是学会怎么学东西一样,ai最重要的也是学会怎么学东西。在使用这一套后,每当我的ai需要什么skill了,我要么就让他捏,要么就让他从网络上掏下来再捏。总之就是要让ai捏,帮他捏,契合自己的工作流,可以将多个skill让ai捏到一块,也可以让ai去自己扩展,自己记录。这样下来,ai慢慢的就会了解你需要让他做的东西,能够更好的顺应你的工作。
傻子不傻了,但是还是听不懂做不成好多事情
做东西怎么能没工具呢,你修个机子不要螺丝刀?
会用工具,是一个agent必备的技能,为什么agent不是普通的ai,那肯定是有说法的,你看猴子跟人是一个物种吗。学过生物的都知道,人和动物的区别在于会使用工具,有了工具的我们才能做成各种各样的事情。agent也一样,没有工具的agent不能叫做agent。
目前市面上存在的不论是用于办公的,还是专用于编程的ai客户端,基本都具有调用tool的功能。拿opencode举例,对于agent来说,最强大的能力是什么?当然是bash,有了调用bash的权限,就说明可以调用python,可以调用python,那爱用python处理事情的ai可就大展身手了。
同样是opencode,除了内置的几个bash、edit等几个tool以外,另外一种比较简单的可以赋予agent工具的手段,就是mcp。mcp作为skill前就出现的东西,目前市面上mcp的存量可是很大的。比如我这里介绍一下我如何让我的opencode上网冲浪:最基础的fetch mcp,这个mcp可以让ai获取非js渲染的网页的内容;再比如brave search或者exa或者tavily mcp,他们赋予的agent在网络上搜索内容的能力;有些fetch获取不到的,我们有伟大的agent browser,使用他会提取正儿八经的浏览器渲染的页面的结构化数据,要登录的网站还可以以有头模式打开,这样就可以人工干预过程了。
规范是规范,可以不遵守,怎么让AGENT完全遵守呢
很简单,不用规范了,我们用“规 则”
Skill作为ai执行流程的规范,agent是可以不完全遵守的,agent会随机应变,就表示agent也可以完全不按你制定的规范去做事。
举一个我之前遇到的问题,我之前很喜欢kiro ide的某个功能,每次代码进行修改后,都会自动帮我去更新文档。但是由于各种原因,我不再使用kiro ide了,正如上面所说,我现在使用opencode。但是我真的很想念那个自动更新文档的功能,搭配文档规范的skill真的好用的一批,自从用了opencode之后,我再也没用过那个功能了,也就逐渐淡忘了。前段时间我想起来了这个功能,我就开始钻研了。
其实这个功能的原理并不复杂,这个功能在kiro中利用的是hook机制,这才是硬性规则,我就想,在opencode中是否也有类似的机制。一开始我尝试写入skill,但是opencode经常不遵循我的skill,当然不排除是我的提示词问题。后面经过了一番探索,我决定采用opencode的插件机制,自己写了个插件,于是我自创的docs-gate.js也就这么诞生了,我写的这个插件会间隔五分钟每次代码有更新时,交由另一个session去更新我的文档。
额啊,Skill太多AGENT整串了
什么?你的agent学了多少skill?兄弟,来试试我们subagent吧!
在用时间长之后,未免会出现skill过多,工具过多的情况,就会导致一个万能的AGENT在处理单个或多个任务时,上下文窗口和工具集会变得极其臃肿的问题,导致上下文污染,最终影响agent可靠性和效率。
为了应对这种情况,一种Subagent的架构模式应运而生。Subagent是一种为执行单一、明确定义的任务而专门构建的特化AI Agent,他与单一的agent架构不同,一般这种架构是在一个统一的编排agent下协调运作,与其他subagent共同完成一个复杂的任务,编排agent一般称为Orchestrator。可以搜索一下网络了解subagent系统的原理。
这里仍然是以opencode为例,最简单的上subagent系统的方法就是安装oh my openagent。安装后,就会获得一组可复用的agent集合,每次Orchestrator调用时,subagent都会从无状态无上下文的情况开始,携带自己的tool、mcp和skill等进行工作。除了安装omo,也可以通过定义md文件,定义属于自己agent,比如我之前说我写了个docs-gate.js,对应的更新文档的agent就是docs-gate.md。
不对啊,上面有的问题有的我没遇到啊
那当然是你的模型牛咯
比如上面的subagent,本质是上下文工程的胜利。到目前为止模型技术还在飞速发展,现在的系统都应当避免过度设计,因为一个更简单或者更强大的模型可能在明天就可以解决我们定制的复杂系统所解决的同样的问题。
所以,自己的agent能够做到什么事情,本质上取决于,你对自己的agent了解到底有多少。我非常信任我经常使用的模型,我也会探索使用新的模型,对前沿国产与国际模型都有一些了解,我知道他们能做什么事情,所以我可以正确的引导他们怎么做。为什么mcp会出现,为什么agent browser会出现,本质上是减少模型的工作量,让agent所思考所考虑的东西变少,还是上下文工程的胜利。
我说白了,我的agent可以操作我的终端,那有了我的终端,以后强大的模型作为agent,还有什么事情做不到呢。