ORANGE BOOK · LOCAL AI

第九章 本地编程助手——代码补全与解释

9.1 一个真实场景:那个公司禁用 Copilot 的程序员

老张是一家国内大厂的资深后端工程师,他们公司 2024 年起明令禁止使用 GitHub Copilot、Cursor、Codeium 等任何"会上传代码"的 AI 助手——因为他们担心代码外泄给训练,担心客户敏感数据被记录。

但老张不想退回到"完全靠手写"的 2020 年。他在自己工作 Mac 上装了 Ollama + Qwen 2.5 Coder 32B + Continue 插件,完全本地、完全不联网

效果如何?

"Copilot 给我 100 分的话,本地 Qwen Coder 32B 是 75 分。但 75 分对我来说已经够了——我替代了 60% 的 Copilot 用法,剩下 40% 我自己写。每周省下 8 小时。最关键的是:我们公司的代码一行都没出去过。"

这章是给所有"想用 AI 写代码但不能用云端"的人写的。

9.2 本地编程助手的能力地图

本地 AI 在编程上能做的事,按"难度从低到高"分四档:

[档 1] 代码解释:读懂代码并讲给你听
[档 2] 代码补全:写到一半 AI 接着写
[档 3] 代码重构:让 AI 改进现有代码
[档 4] 代码生成:从"需求描述"到"完整代码"

好消息:到 2026 年,档 1、2、3 已经基本可用。 坏消息:档 4 还有差距,复杂项目本地 AI 还跟不上 Claude / GPT-5。

9.3 三大本地编程主力模型

Qwen 2.5 Coder(首选)

阿里出品,2024 年底发布,2026 年 4 月仍是开源编程模型的天花板。

版本 大小 适合 HumanEval 得分
Qwen 2.5 Coder 1.5B ~1 GB 代码补全(FIM) 60%
Qwen 2.5 Coder 7B ~4.7 GB 16 GB 内存主力 78%
Qwen 2.5 Coder 14B ~9 GB 24 GB 内存主力 84%
Qwen 2.5 Coder 32B ~20 GB 32 GB+ 主力 92%

支持 92 种编程语言。

DeepSeek Coder V2 / DeepSeek-R1

DeepSeek 出品,特别擅长复杂逻辑推理和算法题。

版本 大小 适合
DeepSeek Coder V2 16B ~9 GB 中型项目
DeepSeek-R1 7B ~4.7 GB 算法题 / 数学
DeepSeek-R1 14B ~9 GB 复杂调试

特色:DeepSeek-R1 的"思考过程"对调试 bug 特别有帮助——它会一步步告诉你"我在想什么、我为什么觉得问题在这"。

CodeGemma / StarCoder2(次选)

模型 大小 备注
CodeGemma 7B ~4.7 GB Google 出品,纯代码补全好
StarCoder2 15B ~9 GB BigCode 出品,多语言均衡

9.4 工具选型:Continue / Cline / Cursor 怎么挑

Continue(推荐,最主流)

  • 开源、免费
  • 支持 VS Code、JetBrains 全家桶
  • 完美兼容 Ollama / LM Studio / OpenAI 格式
  • 提供"补全(autocomplete)"、"对话(chat)"、"行内编辑(edit)"三大功能
  • 小白和老手都适用

Cline(原 Claude Dev)

  • 主打"Agent"风格,会主动读项目文件、运行命令、修改多个文件
  • 适合复杂的"让 AI 完整完成一个 task"场景
  • 配合本地大模型(如 Qwen 2.5 Coder 32B)效果不错
  • 适合中级以上用户

Cursor 的"本地模型"模式

