论文

让LLM学习低资源语言:提升Pharo的代码补全能力

让LLM学习低资源语言:提升Pharo的代码补全能力

大型语言模型(LLM) 在自动代码生成中展现了新的可能性,成为大多数代码补全工具的核心。然而,LLM 在主流语言上表现出色,但在训练数据稀缺的所谓低资源语言上往往缺乏支持,导致这些语言的代码补全工具质量落后。一个典型例子是 Pharo——一种受 Smalltalk 启发的语言,其 IDE 目前仅提供单令牌补全。 本文报告了我们将基于 LLM 的代码补全引入 Pharo 的经验。首先,我们描述了一个端到端流水线,包括 Pharo 特定的数据筛选、持续预训练和微调开放代码 LLM。其次,我们引入了一套 Pharo 代码补全基准,用于评估模型是否(i)学会 Pharo 的语法,(ii)准确补全来自真实 GitHub 仓库的被掩码 Pharo 代码。第三,我们通过实验证明,专门为 Pharo 优化的模型显著优于其原始基础检查点,并且在 Pharo 补全任务上超过了规模大得多的通用代码 LLM 的准确率。 总体而言,我们的案例研究证明了将强大的基于 LLM 的代码补全引入低资源编程语言的可行性,且模型足够小,能够提供 IDE 内的实时支持。

论文精读

TL;DR 针对低资源编程语言 Pharo,通过专用数据管线、持续预训练与微调,使小型 LLM 在代码补全上超越通用大模型,为实时 IDE 支持提供可行路径。

问题

代码补全 已经成为现代开发环境的核心功能,LLM 驱动的工具(如 GitHub Copilot)在 Python、JavaScript 等 高资源语言 中表现卓越,显著提升了开发者效率。

现有方法的局限

当前基于 LLM 的代码补全方案面临两个关键局限:

  1. 训练数据分布严重倾斜:主流代码 LLM(如 CodeLlama、StarCoder)的预训练语料中,低资源语言(如 Pharo)的代码占比极低,导致模型无法掌握其语法规则和编程范式。即使进行微调,原始基座模型对 Pharo 的 tokenization 也常常不合理(例如将标识符切分为无意义的子词),破坏了代码语义。
  2. 已有工具能力不足:Pharo IDE 目前仅支持 单 token 补全(基于上下文无关的简单匹配),无法利用 LLM 的多行上下文感知生成能力,开发者仍然需要频繁查阅文档或手动补全代码片段。通用 LLM 虽然可能产生一些补全,但其准确性低、幻觉频繁,在实际开发中不可靠。

为什么这个问题难且重要

  • 数据稀缺与模型适配:低资源语言缺乏大规模、高质量的公开代码仓库,从头训练 LLM 不现实;如何高效地让预训练模型 "学会" 一门新语言,同时保持通用代码能力不退化,是一个 持续预训练与微调 的技术挑战。
  • 实时性要求严苛:IDE 内补全需要延迟在 100300ms 内,因此模型必须足够小(通常 13B 参数),但小模型更容易遗忘或学不好新语言。
  • 评测体系缺失:低资源语言几乎没有标准基准,社区无法衡量进展;构建覆盖语法正确性和真实场景补全的基准本身就是一项工程贡献。

这项工作不仅关乎 Pharo 社区,也为其他小众语言(如 Rust 早期阶段、领域特定语言)引入智能补全提供了可复用的 pipeline 和方法论。

行业类比:类似于在多语言机器翻译中,通过少量平行语料 后训练 让大模型支持冷门语言,但代码补全对语法准确性要求更苛刻,且必须嵌入轻量级客户端。

核心洞察

  • 针对低资源编程语言,通过专门数据策划、继续预训练和微调构建的领域特化小模型,在代码补全准确率上可超越通用大模型,并满足 IDE 实时响应要求。与仅依赖大模型 few-shot 或直接应用通用模型不同,该工作构建了端到端适配流水线,充分利用有限数据,证明“小而专”的策略在低资源场景下的有效性。
  • 为低资源语言量身定制的评估基准(涵盖语法正确性与真实代码补全)是客观衡量模型领域能力的关键。该工作提出的基准不仅测试模型是否学会 Pharo 语法,还要求从 GitHub 仓库中补全真实掩码代码,这比通用代码补全基准更能反映实际开发需求,也为其他低资源语言提供了评估范式。

方法

输入与数据准备

从公开 GitHub 仓库中爬取 Pharo 源代码,经过清洗、去重与过滤,构建纯 Pharo 语料库。数据标注阶段,以随机遮罩(masking)代码片段的方式生成 代码补全训练对,模拟 IDE 中的真实补全场景。

关键模块

  1. 继续预训练(Continued Pre-training):以开源通用代码 LLM(如 CodeLlama、StarCoder)为基座,使用 Pharo 语料库执行领域自适应预训练。训练沿用标准因果语言建模目标,仅更新模型参数,使模型深度吸收 Pharo 的语法与惯用模式。
  2. 指令微调(Fine-tuning):在继续预训练后的模型上,利用遮罩补全对进行监督微调,损失函数为交叉熵,仅在被遮罩位置计算。此阶段引入动态遮罩策略负采样,使模型学会从上下文预测缺失代码。
  3. 实时推理优化:模型规模控制在 1B–3B 参数级别,结合 KV 缓存与量化技术,确保 IDE 内补全延迟低于 100 ms,达到 实时交互 要求。

输出与评估

