一个专门做 VS Code 内联补全的扩展骨架,目标是让你可以直接接自己的模型服务,而不是被某一家固定厂商绑死。
当前版本已经包含:
- VS Code
InlineCompletionItemProvider - 更像 Copilot 的主动触发体验
- 光标移动后的联动触发,更接近 Cursor 的跟手感
- 状态栏状态提示和一键开关
- 可视化配置 GUI
- Accept Next Word / Accept Next Line 命令
- 流式补全
- 多候选排序
- 基于接受行为的本地排序学习
- 工作区信任与主机审批保护
- 最近建议续写复用,减少闪烁
- 沿着当前 ghost text 继续输入时立即复用剩余尾部
- 旧请求取消、请求去重、短时缓存
- 更丰富的上下文采样
- 默认启用的智能上下文筛选
- 当前文件头部 / imports
- 光标附近代码窗口
- 当前选择内容
- 其他已打开编辑器的可见代码
- 自定义模型接入
- 支持三种接口风格
OpenAI-compatible /chat/completionsOpenAI /responsesOllama /api/generate- 自定义请求头、自定义附加请求体
- API Key 使用 VS Code Secret Storage
- 测试连接命令
目录结构
.
├─ .vscode/launch.json
├─ package.json
├─ README.md
└─ src
├─ completion-context.js
├─ config.js
├─ extension.js
├─ prompt.js
├─ provider.js
└─ settings-panel.js
怎么运行
要求:VS Code 1.117+
- 用 VS Code 打开这个仓库目录。
- 运行
npm install安装依赖。 - 运行
npm run build:webview生成设置面板资源。 - 按
F5启动一个 Extension Development Host。 - 运行命令
AI Autocomplete: 打开设置面板打开可视化配置面板。 - 确认 VS Code 设置
editor.inlineSuggest.enabled为true。 - 在 GUI 里配置
baseUrl、apiStyle、model和API Key。 - 如果使用 Secret Storage 中的 API 密钥,首次连接新的远程 host 时需要显式批准该 host。
- 点击
保存或保存并测试。 - 在代码文件里输入内容,等待 ghost text 建议出现。
- 如果想更像 Copilot 地使用:
Tab接受整段建议- 运行
AI Autocomplete: 接受下一个单词 - 运行
AI Autocomplete: 接受下一行
- 如果需要直接编辑
settings.json,可以运行AI Autocomplete: 打开 JSON 配置,或在设置面板中点击同名按钮。
开发命令
npm run build:webview: 打包设置面板的 Webview 资源到media/npm test: 运行纯 Node 测试,覆盖配置差异写入、补全清洗、最近建议续写和排序学习存储
推荐配置示例
1. Ollama 本地模型
{
"aiAutocomplete.apiStyle": "ollama-generate",
"aiAutocomplete.baseUrl": "http://localhost:11434",
"aiAutocomplete.model": "qwen2.5-coder:7b"
}
2. OpenAI-compatible 网关
{
"aiAutocomplete.apiStyle": "openai-chat",
"aiAutocomplete.baseUrl": "http://127.0.0.1:8000/v1",
"aiAutocomplete.model": "deepseek-coder"
}
3. OpenAI Responses API
{
"aiAutocomplete.apiStyle": "openai-responses",
"aiAutocomplete.baseUrl": "https://api.openai.com/v1",
"aiAutocomplete.model": "gpt-4.1-mini"
}
可调参数
aiAutocomplete.autoTrigger: 主动在输入后触发建议aiAutocomplete.autoTriggerDelayMs: 主动触发延迟aiAutocomplete.triggerOnCursorMove: 光标移动时也主动刷新建议aiAutocomplete.showStatusBar: 显示状态栏aiAutocomplete.requireTrustedWorkspace: 未信任工作区中阻止联网aiAutocomplete.debounceMs: 请求发送前的延迟aiAutocomplete.requestTimeoutMs: 请求超时aiAutocomplete.enableStreaming: 启用流式补全aiAutocomplete.streamingThrottleMs: 流式刷新节流aiAutocomplete.candidateCount: 候选数量aiAutocomplete.candidateStrategy: 候选调度策略,支持auto | single | parallelaiAutocomplete.enableRanking: 启用本地排序aiAutocomplete.enableRankingLearning: 启用排序学习aiAutocomplete.contextStrategy: 上下文采样策略,支持smart | basicaiAutocomplete.minPrefixChars: 自动触发所需最小前缀长度aiAutocomplete.maxPrefixChars: 光标前最大上下文aiAutocomplete.maxSuffixChars: 光标后最大上下文aiAutocomplete.maxLines: 建议插入的最大行数aiAutocomplete.cacheTtlMs: 精确结果缓存时间aiAutocomplete.reuseRecentCompletions: 复用最近建议尾部aiAutocomplete.documentHeadChars: 当前文件头部上下文aiAutocomplete.nearbyContextLines: 光标附近行数aiAutocomplete.relatedFiles: 额外采样的打开文件数量aiAutocomplete.relatedFileChars: 每个相关文件采样长度aiAutocomplete.logLevel: 日志输出颗粒度,支持off | error | warn | info | debugaiAutocomplete.customHeaders: 附加请求头 JSONaiAutocomplete.extraBody: 附加请求体 JSON
命令
AI Autocomplete: 切换启用状态AI Autocomplete: 设置 API 密钥AI Autocomplete: 清空 API 密钥AI Autocomplete: 打开设置面板AI Autocomplete: 打开 JSON 配置AI Autocomplete: 测试连接AI Autocomplete: 触发内联建议AI Autocomplete: 接受下一个单词AI Autocomplete: 接受下一行AI Autocomplete: 显示下一个建议AI Autocomplete: 显示上一个建议AI Autocomplete: 查看输出日志
日志说明
- 设置面板底部会显示最近日志,并按当前
aiAutocomplete.logLevel实时过滤,便于快速排查。 - 点击
查看输出日志会打开 OutputChannel,并写入当前会话快照。 - OutputChannel 会使用更清晰的等级 badge、scope、事件标记和紧凑 details 输出;错误堆栈会以缩进块附在后面。
aiAutocomplete.logLevel = error | warn | info | debug会同时影响 OutputChannel 和设置面板最近日志的展示颗粒度。- 当
aiAutocomplete.logLevel = off时,扩展日志会完全静默:不写 OutputChannel、清空最近日志、也不会继续缓存新的运行日志;点击查看输出日志只打开空面板。
实现说明
扩展会在你输入时主动触发 inline suggestion,请求会携带:
- 当前语言、文件路径
- 光标前后 FIM 上下文
- 当前文件开头片段
- 光标附近代码窗口
- 当前选中内容
- 其他打开编辑器的可见代码
模型只需要返回“应该插入的文本”,扩展会把返回内容作为 inline suggestion 显示。
为了适配更多自定义模型,当前没有把请求结构写死到单一厂商,而是提供了多种 API 风格和可扩展的请求头 / 请求体字段。
同时为了更接近 Copilot 的手感,当前实现还做了几件事:
- 输入时主动触发,而不是完全依赖默认刷新时机
- 光标移动到新位置时也会主动刷新建议
- 新请求会取消旧请求,减少过期建议
- 相同请求短时间内复用结果
- 当你继续输入上一个建议的前半段时,会直接复用剩余尾部
- 当 ghost text 已经显示出来时,继续顺着它输入会优先复用当前可见建议的尾部,减少闪烁
- 对模型返回内容做前缀 / 后缀去重和多行清洗
- 智能上下文模式下会优先保留同工作区、同语言、信噪比更高的相关打开文件
- 会过滤常见生成产物路径、疑似压缩内容、超长单行和重复上下文块
- 提供一个 Webview GUI 来可视化配置模型、路径、API Key 和高级参数
- 主候选支持流式返回并逐步刷新 ghost text
- 支持一次请求多个候选,并按本地分数排序
- 会记录展示、部分接受和完整接受行为,用于后续排序学习
- 在未信任工作区中默认阻止联网,并对使用 Secret Storage 的远程 host 做显式审批
安全说明
- 如果当前工作区未被信任,默认不会发送任何 AI 网络请求。
- 当 endpoint 指向新的远程 host,且 API 密钥来自 Secret Storage 时,必须先批准该 host。
排序学习说明
- 完整接受会被记录到本地排序学习数据中。
- 部分接受只对扩展自带命令
接受下一个单词/接受下一行进行统计。 - 直接使用 VS Code 原生命令触发的部分接受,目前不会被统计。
下一步可以继续增强
- 语言级 Prompt 模板
- 仅在特定文件 / 项目启用
- 接入自定义 HTTP 适配器