这两年本地大模型的能力提升非常明显,尤其是 7B~14B 这一档量化模型,配合工具调用和编程场景,已经可以完成不少实用的开发任务。Claude Code 是很多开发者关注的终端编程代理,官方定位是“在终端里协助完成软件工程任务”,但不少人对它的理解还停留在“必须要用 Claude 官方模型”这一步。实际上 Claude Code 支持通过环境变量把后端请求转发到自建服务,这意味着你可以把本地大模型作为它的推理后端,形成一套“代码不离本机”的全栈开发工作流。
这篇文章会围绕 Claude Code + 本地大模型这个组合,完整拆解概念、环境准备、对接原理、一个真实的全栈项目实战流程,以及高频问题排查。内容不以“最全”“最强”为卖点,但会尽量把弯路提前标出来,让你从零开始也能把整套链路跑通。
1. 背景与核心概念
1.1 Claude Code 是什么
Claude Code 是 Anthropic 推出的命令行编程代理工具,它不是一个简单的代码补全插件,而是能直接在你指定的项目目录里工作的“智能体”。它会读取项目文件、理解你的自然语言指令、搜索代码、修改多个文件、执行终端命令,甚至调用外部工具来完成任务。
和常见的 IDE 插件不同,Claude Code 的工作形态更接近“项目协作”:你给它一个需求,它会先规划,再动手改代码,最后通过 CLI 输出变更结果。它支持多文件编辑、git 集成、lint 检查、测试执行等能力,这些能力是通过一组工具调用实现的。
很多开发者第一次接触 Claude Code 时,会以为它只能配合 Anthropic 的云端模型。这是个误区。Claude Code 的底层只依赖一个“兼容 Anthropic Messages API 的端点”,如果你有本地模型服务并能把请求转换成这个协议,Claude Code 就会把本地模型当成默认推理引擎来使用。
1.2 本地大模型的作用
本地大模型指权重文件直接存放在你自己机器上的开源模型,例如 Qwen、Llama、DeepSeek 系列等。它们通过 Ollama、LM Studio、vLLM、llama.cpp 等推理框架加载,在本地提供 HTTP API。
在 Claude Code 的场景里,本地大模型承担的角色是“大脑”:它负责理解用户需求、决定下一步动作、生成代码片段、判断是否需要调用工具。只要这个大脑具备足够的代码理解和工具调用能力,Claude Code 就能驱动它完成全栈项目的开发任务。
为什么要把 Claude Code 接到本地模型上?核心原因有三类。
第一是数据隐私。公司项目、未公开代码片段、私有业务逻辑,很多人不愿意直接发给云端 API,本地模型可以做到代码不出本机。
第二是成本可控。高频开发场景下,云端 API 的 token 消耗累积很快,本地模型主要消耗电力和硬件资源,没有按 token 计费的问题。
第三是网络依赖小。本地服务部署完成后,即使外网不稳定,核心的代码生成链路也能正常工作。
当然,本地模型也有明显短板:推理速度受硬件限制,复杂指令的遵循能力不如顶级云端模型,工具调用偶尔会“答非所问”。所以更合理的定位是:用本地模型完成日常普通任务,复杂架构设计再依赖更强的模型。
1.3 适用场景与学习收益
这套组合适合以下场景:
- 个人开发者做全栈项目,希望保留一份离线可用的编程助手。
- 企业内部有隐私要求,代码不允许上传到外部 API,但有开源模型部署条件。
- 学生或独立开发者学习 AI 编程,想理解模型服务、协议转换、智能体工具调用之间的关系。
不适合的场景也很明显:如果你的硬件只能跑 3B 模型,又要处理大型企业级项目,体验大概率不如云端旗舰模型。
本文后面的实战环节,将以一个“任务管理小应用”为例,带你走通“需求描述 → Claude Code 理解 → 生成后端 → 生成前端 → 运行验证”的完整链路。学完之后,你可以把同样的方法迁移到自己的项目里。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与版本说明
先说明一点:AI 工具链迭代非常快,下面的版本和命令以 2026 年初常见环境为例。你实际安装时可能遇到更新的版本,命令略有出入,这不影响整体思路,关键是理解每一步在做什么。
2.1 硬件与操作系统要求
本地模型运行对硬件有要求。本文示例以 7B 量化模型为主,这种规模下:
- 建议内存不低于 16GB,其中模型权重通常占用 4GB~6GB。
- 如果有独立显卡,8GB 显存体验会更好。
- 纯 CPU 推理也可以跑,但响应速度会慢很多,适合测试不适合高频开发。
操作系统方面,macOS、Linux、Windows 都可以。Claude Code 的安装依赖 Node.js,Ollama 则支持三大平台。Windows 用户建议使用 PowerShell 或 Windows Terminal,不要用旧版 cmd,否则容易出现编码和路径问题。
2.2 安装 Node.js 与 Claude Code
Claude Code 是基于 Node.js 的 CLI 工具,所以第一步是安装 Node.js。建议使用 LTS 版本,安装完成后在终端确认:
bash复制node -v
npm -v
接下来通过 npm 全局安装 Claude Code:
bash复制npm install -g @anthropic-ai/claude-code
安装完成后验证:
bash复制claude --version
如果 npm install 报权限错误,说明当前用户对全局目录没有写权限,可以在用户目录下配置 npm 的全局路径,不要随意使用 sudo 强行安装。
2.3 安装 Ollama 并拉取模型
Ollama 是目前最简单易用的本地模型运行框架。macOS 和 Linux 用户可以通过官方脚本安装,Windows 用户直接下载安装包即可。
Linux/macOS 安装命令:
bash复制curl -fsSL https://ollama.com/install.sh | sh
安装完成后先启动服务:
bash复制ollama serve
然后拉取一个适合编程的模型。我推荐从 Qwen2.5-Coder 或 Llama 3.1 开始,它们对代码任务和工具调用都有不错的支持。以 Qwen2.5-Coder 7B 为例:
bash复制ollama pull qwen2.5-coder:7b
拉取完成后,检查模型列表:
bash复制ollama list
如果能看到 qwen2.5-coder:7b,说明本地模型服务已经就绪。默认 Ollama 会监听 11434 端口。
2.4 安装协议转换网关 LiteLLM
这里有一个关键点:Ollama 原生提供的是 OpenAI 兼容接口,而 Claude Code 调用的是 Anthropic Messages 协议。两者不能直接互通,所以需要一个转换网关,把 Anthropic 格式的请求翻译成 OpenAI 格式,再交给 Ollama。
LiteLLM 是一个常用的开源网关,它同时支持 OpenAI、Anthropic 等多种协议格式。安装方式:
bash复制pip install 'litellm[proxy]'
安装完成后,启动一个本地代理,把 Ollama 的模型暴露成 Claude Code 需要的端点:
bash复制litellm --model ollama_chat/qwen2.5-coder:7b --port 8080
注意,ollama_chat/qwen2.5-coder:7b 中的模型名必须与 ollama list 里的标签一致,否则会报模型不存在。启动成功后,LiteLLM 会在 8080 端口同时提供多种协议端点。
这一步是整套方案的“接线”环节,也是很多新手卡住的地方。后面第 3 节会专门讲原理。
3. Claude Code 对接本地大模型的原理拆解
3.1 Claude Code 的工作流程
Claude Code 不是把整段对话一次性丢给模型,而是采用“智能体循环”的方式工作:
- 读取用户的自然语言指令。
- 根据系统提示与项目上下文,决定是否调用工具。
- 执行工具调用,例如读取文件、编辑文件、执行命令。
- 把工具执行结果返回给模型。
- 模型根据结果继续决策,直到任务完成。
这个循环能力的强弱,直接取决于底层模型。云端 Claude 模型经过专门训练,对工具调用和长上下文非常熟练;本地模型需要依赖函数调用能力和指令遵循能力来完成同样的事。
3.2 为什么需要协议转换
Claude Code 向推理后端发送的请求,默认遵循 Anthropic Messages API 的规范,请求路径通常是 /v1/messages,请求体里包含 model、messages、max_tokens、tools 等字段。
而 Ollama 的接口是 /api/chat 或 /v1/chat/completions,字段结构和 Anthropic 规范不一样。直接让 Claude Code 请求 Ollama,Claude Code 会认为接口返回格式不对,或者直接连接失败。
LiteLLM 在其中做的事情就是“翻译”:接收 Claude Code 发来的 Anthropic 格式请求,转换成 OpenAI 格式发给 Ollama,再把 Ollama 的返回结果重新包装成 Claude Code 能识别的响应。对 Claude Code 来说,它只知道自己在和一个“Anthropic 兼容服务”通信。
3.3 关键环境变量说明
要让 Claude Code 使用本地服务,需要配置三个关键环境变量。
ANTHROPIC_BASE_URL 指定推理服务的地址。本地部署时,设置为 LiteLLM 的地址,例如:
bash复制export ANTHROPIC_BASE_URL="http://localhost:8080"
ANTHROPIC_AUTH_TOKEN 指定认证 token。本地服务不一定真的有鉴权,但 Claude Code 内部仍会携带一个 token。为了通过校验,需要设置一个自定义值,并与 LiteLLM 代理的 key 对应:
bash复制export ANTHROPIC_AUTH_TOKEN="local-test-token-123"
ANTHROPIC_MODEL 指定要使用的模型名称。部分新版 Claude Code 支持通过这个变量设置默认模型,但也有的版本只支持在会话内通过 /model 命令切换。更稳妥的做法是启动后先在会话里执行 /model,确认列表里有本地模型。
3.4 验证网关是否可用
配置环境变量之前,建议先用 curl 验证 LiteLLM 的 Anthropic 端点是否正常。下面是一个最简单的测试请求:
bash复制curl http://localhost:8080/v1/messages \
-H "Content-Type: application/json" \
-H "x-api-key: local-test-token-123" \
-H "anthropic-version: 2023-06-01" \
-d '{
"model": "qwen2.5-coder:7b",
"max_tokens": 100,
"messages": [
{"role": "user", "content": "用一句话介绍你自己"}
]
}'
如果你看到返回里包含 content 数组,说明转换链路已经通了。如果返回 404 或模型不存在,优先检查 LiteLLM 启动命令中的模型名和 ollama list 是否完全一致。
4. 完整实战:本地大模型 + Claude Code 开发全栈任务管理应用
下面进入实战。我们会用 Claude Code + 本地大模型,从零生成一个“任务管理应用”。项目不大,但包含后端 API、前端页面、数据持久化和命令行交互,足够展示全栈开发的完整链路。
4.1 项目需求与功能拆分
为了避免模型“自由发挥”得太离谱,建议第一步先把需求写清楚。创建一个项目目录,并在里面写一份需求文档。
bash复制mkdir -p local-task-hub/docs
cd local-task-hub
在 docs/requirements.md 中写入:
markdown复制# 任务管理应用需求说明
## 功能需求
1. 用户可以查看所有任务列表。
2. 用户可以新增任务,任务包含标题和完成状态。
3. 用户可以勾选/取消勾选任务,改变完成状态。
4. 用户可以删除任务。
## 技术栈
- 后端:Node.js + Express
- 前端:原生 HTML/CSS/JavaScript
- 数据持久化:JSON 文件,路径为 data/tasks.json
## API 设计
- GET /api/tasks 获取任务列表
- POST /api/tasks 新增任务,请求体 { "title": "任务标题" }
- PATCH /api/tasks/:id/toggle 切换任务完成状态
- DELETE /api/tasks/:id 删除任务
## 页面要求
- 页面包含输入框、新增按钮、任务列表。
- 任务标题后展示完成状态按钮和删除按钮。
这个需求文档写得越明确,模型生成的结果越可控。如果你希望 Claude Code 严格遵守,也可以把“验收标准”单独列出来。
4.2 启动本地模型网关
回到终端,确保 Ollama 正在运行,然后启动 LiteLLM:
bash复制litellm --model ollama_chat/qwen2.5-coder:7b --port 8080
保持这个终端窗口不要关闭,另开一个终端窗口进行后续操作。如果你不想每次手动敲命令,可以写一个 start-gateway.sh 脚本:
bash复制#!/usr/bin/env bash
ollama serve &
litellm --model ollama_chat/qwen2.5-coder:7b --port 8080
注意:ollama serve 如果之前已经启动,重复执行会报端口占用,不影响使用。
4.3 配置 Claude Code 环境变量
在当前终端窗口设置环境变量:
bash复制export ANTHROPIC_BASE_URL="http://localhost:8080"
export ANTHROPIC_AUTH_TOKEN="local-test-token-123"
export ANTHROPIC_MODEL="qwen2.5-coder:7b"
然后进入项目目录:
bash复制cd local-task-hub
claude
如果一切正常,Claude Code 会进入交互式对话界面,并显示一个命令提示符。如果这里出现连接错误,先回到第 3.4 节用 curl 验证网关。
4.4 让 Claude Code 生成后端代码
在 Claude Code 对话中输入:
text复制请阅读 docs/requirements.md,按照需求实现一个 Node.js + Express 后端。
先创建 package.json,然后实现 server.js。
数据存储使用 data/tasks.json,如果没有该文件则自动创建。
请使用 CommonJS 模块规范,端口监听 3000。
Claude Code 会先读取需求文档,然后决定创建哪些文件。由于本地模型的推理速度不如云端,生成过程可能需要几十秒到几分钟不等,不要着急中断。
预期会生成类似下面的文件结构:
text复制local-task-hub/
├── docs/
│ └── requirements.md
├── package.json
├── server.js
└── data/
└── tasks.json
package.json 大致如下:
json复制{
"name": "local-task-hub",
"version": "1.0.0",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.19.2"
}
}
server.js 的核心逻辑如下,这段代码展示了 API 的基本实现思路:
javascript复制// 文件路径:server.js
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const PORT = 3000;
const DATA_DIR = path.join(__dirname, 'data');
const DATA_FILE = path.join(DATA_DIR, 'tasks.json');
app.use(express.json());
app.use(express.static('public'));
// 读取任务列表
function readTasks() {
if (!fs.existsSync(DATA_FILE)) {
return [];
}
const content = fs.readFileSync(DATA_FILE, 'utf-8');
return JSON.parse(content);
}
// 写入任务列表
function writeTasks(tasks) {
if (!fs.existsSync(DATA_DIR)) {
fs.mkdirSync(DATA_DIR, { recursive: true });
}
fs.writeFileSync(DATA_FILE, JSON.stringify(tasks, null, 2));
}
// 获取所有任务
app.get('/api/tasks', (req, res) => {
res.json(readTasks());
});
// 新增任务
app.post('/api/tasks', (req, res) => {
const { title } = req.body;
if (!title || typeof title !== 'string') {
return res.status(400).json({ error: 'title is required' });
}
const tasks = readTasks();
const task = {
id: Date.now().toString(),
title: title.trim(),
completed: false
};
tasks.push(task);
writeTasks(tasks);
res.status(201).json(task);
});
// 切换任务完成状态
app.patch('/api/tasks/:id/toggle', (req, res) => {
const tasks = readTasks();
const task = tasks.find(t => t.id === req.params.id);
if (!task) {
return res.status(404).json({ error: 'task not found' });
}
task.completed = !task.completed;
writeTasks(tasks);
res.json(task);
});
// 删除任务
app.delete('/api/tasks/:id', (req, res) => {
let tasks = readTasks();
const newTasks = tasks.filter(t => t.id !== req.params.id);
if (tasks.length === newTasks.length) {
return res.status(404).json({ error: 'task not found' });
}
writeTasks(newTasks);
res.status(204).end();
});
app.listen(PORT, () => {
console.log(`Task Hub listening on http://localhost:${PORT}`);
});
注意,模型生成的代码大概率不会和上面完全一样,但关键逻辑应该保持一致:读写 JSON 文件、提供四个接口、错误处理合理。如果模型漏掉某个接口,你可以直接继续在对话中补充要求。
4.5 让 Claude Code 生成前端页面
后端完成后,继续在 Claude Code 对话中输入:
text复制接下来请创建前端页面。页面放在 public 目录下,包含 index.html、app.js、style.css。
页面需要实现以下功能:
1. 输入框输入任务标题,点击新增按钮添加到列表。
2. 页面加载时从 GET /api/tasks 获取任务列表并渲染。
3. 每个任务展示标题、完成状态按钮、删除按钮。
4. 点击状态按钮调用 PATCH /api/tasks/:id/toggle。
5. 点击删除按钮调用 DELETE /api/tasks/:id。
6. 样式简洁美观,不需要引入第三方库。
生成后的 public/index.html 和 public/app.js 会构成一个完整的前端页面。其中 app.js 的核心思路如下:
javascript复制// 文件路径:public/app.js
async function loadTasks() {
const res = await fetch('/api/tasks');
const tasks = await res.json();
renderTasks(tasks);
}
function renderTasks(tasks) {
const list = document.getElementById('task-list');
list.innerHTML = '';
tasks.forEach(task => {
const li = document.createElement('li');
li.className = task.completed ? 'completed' : '';
const span = document.createElement('span');
span.textContent = task.title;
const toggleBtn = document.createElement('button');
toggleBtn.textContent = task.completed ? '未完成' : '已完成';
toggleBtn.addEventListener('click', async () => {
await fetch(`/api/tasks/${task.id}/toggle`, { method: 'PATCH' });
loadTasks();
});
const deleteBtn = document.createElement('button');
deleteBtn.textContent = '删除';
deleteBtn.addEventListener('click', async () => {
await fetch(`/api/tasks/${task.id}`, { method: 'DELETE' });
loadTasks();
});
li.appendChild(span);
li.appendChild(toggleBtn);
li.appendChild(deleteBtn);
list.appendChild(li);
});
}
document.getElementById('add-btn').addEventListener('click', async () => {
const input = document.getElementById('task-input');
const title = input.value.trim();
if (!title) return;
await fetch('/api/tasks', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ title })
});
input.value = '';
loadTasks();
});
loadTasks();
前端文件生成后,你可以让 Claude Code 继续补全 style.css,或者自己手动美化,不影响功能。
4.6 运行与验证
在 Claude Code 对话中执行:
text复制请帮我安装依赖并启动服务,然后告诉我如何验证。
Claude Code 可能会执行 npm install 和 node server.js。注意,这些命令都会在终端中实际运行,Claude Code 会先请求你的确认。确认后,服务会启动在 3000 端口。
打开浏览器访问:
text复制http://localhost:3000
预期效果:
- 页面标题为任务管理。
- 输入任务标题,点击新增,任务出现在列表里。
- 点击“已完成”按钮,任务文字显示删除线或其他完成样式。
- 点击“删除”按钮,任务从列表消失。
- 刷新页面后,任务仍然保留。
这里有一个隐藏的验证点:data/tasks.json 文件是否被正确生成和写入。任务数据能持久化,说明后端 API 和文件读写逻辑都是正常的。
4.7 在 Claude Code 中做代码修复
实战中最有价值的场景不是让 Claude Code 一次生成完美代码,而是让它参与调试。比如,你试着启动后发现端口被占用,可以在对话中直接说:
text复制服务启动失败,报错信息是 EADDRINUSE,请帮我排查。
Claude Code 会读取终端日志、查看代码、定位问题,然后提出修改方案。如果是端口占用,它会建议修改端口号或杀掉占用进程。这种“发现问题 → 定位问题 → 修改代码 → 重新验证”的循环,才是 Claude Code 和本地大模型组合的真正价值。
5. 常见问题与排查思路
5.1 问题清单
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 启动 claude 后提示连接失败 | BASE_URL 没有生效,或 LiteLLM 未启动 | 检查环境变量;确认 8080 端口可访问 |
| 请求返回 404 | LiteLLM 模型名与 Ollama 标签不一致 | 用 ollama list 对比模型名 |
| 模型只回复文字,不执行工具 | 本地模型不支持工具调用,或指令遵循弱 | 换支持 function calling 的模型 |
| 生成代码速度很慢 | 硬件推理能力不足 | 减小任务规模,或换更小量化模型 |
| 上下文过长导致截断 | 本地模型上下文窗口有限 | 清理会话、减少一次性读取文件数 |
| Windows 下中文乱码 | 终端编码不是 UTF-8 | 使用 Windows Terminal,设置编码为 UTF-8 |
| Claude Code 执行命令被拒绝 | 工具权限需要用户确认 | 检查确认提示,必要时手动执行命令 |
5.2 连接失败排查步骤
遇到 Claude Code 连接失败,不要急着改代码,按顺序检查:
第一步,确认 LiteLLM 是否在运行。用下面的命令请求模型列表:
bash复制curl http://localhost:8080/v1/models
如果能看到模型信息,说明代理正常。
第二步,确认环境变量是否已导出:
bash复制echo $ANTHROPIC_BASE_URL
echo $ANTHROPIC_AUTH_TOKEN
第三步,确认 claude 进程确实读取到了环境变量。如果环境变量是在启动 claude 之后才 export 的,需要关闭 claude 重新启动。
5.3 工具调用能力不足怎么办
本地模型和 Claude 官方模型差距最大的地方就是工具调用。你可能会遇到模型“话很多,但就是不调用工具”的情况。
解决方案有两个方向。第一是换模型,优先选择明确支持 function calling 的模型,比如 Qwen2.5-Coder、Llama 3.1。第二是降低任务复杂度,把大需求拆成小步骤,比如不要一次让它“完成整个项目”,而是“先读取 requirements.md,再创建 package.json,再实现 server.js”。任务越小,模型越容易按预期执行。
6. 最佳实践与工程建议
6.1 模型选择要有取舍
本地模型不是越大越好。7B 模型在中等硬件上可以做到几十秒内响应,14B 模型质量更高但速度更慢,70B 模型对硬件要求很高,日常开发中反而容易因为速度慢而降低效率。
建议以“能跑得动、支持工具调用、代码能力强”为选择标准。编程场景先试 Qwen2.5-Coder 系列,再根据体验决定是否需要换 Llama 或 DeepSeek 系列。模型权重要从正规渠道下载,注意开源协议和商业使用限制。
6.2 用 CLAUDE.md 统一项目上下文
Claude Code 支持在项目根目录放一个 CLAUDE.md 文件,里面写项目说明、代码规范、目录结构、技术栈约定。每次启动会话时,Claude Code 会读取这个文件,让本地模型更快理解项目背景。
一个最小示例:
markdown复制# 项目说明
这是一个基于 Node.js + Express 的任务管理应用。
- 后端入口:server.js
- 前端目录:public
- 数据文件:data/tasks.json
- 接口规范:遵循 RESTful 风格
- 运行端口:3000
写清楚这个文件,可以显著减少模型“猜需求”的概率。
6.3 每次变更都要 review
本地模型生成的代码,不能直接合入主干。即使是简单项目,也要人工检查这几个点:
- 有没有包含意外的高权限操作。
- 有没有把敏感信息硬编码进代码。
- 有没有不受控的文件删除、覆盖逻辑。
- 依赖是否真实存在,版本是否合理。
Claude Code 在终端中拥有执行命令的权限,你必须对它保持“review 思维”。建议每次让 Claude Code 修改完代码后,主动追问一句:“请说明你修改了哪些文件,为什么要这样改。”这既是代码评审,也是反向验证模型理解是否正确。
6.4 环境变量尽量做成项目隔离
不要把所有环境变量都写进全局 shell 配置。建议在项目目录创建 set_env.sh:
bash复制#!/usr/bin/env bash
export ANTHROPIC_BASE_URL="http://localhost:8080"
export ANTHROPIC_AUTH_TOKEN="local-test-token-123"
export ANTHROPIC_MODEL="qwen2.5-coder:7b"
每次进入项目时执行:
bash复制source set_env.sh
这样不会污染其他项目的环境配置,也方便日后切换到不同网关。
6.5 关注安全边界
本地模型并不能自动保证安全。Claude Code 执行 shell 命令时,PowerShell、bash 都可能执行到 rm、curl、docker、git push 等敏感操作。务必注意几点:
- 在项目容器或隔离目录中测试自动命令。
- 不要让 Claude Code 读取生产环境密钥文件。
- API token、数据库密码不要写在项目目录下的代码文件里。
- 如涉及数据库删除、生产环境变更,必须先备份、走审批流程。
6.6 从“小任务闭环”开始
不要第一天就尝试让 Claude Code 和本地模型一口气重写整个业务系统。更合理的路线是:
- 先写一个 100 行以内的小工具,走通全链路。
- 再尝试生成一个简单的 CRUD API。
- 然后加入前端页面,构建完整全栈应用。
- 最后再扩展到公司真实业务代码。
每完成一个小闭环,都要记录模型在哪个环节表现不好,再针对性调整提示词或模型。
7. 学习建议与下一步方向
如果你成功跑通了上面的任务管理应用,说明你已经掌握了 Claude Code + 本地大模型的核心链路。下一步可以从几个方向继续深入。
第一,研究 MCP 工具扩展。Claude Code 支持通过 MCP 连接外部数据源和工具,例如数据库、文件系统、第三方服务。本地模型配合 MCP,能让智能体拥有更强的自动化能力。
第二,尝试接入 vLLM 或 LM Studio。Ollama 适合快速上手,但 vLLM 在高并发和长文本场景下优势更明显。不同推理框架的协议差异不大,你可以用同样的 LiteLLM 网关思路切换后端。
第三,优化提示词。给 Claude Code 写系统提示词,实际上是在给本地模型写“工作说明书”。你可以把代码规范、commit 风格、测试要求全部写进去,让生成的代码更符合项目口味。
第四,关注工具调用细节。本地模型工具调用能力有限,研究模型支持的工具格式、上下文窗口和指令模板,能帮你减少很多无效尝试。
最后给一个最直接的实操建议:重新建一个空白项目,不要复制本文代码,完全依靠本地 Claude Code 从空目录开始生成。即使最后的代码不如手工写的精致,你也已经走完了“需求 → 计划 → 实现 → 验证 → 修复”的完整智能体开发循环。找到手感之后,再把它用到你正在进行的真实项目里,你会明显感受到这套组合的实用价值。
