豆包 MarsCode 落地编程助手场景的探索实践

文摘   2024-11-29 13:00   北京  

导读 本文将分享豆包 MarsCode 编程助手的落地实践。

主要内容包括以下几大部分:

1. 豆包 MarsCode 编程助手起源

2. 豆包 MarsCode 的现状与发展

3. 未来展望

4. 总结

5. 问答环节

分享嘉宾|李文超 字节跳动 开发工具技术专家

编辑整理|王红雨

内容校对|李瑶

出品社区|DataFun


01

豆包 MarsCode 编程助手起源

1. IDE 智能化探索

早期阶段,IDE 智能化萌芽于静态代码分析,基于语法与结构提供预测性建议,初步提升了开发效率。随着 AI 技术的逐步成熟,引入了 Machine Learning 与 Deep Learning,使辅助功能显著增强,如智能代码推荐与优化。

近年,大模型的火热催生了 AI 助手深度嵌入编程流程,如智能代码生成与调试等,助力效率飞跃。

AI 编程助手显著提升了编码速度,使开发者能够更专注于业务逻辑,摆脱了繁琐的重复任务,同时降低了语言与框架的学习成本,赋能普通程序员成为全能高手,从而适应多元化项目需求。

2. 开发者对 AI Coding 的诉求

根据 Stack Overflow 调研,开发者亟需编程助手支持代码编写、调试与文档注释,覆盖全流程开发周期。

开发者对 AI Coding 最关心的功能聚焦于:

  • 代码生成:自动化补全、模板填充,大幅提升生产率。

  • 理解与解读:即时解析代码含义,助于快速定位与修正问题。

  • 自动修复:智能识别并解决 bug,如 Auto Debug,Link Fix 等功能,减轻调试负担。

3. 豆包 MarsCode 进化

自 2022 年起,豆包 MarsCode 开启了代码补全领域的探索,自主研发 LLM 评测系统,超越离线评测局限,构建了全面工程链路与在线评估平台,加速策略与模型验证,直面用户真实体验。

初始阶段虽聚焦于补全产品,但单一工具无法满足多样编码情境,因此引入了对话式编程助手后,拓展服务范围。近期则瞄准高阶自动化,推出了代码补全 Pro,预知用户意图,即时推送代码建议,实现高效编程。

豆包 MarsCode 始终以用户为中心,不断迭代,旨在塑造无缝衔接的开发流程,助力每位开发者提升效率与创作自由。

02

豆包 MarsCode 的现状与发展

接下来将围绕代码补全和代码补全 Pro 两个方面展开介绍豆包 MarsCode 的现状与发展。

1. 代码补全

代码补全是 AI 辅助编程的关键组件,要求模型深刻理解现有代码及其工程背景,以精准预测用户意图,实现个性化推荐。

传统方法借助下拉菜单供用户挑选代码选项。近期微软引领变革,引入了“幽灵文本”(Ghost Text)概念——编辑器内即时展示推荐,只需 Tab 键即可确认,极大提升了开发效率。该方式通过即时反馈,实现了实时编码协助,尤其适用于多行补全,彰显了性能优势。

实现这一功能的核心在于高性能模型快速准确推理,捕捉细微编码语境,精准匹配开发者需求,颠覆常规,推动编程效率飞跃。同时,理解代码上下文,准确预测续写字符,增强用户体验。

(1)工程

Prompt 工程的核心目标是:精确定位开发者意图,提供精准代码建议,增进用户体验。

整体流程如下图所示。

IDE 捕获代码属性(如语言、文件信息),形成完整的 prompt,上下文整合后传递给模型作补全依据。模型接收 prompt,进行推理,并反馈结果,实现代码补全。此外还需要反复迭代,优化输出结果,提升准确度与效率。

上下文信息对推理性能至关重要,因此我们探索了一套基于用户编码行为的优化策略。用户编写代码时,要调用函数,经常需要打开函数文件查看详细定义和注释,打开文件的动作与当前编码的相关性是比较高的,因此我们对打开文件的上下文进行收集,用于 prompt 构造。另外,编辑器中的历史内容也会作为上下文给到模型。

因为 prompt 的长度是有限的,我们需要对上下文进行排序和裁剪,还需要对低质量的 Prompt 进行过滤和完善,再提供给大模型进行推理,模型给出结果后,需要过滤掉重复和不正确的内容,以及敏感词,最终给出补全提示。

(2)科学的评测体系

在优化和迭代之外,还需要一套指标体系来进行科学评测。早期我们使用采纳率这一指标进行评测,即采纳次数/推荐次数。采纳率在一定程度上可以体现模型推荐的质量,但只关注采纳率很容易被误导,比如有些场景通过减少推荐来提升采纳率,显然并不能真实反应推荐效果。另外,根据采纳率,也不容易拆解分析,不利于归纳出链路优化路径。

为此引入了 CPO 这一更为科学的综合性指标。

CPO 定义:综合衡量每次触发补全机会给予用户平均字符数。

公式解读:尝试率×反馈率×采纳率×每次采纳平均token 数×token 平均字符长度。

  • 尝试率:每当用户在编辑器中进行操作,比如输入新字符或删除一些代码时,都是 AI 给出补全建议的机会。尝试率指标反映了 AI 实际为用户提供建议的频率。AI 不进行尝试可能是由于延迟(如 Debounce)或需要根据上下文情况来决定是否给出补全建议。

    例如,用户敲击了 10 次按键,只有 6 次触发了请求,那么尝试率就是 6/10。

  • 反馈率:AI 在给出补全建议时是存在延迟的,包括上下文检索到网络开销,再到实际模型推理,都会引入延迟。如果延迟太高,开发人员将继续在编辑器中执行新的操作,触发新的推荐机会,并使现有推荐机会变得无意义。此外,在推荐完成后,工具可能因各种原因决定不向开发人员显示建议,比如置信度不够高、触发了过滤器等。反馈率代表了有多少比例的建议最终被传递给开发人员以获得人类反馈。

    例如,用户触发了 6 次补全请求,最后只有 3 次被展示,那么反馈率就是 3/6。

  • 低值预警:尝试率和反馈率降低,会使用户体验下降,反馈缺失,需审视链路延迟与策略合理性。

  • 采纳率:反映了展示出的建议中有多少被开发者采纳。

  • 每次采纳平均 token 数:在其它条件相同的情况下,较长和较短的代码推荐所带来的价值有很大差异。大模型以 token 的形式处理输入,并生成输出,这些 token 通常是一小段字符,因此每个被采纳建议中平均 token 数反映了每条被采纳建议所传递出的实际价值。

  • Token 平均字符数:开发人员看到的是字符而不是 token,不同大语言模型可以有不同的分词器,因此,如果一个大模型的每个 token 生成了更多字符,实际上它会写出更多代码,而每个 token 的平均字符数正体现了这一点。

有了这些指标,还需要一个 A/B 测试系统,快速验证和迭代模型、prompt 策略。首先,要进行离线评测,验证模型和 prompt 工程的离线效果。但仅有离线评测难以准确判断用户体验和整体性能。因此还需要一套 A/B 系统,观测线上核心指标表现。

2. 代码补全 Pro

代码补全适用于编写全新代码的场景,而研发中还会面临修改已有代码的挑战。当前技术趋势为,在模型训练语料中加入带有时间序列的操作,以强化理解逻辑顺序。

代码补全 Pro,旨在于编程助手场景中,准确识别用户意图,预测下一次光标位置,下一次行动是新增、编辑还是替换操作,以及下一次需要编辑的内容。

(1)概述

例如,打印日志的场景,开发者已实现一个 log 函数,并在 do_something 和 do_something_else 两个函数中调用。

我们为 log 函数增加 sourceMethod 和 level 两个参数,用于打印日志触发时所在的方法及日志级别。这时开发者需要同时修改 do_something和 do_something_else 函数。智能解决方案为,由 AI 识别需求,自动完成参数添加,加速了编码进程。

(2)数据构建

在 Git 仓库中蕴藏着海量用户编辑行为数据,可用于模型训练。但这些数据中也存在很多噪音,需要构建一系列的启发式规则,用于提取有关联的编辑信息。利用 CT 与 SFT 格式,使模型精准理解数据,优化推理与训练效果。

03

未来展望

1. 编程助手业界趋势观察

编程助手领域发展非常迅速,模型方面,指令追随和语义理解能力更强,模型具备代码编辑能力,并支持更长的上下文,能够达到百 K 甚至 M 级别。例如,要将中文转换为 Unicode 编码,过去可能只是给出冗长的代码解释,而现在可以直接给出 Unicode 编码。

产品方面,IDE 原有交互与 AI 深度集成,比如在编辑器中支持输入自然语言生成代码。并且具有更强的代码编辑能力,支持更长、更多代码片段的修改和应用。

未来 AI 编程助手将以更精准的理解力与执行力,变革软件开发领域,促使编程更加顺畅与高效。随着模型持续优化,技术壁垒进一步降低,将助力程序员群体创造力爆发。

2. 产品形态展望

(1)NL2Code 能力与编辑器深度集成

当前编程助手已具备 Inline Chat 能力,用户可以通过快捷键唤起一个输入框,在输入框中输入一些自然语言,即可让模型来生成相应代码。

JetBrains 支持直接在编辑器中通过自然语言生成代码。而 VSCode 也通过 Inline Chat 支持了 NL2Code 的能力。

(2)Sketch then Generate

Sketch then Generate 倡导一种迭代式的代码生成与修改方式,尤其适用于动态调整需求场合,旨在提升用户体验与开发效率。通过增量式的交互,使用户可以获得即时反馈,并可以直接在已有代码基础上进行修改。

针对大模型生成速度慢与稳定性不足的问题,Sketch then Generate 的解决方案是根据用户注释或 prompt 引导模型生成中间态伪代码。模型增量式生成,用户实时调整,无需等待完整结果。伪代码作为上下文反馈,模型迭代修改。用户仅需发送,伪代码与输入直达模型,即时更新结果。

04

总结

本次分享介绍了豆包 MarsCode 编程助手的起源与发展历程。强调其科学评测指标 CPO,并阐述了代码补全 Pro 如何高效辅助用户编码,预测及推荐下一步代码。

最后对发展趋势进行了展望,未来将进一步强化模型追踪能力、编辑能力和产品自动化,深度融合 AI 至 IDE 和编辑器,实现 Sketch then Generate 的增量互动。

豆包MarsCode 编程助手代码补全 Pro 已推出 Beta,欢迎访问 www.marscode.cn 下载体验。同时,也欢迎大家关注豆包 MarsCode 公众号,获取更多技术干货分享。

05

问答环节

Q:豆包 MarsCode 的定位与未来发展方向是怎样的?

A:豆包 MarsCode 是基于豆包大模型打造的智能开发工具,提供编程助手和云端 IDE 两种形态,支持代码补全、错误修复、AI 刷题等多种能力。无论你是新手程序员,还是经验丰富的开发者,都能在开发过程中体验到豆包 MarsCode 带来的助力和效率提升。

豆包 MarsCode 编程助手兼容 VSCode 与 JetBrains,提供即时编程支持;云端 IDE 目标是通过场景定制提升效率,长期着眼 AI 深度集成,提高代码自动编辑能力,为用户提供全方位、低门槛的技术体验。

面向未来,豆包 MarsCode 双轨并行,兼顾场景定制与专业 IDE 建设。短期内侧重场景优化,长期规划 AI 驱动的高度自动化解决方案,增强产品力。
以上就是本次分享的内容,谢谢大家。


分享嘉宾

INTRODUCTION


李文超

字节跳动

开发工具技术专家

字节开发工具技术专家, 有多年开发工具领域的开发经验

往期推荐


从 ETL 到 NoETL 的数据架构演进——Denodo 的创新解决方案

B站大数据任务基于Volcano的云原生调度实践

蚂蚁大模型推理之显存优化探索实践

斯坦福大学教授李飞飞团队:关于 2024 年人工智能发展报告总结

滴滴ChatBI技术实践:智能数据分析的前沿探索与应用

谷歌科学家万字长文:《改变你职业生涯的一篇文章,我如何运用人工智能完成工作》建议每个人都要读一遍

火山引擎基于大模型 ChatBI 的演进与实践

AI改变工作:一天内打造专属于你自己的RAG

多智能体系统(OpenAI Swarm)的可观测性研究实践

京东数据架构解析:供应链效率提升与决策优化策略

点个在看你最好看

SPRING HAS ARRIVED

DataFunTalk
专注于大数据、人工智能技术应用的分享与交流。致力于成就百万数据科学家。定期组织技术分享直播,并整理大数据、推荐/搜索算法、广告算法、NLP 自然语言处理算法、智能风控、自动驾驶、机器学习/深度学习等技术应用文章。
 最新文章