# ai-inline-autocomplete **Repository Path**: L_yx/ai-inline-autocomplete ## Basic Information - **Project Name**: ai-inline-autocomplete - **Description**: vscode ai内联补全插件 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-17 - **Last Updated**: 2026-04-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI Inline Autocomplete 一个专门做 VS Code 内联补全的扩展骨架,目标是让你可以直接接自己的模型服务,而不是被某一家固定厂商绑死。 当前版本已经包含: - VS Code `InlineCompletionItemProvider` - 更像 Copilot 的主动触发体验 - 光标移动后的联动触发,更接近 Cursor 的跟手感 - 状态栏状态提示和一键开关 - 可视化配置 GUI - Accept Next Word / Accept Next Line 命令 - 流式补全 - 多候选排序 - 基于接受行为的本地排序学习 - 工作区信任与主机审批保护 - 最近建议续写复用,减少闪烁 - 沿着当前 ghost text 继续输入时立即复用剩余尾部 - 旧请求取消、请求去重、短时缓存 - 更丰富的上下文采样 - 默认启用的智能上下文筛选 - 当前文件头部 / imports - 光标附近代码窗口 - 当前选择内容 - 其他已打开编辑器的可见代码 - 自定义模型接入 - 支持三种接口风格 - `OpenAI-compatible /chat/completions` - `OpenAI /responses` - `Ollama /api/generate` - 自定义请求头、自定义附加请求体 - API Key 使用 VS Code Secret Storage - 测试连接命令 ## 目录结构 ```text . ├─ .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+` 1. 用 VS Code 打开这个仓库目录。 2. 运行 `npm install` 安装依赖。 3. 运行 `npm run build:webview` 生成设置面板资源。 4. 按 `F5` 启动一个 Extension Development Host。 5. 运行命令 `AI Autocomplete: 打开设置面板` 打开可视化配置面板。 6. 确认 VS Code 设置 `editor.inlineSuggest.enabled` 为 `true`。 7. 在 GUI 里配置 `baseUrl`、`apiStyle`、`model` 和 `API Key`。 8. 如果使用 Secret Storage 中的 API 密钥,首次连接新的远程 host 时需要显式批准该 host。 9. 点击 `保存` 或 `保存并测试`。 10. 在代码文件里输入内容,等待 ghost text 建议出现。 11. 如果想更像 Copilot 地使用: - `Tab` 接受整段建议 - 运行 `AI Autocomplete: 接受下一个单词` - 运行 `AI Autocomplete: 接受下一行` 12. 如果需要直接编辑 `settings.json`,可以运行 `AI Autocomplete: 打开 JSON 配置`,或在设置面板中点击同名按钮。 ## 开发命令 - `npm run build:webview`: 打包设置面板的 Webview 资源到 `media/` - `npm test`: 运行纯 Node 测试,覆盖配置差异写入、补全清洗、最近建议续写和排序学习存储 ## 推荐配置示例 ### 1. Ollama 本地模型 ```json { "aiAutocomplete.apiStyle": "ollama-generate", "aiAutocomplete.baseUrl": "http://localhost:11434", "aiAutocomplete.model": "qwen2.5-coder:7b" } ``` ### 2. OpenAI-compatible 网关 ```json { "aiAutocomplete.apiStyle": "openai-chat", "aiAutocomplete.baseUrl": "http://127.0.0.1:8000/v1", "aiAutocomplete.model": "deepseek-coder" } ``` ### 3. OpenAI Responses API ```json { "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 | parallel` - `aiAutocomplete.enableRanking`: 启用本地排序 - `aiAutocomplete.enableRankingLearning`: 启用排序学习 - `aiAutocomplete.contextStrategy`: 上下文采样策略,支持 `smart | basic` - `aiAutocomplete.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 | debug` - `aiAutocomplete.customHeaders`: 附加请求头 JSON - `aiAutocomplete.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 适配器