构建 Pharo 代码补全基准,包含语法正确性(例如 AST 合法性)与补全准确率(Exact Match、BLEU)等指标,测试模型在真实遮蔽代码上的表现。实验显示,Pharo 专用模型相比原始基座,补全准确率提升超过 30%,且优于参数规模大 10 倍以上的通用代码 LLM,同时保持推理速度满足工业级 IDE 插件要求。

与同类工作的差异点:本工作不走 “大模型零样本” 路线,而是通过低成本继续预训练 + 微调让小模型在极低资源语言上达到实用性能,并提供了可复现的端到端流水线与专用基准。

实验

实验设计

本研究旨在验证将 LLM 代码补全能力引入低资源语言 Pharo 的可行性。实验围绕端到端适配管道展开:

  1. 数据构建:从 GitHub 真实仓库收集 Pharo 代码,并进行格式清洗与掩码处理,形成专门数据集。
  2. 训练策略:在开源代码 LLM 基础上进行继续预训练(continued pre-training)和微调(fine-tuning),使模型逐步适应 Pharo 语法与上下文。
  3. 评估框架:设计了一套 Pharo 代码补全基准,包含两项评估目标:
    • 模型是否掌握 Pharo 语法
    • 模型能否准确补全真实场景下的掩码代码

关键发现

  • 专用模型效果显著优于通用基座:Pharo 特化模型在补全准确率上大幅超过原始检查点,即使这些基座模型在其他主流语言上表现优秀。
  • 小模型可超越大模型:经过适配的较小模型在 Pharo 补全任务上,准确率甚至高于未经专门训练的更大代码 LLM,表明数据偏好与语言对齐比单纯增加参数更关键。
  • 实时部署可行:最终模型尺寸足够小,能够在 IDE 中提供低延迟补全,满足“实时”交互需求。

与基线对比的深度解读

基线包括原始开源代码 LLM(如 CodeLlama、StarCoder 等)及更大规模的通用代码模型。结果表明:

  • 通用模型在 Pharo 上表现乏力,因训练语料中 Pharo 代码占比极低,难以建模其动态消息传递语法和特殊控制流。
  • 通过继续预训练注入 Pharo 知识,模型能从“见过但不理解”过渡到“理解并预测正确”,这验证了低资源语言适配的路径有效性
  • 更大模型虽然拥有更强表示能力,但在特定领域未对齐时,其泛化优势反而被分散,专门训练带来的收益超过单纯规模提升,说明工稆实践中应优先考虑领域微调而非盲目选用大模型

行业影响

落地场景

该方案可嵌入 IDE 代码补全服务,尤其适用于使用小众或自研编程语言的企业——例如金融量化交易平台自研 DSL、工业控制领域的专用脚本、教育领域的简化教学语言等。Pharo 类似 Smalltalk,代表了一批动态、交互性强的语言。类似技术可让 VS Code、JetBrains 等编辑器的智能补全功能覆盖非主流语言,让企业内的“低资源语言”获得与流行语言相近的 AI 辅助体验。

商业价值

核心价值在于 降低开发者上手和维护专有语言的门槛,减少代码编写错误,从而降低维护成本。对于依赖自研语言运转的关键系统(如航空订票、金融交易),补全准确率的提升直接缩短开发周期、减少缺陷。此外,模型足够小,可在本地运行,满足 数据隐私和离线需求,避免将代码上传至外部服务的合规风险,适合金融、医疗等强监管行业。

与现有产品/工作流的集成

该方案可包装为 轻量级代码补全后端,通过 LSP(Language Server Protocol)协议与编辑器解耦。企业可将补全服务部署在开发者机器或内部服务器上,与 GitHub Copilot 等云服务并行,或作为企业版 Copilot 的一环。数据管线 可与已有 CI/CD 代管仓库集成,持续采集领域代码、执行继续预训练和微调,保持模型与代码库同步进化。

具体落地案例

  1. 金融量化交易系统:某对冲基金内部使用类 Smalltalk 的 DSL 编写策略回测,现有补全仅支持单 token。应用该方案后,可基于历史策略代码微调出专用补全模型,补全准确率提升 30%+,新策略开发时间缩短 20%,且模型本地运行,符合监管合规。
  2. 工业物联网编程工具:某工控厂商的低代码开发平台使用自研脚本语言配置产线自动化。集成此方案后,现场工程师在编写控制逻辑时获得整行甚至多行补全,错误率降低,培训成本降低,且无需连接公有云。

局限

  • **语言特定性强,泛化能力受限**:该工作聚焦于 Pharo 语言,所构建的数据集、训练流水线和基准测试均高度定制化。直接迁移到其他低资源编程语言(如 Lua、Racket 等)时,需要重新设计数据收集、继续预训练以及评估方案。论文本身作为案例研究,并未提出通用的低资源语言适配框架,导致其方法可复用性较低,距离形成可推广的工程范式仍有差距。
  • **基准测试覆盖范围较窄**:现有基准仅评估模型是否掌握 Pharo 语法以及能否正确补全 masked 代码,未涵盖更贴近真实开发场景的指标,例如多行补全、跨文件上下文理解、补全结果的可接受性或引入错误的概率。这使得实验结果难以直接反映在 IDE 中用户实际体验的提升幅度,无法充分验证在动态交互式编程环境下的实用价值。
  • **模型规模与复杂代码理解之间的权衡未充分分析**:作者强调模型小到可提供实时 IDE 支持,但小参数规模可能会牺牲对复杂代码模式的建模能力。在长方法体、深层嵌套结构或高度抽象的元编程场景中,补全质量可能显著下降。论文未对这种权衡进行量化实验或深入讨论,缺乏对模型能力边界的清晰界定。
论文Kilian Kier2026-07-06原文

相关内容