Twinny:100%代码自动补全 locale
Twinny 是一个免费且开源的 VS Code 扩展(MIT 许可证),可通过 Ollama、LM Studio 或 llama.cpp 在您自己的机器上运行代码补全。补全当前行时,像 qwen2.5-coder:1.5b-base 这样经过中间填充训练的小型基础模型,可在不到一秒内响应。个人使用无需订阅;只有超过五名开发者的团队才涉及收费。
Twinny 是一款在本地进行代码补全的编辑器扩展:它利用由您自己的机器提供服务的模型,为您正在编写的内容建议后续代码。这是整个生态系统中对延迟要求最严格的一类工具——等两秒才出现的建议就没有用了——因此,这种场景下的模型选择遵循与其他场景相反的规则。本指南详细介绍了哪些设置能带来明显区别,以及该扩展自推出以来有哪些改进。
#Twinny 的功能
该扩展一直同时提供两种功能:行内补全,在输入时显示灰色建议;以及聊天侧边栏,用于针对选中的代码提问。两者都依赖本地模型,由 Ollama、LM Studio 或 llama.cpp 提供服务,默认情况下没有任何数据离开本机。
在代码不得外传的场景中,例如专业事务所、行政机构,或受保密协议约束的客户代码,其价值显而易见。关键不在于成本,而在于「我的代码会被发送到哪里」这个问题有可核实的答案。该项目将自己定位为始终运行在您网络内部的 VS Code AI 助手。
#决定性细节:中间填充
补全代码不等于续写文本。当您在函数中间编写代码时,模型必须同时考虑前面的内容和后面的内容。这种能力称为“中间填充”,即 FIM(fill-in-the-middle),并非所有模型都具备。官方文档对此有明确说明:补全服务提供程序必须使用经过 FIM 训练的模型,而且不同模型家族使用各自不同的 token 来标识前缀、后缀和待补全区域。
这是最常导致失望的原因。即使是优秀的代码对话模型,如果不具备这项能力,也会给出忽略文件后续内容的补全建议,并添加文件中已经存在的右花括号。另一个很多人忽略的要点是:文档建议使用基础模型,而非指令微调版本,因为基础模型续写原始文本时的可靠性高于处理空后缀时的可靠性,尤其是在光标后没有任何内容的情况下。
#使体验流畅的设置
项目文档介绍的四项设置带来了大部分用户感知到的延迟改善。它们位于扩展的设置中(前缀为 twinny.),均可在不重启 Ollama 的情况下调整。
| 参数 | 默认值 | 效果 |
|---|---|---|
| twinny.debounceWait | 300 毫秒 | 最后一次按键后、发起请求前的等待时间;增加该值可减少调用次数 |
| twinny.numPredictFim | 512 tokens | 每次建议生成的最大标记数;减少该数值可加快响应速度 |
| twinny.contextLength | 100 行 | 光标周围传输的代码量;减少该量可降低延迟 |
| twinny.fileContextEnabled | 默认关闭 | 发送其他已打开且相关的文件中的片段(最多涉及 3 个文件);对大型项目有帮助,但会增加延迟 |
- 01限制生成令牌数量有用的代码补全只需一两行。文档也证实了这一点:如果补全建议出现得太慢,首先应调低 numPredictFim,而不是减小模型规模。
- 02调整触发延迟每次输入触发都会导致服务器过载;默认 300 毫秒的延迟(debounceWait)在大多数情况下已足够,可显著减少调用次数。
- 03让 Ollama 中的模型保持加载状态如果服务器在几分钟无操作后卸载模型,暂停后的第一条补全建议就会来得太晚。因此,需要在 Ollama 端延长模型驻留内存的时间(keep_alive)。
- 04缩小发送的上下文窗口文档明确指出:如果建议内容响应延迟,可降低contextLength(默认值为光标前后各100行),或保持fileContextEnabled关闭(默认状态)。该参数仅在手动开启时才会加载其他已打开文件的片段。
#模型真正看到的内容
补全建议不仅基于光标前后的前缀和后缀。文档详细说明了 Twinny 在构建提示词之前汇集的上下文来源:周围的代码行(contextLength);文件中最近的修改,以小型差异片段(diff)呈现(recentEditsEnabled,默认启用,最多 6 处修改);语言服务器提供的符号和当前调用的签名(lspContextEnabled,默认启用);以及可选的、其他已打开且相关的文件中的片段(fileContextEnabled,默认禁用)。
- 最近更新
- 尚未完成的重命名,或在一个文件中手动应用的修改模式,会延续到后续建议中,就像它理解了您正在做什么一样。
- IntelliSense 上下文
- 模型会接收光标所在调用的名称和签名,这些信息由编辑器的语言服务器提供。
- 相邻文件
- 默认关闭:仅在大型项目中启用,因为它会增加延迟,而收益并不固定。
实践中还有一个有用的小技巧:先写一行注释,描述接下来要写的内容,然后稍作停顿,就能为多行代码建议提供明确的目标——文档本身也建议这样做,以获得更好的建议。在调整任何设置之前,给变量和函数起清晰的名称,仍然是提升建议相关性最有效的方法。
#模型有哪些,为什么规模这么小
| 用途 | 推荐模型规模 | 为什么 |
|---|---|---|
| 行内补全(FIM) | 15 亿至 30 亿,基础模型 | 延迟优先:根据官方文档,qwen2.5-coder:1.5b-base 在大多数设备上响应时间低于一秒 |
| 在大型显卡上进行代码补全 | 70亿 | 如果显卡速度快且上下文较短(contextLength 较低),可以考虑 |
| 聊天侧边栏 | 70 亿至 140 亿参数,指令微调模型 | 在这种情况下,可以接受等待一份组织完善的回答;基础模型不适合对话。 |
这种不对称总是令人惊讶:人们习惯于认为模型越大越好。在补全任务中,一个拥有 15 亿参数、经过中间填充训练并以基础版本提供服务的模型,在实际使用中会胜过一个 140 亿参数的通用模型,因为它在您还没想完时就已经给出了回答。该扩展允许为每项功能配置一个模型——一个用于 FIM,另一个用于对话——这是合适的配置:两者的规模和训练方式都不同。
#不止代码补全:Twinny 在 2026 年能做什么
该扩展最初只是一个补全插件,如今功能已大幅增加。其官方页面目前列出的功能包括:行内编辑(描述一项修改,并在编辑器中以 diff 形式审阅);结合关键词搜索和向量搜索的工作站索引;针对工作树、分支或 GitHub pull request 的代码审查;根据暂存的修改生成提交消息;以及生成终端命令并自动纠正错误。
所有这些功能仍对应着可重新分配的 VS Code 命令和可自定义的提示词模板。在服务提供方方面,除了本地引擎(Ollama、LM Studio、llama.cpp、Oobabooga、LiteLLM、Open WebUI),支持列表还扩展到了托管 API(OpenAI、Anthropic、Mistral、DeepSeek、OpenRouter、Gemini、Groq、Cohere、Perplexity)——但并不强制使用任何托管 API:100% 本地使用仍是默认配置。
#单人免费,团队付费
个人使用时,Twinny 仍然和以往一样:它是一款采用 MIT 许可证的扩展,没有遥测,也不要求登录。只有共享团队网关(twinny-server)的开发者超过五人时才会产生费用。该网关为整个组织集中管理对各服务提供商的访问:最多五个账户免费,超过后按每个席位每月收费,并提供无需银行卡的 30 天试用。对于独自使用本地 Ollama 的开发者,上述条件均不适用,无需创建任何账户即可完整使用该扩展。
#Twinny 或编辑智能体
| 需求 | 工具 |
|---|---|
| 完成当前行,无需思考 | Twinny — 行内补全(FIM) |
| 按要求修改多个文件 | 集成在编辑器中的编辑智能体(Roo Code、Cline) |
| 无需监督即可完成一项任务 | 在终端或容器中运行的自主智能体 |
| 在 commit 前审查代码 | Twinny 的代码审查功能,或一个专用的对话助手 |
这两种用法并不互斥。许多开发者会始终启用 Twinny 来进行行内补全——不显眼、速度快,使用专用的小模型——而在处理涉及多个文件的任务时,则切换到 Roo Code 或 Cline 这样的编辑智能体,使用更大的模型,并愿意为它的响应等待几秒钟。
- Roo Code:编辑器中的本地代码智能体
- Cline + Ollama:VS Code 中的 100% 本地编程智能体
- 使用本地大语言模型审查和修改代码
- 最适合编程的本地 LLM:对比
- 来源:Twinny 官方 GitHub 仓库
- 来源:FIM补全文档
- 来源:Visual Studio Marketplace 产品页
#FAQ
Twinny 免费吗?+
哪种模型适合行内代码补全?+
为什么我的补全建议会忽略文件的后续内容?+
如何降低建议的延迟?+
需要高性能显卡吗?+
选择 Twinny,还是 Roo Code 或 Cline 这样的代码编辑智能体?+
Twinny 除了代码补全,还具备其他功能吗?+
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。