以下是我和阿里另一个项目的负责人探讨的关于 agent 元能力 训练和 编程场景下的各种设想,相当一部分可以作为对 cli云端版后台的多agent架构的建议,来论坛 占个坑。
我理想中的code agent解决方案
讨论通用的元能力的建设太宽泛,我就以编程场景为例阐述我的看法,其他场景可以类比。
理想方案是有一套针对code任务的完整组件配套,包括且不限于 有中间件系统的workflow框架,辅助记忆的框架,ACE总结手册,实现无限上下文的智能上下文压缩组件,高效的网络搜索和爬取mcp,动态维护的个人知识库,有官方维护的专业知识云端库和ACE手册市场,类似谷歌的code wiki。
我认为编程是对数据的流式处理,开发和debug过程就是要紧扣数据流的传递和状态改变,后端尤为明显,前端还要兼顾人类的视觉习惯。
我认为元能力是任务处理的原则和学习新技能的方法论,具体任务的处理依赖的是规则,而规则的上一层是原则,把规则凝练成原则的方法是方法论。当然这种表述不够全面,但大体是这个意思。
大模型的元能力应该以逻辑学为基础,搭配人类预先规定的处理问题基本原则,具备推理/类比/归纳/迭代/衍生等能力,还要引入哲学,指导对复杂问题的深入和多元化思考,在事后总结的任务场景中用得到。
比如编程应该做到 全面 严谨 精准 高效。对code任务类型有直达本质的认识,便于对齐规则和原则, 准确构建项目graph,为code wiki打好基础,而且还要对gprah有分层次显示的能力,后面用到分层处理bug会用到,这样才可以全面了解任务背景及任务的需求和全貌,根据已经学到的规则和原则制定规划,对排查类任务则是能够精准找到bug所在,有了以上的分析基础,才可能做出高效的解决方案。很多问题往往是分析的过程很长,但真正有效的解决方案却很简短甚至看似简单,就像武林高手往往能一招制敌,只有菜鸟才会刚开始就一顿操作猛如虎。
大模型的内置知识库则是要明显区别于现在的案例堆砌,做到重范式学习和衍生能力,重知识迁移能力,轻案例堆砌,再将原则性的知识和推理方式灌输给大模型,让大模型可以通过外部获取的函数库官方文档自行构建代码,毕竟案例是堆不完的,但编程中的各个场景的范式却是相对稳定,至少是增长缓慢,容易更全面的让大模型学习,用这种方式去掉对庞大案例的依赖,从根本上解决大模型动辄300B以上的体量。
网络搜索和爬取mcp,以及个人知识库和ACE操作手册则是对常用场景和个人习惯的补充,有记忆框架的配合,迭代不是问题,不再赘述。官方维护的专业知识库和ACE手册市场则是希望官方把专业云端库的接口开放出来,用户的快速查询下载,ACE市场则是用社区力量共同迭代,两者都是繁荣生态的方式。
还有个核心观点是:处理问题特别是编程类复杂问题,应该按照从大到小,层层递进的层次化处理,才能标本兼治,过程上相当于把发现的问题从大到小各个层面的牵扯依次解决,把bug的影响范围逐渐缩小,最后局限到函数级别后,再改问题函数,而不是发现bug就一顿在bug上一顿处理,甚至为了局部bug把上一层的构造都改了,这样要么临时有用,后续麻烦,要么越改越乱,还不如重写局部函数来得方便。 Spec模式的项目开发就是层次化解决编程问题的典型例子,条理好用,排查处理bug也应该如此处理。
关于无限上下文我认为可行的点在于如果把层次化处理融入agent的工作流中,配合有分层graph能力的agent,可以把当前需要解决的问题的体量和难度约束在可控的范围内,通过复杂问题的层层拆解和tolist 的辅助,实现使用有上限的上下文窗口滚动处理工作流的方式解决问题。其实graph层次化本身也是拆解问题,化繁为简的过程,是agent解决方案中核心的能力。
在工程实现上,最近claude code 刚推出的 Tool Search Tool(按需加载) Programmatic Tool Calling(代码编排) Tool Use Examples(示例教学) 确实挺有用的,推荐参照。我自己设计的工作流项目中,倒是有一定程度的硬编码来搭配workflow,确实可以减少很多不必须用到 llm 的地方,节省tokens消耗。
今天看到deepseek math V2,其中 元验证器用来教学监督,验证器作为老师,生成器作为学生的套娃式结构 还挺像我上面说的 原则和方法论、规则和范式、具体案例 的层次,根据解读,元验证器不需要监督训练是因为本身工作量低,很容易就收敛,变数很少,几轮迭代就比较稳定,这个特点跟原则和方法论也是很像,从类比的角度考虑,或许可以借鉴deepseek 训练 math V2 的流程设计这套agent解决方案的部分环节。
其实从流程上说,这套agent解决方案就是利用RM-Gallery的框架,在原则和范式有人为规定和输入的前提下,把具体案例提炼出规则后,再把方法论这一环给补上,作为原则和规则的桥梁,就是你说的“让agent学习如何学习”,这样整个链条就理顺了,把模型的运行方式转变为层次分明的以既定原则为根基,运用方法论和内置范式加外置资料库进行的推理,告别对大参数模型的依赖。
还有个麻烦的地方就是迭代环境的建设,后端编程有代码解释器可以准确反馈,但前端就很麻烦,因为前端是给人看的,必须生成图片让人参与评价,Trae等IDE也是专门建立显示前端并能鼠标选择ui元素来让开发者准确描述需求和想法,以此来快速构建前端。我在想如果开发mcp来显示网页效果以及pyqt6这种构建出的ui效果,最好还能支持按钮的交互,这样能排查出的问题更多。通过VL模型的处理,结合外置视觉模板,确保样式和基本交互功能上没有大的纰漏。毕竟无论国内国外模型,在前端开发上,一旦进行深度开发,各种低级错误都会出现,那我们先尽量减轻这些低级有十分消耗精力的bug对人的困扰,在自动迭代中就快速识别并解决。至于前端代码的质量问题则通过层次化debug 的方式解决,解决不了的提交官方云端库并查询方案。这样的系统既能提供完整的解决方案,又能增加用户对云端的粘性,把官方的专业能力和社区的开源力量结合起来作为使用过程中的报障,应该会有良好的效果。
关于类比和知识迁移能力,我觉得也要单独训练。我理解两个事物之所以能类比,是可以映射到共同的底层数学逻辑上,类比能力的训练可以让大模型在处理陌生问题时有更多的创意性思路,知识迁移也差不多,都是让大模型有触类旁通的能力,这种能力的训练能让对方法论和规则的掌握更加纯熟,处理陌生问题的能力更强。
关于衍生能力则是对类比能力的补充,通过类比通过新思路,衍生则是根据一个新思路创造多个解决方案,算是对新思路的充分利用,这是我在设计量化交易策略中使用的方法。具体方式和尺度需要根据任务场景来处理,本质是发散性思维的训练。
只是比较惭愧,在类比和衍生两个能力上我还没有太明确的训练思路,只能是提出这个想法。
对了,还有因为我把编程看做数据流的处理过程,所以在构建项目时会要求对每个函数以及关键变量print状态,当作项目日志,这里要让大模型剔除频繁print的和雷同以及低价值日志,这样一旦哪里出现问题直接快速定位,当项目的模块确定调试好了再关闭该模块的日志输出直到所有调试日志全部关闭。
测试项目时也是要求大模型直接让项目整个运转起来,进行原生测试,因为发现通过写测试用例,也会遗漏,不如让项目自己动起来,有问题就一定会暴露,不容易遗漏和返工。
还有就是项目运转需要配合一些监督agent监察处理方式是否合理,记忆agent及时保存项目运转的过程和日志,以便时候深度分析啥的,反正就和打仗差不多,有冲锋的,但后勤的更多且细碎,我甚至考虑过前面的写代码,后面就同时跟着debug的agent,这样等代码写好了,debug也差不多了,不过这需要事前的spec做得精细和确定才行,也的确没有能力完全验证这种猜想。