我们如何通过让模型像 Roblox 工程师一样思考,使 AI 代码通过率翻倍
域感知代码智能

尽管大家都对下一代突破性AI模型充满期待,但Roblox内部AI工具效能翻倍的秘诀并非新模型。 秘诀其实就蕴藏在我们的代码库历史中。通过利用多年积累的代码以及领域专家的代码审查,我们在10,000个拉取请求(PR)的样本集中,将AI生成的PR建议接受率从约30%提升至60%以上,并在同一时期将一个自主代码清理项目的评估准确率提升至90%以上。
弥合AI质量差距
在整个行业中,50% 至 60% 的编码时间都花在软件维护上。¹ Roblox 也不例外。
理论上,那些需求明确、问题空间受限的重复性维护任务,本是AI自动化的绝佳应用场景。但在实践中,我们的AI助手却在评估准确率和工程接受度方面面临挑战。
在 Roblox,问题不在于能力,而在于上下文。通用模型并未经历 Roblox 二十年的工程积淀。它既未见过我们过去三年合并的 70 万个拉取请求,也未从 170 万条代码审查评论中学习——正是这些评论中,我们经验最丰富的工程师定义并捍卫着我们的编码标准。
忽视这一历史积淀的 AI 助手,无法赢得世界级工程师的信任。尽管 Roblox 半数工程师已采用 AI 助手,但在人工审核后,仅有约 20% 的 AI 生成的建议被采纳。我们的季度工程生产力调查也印证了这一现实。 工程师将AI对生产力的影响评分定为5分制中的4.02分,但对AI代码质量的信心评分仅为3.09分。简而言之,AI虽有帮助,但信任度依然有限,特别是在传统的C++及更复杂的代码领域。
为弥合这一认知鸿沟,我们投资开发了一款基于Roblox自身工程历史、参照专家范例并经严格评估验证的智能代码平台。该平台不仅能生成代码建议,更能以Roblox工程师特有的专业深度进行迭代优化。
汲取 Roblox 工程经验的精髓
Roblox的工程数据集涵盖近20年的代码提交、设计文档和生产遥测数据,这是一套独特而丰富的数据集,记录了我们系统的演变历程以及工程师解决难题的思路。
代码智能平台旨在将这些数据转化为结构化的知识图谱,这是一项重大的工程挑战。在庞大的多语言环境中,代码不仅仅是文本文件。它是由构建目标、C++ 模板实例化和动态 Lua 依赖项构成的复杂网络。仅解析文本是不够的;系统必须理解代码库本身中埋藏的、与我们独特架构相关的深层语义关系。
另一个挑战在于追踪与时间对齐。为了在互联系统间进行推理,代理系统必须将静态代码仓库与噪声较大的运行时遥测数据关联起来,并将数百万条生产信号映射回生成它们的精确代码版本——即使代码库仍在持续演进。

为解决这一问题,我们的策略是将版本控制、构建图和运行时遥测数据整合到一种混合的符号-向量表示中,从而保留语法、语义和关系。这使得代码智能平台能够像资深工程师那样理解代码:将其视为由设计理念、权衡取舍和性能数据所塑造的相互关联的系统,而非孤立的文本文件。
通过范例对齐提取专家信号
真正的专业知识隐藏在模式、代码审查评论、提交历史以及细微的代码惯用语中。代码智能通过典范对齐引擎揭示这种隐含的智慧,该引擎允许工程师整理出理想实现方案或审查理由的“黄金”范例。
此前,一位经验丰富的工程师可能每周要花费数小时审查 PR,反复标记高频循环中阻塞性 FetchData 调用的使用——这种模式在语义上看似正确,但在 Roblox 级别的规模下会导致严重的延迟。如果专家出差或漏检了错误,他们的知识就无法得到应用,反模式可能会混入生产环境,并导致我们的社区服务中断。
借助对齐引擎,该工程师可将自己的判断转化为自然语言示例。这是一种结构化定义,将代码模式(“做什么”)与推理(“为什么”)相结合。现在,系统会自动检测阻塞调用、标记它、解释延迟风险,并直接链接到关于异步最佳实践的内部文档:
在高频循环中使用阻塞操作会导致延迟增加和线程耗尽。当在异步任务中调用 `FetchData` 时,应向作者发出关于延迟和线程耗尽的警告。只要该任务已被等待(awaited),`FetchData` 调用即为安全。提供指向异步最佳实践的直接链接:internal_guidance/async。 |
这有效地将工程师历经多年经验积累的宝贵知识固化下来。系统将一次性的代码审查评论转化为永久性的自动化防护机制。
“对齐引擎之所以强大,不仅在于它能提升代码质量,更在于它能扩大指导规模。我们将资深专家的专业知识和直觉融入平台本身。这就像每天都有Roblox领域的高级专家与你进行结对编程一样。”——Tom Knych,高级技术总监
但我们的专家们手头工作繁重,要求他们回忆并写下所有关键见解,即便在最佳情况下,也是一种既耗时又容易遗漏的过程。那么,我们该如何帮助他们在Roblox任职期间记录下最宝贵的建议呢?
这些建议其实早已存在,它们写在专家们一丝不苟的代码审查评论中,并铭刻在每一个最终投入生产的PR(拉取请求)里:

