
手把手教你,零成本把 AI 编程助手装进 VS Code,DeepSeek-V3 满血版本地运行,代码补全/重构/调试/单测一键搞定
预计完成时间: 2-3 小时
所需技能: 会用 VS Code、基础命令行
适合人群: 想提升编码效率但不想花 Cursor 订阅费的同学
写过代码的人都有过这种体验:
Cursor 解决了这些问题——它把 AI 深度融合进编辑器,代码补全、重构、解释、生成单测,全部在编辑器里完成。
但问题是:Cursor 订阅费每月 20 美刀,而且代码要上传到第三方服务器。
那怎么办?
答案就是今天要讲的 Cline + DeepSeek 本地方案:
一句话:Cline 就是开源版 Cursor,DeepSeek 就是免费版 GPT-4o。
Cline 是一个 VS Code 插件,它把 AI 大模型"装进"你的编辑器。
你可以把它理解成:
核心能力:
| 功能 | 说明 |
|---|---|
| 代码补全 | 实时预测你下一行要写什么(比 Copilot 更懂你) |
| 选中即对话 | 选中一段代码,直接问"这段代码干嘛的" |
| 自动重构 | “帮我把这个函数拆成三个小函数”——AI 直接改你的文件 |
| 生成单测 | 选中一个函数,“帮我写单元测试”——自动生成测试文件 |
| 项目级理解 | 自动读取项目结构,AI 知道你整个项目在干嘛 |
| 对比项 | Cline(本教程方案) | Cursor(商业版) | GitHub Copilot |
|---|---|---|---|
| 费用 | ???? 完全免费 | ???? $20/月 | ???? $10/月 |
| 模型选择 | ???? 任意 OpenAI 格式模型 | ???? 只能用 Cursor 提供的 | ???? 只能用 Copilot 的 |
| 隐私 | ???? 可完全本地运行 | ???? 代码上传云端 | ???? 代码上传云端 |
| 项目理解 | ???? 自动读取全项目 | ???? 自动读取全项目 | ???? 只理解当前文件 |
| 代码修改 | ???? 直接改文件 | ???? 直接改文件 | ???? 只给建议 |
结论: Cline = Cursor 的能力 + 免费 + 隐私安全。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
┌─────────────────────────────────────────────────┐ │ 你的 VS Code │ │ ┌──────────┐ │ │ │ Cline 插件 │ │ │ │ - 读取项目文件 │ │ │ │ - 调用 AI 模型 │ │ │ │ - 把 AI 的回答写回文件 │ │ │ └──────────┘ │ │ ↓ │ │ ┌─────────────────────────────┐ │ │ │ 模型后端(三选一) │ │ │ │ ① DeepSeek API(推荐) │ │ │ │ ② Ollama 本地模型(隐私优先)│ │ │ │ ③ OpenAI API(有钱可选) │ │ │ └─────────────────────────────┘ │ └─────────────────────────────────────────────────┘ |
已经有 VS Code 的可以跳过。
下载地址:https://code.visualstudio.com/
安装完成后,打开 VS Code,确认可以正常运行。
安装完成后,左侧会出现一个 Cline 图标(紫色小机器人)。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# 创建工作目录 mkdir -p ai-coding-workspace cd ai-coding-workspace
# 创建测试项目 mkdir -p hello-project/src mkdir -p hello-project/test
# 创建一个示例文件 touch hello-project/src/main.py touch hello-project/test/test_main.py touch hello-project/README.md |
用 VS Code 打开 ai-coding-workspace 文件夹。
Cline 支持三种模型后端,你需要选一个:
| 方案 | 优点 | 缺点 | 推荐人群 |
|---|---|---|---|
| ① DeepSeek API | 便宜(约 Cursor 1/50)、模型能力强 | 需要联网 | 大多数人 |
| ② Ollama 本地模型 | 完全离线、隐私最好 | 需要好显卡、速度慢一点 | 隐私敏感者 |
| ③ OpenAI API | 模型能力最强 | 贵 | 不差钱的人 |
???? 推荐:大多数人选 方案①(DeepSeek API),性价比最高。
如果你 code 涉及商业机密,选 方案②(Ollama 本地)。
???? 费用说明:DeepSeek-V3 输入 $0.14 / 1M tokens,输出 $0.28 / 1M tokens。
正常编程使用,一个月大概 ¥5-20,比 Cursor 便宜太多。
配置完成后,底部状态栏会显示 「Cline: Ready」。
在 Cline 侧边栏的输入框中,输入:
|
1 |
你好,介绍一下你自己,以及你擅长什么? |
AI 会回复类似:
你好!我是 DeepSeek,一个擅长编程的 AI 助手。我可以帮你写代码、解释代码、重构代码、生成单元测试……
再测试代码能力,输入:
|
1 2 3 4 |
用 Python 写一个快速排序,要求: 1. 使用一行代码完成分区 2. 添加详细注释 3. 包含单元测试 |
如果你看到了代码输出,说明配置成功!?
如果你选了「方案① DeepSeek API」,可以跳过这一阶段的第 8-10 步,直接看第四阶段。
如果你之前看过我的《Ollama 本地大模型教程》,这步已经完成了。
否则,快速安装:
Windows:
打开 https://ollama.com/download,下载安装包,一路下一步。
验证安装:
|
1 |
ollama --version |
Cline 对代码理解最好的本地模型是 DeepSeek-Coder:
|
1 2 3 4 5 6 7 8 |
# 推荐:DeepSeek-Coder 1.3B(轻量,4GB 内存可跑) ollama pull deepseek-coder:1.3b
# 或者:DeepSeek-Coder 6.7B(更强,需要 8GB 内存) ollama pull deepseek-coder:6.7b
# 或者:Qwen2.5-Coder 7B(阿里出品,也很强) ollama pull qwen2.5-coder:7b |
配置完成后,状态栏显示 「Cline: Ready (Ollama)」。
下面我们用一个真实项目,带你把 Cline 的核心功能全部过一遍。
在 ai-coding-workspace/hello-project/src/main.py 中,放入一段"待重构"的代码:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# src/main.py import os import json
def read_config(path): f = open(path, 'r') data = json.load(f) f.close() return data
def write_config(path, data): f = open(path, 'w') json.dump(data, f) f.close()
def get_value(config, key): if key in config: return config[key] return None
def set_value(config, key, value): config[key] = value return config
def print_config(config): for k in config: print(f"{k} = {config[k]}")
# 主函数 def main(): config = read_config('config.json') print_config(config) set_value(config, 'version', 2) write_config('config.json', config)
if __name__ == '__main__': main() |
AI 会回答:
read_config 函数的作用是:
- 打开指定路径的 JSON 文件
- 读取并解析 JSON 内容
- 返回解析后的字典对象
?? 问题:这个函数没有错误处理,如果文件不存在会崩溃。
继续选中 read_config 和 write_config 两个函数,在 Cline 侧边栏输入:
|
1 2 3 4 |
帮我重构这两个函数: 1. 添加错误处理(文件不存在、JSON 格式错误) 2. 使用 with 语句自动关闭文件 3. 添加类型注解 |
Cline 会做什么:
重构后的代码:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def read_config(path: str) -> dict: """读取配置文件,返回字典对象""" try: with open(path, 'r', encoding='utf-8') as f: return json.load(f) except FileNotFoundError: print(f"错误:配置文件 {path} 不存在") return {} except json.JSONDecodeError: print(f"错误:配置文件 {path} 格式不正确") return {}
def write_config(path: str, data: dict) -> None: """将字典对象写入配置文件""" try: with open(path, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2) except IOError as e: print(f"错误:无法写入配置文件:{e}") |
???? 这就是 Cline 比 Copilot 强的地方——Copilot 只给建议,Cline 直接改你的文件。
选中 read_config 函数,在 Cline 中输入:
|
1 2 3 4 5 |
为这个函数生成完整的单元测试,使用 pytest 框架。 要求覆盖: 1. 正常读取场景 2. 文件不存在场景 3. JSON 格式错误场景 |
Cline 会自动在 test/ 目录下创建 test_main.py:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# test/test_main.py import pytest import json import tempfile import os from src.main import read_config
def test_read_config_normal(): """测试正常读取配置文件""" with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.json') as f: json.dump({"name": "test", "version": 1}, f) temp_path = f.name
result = read_config(temp_path) assert result == {"name": "test", "version": 1} os.unlink(temp_path)
def test_read_config_not_found(): """测试文件不存在场景""" result = read_config('non_existent.json') assert result == {}
def test_read_config_invalid_json(): """测试 JSON 格式错误场景""" with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.json') as f: f.write('{invalid json}') temp_path = f.name
result = read_config(temp_path) assert result == {} os.unlink(temp_path) |
在 main.py 中,找到一个函数还没写完的地方,比如:
|
1 2 |
def calculate_total(items): # 在这里停留 2 秒,Cline 会自动提示 |
Cline 会弹出补全建议(灰色半透明文字):
|
1 2 |
total = sum(item['price'] * item['quantity'] for item in items) return round(total, 2) |
按 Tab 接受补全。
???? 补全触发时机:
- 输入 def 后等待 1 秒
- 输入 # 注释后等待 1 秒
- 输入函数调用的一半后等待 1 秒
在 Cline 侧边栏中输入(不需要选中任何代码):
|
1 |
我的项目是做什么的?有哪些函数?它们之间的关系是什么? |
Cline 会做什么:
AI 的回答:
你的项目是一个配置文件管理工具。
核心函数:
- read_config:读取配置文件
- write_config:写入配置文件
- get_value:获取配置项
- set_value:设置配置项
- print_config:打印配置
函数调用关系:
main() → read_config() → print_config() → set_value() → write_config()建议改进:
- 添加日志模块
- 使用 argparse 支持命令行参数
- 添加配置校验逻辑
Cline 允许你设置"系统提示词"——告诉 AI 你的编码风格和偏好。
在 Cline 侧边栏底部,点击「Settings」→「System Prompt」,填入:
|
1 2 3 4 5 6 7 8 |
你是一个 Python 高级开发工程师,帮我写代码时遵循以下规则:
1. 使用 Python 3.10+ 语法(类型注解、match-case、海象运算符) 2. 严格遵循 PEP 8 规范 3. 所有函数必须有 docstring(Google 风格) 4. 变量名使用 snake_case,类名使用 PascalCase 5. 优先使用标准库,避免过度依赖第三方包 6. 错误处理使用具体的异常类型,不要用 bare except |
保存后,Cline 的所有回答都会遵循这些规则。
Cline 支持同时配置多个模型,你可以:
切换模型:点击 Cline 侧边栏顶部的模型名称,选择你想用的。
高级玩法: 让两个模型"互审代码"——
|
1 2 3 4 5 6 7 8 9 |
# 第一步:用 DeepSeek-Coder 写代码 (选中代码,让 AI 生成)
# 第二步:切换到 Qwen2.5,输入: 请审查这段代码的: 1. 逻辑错误 2. 边界条件处理 3. 性能问题 4. 代码风格问题 |
在 VS Code 的 keybindings.json 中添加:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
// 打开方式:Ctrl+Shift+P → "Preferences: Open Keyboard Shortcuts (JSON)" [ { "key": "Ctrl+Shift+L", "command": "cline.openSidebar" }, { "key": "Ctrl+Shift+E", "command": "cline.explainCode" }, { "key": "Ctrl+Shift+R", "command": "cline.refactorCode" }, { "key": "Ctrl+Shift+T", "command": "cline.generateTests" } ] |
现在你可以:
如果你的项目需要在 Docker 容器中运行,Cline 也支持!
场景: 你的项目依赖特定的 Python 版本或系统库,本地环境不满足。
解决方案: 让 Cline 在 Docker 容器中执行代码。
在 Cline 设置中,启用「Execute in Docker」:
|
1 2 3 4 5 6 7 8 9 10 |
# 项目根目录创建 Dockerfile FROM python:3.12-slim
WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt
COPY . .
CMD ["python", "src/main.py"] |
在 Cline 中输入:
|
1 |
在 Docker 容器中运行我的项目,并告诉我输出结果。 |
Cline 会自动:
在 ai-coding-workspace 下创建 flask-demo/ 项目:
|
1 2 3 |
mkdir -p flask-demo/{src,test,templates,static} touch flask-demo/src/app.py touch flask-demo/requirements.txt |
在 requirements.txt 中写入:
|
1 2 |
Flask>=3.0 pytest>=8.0 |
在 Cline 侧边栏中输入:
|
1 2 3 4 5 6 7 8 9 10 11 |
创建一个 Flask 应用,包含以下功能: 1. GET /api/items - 返回所有物品列表(从内存数据库) 2. POST /api/items - 创建新物品 3. GET /api/items/<id> - 获取单个物品 4. PUT /api/items/<id> - 更新物品 5. DELETE /api/items/<id> - 删除物品
要求: - 使用 Flask 的 jsonify - 添加详细的注释 - 包含错误处理 |
Cline 会生成: src/app.py
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
from flask import Flask, jsonify, request
app = Flask(__name__)
# 内存数据库(模拟) items = [ {"id": 1, "name": "笔记本电脑", "price": 5999}, {"id": 2, "name": "耳机", "price": 299}, ]
@app.route('/api/items', methods=['GET']) def get_items(): """获取所有物品""" return jsonify({"items": items})
@app.route('/api/items', methods=['POST']) def create_item(): """创建新物品""" data = request.get_json()
if not data or 'name' not in data: return jsonify({"error": "Missing 'name' field"}), 400
new_item = { "id": items[-1]['id'] + 1 if items else 1, "name": data['name'], "price": data.get('price', 0) } items.append(new_item) return jsonify(new_item), 201
# ...(其他路由省略,Cline 会帮你生成完整版)
if __name__ == '__main__': app.run(debug=True) |
选中整个 app.py,输入:
|
1 |
为这个 Flask 应用生成完整的单元测试,使用 pytest + Flask 的 test client。 |
Cline 会在 test/test_app.py 中生成:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import pytest from src.app import app
@pytest.fixture def client(): app.config['TESTING'] = True with app.test_client() as client: yield client
def test_get_items(client): """测试 GET /api/items""" response = client.get('/api/items') assert response.status_code == 200 data = response.get_json() assert 'items' in data assert len(data['items']) == 2
# ...(更多测试用例) |
运行测试:
|
1 2 |
cd flask-demo pytest test/test_app.py -v |
如果测试失败,直接把错误信息复制粘贴到 Cline 中:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
运行测试时报错:
============================= test session starts ============================== collected 5 items
test/test_app.py F..F. [100%]
================================ FAILURES ================================= __________________________ test_create_item ___________________________
def test_create_item(client): response = client.post('/api/items', json={'name': 'Test Item'}) > assert response.status_code == 201 E assert 400 == 201 E + where 400 = <Response 82 bytes [400 BAD REQUEST]>.status_code
test/test_app.py:15: AssertionError |
Cline 会自动分析错误,并给出修复方案:
错误原因:你的测试发送了 json= 参数,但 Flask 默认不支持。
修复方法:在 app.py 顶部添加:
1
from flask import request
并确保 request.get_json() 被正确调用。
A: 按 Ctrl+Shift+P,输入 Cline: Focus on Sidebar。
如果还不行,尝试:
A: 三个可能原因:
A: 正常现象,本地模型比云端 API 慢 5-10 倍。
加速方案:
A: VS Code 内置了 Git 版本控制。
每次 Cline 修改文件前,先按 Ctrl+Shift+G 打开源代码管理,点击「+」暂存更改。
如果 AI 改错了,右键文件 →「撤消上次提交」。
最佳实践: 每次让 Cline 大改之前,先 git commit 一次。
A: 在项目根目录创建一个 CLINE.md 文件(类似 README.md),写入:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# 项目说明
## 项目简介 这是一个 Flask 后端 API 项目,提供物品管理功能。
## 目录结构 - `src/`:源代码 - `test/`:单元测试 - `templates/`:Jinja2 模板 - `static/`:静态文件
## 编码规范 - 使用 Python 3.12+ 语法 - 所有 API 返回 JSON 格式 - 错误处理使用 HTTP 状态码
## 常用命令 - 运行项目:`python src/app.py` - 运行测试:`pytest test/ -v` - 代码检查:`flake8 src/` |
Cline 每次对话时,会自动读取 CLINE.md,从而"理解"你的项目。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
┌──────────────────────────────────────────────────────────┐ │ 你的开发环境 │ │ │ │ ┌──────────────┐ ┌──────────────────┐ │ │ │ VS Code │ │ Cline 插件 │ │ │ │ (编辑器) │ ←──→ │ (AI 编程助手) │ │ │ └──────────────┘ └──────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────┐ │ │ │ 模型后端(三选一) │ │ │ │ ① DeepSeek API(推荐,便宜) │ │ │ │ ② Ollama 本地(隐私) │ │ │ │ ③ OpenAI API(贵但强) │ │ │ └──────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────┐ │ │ │ 你的项目代码 │ │ │ │ ? AI 帮你写/改/测/解释 ↗ │ │ │ └──────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────┘ |
| 知识点 | 掌握程度 |
|---|---|
| Cline 插件安装与配置 | ? |
| DeepSeek API 接入 | ? |
| Ollama 本地模型配置 | ? |
| 代码解释(选中即问) | ? |
| 代码重构(AI 直接改文件) | ? |
| 生成单元测试 | ? |
| 实时代码补全 | ? |
| 项目级理解(全项目上下文) | ? |
| 自定义系统提示词 | ? |
| 多模型切换 | ? |
| 快捷键配置 | ? |
| Docker 容器开发集成 | ? |
| Flask 实战项目 | ? |
学会 Cline 之后,可以继续探索: