CodeCompose,这款由Meta公司数万名开发者广泛使用的人工智能驱动的代码编写工具,近期实现了从单行建议到多行建议的重大突破。然而,这一转变过程中也面临着独特的挑战,旨在提高工具的可用性和用户体验。
初期,多行建议因不断移动现有代码而打乱了开发者的工作流程,可能导致了生产力和满意度的下降。此外,生成多行建议所需的时间更长,这也促使团队进行了投资,以减少用户感受到的延迟。
经过模型托管优化,多行建议的延迟时间得到了2.5倍的提升。随后的实验涉及了众多工程师,结果显示多行建议占据了接受字符的重要部分,与单行建议相比,键盘敲击的节省百分比几乎翻倍。尽管如此,多行建议推出后,选择退出的Meta工程师比例仍不到1%。
CodeCompose原本的设计是为软件工程师在编写代码时提供内联建议,但最初仅限于预测并完成当前行的代码片段。这样的单行建议要求快速、高度准确,并有助于即时上下文。
多行算法则更为复杂,需要在用户输入时自动触发,并在选择触发点和限制用户当前范围的建议方面做出精准的选择。尽管生成准确的多行建议更具挑战性,但基于范围的算法允许显示与用户当前思维过程一致的建议,帮助他们的思维过程,而不引入不必要的干扰。
在CodeCompose的系统架构中,客户端编辑器负责显示建议,而语言服务器则作为CodeCompose模型服务主机与客户端之间的中介。在请求中,通过传递“多行”标志到模型服务,实现了多行建议的生成。
作者在本文中解决了以下挑战:
挑战1:突兀效应:为了解决这一问题,团队设计了一个基于范围的算法。该算法仅在光标位于范围末尾时触发多行建议。建议将保持可见,直到当前块的末尾。在接受建议后,光标会自动移动到建议块的末尾,从而减少了打断开发者工作流程的可能性。
单行“突兀”效应示例:当用户光标位于“def”关键字和“quicksort”函数之间时,内联建议的出现会将现有用户代码向右移动,造成突兀感。
多行“突兀”效应示例:当用户光标位于函数名称和下一行包含语句“test1 = 1”的行之间时,多行建议的生成可能会将现有行推下,从而打断开发者的流程。这种打断迫使他们审查建议的“quicksort”函数,并确定现有代码的正确位置。
挑战2:响应式用户体验:由于多行建议的生成需要更多时间,为了最小化用户感知的延迟并提高与单行建议相比的采用率,团队进行了诸多努力。这包括引入用户界面指示器来通知用户何时正在生成多行建议,以及在模型托管服务中实施优化措施,如Flash Attention和持久性K-V缓存。
挑战3:生产发布效果:在多行建议推出期间,团队密切监控了包括接受率、显示率、延迟和吞吐量在内的各种指标。这种评估有助于全面评估多行建议与单行建议相比的总体效果。
尽管开发者感觉编码速度加快,但他们通常需要更多时间来审查生成的代码。此外,其他研究还表明,生成的建议有助于发现新的API。这表明CodeCompose的多行建议功能在提高开发效率和促进代码质量方面都具有潜在价值。