9月23日,在云栖大会"Qoder AI Coding 赋能超级个体"分论坛现场,Qoder技术专家谢文欣带来主题演讲《从Coding到Co-creation:Qoder的技术故事》。
谢文欣以"AI加速了Coding,为什么没有自动带来Co-creation"为切口,讲了Qoder研发团队用AI Coding开发AI Coding产品的真实技术故事:今年1月,5个人只花7天就把QoderWork从0到1做出来上线;8月重做Qoder时发现,效率不是一道简单的乘法题,代码写得越快,对不上、接不上的地方也堆得越快;于是把架构与协议、AGENTS.md、E2E端到端测试连成一条从共识到验收的链路;Recap从团队同学的真实使用痛点里长出来,十几种彩蛋没有一个是排期排进去的。演讲最后,她给出了Qoder希望保留的两样东西——"统一性,让创造接得上;野生感,让创造长得出来",并回到这个技术故事最朴素的期待:共同创造一个完整、有质感、也有趣的产品。
以下为演讲实录整理,以第一人称呈现,仅删减口语化表述,尽量保留原貌。
我是谢文欣,是Qoder的一名研发同学。今天上来不是介绍Qoder的具体功能,我想跟大家聊的是我们这样的一线开发者,在把Qoder做出来的过程中,真实经历的一些技术故事。
大家应该都有这样的感受:让AI写代码这件事情,变化真的太快了。我最近看到一个说法:一年多前跟AI写代码,讲究的是结对编程,你一句我一句地配合;现在更像手里带着一支AI小队,一个人、一群Agent,就能干一个很复杂的需求。
5个人,7天
有了AI之后,每个人的生产能力都被放大了。我们Qoder团队也是在这条用AI提效的路上一路狂奔,最经典的例子就是今年1月,我们5个人只花了7天,就把QoderWork从0到1做出来上线了。现在这段经历回想起来,还是觉得挺兴奋的。
当然,我们也会自然而然地有这样一个想法:既然5个人7天能干那么多,那更多人、更大的团队是不是就能快得飞起来?到今年8月,我们开始重做Qoder的时候,就逐渐意识到事情没有那么简单,这不是一道简单的乘法题。QoderWork和Qoder都是从0到1做起来的,但它们的范围和协作的规模完全不一样。
我们5个人做QoderWork的时候,团队内的上下文高度集中,很多事情不需要反复解释、反复对齐,决策距离也很短,发现问题了,当场相关的人就能拍板,然后快速解决掉。同时大家的角色也很灵活,都愿意为了最终的结果,跨越自己的职责范围互相补位。所以当AI进一步放大每个人的生产能力时,我们5个人很容易就能一起跟上这个速度。
这不是一道简单的乘法题
可是到了做Qoder的时候,就完全不一样了。Qoder的工作范围大了很多,有桌面端、有移动端、有丰富的插件生态,还有不同的工作模式。模块更多,参与者也更多,是一个非常典型的多团队协作的复杂大产品。这件事情在50年前《人月神话》这本书里已经论述过:给一个软件项目加人,并不会让它等比地变快。因为人一多,光是要让所有人保持共同理解,这件事本身就要花掉非常多的成本。
真正的问题不在于人变多了,而在于每个人都变快之后,每个人都在飞快地往前推,但各自交出来的东西单独看可能都挺合理,拼在一起时才发现,大家对同一件事情的理解没有对齐。这往往就是我们用AI写代码时很容易碰到的一种情况:代码已经写出来了,共识却还没有跟上。而且AI放大的不只是好的那一面,你写得越快,那些对不上、接不上的地方也堆得越快。它在放大产出的同时,也在放大混乱。
原因并不难理解。AI帮我们加速的主要是把一个东西实现出来的这一段。这个改动到底影响了谁?几个模块拼在一起之后,用户的使用体验还顺不顺畅?如果没有人明确地告诉AI,它是不知道的。所以这些还是得靠人一起去对齐。
所以结论也就清楚了:AI放大了每个人的实现能力,却没有同比放大大家一起判断、一起理解的能力。换句话说,AI加速了Coding,却没有自动带来Co-creation。代码可以自动生成,但共识不会自动生成。
共识要怎么补上?先想这样一件事:用户打开我们的Qoder产品,用的是一个完整的产品,他不会关心你背后有多少个团队、多少个模块,他只关心自己用得顺不顺。所以功能模块大家可以分别去实现,但体验必须一起交付。
从共识到验收的一条链路
要做到这一点,靠的是一条从共识到验收、一环扣一环走下来的链路,而这条链路的起点还是得靠人。
第一步,我们先把架构和协议定下来。架构指的是这个产品由哪些模块组成、边界在哪里;协议指的是这些模块之间该怎么交互、要遵守什么样的约定。这一步必须由人来主导。因为AI很擅长完成一个具体的任务,它默认关心的是你眼前这件事有没有做完,而不是整体会不会因为这个实现而变乱。所以边界这件事情,我们不会交给AI去猜。
光是人定好了还不够。这些共识如果只停留在会议纪要、停留在文档里,AI是看不到的。我们给它一个任务,如果只说眼前要实现什么,那些已经定好的边界和约定并不会自动进入AI的上下文。结果就是代码写得很快,但写出来的东西可能跟别的模块对不上,或者体验不够顺畅。所以第二步,是把这份共识融入AGENTS.md里面,让它融到日常的编码实践里。你可以把AGENTS.md理解成AI在这个项目工作时随时会翻的一份项目工程书:怎么分层、有哪些约定、提交之前要检查什么,都写在里面。这样,人达成的共识就变成了AI每次动手的依据。当然,写下来不代表就不管了,你的方案变了,AGENTS.md得跟着更新。
AI写完了,也要按其中的内容去检查,这些仍然需要靠人去盯。到这一步,前面所有的约定都已经落入了每天的实现里。还差最后一环:怎么确认大家各自实现的这些东西拼起来,真的是一个完整、顺畅的产品?
这就是我们的第三步,用端到端测试去兜底验收。一个模块单独跑通,只能说明它自己没有问题。可是用户是从头到尾走完一整条路径:输入一条prompt,到我们的Agent调各种工具、各种Skill去进行处理,再到最终的结果呈现给用户,这中间其实穿越了好多个模块。E2E端到端测试做的,就是沿着这条真实的路径,把模块串起来,去检查它们能不能真正协同工作,再结合自动化,让这样的检查流水线可以反复地跑。所以就算我们是一天发一个版本的节奏、产品迭代很快,它也能在第一时间发现那些接不上、体验不顺畅的地方。
你看,这三件事情其实是一条线:人先把共识定下来,AGENTS.md让它每天生效,E2E端到端测试在最后兜底验收。目的是让那些本该反复对齐、反复解释的事情固定下来,这样大家就不用每次都从头沟通、从头对齐,而是把精力留给那些真正需要判断的新问题。
说到底,清晰的架构和协议不是为了限制谁,而是为了让每一个人在自己的那一块地方,都能够放心地往前跑。不过,光有这一套,你做出来的会是一个正确的产品,但未必是一个有质感的产品。它能保证大家不跑乱,但保证不了给用户带来惊喜。真正能让一个产品有质感的,其实是另一股力量。接下来我想讲的就是这股力量。
解决自己的问题,特别有信念感
我们这群做Qoder的人,其实也是Qoder的重度用户,所以很多功能是从我们自己的真实需求里挖掘出来的。比如Recap功能。它来源于团队同学经常遇到的一个场景:一个任务跑了很久,会话历史拉得很长,过一阵子你再把它切回来,可能需要往上翻个两三页,才能想起这个会话之前是干什么的。这其实是大家用Agent产品都会遇到的痛点。我们这个同学就想着,他应该去解决一下这个问题。于是就有了Recap这个功能:当你切回一个长会话的时候,它会帮你快速回顾当前任务进展到哪里了、已经完成了什么,以及还有哪些值得关注的线索,你不用再往回翻,就能很快接着这个任务往下走。
这个同学还说了一句让我印象深刻的话:"解决自己的问题,特别有信念感。"我个人很喜欢这句话。它背后其实揭示了这样一件事情:发现问题的人,也可以成为推动解决它的人。所以你会发现,很多真正的好需求,不是在会议室里规划出来的,而是从自己每天的真实使用中长出来的。
质感从来不是规划出来的
再讲一点,除了功能之外,我们还额外花了一些小心思。很多用户都说Qoder的审美很好、质感很好。这是因为我们的设计师同学、开发同学,真的是把Qoder当成自己的作品在打磨。这种打磨可能藏在很多你第一眼未必会看到的地方:可能是一处交互的手感,可能是一句文案的措辞,我们都会反复去抠。其中最好玩的就是Qoder的彩蛋。
前前后后,我们一共在Qoder里藏了十几种彩蛋,没有一个是需求排期排进去的,全都是大家觉得有趣、自己想做,自发做进去的。给大家看几个。这是我们首页的会话热力图,它本来是一张记录用户每天使用情况的小图,一格一格的。就在这张图上,我们的设计师同学自己做了一个贪吃蛇游戏出来,是真的能玩能动的贪吃蛇,而且在最新版本里,这个热力图里还能玩俄罗斯方块。你可以趁Agent跑任务的时候玩一玩,或者自己摸鱼的时候玩一玩,还是挺有趣的。
还有Qoder首页的小贴纸,鼠标一停上去,灰色画面"刷"一下变成彩色,鼠标指针也会变成一个小苹果。这个也是我们额外的一些小巧思。以及我们的成就徽章:用户连续使用满7天,或者加入Qoder满一年,这种特殊时刻都会给他下发一个专门的徽章,用户也可以把徽章贴在自己的个人资料里。
这些小东西,说实话,单独拎出来看好像都显得没有必要。不做这些,Qoder照样能用、照样能上线。但正是这些"没必要"的小巧思,让Qoder从一个"能用"的产品,变成一个用户会想多待一会儿的产品。质感从来都不是规划出来的,而是因为有人愿意多做那一步。
统一性与野生感
把前面这些实践放在一起,就是我们希望保留的两样东西:统一性和野生感。统一性比较好理解,我们有共同的架构、协议、项目上下文和验证方式,去确保每个人的成果最后能够接在一起。
野生感不是野路子,也不是说想做什么就做什么。它是说,在各自清晰的共同边界里面,每个人仍然可以主动地发现问题,带入自己的判断,甚至放进一点自己的审美和兴趣。如果只有野生感,最后可能是一堆很有想法、却接不上的东西;如果只有统一性,又可能只剩下标准化的执行,很难长出计划之外的新东西。所以它们不是一对需要互相妥协的矛盾:统一性,把不能乱的地方守住;野生感,让新的价值不断涌现。
简而言之就是一句话,统一性让创造能够接得上,野生感让创造能够长出来。
回到我们最开始谈论的问题。AI Coding首先让我们看到的是速度:一个人可以完成更多的工作,一个小团队也可以更快地把想法变成产品。但继续往前走,我们越来越在意的,不只是AI能写多少代码,而是那些被放大的能力,最后会变成用户手里怎样的真实体验。我们希望它是完整的,不同的模块可以顺畅地工作在一起;我们也希望它是有质感的、有趣的,里面不只有AI生成的代码,还有一群人的共同创造。
这就是我今天分享的Qoder的技术故事。谢谢大家。