【无标题】
CodePartner:用本地模型 + ReAct Agent 搭建自己的 VSCode AI 编程助手
本文作者:jialinguo
项目已开源:https://github.com/gjl-0810/code-partner-expand
VSCode 扩展:marketplace.visualstudio.com/items?itemName=jialinguo.codepartner
适合人群:AI Agent 学习者、本地大模型爱好者、注重代码隐私的开发者
一、为什么要做一个「本地」AI 编程助手?
2024 年以来,GitHub Copilot、Cursor、CodeBuddy 等 AI 编程工具快速普及。但它们有一个共同前提:你的代码必须发送到云端。
对于很多场景,这是不可接受的:
- 企业内部代码,有合规要求,不能出内网
- 个人学习项目,不想把自己的代码训练进大厂模型
- 断网环境(飞机、内网开发机),完全无法使用
于是问题来了:能不能在本地,用自己部署的模型,跑一个真正能「动手改代码」的 AI Agent?
这就是 CodePartner 的出发点。
二、和现有免费插件的核心区别
很多读者会问:「VSCode 上已经有 Cline、Continue、Roo-Cline 了,为什么还要做 CodePartner?」
一句话总结:CodePartner 是「教学级开源实现」,而 Cline/Continue 是「产品级黑盒」。
| 维度 | Cline / Continue / Roo | CodePartner |
|---|---|---|
| 运行方式 | 云端 API(需 API Key / 付费) | 纯本地 Ollama(零费用) |
| 代码是否出网 | 是(发到 Anthropic/OpenAI) | 否(模型在本地跑) |
| 架构是否开源 | 前端开源,Agent 逻辑封装 | 全栈开源(TS 插件 + Python 后端 + ReAct 循环) |
| 能改代码吗 | 能(Cline 最强) | 能(write_file + diff 确认) |
| 适合学习 Agent 吗 | 代码量大、封装深,难啃 | 刻意简化,2000 行核心逻辑,适合跟着读 |
| 模型要求 | 需要强模型(Claude/GPT-4) | 9B 小模型可跑(qwen3.5:9b) |
一句话区别:Cline 是「你用它的产品」,CodePartner 是「你学它的实现」。
三、CodePartner 做了什么?
3.1 架构:前端插件 + 本地后端 + Ollama
┌─────────────────┐ HTTP/SSE ┌──────────────────┐ OpenAI API ┌──────────────┐
│ VSCode 插件 │ ──────────────▶ │ Python FastAPI │ ──────────────▶ │ Ollama │
│ (TypeScript) │ │ (Agent 核心) │ │ (qwen3.5:9b)│
│ │ ◀────────────── │ │ ◀────────────── │ │
│ Chat Webview │ SSE 流式回复 │ ReAct 循环 │ 本地推理 │ 100% 离线 │
└─────────────────┘ └──────────────────┘ └──────────────┘
关键设计决策:
- 插件不直连 Ollama,而是连本地 FastAPI 后端(端口 8765)
- 后端负责:ReAct 循环、工具调用、SSE 流式输出
- 这样做的好处:Agent 逻辑完全在 Python 里,方便你改(不用碰 TypeScript)
3.2 ReAct Agent:让模型「先想再干」
CodePartner 的核心是一个 ReAct(Reasoning + Acting)循环,代码在 server/agent_wrapper.py。
什么是 ReAct?
简单说:不让模型直接输出答案,而是让它交替进行「思考 → 调工具 → 看结果 → 再思考」,直到任务完成。
用户提问
│
▼
[Thought] 我需要先搜索代码,了解项目结构
│
▼
[Action] workspace_search("ReAct")
│
▼
[Observation] 找到 7 个文件...
│
▼
[Thought] 现在我理解了,可以写代码了
│
▼
[Action] write_file("xxx.py", "...")
│
▼
[Observation] 文件已写入
│
▼
[Final Answer] 任务完成,我帮你创建了...
CodePartner 的 ReAct 实现细节(适合学习):
- 最大步数可配(
agent.maxSteps,默认 8 步) - 每步超时保护(防止模型死循环)
- 工具调用结果通过 SSE 实时推送到前端(用户能看到「工具正在运行」)
- 完成度自动判定:如果模型「该写代码却只输出计划」,自动重组 prompt 续跑(最多 2 轮)
3.3 三种对话模式
CodePartner 提供三种模式,对应不同使用场景:
| 模式 | 说明 | 适用场景 |
|---|---|---|
| Craft | 全自动 ReAct,模型可自由调工具 | 让 AI 帮你改代码、写功能 |
| Ask | 禁用所有工具,纯问答 | 问概念、让 AI 解释代码 |
| Plan | 先让模型输出 markdown 计划,你确认后再执行 | 大改动,想先看方案 |
Plan 模式的交互流程(这是 CodePartner 的特色):
你:帮我重构这个函数的错误处理
[Plan 模式]
模型输出:
## 重构计划
1. 把 try/except 改成 Result 类型
2. 新增 error_types.py
3. ...
[你点「确认执行」]
→ 模型才开始真正改代码
3.4 工具箱:模型能「动手」做什么?
CodePartner 给模型配备了 6 个工具(代码在 server/tools/):
| 工具 | 功能 | 安全边界 |
|---|---|---|
workspace_search |
ripgrep 搜代码(无 ripgrep 降级 Python) | 仅搜索,不改文件 |
read_file |
读文件(支持行号范围) | 路径越界拦截 |
list_directory |
列目录 | 仅列表 |
write_file |
写文件 | 落盘前 diff 预览 + 用户确认 |
web_search |
DuckDuckGo 搜文档 | 无需 API Key |
find_symbol / find_references / outline |
代码理解三件套 | 不依赖 LSP |
write_file 的安全设计(这是重点):
- 模型调用
write_file后,不立刻落盘 - 插件用
vscode.diff展示红绿对比预览 - 弹窗让用户确认(「应用」/「拒绝」/「修改」)
- 用户点确认后,才真正写入磁盘
3.5 Memory 管理:让 Agent 记住「你是谁」
CodePartner 的 Memory 系统分两层:
第一层:会话级 Memory(workspaceState)
- 每个 VSCode 工作区独立的会话列表
- 会话内容存在
workspaceState里,关闭 VSCode 不丢失 - 支持多会话隔离 + 重命名
第二层:Skill Memory(.codepartner/skills.json)
- 你可以把「常用操作流程」写成 Skill(Markdown 文件)
- 模型通过
find_skill工具按需加载 Skill - 相当于给 Agent 配了一个「操作手册知识库」
为什么这样设计?
Agent 的 Memory 不在于「记住所有对话」,而在于**「在需要时找到正确的知识」**。Skill 系统就是这个思路的工程实现。
四、快速上手
4.1 前置条件
| 软件 | 版本 | 说明 |
|---|---|---|
| Ollama | latest | https://ollama.com/download |
| Python | 3.10+ | 后端运行环境 |
| Node.js | 18+ | VSCode 插件要求 |
| VSCode | 1.85+ | 插件运行环境 |
⚠️ 本插件完全依赖本地 Ollama,安装后必须先执行:
ollama pull qwen3.5:9b # 约 5.5GB,首次下载需等待 ollama serve # 启动 Ollama 服务(默认 11434 端口)
4.2 安装 CodePartner
方式一:VSCode 扩展市场(推荐)
在 VSCode 扩展面板搜索 "CodePartner"
或访问:https://marketplace.visualstudio.com/items?itemName=jialinguo.codepartner
方式二:下载 .vsix 手动安装
git clone https://github.com/gjl-0810/code-partner-expand.git
cd codepartner/extension
npm install
npm run package # 生成 codepartner-0.2.1.vsix
code --install-extension codepartner-0.2.1.vsix
4.3 启动后端
cd codepartner
./scripts/start.sh
# 等待输出:Application startup complete
# 验证
curl http://127.0.0.1:8765/health
# 预期返回:{"status":"ok","model":"qwen3.5:9b"}
4.4 开始使用
- 打开 VSCode,左侧活动栏会出现 CodePartner 图标(
</>) - 点击打开 Chat 面板
- 顶部下拉菜单选择模型(自动检测本地 Ollama 模型)
- 开始对话!
五、适合学习的代码模块
如果你想通过 CodePartner 学习 AI Agent 搭建,建议按这个顺序读代码:
5.1 前端(TypeScript,~3000 行)
| 文件 | 学什么 |
|---|---|
extension/src/chatPanel.ts |
VSCode Webview 通信、SSE 流式渲染 |
extension/src/apiClient.ts |
前端如何调本地后端 API |
extension/src/extension.ts |
VSCode 插件入口、命令注册 |
5.2 后端(Python,~2000 行)
| 文件 | 学什么 |
|---|---|
server/agent_wrapper.py |
ReAct 循环核心(最重要!) |
server/tools/workspace_search.py |
工具实现范例 |
server/tools/write_file.py |
带确认的工具实现 |
server/config.yaml |
系统提示词、工具描述配置 |
5.3 配置文件(直接可改)
| 文件 | 改什么 |
|---|---|
server/config.yaml |
改 system prompt、工具列表、模型参数 |
extension/package.json |
改插件配置项(Settings 里出现) |
六、和 Cline 的技术对比(深入)
很多人问我:「CodePartner 和 Cline 技术上差在哪?」
6.1 模型要求
| Cline | CodePartner | |
|---|---|---|
| 推荐模型 | Claude 3.5 Sonnet(~200B) | qwen3.5:9b(9B) |
| 最低可跑 | 70B+ 量化 | 7B 可跑(质量下降) |
| 本地运行 | 需要 80GB+ 显存 | 16GB 内存可跑 |
结论:CodePartner 牺牲了「模型能力上限」,换来了「本地可跑」。
6.2 Agent 循环实现
Cline 的做法:
- TypeScript 实现,~2 万行
- 高度封装,工具调用、上下文管理、token 预算管理全在 TS 里
- 优点:产品体验好,错误处理完善
- 缺点:想学 Agent 原理?先啃 2 万行 TS
CodePartner 的做法:
- Python 实现,~2000 行(核心循环 ~500 行)
- ReAct 循环裸写,没有框架封装
- 优点:2000 行就能跑通 ReAct,适合学习
- 缺点:边界 case 处理不如 Cline 完善
6.3 工具系统
| Cline | CodePartner | |
|---|---|---|
| 工具数量 | 30+ | 6 |
| 工具实现 | TS + 高度抽象 | Python + 直白实现 |
| 新增工具 | 需懂 Cline 架构 | 改 config.yaml + 写个 Python 函数 |
如果你想自己加工具,CodePartner 的 server/tools/ 目录是最好的起点。
七、已知限制 & 后续规划
7.1 当前限制(诚实说)
- 模型能力上限:9B 模型 vs Claude,差距明显。复杂重构任务容易失败。
- 首次响应慢:qwen3.5:9b 冷启动需 30~60 秒,建议先
ollama run qwen3.5:9b预热。 - MCP 未接入:配置 UI 已做好,但还没真正连接 MCP server(规划中)。
- 行内补全质量一般:9B 非 FIM 模型,默认关闭,建议换
qwen2.5-coder:7b。
7.2 后续规划(按优先级)
- ⏳ 接入 RAG(已有引擎,待集成)
- ⏳ 真正接入 MCP(让模型能调 MCP tools)
- ⏳ 换更强代码模型(qwen2.5-coder:14b 或等待 qwen3.5:32b)
- ⏳ 多模型路由(简单任务用小模型,复杂任务自动切大模型)
八、总结
CodePartner 不是一个「更好的 Copilot」,它是一个教学项目 + 可用工具。
如果你是想学 AI Agent 的开发者:
- 把代码 clone 下来,跟着
server/agent_wrapper.py读一遍 - 改
config.yaml里的 system prompt,观察模型行为变化 - 加一个新工具(比如
run_shell_command),体会 Agent 工具设计的取舍
如果你是需要本地 AI 助手的开发者:
- 装好 Ollama + qwen3.5:9b,直接能用
- 代码不出网,适合敏感项目
- 零月费,模型自己管
九、链接 & 资源
- GitHub 仓库:https://github.com/gjl-0810/code-partner-expand(MIT 开源)
- VSCode 扩展:https://marketplace.visualstudio.com/items?itemName=jialinguo.codepartner
- 问题反馈:GitHub Issues
- 作者微信/联系方式:(可选填)
如果你觉得这个项目有帮助,欢迎 Star ⭐、转发、提 Issue。每一个反馈都是继续迭代的动力。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)