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 语法支持动态内容插入。
示例:
models:
- name: 我的自定义自动补全模板
provider: ollama
model: qwen2.5-coder:1.5b
promptTemplates:
autocomplete: |
`
globalThis.importantFunc = importantFunc
<|fim_prefix|>{{{prefix}}}<|fim_suffix|>{{{suffix}}}<|fim_middle|>
`