中国DevOps社区峰会2024·上海 解决企业个性化代码生成准确率的核心实践 徐磊英捷创软首席架构师 公众号:数字共生 与数字世界共生进化 徐磊 oAISE首架构师/产品经理 o微软最有价值专家MVP,微软区域技术总监RegionalDirector oGitHubStar/GitHubCopilot中国区授权服务资深顾问 o开放原子开源项目SmartIDE创始人/核心贡献者 o华为云MVP o资深软件工程/敏捷/精益/DevOps专家,EXIN认证DevOpsMaster/Professional/认证讲师 o书籍作者和译者《专业SCRUM基于AzureDevOps的敏捷实践》,《云原生应用开发实践》,《基础设施即代码-模式与实践》 公众号:DevOps 企业数字化转型实践 -AISE方法论提供体系化理论支撑 -AISE产品组合提供最佳实践落地的平台和工具 -微软AzureOpenAI完整支持 -GithHubCopilot扩展支持 -AISE已经完整适配国产NPU、通用硬件、操作系统和中间件 -华为晟腾910/310提供端到端性能和优化 -推理服务全栈支持:TGI、VLLM、 MindIE(华为) -DeepSeekAPI完整支持 -体系化实施、培训和咨询服务,为企业落地AI提供端到端保驾护航 •2023.6项目启动 •2023.8.9完成AISEv0.3版本内部部署 • 2023.9 完成AISEv0.4版本内部部署 • 2023.10 月底推广到个人银行事业部中国区3500人使用, • 2023.10 完成模型访问安全性提升和多实例负载均衡改造 • 2023.11 效能仪表盘上线、提供代码生成和接受率指标 • 2023.12 提示词库v2(多模型混合调度)和RAG能力上线 •2023.8.20全球CIO访华期间完成产品演示,受到认可,准许推广 案例:博时基金 -定制版插件 -最早适配910B算力 -K8s集群部署 -协助推广,培训 -内部运营 目录 1 2 代码生成中的提示工程原理 企业真的需要私有化代码训练吗? 3面向开发人员的提示工程技巧 4从智能副驾到智能体–代码生成技术路线 5Q&A FIM提示词格式 -前文 -后文 关键元素: -当前文件名和完整相对路径 -相关文件名和完整相对路径、相关文件中的代码片段 -当前文件内容 -光标前的内容 -光标后的内容 PROMPT-PREFIX Path: //src/main/java/org/example/corebanking/BankAccount.java\r\n //Comparethissnippetfrom src/main/java/org/example/corebanking/BankAccountController.java:\r\n//packageorg.example.corebanking;\r\n//\r\n//importorg.springframework.web.bind.annotation.RestController;\r\n//importjava.util.HashMap;\r\n//importjava.util.Map;\r\n// \r\n//@RestController\r\n//publicclassBankAccountController [\r\n//\r\n//]\r\n//\r\npackageorg.example.corebanking;\n\npublicclassBankAccount [\nprivateStringaccountNumber;\nprivateString GitHubCopiolt源码浏览器(反编译版本–仅供学习研究) https://thakkarparth007.github.io/copilot-explorer/posts/copilot-internals.html 代码补全提示词工程全链路 上下文捕捉阶段 补全逻辑处理阶段 IDE环境LLM请求阶段 为了避免频繁想后台发送请求,使用了防抖函数进行请求的时延处理。避免频繁的向模型发送请求,提升客户端体验 时延处理 IDE环境属性 前文 上下文生成器 根据特定的算法,对大语言模型的输�结果进行过滤与截取,SSE流式处理优化 SSE处理 文字提示 •Codinglanguage 使用缓存技术,避免了多余、重复请求,提升了代码补全的效率。降低了token的成本 多级缓存 遥测处理 模型参数调优 •Openfiles 通过代码补全服务端为客户端提供用户登录、授权、行为分析、统计等能力插件使用人数、代码补全行数、代码补全方法数、编码总时⻓,补全占比等数据进行统计 根据不同模型进行模型参数调优,提高模型的响应速度、以及代码补全的质量。 •Referencedfiles •Cursorlocation •Scoping •Cache 客户端体验处理 代码提示词整理 为了避免频繁的给用户提供无效的补全,补全插件会记录之前没有采纳的结果,同时计算在当前上下文代码补全内容被采纳的可能性,然后决定补全内容是否展示给客户端用户 后文 根据当前鼠标光标的代码上下文位置, 以及IDE里打开的其他代码文件作为辅助参数,再通过特定的算法(该算法决定了Prompt的内容,以及代码补全的质量),对Prompt的内容进行整理、裁剪 目录 1 2 代码生成中的提示工程原理 企业真的需要私有化代码训练吗? 3面向开发人员的提示工程技巧 4从智能副驾到智能体–代码生成技术路线 5Q&A //SE4AI//企业进行模型训练的6个可行性前提 案例:微软O产品团队基于GPT3.5模型微调支持个性化代码生成 扫码阅读详细分析 团队规模巨大:即便只有几个百分点的准确度提升,放大到几千人规模的开发团队上,产生的效能提升和节省的成本/资源也是非常巨大的。 单一代码库:几千人规模的O产品开发团队全部都在一种开发语言和非常类似的代码库上进行工作,因为任何的模型只要进行了再次训练,就只能针对某一种开发语言提供服务,再次训练虽然会增强模型在O产品代码库上的能力,同时也会降低这个模型实例对其他编程语言的处理性能。这一点上,O产品团队符合要求。 代码足够特殊:特殊到GPT3.5Tubro模型在训练的时候完全没有见过类似的代码。基于前面分析的,虽然是C/C++语言,但是因为语言本身的高度灵活性和这个单一产品本身的规模,其代码库中代码是GPT完全没有见过的。 代码规模巨大:要通过训练对基座模型产生影响,至少需要几百万行规模的高质量单一语言代码。面对一个几十/上百亿参数量的模型,如果训练数据不够,则不足以影响模型的行为。即便采用非常高效的微调方式,也需要原有数据的1%左右规模的数据才能发挥作用。 容忍训练失败:即使在类似GPT这样高质量的模型上进行再次训练并且由非常有经验的工程师来操作,如果参数控制不到位也容易�现失败的情况。加上每次训练所需要的算力和时间消耗,这是一个非常高风险的投入。 足够的不可变基础代码:模型训练会让模型产生非常强的偏好,要修改这个偏好就必须要重新训练,因此用来训练的代码必须是那些在很⻓时间内 (至少几年)中不会发生变化的代码。如果私有代码组件已经发生了改变,而模型还在一直生成老的代码,反而会对工程师的工作效率产生负面影响。O产品因为有大量自行研发的可重用的基础组件代码,也符合要求。 //SE4AI//大模型应用工程能力建设之1-2-3 使用工程化方法加速大模型应用的迭代和交付频率,提升性能,质量和用户体验 1个目标 从应用场景出发,使用客观可度量的验证标准,确保应用场景的性能,质量和用户体验。 2个维度 •上下文优化:为模型补充数据 和知识 •行为优化:为模型提供更多行为示例 3个方法 •提示词工程:经济、高效的应用优化路径;快速验证场景可行性,提供初期应用原型验证 •RAG:提高模型对私域数据的额认知能力。 •模型微调:提高模型响应的规范性和标准化,提供可靠的应 用输出性能。 上下文优化 为模型补充知识和数据 应用场景 RAG 检索增强式内容生成 更多知识和数 据 验证 提示词工程 验证 验证 更多行为示 例 RAG+模型微调 验证 模型微调 应用场景 验证 模型应用验证 性能 质量 用户体验 需求行为优化让模型按需要 方式做事 //SE4AI//提示工程、RAG和微调–如何选择 提示工程可以同时解决知识和行为的问题,但是会受限于模型数据窗口大小并引发响应缓慢 RAG能解决知识补充问题但是不擅⻓改变模型行为 微调可以改变模型行为但是不适合为模型补充知识扫码阅读详细分析 上下文优化 这个纬度主要关注私域数据,是让模型知道它所不知道的事情,包括:模型训练中从未见过的数据,比如内部代码、文档、规范、策略等。这个维度主要解决模型输�内容上的相关性。 RAG 检索增强式内容生成验证 RAG+模型微调 起点提示工程验证 上下文+行为优化 可以同时为模型补充上下文(上下文优化)和优化模型的行为(行为优化)。因此提示词工程可以同时在以上2个维度上帮助我们提 行为优化 模型微调验证 升模型的性能、质量和用户体验,让我们可 以更快达到目标。 这个维度主要关注模型的行为,是教会模型去按照我们希望方式做事,包括:输�内容的格式、语气、偏好;甚至生成固定格式的请求以便调用其他服务。这个维度主要解决模型输�形式上的稳定性。 //SE4AI//大模型应用的持续交付 建立系统化的大模型应用改进路径,用工程化方法提升内容相关性和输出稳定性 应用版本对齐和控制 持续推进自动化和IaC CI/CD -构建打包 -应用验证 -应用部署 -用例执行 模型行为验证客户被拆解 重点关注数据格式和形式化问题 单元测试 验证方法 -人工验证 -模型验证Ragas/DeepEval -A/B测试 提示工程 提示词更新 DevOps RAG 切片/召回/重排/提示 词 模型微调 训练数据更新 流水线 大模型应用 V1.X 应用迭代/验证 数据再合成和整理 LLMOps 流水线 日志和监控 LLM-模型蒸馏/数据合成 训练任务 -临时作业:验证新版工具链可用性 -每日作业:验证数据训练有效性 应用特性 API,UI/UX业务逻辑 -正式作业:生产新版本模型 采用excel格式 同时支持自动和人工验 证 以及人工/自动比对 记录每一次模型请求和模型响应人工验证仍然是最可靠的验证方式重点关注内容相关性问题 数据和测试驱动的应用迭代InnerCycle -记录模型请求和响应 -自动化验证 以天为单位建立大模型应用的迭代周期 数字化是智能化的基础设施 没有完善的DevOps工具和实践体系 AI赋能软件研发提效只能是空中楼阁 目录 1 2 代码生成中的提示工程原理 企业真的需要私有化代码训练吗? 3面向开发人员的提示工程技巧 4从智能副驾到智能体–代码生成技术路线 5Q&A 提示工程核心原则–4S 提示工程的目标是:制作清晰的指令,以指导AI系统根据项目的特定需求生成符合上下文的代码。确保代码在 语法、功能和上下文方面都正确。 高效提示词=单一具体的意图+足够的上下文 越短越好(不要过渡词、不要连接词、不需要客套、不需要解释),直接表达意图 Single(单一)始终将提示重点放在单个明确的任务或问题上。这种清晰度对于获得准确有用的答复至关重要。 遵顼提示工程的4S原则构建自己的提示词 Specific(具体)确保你的指令明确且详细。越是具体的提示词越会获得更适用和精确的代码建议。 Short(简短)在具体的同时,请保持提示简明扼要。这种平衡既能确保清晰度,又不会使AI负担过重或使交互复杂化。 Surround(有上下文)利用描述性文件名并使相关文件保持打开状态。这为AI提供了丰富的上下文,从而产生更有针对性的代码建议。 用户需要了解