您的浏览器禁用了JavaScript(一种计算机语言,用以实现您与网页的交互),请解除该禁用,或者联系我们。[2024AI研发数字峰会AiDD北京站]:牛万鹏-与开发者同频-百度构建人机协同新范式的实践 - 发现报告

牛万鹏-与开发者同频-百度构建人机协同新范式的实践

牛万鹏-与开发者同频-百度构建人机协同新范式的实践

与开发者同频百度构建人机协同新范式的实践 牛万鹏百度Comate架构师 演讲嘉宾 牛万鹏 百度Comate架构师 百度资深研发工程师,毕业于吉林大学,毕业后入职百度 长期负责DevOps工具的孵化和落地,涵盖项目管理、代码管理、流水线、制品库、应用部署、运维管理等平台建设和商业化 现负责百度研发智能化,通过构造全新智能编码工具,搭建全新的产品形态,推动百度万人研发范式的变革。 目录 CONTENTS 1在AI前夜百度研发现状 2在AI时代智能研发助手 3在AI未来人机协同新范式 PART01 在AI前夜百度研发现状 软件开发的基本性质 沟通密集性 协作密集性 持续迭代性 不可复制性 需要每个角色密切沟通,保证理解一致性,降低随机性 需要从产品经理到研发、测试、运维等一系列的角色参与 代码要被不断组装在一起,不断 打补丁,让软件系统能够持续工作 软件规模虽然在不断扩大,但并非重复,工程师每天都写不同的代码 研发协作的密度增高和迭代周期增长,引起效率降低。 瀑布模型精益敏捷DevOps研发效能 业务复杂度 极少关注个人提效 全部聚焦流程提效 DOSPCPC(GUI) 客户端服务器 Web互联网移动云AI边缘量子时期 流程支撑 工具支撑 SVN Jenkins iCafe iCode iPipe iCafe iCode iPipe iScan iCov iTest 1w工程师,1k业务团队,10w代码库 85的需求一周交付,50的研发资源云化 80的应用从开发到上线全流程在线 每天1w次代码提交 每月1kw次流水线自动化任务 iCafe iCode iPipe iScan iCov iTest 工程能力底图 价值流、健康度 iCafe iCode iPipe iScan iCov iTest 工程能力底图 价值流、健康度 一站式、云原生 聚焦流程协作工具 业务复杂度 DOSPCPC(GUI) 客户端服务器 Web互联网移动云AI边缘量子时期 多数开发者对敏捷、效能、DevOps等不感冒,也不理解其实际意义 面对花样繁多的项目管理流程,多数开发者更想聚焦于研发 过度在团队内推广研发流程,反而引起开发者的抗拒心理,大幅降低开发者的幸福感 核心原因在于整个提效的设计不是站在开发者个人,而是站在组织上 技术迭代的太快,流程的更新赶不上技术的更新,持续滞后阻碍研发效率提升 流程是是实践后的经验、教训等总结,一定是滞后的 如,针对Prompt、数据集等在工程团队如何管理,目前没有明确的范式 智能研发助手代码自动补全(Completions)理解私域知识(RAG)独立分析需求(Agent) 大模型催生了开发者个人提效的银弹 GithubCopilotChatGPT的诞生,吹响了开发者个人提效的号角,几乎一夜之间所有组织都开始关注 开发者的iPhone时刻 PART02 在AI时代智能研发助手 30 百度内部Comate代码生成占比百度全局提效 工程师使用 85 用户满意度 90 代码生成占比30 采纳率 46 27 25 1527 753 182 027 202223Q123Q223Q323Q4当前 代码成占 Human引领 单指令交互 基于通用知识 0 1 2 3 4 5 快思考 AI驱动 多轮交互 基于私域领域知识 慢思考 AI引领 无助手代码续写代码生成知识增强代码智能体自适应全自主 当前节点 能力层 IDE端(目录区、编辑区、Console区等) 知识层 代码类(代码片段、代码依赖等)文本类(技术文档、需求文档等) 框架层 AgentRAGPRAG 模型层 推理调度代码生成代码续写Embedding意图识别 问答区 编辑区 Console区 1 代码续写,根据代码上下文自动触发 单行推荐 多行推荐 基于注释推荐 基于上下文依赖推荐 2 函数头上快捷键,开发者主动触发 函数注释 行间注释 生成单测 代码解释 调优建议 函数拆分 1 点击唤起Comate问答区 3 通过命令符唤起知识增强选项,如 基于网络检索,查询最新的技术方案 基于当前代码库,检索代码库内的相关代码 基于知识集,查询团队内的技术方案 2 向Comate提问,咨询任何通用问题、生成通用代码等 1 在VSCode通过选中错误内容后,右键打开Comate快速修复。 2 在JetBrains自动捕捉错误,开发者可一键点击修复。 通用模型存在瓶颈:GitHub采纳率停留在46,长期没有显著增长。主要在于依靠模型内部压缩的知识(以及少量的Neighborsource)没有 办法再给出更符合当前代码库、更符合当前业务逻辑的代码,达到模型瓶颈。 人类程序员在开发时也需要掌握额外的知识:编程现场会存在大量私域知识,如本地代码库、业务接口文档等。这些私域知识组成了每个业务项目服务的全链路开发指南,当我们对这些知识掌握的越完整、越熟练,在开发新的代码时速度越快,编写的代码质量越高。 知识增强是Comate进化成智能体的必要前提:对编程现场的理解是所有编码助手的下一步方向,是能够突破现有瓶颈,大幅提高开发者效率,构造真正的人机协同的必经之路。 编程现场 代码类:向量检索、关键词检索、元信息检索 存在于开发者脑海之中 具象成知识给到编程助手 文本类:向量检索、关键词检索 服务部署文档 测试用例文档 产品需求文档 业务接口文档 本地Console信息 本地代码库 依靠对开发者编程现场的理解,保持和开发者同频,帮助开发者解决繁琐、重复的问题。对编程现场的理解: 是所有编码助手的下一步方向 是从简单续写到复杂生成的必经之路 是能够大幅提高开发者效率,构造真正的人机协同的必经之路 文本 文档逻辑清晰 文档内容有层次、语言描述言简意赅无歧义、每个段落有标题等结构,会显著提高检索质量。 文字描述丰富 文档中尽可能增加详实的文字描述而不仅仅是图片,将会显著提高学习质量。 AI阅读文档的逻辑和人一样,文档结构越清晰,AI学习的越好。 业务接口文档产品需求文档测试用例文档服务部署文档 PaddlePaddle某篇技术说明文档 目录结构清晰 如果有大量的文档分散在不同的目录中,建议每个层级目录的命名言简意赅,能够充分表达这一层级目录的文档类别。 微观 宏观 对外API 启动构建 实体关系 核心逻辑 关键业务 词汇 技术栈 目录层级 项目职责 脑海中间接沉淀出如下总结 这个项目中,新增xxx相关的开发任务需要在yyy、zzz等目录下,命名格式是xxxx,如果新增一个xxxx,需要配套生成一个xxxx。如果要调用外部API,可以使用已经封装好的xxxx工具。 这是一个用来xxxxx的项目,它的使用了xxxx、xxxx等框架,分为xxxx、xxxx等模块。主要逻辑包括xxxx、xxxx、xxxx。对外暴露了xxxx、xxxx等关键API。它使用xxxx方式进行部署,启动入口在xxxx。 脑海中直接沉淀出如下总结 显性代码知识 隐性代码知识 定时更新 手动更新 打开新项目时更新 GitCommit事件更新 遍历本地文件 函数调用链分析 代码片段向量化 公共函数签名 目录层级树 将元信息给到模型生成项目描述 项目描述 元信息 启动信息 实体关系 构建信息 核心逻辑 配置信息 高频业务关键词 依赖框架 语言分布 API定义 READMEmd 全部基于各语言专家整理的规则池提取 Java C CommitMessage向量 化 遍历GitLog 代码开发规则 什么是代码开发规则 每个代码库独有的开发规则,和开发语言、应用框架强相关,和代码库建库之初定义的规则强相关。 代码开发规则有什么用 每位开发者接手代码库时首先尝试掌握的就是代码开发范式,这决定了新增一个目录、文件、函数等需要放在哪里、如何命名、结构如何定义。 Comate如何利用 当开发范式可提取、可量化,编码助手在用户新建文件、新增函数时可以预测更大范围的代码,如新建一个Entity文件,同步将Dao、Service、Controller创建。 Repos Dao PO Entity Utils Controller Bean Handler Assemble Service 代码开发规则知识图谱 1、遍历文件 2、依赖解析 3、权重计算 4、填充节点 一个典型的Spring应用,有bean、entity、po、dao、service等层级关系。 遍历本地文件开发规则提取 代码文件的命名、函数命名、代码文件所在目录定义都有显著的 业务特征规则特征。 表明这个文件的属性,如 routerapipy中api是规则特征表明这个属于api AgentControllerjava中Controller是规则特征表明要做API 表明这个文件要做什么具体的事,如 routerapipy中router是业务特征表明要做路由 AgentControllerjava中Agent是业务特征表明要做Agent的API定义 定时更新 手动更新 打开新项目时更新 GitCommit事件更新 一是把问题揉碎,降低问题的难度。二是把思路理清,指明答案的方向。最终,弥补用户原始表达与答案所需知识之间的语义差异。 意图识别RAG更能激发检索质量 框架层RAGPRAG 意图识别QueryPlan 动作池 无需检索 元信息获取 文档检索 全网检索 代码库检索 检索规则池 向量检索规则 正则检索规则 图谱检索规则 默认规则 技术栈检索 依赖检索 函数检索 代码块检索 注释向量 文件向量 函数向量 代码块向量 关键词检索 多路检索 混合重排 基于识别的规则组装PromptEB35EB4等 PaddlePaddle 高性能推理优化 多平台支持 搞笑模型压缩 文心大模型代码大模型套件 强大的语言理解能力 高效的推理生成能力 自我学习和进化能力 低延迟的续写模型 检索增强问答模型 强推理的计划模型 代码Embedding模型 意图识别模型 PART03 在AI未来人机协同新范式 当我新接手一个代码库,需要了解代码架构、具体的业务逻辑,如何才能给出像Mentor一样的讲解? 当我在某文件编写一段代码时,Comate怎么才能基于对代码库的理解,预测出当前文件不存在且需要导入的文件、类、函数? 代码续写 代码解释 当我要求Comate分别解释代码块、函数、文件、目录、代码库时,它怎么才能从业务角度给出解释?如基于调用链分析给出流程图、ER图、出架构图等? 代码检索 代码生成 当我希望将整个代码库的Hibernate组件替换成Mybaties组件,期间涉及到实体定义、SQL语句、事务等方方面面的分析,Comate怎么做才能把这件事做好 当我在某文件编写一段代码时,Comate怎么才能基于对代码库的理解,预测出当前文件不存在且需要导入的文件、类、函数? 1 增强续写效果的知识 2 组合业务和规则特征:WeChatPayServicejava 找到以上文件并提取函数签名 寻找具有相似业务特征的文件:ALiPayServicejava 提取规则特征:Servicejava 开发规则提取 公共函数签名 寻找具有相似规则特征的文件:ALiPayControllerjava 提取业务特征:ALiPay 正在编辑:WeChatPayControllerjava 提取规则和业务特征:Controllerjava、WeChatPay 以ListWebSearchResult为key,检索哪些函数Return了它,得到这些函数的签名 以ListWebSearchResult为key,检索哪些函数把它作为入参,得到这些函数的签名 当我要求Comate分别解释代码块、函数、文件、目录、代码库时,它怎么才能从业务角度给出解释?如基于调用链分析给出流程图、ER图、架构图等? 增强解释效果的知识 项