Cursor IDE 自身是云端的,但它有"自定义模型"模式:

  1. 设置 → Models → 添加 Override OpenAI Base URL
  2. http://localhost:11434/v1
  3. 选择本地模型名(如 qwen2.5-coder:32b

这样 Cursor 的 Chat、Composer 都会调用你本地模型。 但要注意:Cursor 的 Tab 自动补全(fast complete)目前仍依赖云端,不能完全本地化。

Roo Code、Aider、Avante

  • Roo Code:Cline 的分叉,更新更快,社区活跃
  • Aider:CLI 命令行的代码 Agent,习惯终端的用户首选
  • Avante:Neovim 插件,配置 Ollama 即可

9.5 5 分钟把 Continue 接到本地 Ollama

第 1 步:装 Ollama 并下编程模型

ollama pull qwen2.5-coder:7b
ollama pull qwen2.5-coder:1.5b   # 用于补全(更快)

第 2 步:装 Continue 插件

VS Code → 扩展商店 → 搜 "Continue" → 安装。

第 3 步:配置 Continue

第一次打开 Continue 会弹出引导,跳过它。 按 Cmd/Ctrl + Shift + P → "Continue: Open config.json"。

把内容改为:

{
  "models": [
    {
      "title": "Qwen 2.5 Coder 7B (Chat)",
      "provider": "ollama",
      "model": "qwen2.5-coder:7b",
      "apiBase": "http://localhost:11434"
    }
  ],
  "tabAutocompleteModel": {
    "title": "Qwen 2.5 Coder 1.5B (Autocomplete)",
    "provider": "ollama",
    "model": "qwen2.5-coder:1.5b",
    "apiBase": "http://localhost:11434"
  },
  "embeddingsProvider": {
    "provider": "ollama",
    "model": "nomic-embed-text",
    "apiBase": "http://localhost:11434"
  }
}

保存后,重启 VS Code。

第 4 步:试一下

打开任意代码文件:

  • 写代码:随便敲一行,停顿,会有灰色补全文字飘出来。按 Tab 接受。
  • 聊天Cmd + L 打开 Continue 侧边栏,问"这段代码做了什么"。
  • 行内修改:选中一段代码,Cmd + I,输入"加上类型标注"。

整个工作流和 Cursor / Copilot 几乎一致——但你的代码一个字符都没出本机

9.6 4 个高频场景的实战提示词

场景 1:解释代码

请用中文解释下面这段代码:

[贴入代码]

要求:
1. 用一句话说出"这段代码的主要目的是什么"
2. 逐行注释关键逻辑(不要每行都注,挑重要的)
3. 指出 1 处可能的"性能瓶颈"或"潜在 bug"
4. 给一个 5 行以内的"重构建议"

场景 2:调试 bug

我有这段代码:

[贴入代码]

期望它做:[描述]
实际它做了:[描述]
报错信息:[贴入]

请你按以下步骤分析:
1. 你最高怀疑的 3 处可能出错的地方
2. 你最高怀疑的那一处的"修复方案"
3. 给出修复后的完整代码
4. 解释这个 bug 为什么会发生

DeepSeek-R1 在调试场景上特别强——它会显式给出推理过程。

场景 3:写测试

请为下面这个函数写完整的单元测试:

[贴入函数]

要求:
1. 使用 [pytest / Jest / JUnit] 框架
2. 至少覆盖 5 种情况:正常、边界、空输入、错误输入、性能压力
3. 每个测试加一行注释说明"这个测试在测什么"

场景 4:重构代码

请重构下面这段代码,目标是:[更易读 / 更高性能 / 拆分成多个函数 / 用现代语法]

[贴入代码]

要求:
1. 保持函数签名不变(除非必要)
2. 重构后的版本要附带说明"我改了哪 3 处、为什么"
3. 如果有不确定的地方,明确告诉我"建议保持原样"

9.7 5 个语言场景的实测

下面是作者 2026 年 4 月用 Qwen 2.5 Coder 32B 实测各语言的体验:

语言 评分 备注
Python 95 完全可替代 Copilot
JavaScript / TypeScript 90 React、Vue 都好
Go 88 标准库熟悉
Java 85 Spring Boot 没问题
Rust 80 简单项目可以,复杂宏迷糊
C++ 75 模板部分常出错
Swift 70 iOS 项目知识相对少
SQL 92 复杂 JOIN、窗口函数都行
Shell / Bash 90 写一次性脚本特别快
Markdown / 配置文件 95 全部 OK

9.8 本地 vs Copilot vs Cursor 的诚实对比

维度 本地 Qwen 2.5 Coder 32B GitHub Copilot Cursor
代码补全速度 慢(300ms+) 极快(100ms) 快(150ms)
补全准确率 75% 85% 90%
代码理解能力
多文件 Agent 弱(需要 Cline) 中等(最近支持)
隐私 完全本地 上传 上传
成本 一次硬件,长期免费 $10/月 $20/月
公司合规 完全合规 大多数公司禁用 大多数公司禁用
离线 不可 不可

结论

  • 你公司允许 Copilot/Cursor → 用云端,本地作为备用
  • 你公司禁用云端 → 本地是唯一答案
  • 你想"既要云端能力,又想保护隐私" → 用本地补全 + 用云端做大方案设计的混合方案

9.9 一个有趣的混合方案:双引擎

下面这个配置在很多本地 AI 老玩家中流传:

  • Tab 补全:本地 Qwen 2.5 Coder 1.5B(快、隐私)
  • Chat / 复杂任务:云端 Claude / GPT-5(准、强)
  • 重构 / 多文件:本地 Cline + Qwen Coder 32B(隐私 + 多步)

Continue 完美支持这种"按场景路由"的配置。

9.10 本地 Agent 写代码的最新进展

2026 年最热的话题之一是本地 Agent——让本地 AI 能像 Cursor Composer / Cline 那样自主:

  1. 读项目文件
  2. 决定要改哪些
  3. 实际改写
  4. 跑测试
  5. 看结果
  6. 再改

主流方案

  • Cline + Qwen 2.5 Coder 32B:当前最稳的本地 Agent 组合
  • Roo Code:Cline 分支,自带"Local Mode"
  • Aider + DeepSeek-R1:CLI 派最爱

典型用法

请你帮我重构 src/services 目录下所有 .ts 文件:
1. 把所有 fetch 调用改成 axios
2. 加上 try/catch 错误处理
3. 给每个文件加上 JSDoc 注释
4. 改完之后跑一下 npm run test,确认没破

每修改一个文件后告诉我"已修改 X,改了 Y 处"。

Cline 会在右侧聊天窗里一步步把整个任务做完——全程本地

9.11 一些进阶技巧

技巧 1:用专门的"代码模型 + 通用模型"组合

- qwen2.5-coder:32b → 写 / 改代码
- qwen3:14b → 解释代码、写文档、做架构思考

切换:在 Continue 顶部下拉框里随时换。

技巧 2:为代码加索引

Continue 支持把整个项目目录索引到本地(用 nomic-embed-text)。 这样你在 Chat 里问"项目里哪里用到了 UserService",它能自动找出来。

启用方法:Continue 配置里设置 embeddingsProvider(前面 9.5 已经写了)。

技巧 3:用 Aider 做"提交粒度的修改"

Aider 强制让每次修改都对应一个 git commit,适合项目代码追溯

aider --model ollama/qwen2.5-coder:32b --no-auto-commits

技巧 4:把"代码风格规范"写进 system prompt

你是我的代码助手。请遵守:
1. 我用 Python 3.12,使用 type hints
2. 函数参数 ≥ 4 个时强制用 keyword-only
3. 异常处理:永远不要 catch Exception,要 catch 具体异常
4. 注释用中文,docstring 用中文
5. 私有方法以 _ 开头
6. 测试用 pytest,文件名 test_xxx.py

固化到 Continue 的 system prompt,每次写代码都自动遵守。

9.12 公司里部署本地编程 AI 的注意事项

如果你想给团队搭一个"集中的本地代码 AI":

方案:一台机器跑 Ollama Server,多人共用

  1. 找一台带 RTX 4090 / 5090 或 Mac Studio Ultra 的机器
  2. 装 Ollama,让它监听 0.0.0.0:11434(公司局域网)
  3. 团队成员在 Continue 里把 apiBase 改为该机器的内网 IP
  4. 所有人共享一个本地大模型,速度和成本极佳

注意:

  • 加上 IP 白名单或反向代理(如 Nginx 加 Basic Auth)防止外网误访问
  • 配合公司 VPN,远程办公也能用
  • 监控显存占用,超过 80% 就该升级或加机

9.13 本章小练习

练习 1:把 Continue 接到 Ollama

按 9.5 节做完。让本地 AI 在 VS Code 里替你补一行代码。 截图发给一个开发者朋友——他会很想抄你的配置。

练习 2:用 9.6 场景 2 调一个 bug

找你最近遇到的一个真实 bug,用调试提示词丢给本地 AI。 亲身感受 DeepSeek-R1 的"思考过程"对你的启发

练习 3:尝试一次本地 Agent

装 Cline,让它给你一个旧项目加一份 README.md:

请你读一下我项目根目录的所有文件,给我生成一份 README.md:
1. 项目简介(一句话)
2. 安装步骤
3. 快速开始(核心命令)
4. 目录结构说明
5. 贡献指南
完成后告诉我"已生成 README.md,写了 X 字"。

体验一下"本地 Agent 真的能干活"是什么感觉。

9.14 一句话记住

能用 Cursor 就用 Cursor,但当你在客户内网、在合规严格的公司、在写涉密代码——本地编程 AI 是你唯一的依靠。

下一章 第十章 · 本地文档总结与会议纪要,我们把本地 AI 的"读文档"能力打通。