Skip to content

AI 自动补全功能快速入门

本文将介绍如何在集成开发环境(IDE)中快速启用并使用 AI 驱动的行内代码自动补全功能,包括如何开启建议、以及用于接受、拒绝或部分采纳补全内容的键盘快捷键。

如何启用并使用自动补全功能

AI 自动补全功能可在你编码时实时提供行内代码建议,帮助你更高效地编写正确、风格一致的代码。

ⓘ 能否使用自动补全功能需要看模型中是否配置了 autocomplete 角色。

本地模型启用自动补全步骤

  • 在智能体选择下拉菜单中,切换至 本地智能体

  • 点击右侧的 ⚙️ 设置图标,进入config.yaml配置页面。

  • 找到你希望用于自动补全的本地模型,在其 roles 字段中添加 autocomplete开启自动补全

自动补全功能的键盘快捷键

接受完整补全建议

按下 Tab 键即可接受完整的补全建议。

拒绝完整补全建议

按下 Esc 键可拒绝完整的补全建议。

部分接受补全建议

若需更精细的控制,可使用 cmd/ctrl + 组合键,按单词逐一接受补全建议中的内容。

强制触发补全建议(VS Code 适用)

若你希望立即触发补全建议而无需等待,或已关闭某条建议并需要新建议,可使用键盘快捷键 cmd/ctrl + alt + space 强制触发。

自动补全功能的工作原理

AI 自动补全不仅依赖模型能力,还结合了多项工程优化策略,以确保建议既智能又高效。

自动补全的时机优化

为实现快速展示建议且避免发送过多请求,我们采用了以下两种核心策略:

  • 防抖处理(Debouncing):若你输入速度较快,系统不会对每个按键都发起请求,而是等待输入暂停后再执行操作。

  • 缓存机制(Caching):若光标位置曾生成过补全内容,该内容会被复用。例如,当你使用退格键回删内容时,可立即显示此前见过的补全建议。

上下文感知能力

系统会从你的代码库中动态检索相关上下文(如函数定义、类型信息、相似代码片段等),并将其融入提示词(prompt),使补全建议更贴合项目风格和语义逻辑。

AI 建议的过滤与后处理

语言模型并非完美,但可通过输出调整大幅提升实用性。在展示补全建议前,我们会对模型响应进行全面后处理,具体包括:

  • 移除特殊令牌(Special Tokens)

  • 再生代码时提前终止,避免生成冗长、无关的输出内容

  • 修正缩进格式,确保代码排版规范

  • 偶尔丢弃低质量响应,例如存在大量重复内容的建议

你可在 自动补全深度解析 中了解更多工作细节。

自动补全角色的作用

了解自动补全角色的工作机制、适用模型类型,以及如何为行内代码建议自定义提示模板。

自动补全模型是一类专为代码补全任务优化的大语言模型(LLM),通常基于 “中间填充”(Fill-in-the-Middle, FIM)格式进行训练。该格式通过提供代码片段的前缀(光标前的内容)和后缀(光标后的上下文),让模型预测中间缺失的部分。由于任务高度聚焦,这类模型即使参数量较小(例如 3B 规模),也能在代码补全场景中表现出色。

相比之下,通用聊天模型(Chat models)尽管参数规模更大,但由于未针对 FIM 任务专门优化,即便经过复杂提示工程,在行内补全任务上的效果通常也不如专用模型。

在本系统中,被标记为自动补全角色的模型将用于在你编码时实时生成行内建议。只需在 config.yaml 配置文件中,为对应模型的 roles 字段添加 autocomplete,即可将其指定为自动补全模型。

自定义提示模板

你可以通过配置 promptTemplates.autocomplete 属性,自定义自动补全请求所使用的提示模板。系统采用 Handlebars 语法支持动态内容插入。

示例:

yaml
    models:
    - name: 我的自定义自动补全模板
        provider: ollama
        model: qwen2.5-coder:1.5b
        promptTemplates:
        autocomplete: |
            `
            globalThis.importantFunc = importantFunc
            <|fim_prefix|>{{{prefix}}}<|fim_suffix|>{{{suffix}}}<|fim_middle|>
            `