《牛万鹏-与开发者同频-百度构建人机协同新范式的实践.pdf》由会员分享,可在线阅读,更多相关《牛万鹏-与开发者同频-百度构建人机协同新范式的实践.pdf(40页珍藏版)》请在三个皮匠报告上搜索。
1、与开发者同频 百度构建人机协同新范式的实践 牛万鹏 百度Comate架构师演讲嘉宾牛万鹏百度Comate架构师百度资深研发工程师,毕业于吉林大学,毕业后入职百度长期负责DevOps工具的孵化和落地,涵盖项目管理、代码管理、流水线、制品库、应用部署、运维管理等平台建设和商业化现负责百度研发智能化,通过构造全新智能编码工具,搭建全新的产品形态,推动百度万人研发范式的变革。目 录CONTENTS1.在AI前夜百度研发现状2.在AI时代智能研发助手3.在AI未来人机协同新范式在AI前夜百度研发现状PART 01业界软件开发模式的发展轨迹软件开发的基本性质沟通密集性协作密集性持续迭代性不可复制性需要每个
2、角色密切沟通,保证理解一致性,降低随机性需要从产品经理到研发、测试、运维等一系列的角色参与代码要被不断组装在一起,不断打补丁,让软件系统能够持续工作软件规模虽然在不断扩大,但并非重复,工程师每天都写不同的代码研发协作的密度增高和迭代周期增长,引起效率降低。瀑布模型敏捷精益DevOps研发效能时期业务复杂度DOS/PCPC(GUI)/客户端-服务器Web/互联网移动/云AI/边缘/量子全部聚焦流程提效 极少关注个人提效百度研效工具的发展轨迹SVNJenkinsiCafeiCodeiPipe时期业务复杂度DOS/PCPC(GUI)/客户端-服务器Web/互联网移动/云AI/边缘/量子iCafeiC
3、odeiPipeiScaniCoviTestiCafeiCodeiPipeiScaniCoviTest工程能力底图价值流、健康度iCafeiCodeiPipeiScaniCoviTest工程能力底图价值流、健康度一站式、云原生 1w+工程师,1k+业务团队,10w+代码库 85%的需求一周交付,50%的研发资源云化 80%的应用从开发到上线全流程在线 每天1w次代码提交 每月1kw次流水线自动化任务流程支撑工具支撑聚焦流程+协作工具面向流程的研发提效窘境n 技术迭代的太快,流程的更新赶不上技术的更新,持续滞后阻碍研发效率提升 流程是是实践后的经验、教训等总结,一定是滞后的 如,针对Prompt
4、、数据集等在工程团队如何管理,目前没有明确的范式n 多数开发者对敏捷、效能、DevOps等不感冒,也不理解其实际意义 面对花样繁多的项目管理流程,多数开发者更想聚焦于研发 过度在团队内推广研发流程,反而引起开发者的抗拒心理,大幅降低开发者的幸福感核心原因在于整个提效的设计不是站在开发者个人,而是站在组织上Github Copilot+ChatGPT的诞生,吹响了开发者个人提效的号角,几乎一夜之间所有组织都开始关注智能研发助手=代码自动补全(Completions)+理解私域知识(RAG)+独立分析需求(Agent)大模型催生了开发者个人提效的银弹开发者的iPhone时刻在AI时代智能研发助手P
5、ART 02Baidu Comate的从无到有0.27%1.82%7.53%15.27%25%27%202223-Q123-Q223-Q323-Q4当前代码成占30%百度内部 Comate 代码生成占比百度全局提效 工程师使用 85%+用户满意度 90%+代码生成占比 30%+采纳率 46%+智能研发助手发展路径012354Human引领AI驱动AI引领无助手代码续写代码生成知识增强代码智能体自适应全自主 单指令交互 基于通用知识 快思考 多轮交互 基于私域+领域知识 慢思考当前节点整体建设思路模型层推理调度+代码生成+代码续写+Embedding+意图识别知识层代码类(代码片段、代码依赖等)
6、+文本类(技术文档、需求文档等)框架层Agent+RAG+P-RAG能力层IDE端(目录区、编辑区、Console区等)能力层问答区编辑区Console区能力层 编辑区代码续写,根据代码上下文自动触发-单行推荐-多行推荐-基于注释推荐-基于上下文依赖推荐1函数头上快捷键,开发者主动触发-函数注释-行间注释-生成单测-代码解释-调优建议-函数拆分2能力层 问答区点击唤起Comate问答区1向Comate提问,咨询任何通用问题、生成通用代码等2通过#命令符唤起知识增强选项,如-基于网络检索,查询最新的技术方案-基于当前代码库,检索代码库内的相关代码-基于知识集,查询团队内的技术方案3能力层 Con
7、sole区在VSCode通过选中错误内容后,右键打开Comate快速修复。1在JetBrains自动捕捉错误,开发者可一键点击修复。2知识层 为什么需要知识增强通用模型存在瓶颈:GitHub采纳率停留在46%,长期没有显著增长。主要在于依靠模型内部压缩的知识(以及少量的Neighborsource)没有办法再给出更符合当前代码库、更符合当前业务逻辑的代码,达到模型瓶颈。人类程序员在开发时也需要掌握额外的知识:编程现场会存在大量私域知识,如本地代码库、业务接口文档等。这些私域知识组成了每个业务/项目/服务的全链路开发指南,当我们对这些知识掌握的越完整、越熟练,在开发新的代码时速度越快,编写的代码
8、质量越高。知识增强是Comate进化成智能体的必要前提:对编程现场的理解是所有编码助手的下一步方向,是能够突破现有瓶颈,大幅提高开发者效率,构造真正的人机协同的必经之路。知识层 与开发者同频业务接口文档本地代码库产品需求文档测试用例文档服务部署文档本地Console信息编程现场存在于开发者脑海之中具象成知识给到编程助手代码类:向量检索、关键词检索、元信息检索文本类:向量检索、关键词检索依靠对开发者编程现场的理解,保持和开发者同频,帮助开发者解决繁琐、重复的问题。对编程现场的理解:是所有编码助手的下一步方向 是从简单续写到复杂生成的必经之路 是能够大幅提高开发者效率,构造真正的人机协同的必经之路
9、知识层 如何完全理解文本业务接口文档产品需求文档测试用例文档文本服务部署文档如果有大量的文档分散在不同的目录中,建议每个层级目录的命名言简意赅,能够充分表达这一层级目录的文档类别。文字描述丰富目录结构清晰文档逻辑清晰文档中尽可能增加详实的文字描述而不仅仅是图片,将会显著提高学习质量。文档内容有层次、语言描述言简意赅无歧义、每个段落有标题等结构,会显著提高检索质量。PaddlePaddle某篇技术说明文档AI阅读文档的逻辑和人一样,文档结构越清晰,AI学习的越好。知识层 人类如何完全理解代码目录层级宏观项目职责技术栈关键业务词汇核心逻辑实体关系启动/构建对外API微观这是一个用来xxxxx的项目
10、,它的使用了xxxx、xxxx等框架,分为xxxx、xxxx等模块。主要逻辑包括xxxx、xxxx、xxxx。对外暴露了xxxx、xxxx等关键API。它使用xxxx方式进行部署,启动入口在xxxx。脑海中直接沉淀出如下总结这个项目中,新增xxx相关的开发任务需要在yyy、zzz等目录下,命名格式是xxxx,如果新增一个xxxx,需要配套生成一个xxxx。如果要调用外部API,可以使用已经封装好的xxxx工具。脑海中间接沉淀出如下总结显性代码知识隐性代码知识知识层 AI如何完全理解代码 遍历本地文件遍历Git LogJava全部基于各语言专家整理的规则池提取代码片段向量化函数调用链分析公共函数
11、签名目录层级树元信息启动信息构建信息配置信息依赖框架语言分布API定义实体关系核心逻辑高频业务关键词README.mdC+Commit Message向量化定时更新手动更新打开新项目时更新Git Commit事件更新项目描述将元信息给到模型生成项目描述显性代码知识知识层 AI如何完全理解代码 隐性代码知识每个代码库独有的开发规则,和开发语言、应用框架强相关,和代码库建库之初定义的规则强相关。每位开发者接手代码库时首先尝试掌握的就是代码开发范式,这决定了新增一个目录、文件、函数等需要放在哪里、如何命名、结构如何定义。什么是代码开发规则代码开发规则有什么用当开发范式可提取、可量化,编码助手在用户新
12、建文件、新增函数时可以预测更大范围的代码,如新建一个Entity文件,同步将Dao、Service、Controller创建。Comate如何利用代码开发规则知识层 AI如何完全理解代码 隐性代码知识一个典型的Spring应用,有bean、entity、po、dao、service等层级关系。EntityBeanControllerServiceAssembleHandlerDaoReposPOUtils1、遍历文件2、依赖解析3、权重计算4、填充节点代码开发规则知识图谱知识层 AI如何完全理解代码 隐性代码知识遍历本地文件开发规则提取定时更新手动更新打开新项目时更新Git Commit事件更
13、新代码文件的命名、函数命名、代码文件所在目录定义都有显著的业务特征+规则特征。表明这个文件要做什么具体的事,如router_api.py中router是业务特征表明要做路由AgentController.java中Agent是业务特征表明要做Agent的API定义表明这个文件的属性,如router_api.py中api是规则特征表明这个属于apiAgentController.java中Controller是规则特征表明要做API框架层 RAG+P-RAG意图识别+RAG=更能激发检索质量意图识别+Query Plan无需检索代码库检索全网检索文档检索元信息获取向量检索规则正则检索规则图谱检索
14、规则代码块向量函数向量文件向量注释向量代码块检索函数检索依赖检索技术栈检索检索规则池动作池默认规则关键词检索多路检索混合重排基于识别的规则组装PromptEB3.5/EB4等一是把问题揉碎,降低问题的难度。二是把思路理清,指明答案的方向。最终,弥补用户原始表达与答案所需知识之间的语义差异。框架层 Agent框架层 Agent模型层PaddlePaddle高性能推理优化多平台支持搞笑模型压缩文心大模型强大的语言理解能力高效的推理生成能力自我学习和进化能力代码大模型套件低延迟的续写模型检索增强问答模型强推理的计划模型代码Embedding模型意图识别模型在AI未来人机协同新范式PART 03如何实
15、现和开发者同频 典型场景当我在某文件编写一段代码时,Comate怎么才能基于对代码库的理解,预测出当前文件不存在且需要导入的文件、类、函数?代码续写当我要求Comate分别解释代码块、函数、文件、目录、代码库时,它怎么才能从业务角度给出解释?如基于调用链分析给出流程图、ER图、出架构图等?代码解释当我希望将整个代码库的Hibernate组件替换成Mybaties组件,期间涉及到实体定义、SQL语句、事务等方方面面的分析,Comate怎么做才能把这件事做好代码生成当我新接手一个代码库,需要了解代码架构、具体的业务逻辑,如何才能给出像Mentor一样的讲解?代码检索如何实现和开发者同频 代码续写正
16、在编辑:WeChatPayController.java提取规则和业务特征:.*Controller.java、WeChatPay寻找具有相似规则特征的文件:ALiPayController.java提取业务特征:ALiPay寻找具有相似业务特征的文件:ALiPayService.java提取规则特征:.*Service.java当我在某文件编写一段代码时,Comate怎么才能基于对代码库的理解,预测出当前文件不存在且需要导入的文件、类、函数?公共函数签名开发规则提取增强续写效果的知识12以 List 为key,检索哪些函数Return了它,得到这些函数的签名以 List 为key,检索哪些函
17、数把它作为入参,得到这些函数的签名组合业务和规则特征:WeChatPayService.java找到以上文件并提取函数签名如何实现和开发者同频 代码解释当我要求Comate分别解释代码块、函数、文件、目录、代码库时,它怎么才能从业务角度给出解释?如基于调用链分析给出流程图、ER图、架构图等?函数调用链增强解释效果的知识项目描述APIAPI类函数解释:类函数解释:基于调用链找到向下找到此函数的调用关系,以及对应的Auth、Interceptor、Filter等持久化类函数解释:持久化类函数解释:基于调用链向上找到此函数的调用关系,以及对应的SQL语句、实体定义等通用函数解释:通用函数解释:同时向
18、上、向下获取N层调用关系直接获取已经初始化好的项目描述,结构如下:直接获取已经初始化好的项目描述,结构如下:这是一个用来xxxxx的项目,它的使用了xxxx、xxxx等框架,分为xxxx、xxxx等模块。主要逻辑包括xxxx、xxxx、xxxx。对外暴露了xxxx、xxxx等关键API。该项目有如下重点业务关键词:xxxxxxxxxxxx如何实现和开发者同频 代码检索代码片段Commit Message增强检索效果的知识元信息当我新接手一个代码库,需要了解代码架构、具体的业务逻辑,如何才能给出像Mentor一样的讲解?意图识别代码架构、框架、技术栈等宏观类问题代码架构、框架、技术栈等宏观类问题
19、,如帮我梳理项目的架构这个项目如何启动启动信息构建信息配置信息依赖框架语言分布API定义实体关系核心逻辑高频业务关键词README.md询问特定业务逻辑询问特定业务逻辑,如支付逻辑是怎么实现的?如果我要删除微信支付的所有逻辑,都需要改哪些地方?项目描述如何实现和开发者同频 代码生成代码片段Commit Message增强生成效果的知识元信息当我希望将整个代码库的Hibernate组件替换成Mybaties组件,期间涉及到实体定义、SQL语句、事务等方方面面的分析,Comate怎么做才能把这件事做好?意图识别+Query Plan【正则检索正则检索】找到代码库使用找到代码库使用Hibernate
20、Hibernate组件的文件组件的文件【向量检索向量检索】找到代码库使用找到代码库使用HibernateHibernate组件的文件组件的文件【元信息获取元信息获取】找到配置找到配置HibernateHibernate依赖的依赖的pompom文件文件【元信息获取元信息获取】找到找到SQLSQL文件文件组装Prompt,给到模型进行代码生成但这远远不够,只靠次知识增强没有办法获取全部知识,对于复杂问题的解决没有办法做到竿影。需要获取哪些知识部分是在在解决问题的过程逐步中分析、明确出来的Agent。人机协同新范式效能提升银弹AI 对效能的提升是替代Task而不是Job!AI 对效能的提升绝不仅限于编码领域!AI 可以赋能整个软件工程!人机协同新范式人机协同宣言繁琐、重复的事情AI来做,创造性的事情人来主导,多使用、勤反馈,实现人机共同成长。用好AI将是工程师的基本功人机协同,共同进化You are in control掌握并善用AI将成为工程师的必备能力,率先用好的组织和个人将建立竞争优势。AI能极大的提升研发效率,但需要人确保方向的正确性,最终为业务结果负责。THANKS