我们将历史 PR 评论通过一条管道进行处理,该管道负责清理数据并从 Roblox 体验中提取最具价值的主题。起初,噪声数据充斥着诸如赞美或拼写修正等无法直接采取行动的评论,而有价值的反馈往往采用高度依赖上下文的简写形式。例如,如果不了解具体的文件和差异,像“在此处使用新模式”这样的注释就毫无意义。系统必须将这些具体的交互转化为可重用且可推广的规则。
为解决这一问题,我们采用了一种多阶段算法,无需人工干预即可在数千个 PR 中检测出反复出现的主题。该系统将历史评论嵌入向量空间,利用贪婪聚类法找出相关反馈的邻域,并应用 LLM 引导的精炼机制将其合并为高价值模式。
最终生成一份候选范例(或经验总结)的排序列表,其优先级基于出现频率及不同审阅者的引用广度,并附有原始评论的引用信息。 随后,我们的领域专家会审查这些候选项,必要时进行编辑,并决定哪些应作为核心最佳实践纳入知识库。在该流程首次预览后,仓库负责人欣喜地看到他们关注的主题浮现为关键防护措施,并立即希望将各自的仓库注册进行分析。

最后一步是校准代理,它通过将所有变更与示例知识库进行比对,协助人类工程师和 AI 编码代理。这种灵活的评估机制可贯穿整个软件开发生命周期:在编码阶段、合并阶段,甚至可通过持续改进代理,随着知识库的增长,自主维护 Roblox 代码库。
通过这种基于上下文的学习,将 AI 行为锚定于 Roblox 标准,我们观察到某 AI 编码代理在其黄金评估数据集上的通过率从 84% 跃升至 100%。我们不仅在教 Roblox AI 如何编码,更是在教我们的 AI 如何像 Roblox 工程师那样思考。
从负面信号中学习
尽管示例对齐显著提升了代码库质量的基准,但我们的终极目标是让 AI 建议代码的初稿能获得与资深工程师作品同等程度的信任。正因如此,我们将每条被拒绝的 AI 建议、每次失败的重构或每次引发回归的合并,都视为可反馈至系统的高价值信号。这为代理构建了一条持续改进并从错误中学习的管道。
领域专家可通过详细的推理、思维链以及失败背后的任何额外背景信息,对负面结果进行筛选和标注。随后,这些数据会被语义化嵌入并建立索引以便检索。当我们的代码智能平台提出新输出时,它会对这些数据进行语义搜索,调取过去的错误和评审员的反馈,以避免重蹈覆辙。
这一闭环反馈机制将每次代码审查转化为结构化的学习数据,通过对抗性训练和基于批评的训练,持续优化智能代理的未来行为。
构建稳健的评估框架
信任源于可靠且可预测的行为,而这一切始于量化评估。我们设计了一套专门的评估系统,用于追踪智能体随时间推移的性能表现。

该框架包含:
- 任务级基准:涵盖数千项 Roblox 工程活动的精确率和召回率,例如重构、测试和修复错误等任务。
- 模拟测试框架:具有确定性结果的合成PR,用于可重复的评分。
- 人工参与评审小组:专家对 AI 输出与黄金标准实现方案进行对比评估。
- 执行框架:在合并代理改进时,相关评估会并行化,并作为合并前持续集成(CI)套件的一部分运行,使工程师对其更改充满信心。
- 纵向指标:跨版本追踪合并后的回归问题、回滚频率及延迟变化。
- 全面可观测性:自动追踪和可视化代理活动,将其与 Roblox 其余部分关联,并顺畅地融入在线和离线评估。
该系统生成代理质量评分,可精确追踪随时间推移的性能变化,从而实现不同代理修订版和模型版本间的标准化比较。自引入示例对齐和完整的评估套件以来,某 Roblox 代码智能代理在 10,000 个 PR 数据集上的 PR 建议接受率从约 30% 提升至 60% 以上,这初步表明其性能值得信赖且符合领域需求。 通过同样的流程,我们的功能开关清理代理的整体准确率从46%提升至90%以上。
未来展望:将专家判断融入每项工具
我们正通过构建 MCP 层和工具封装器来增强现有内部系统的实用性,并将代码智能平台从针对特定任务的工具,演进为一个能够维持 Roblox 代码库健康的系统。
我们憧憬这样的工程未来:那些过去难以规模化的知识——如运行时上下文和专家判断——将被融入每款工具和工作流之中。当代码智能、范例对齐与可观测性相融合时,我们将释放持久的优势:更高的质量、更快的交付,以及更健康、不断演进的代码库。 我们的长期目标是让每位工程师都能拥有机构记忆的力量,让每个团队都有信心快速交付,并让每位工程师都能自由地专注于创新,而非维护工作。


