# Mac Studio M4 Max 离线AI编程解决方案
Mac Studio M4 Max + 48GB 统一内存的优势:
| 模型名称 | 参数量 | 内存占用 | 特点 | 推荐度 |
|---|---|---|---|---|
| Qwen3-Coder-Flash (30B-A3B) | 30.5B总/3.3B激活 | ~12GB | 🔥最新MoE架构,闪电般速度,256K上下文 | ⭐⭐⭐⭐⭐ |
| Qwen2.5-Coder 14B | 14B | ~16GB | 更强的推理能力,稳定可靠 | ⭐⭐⭐⭐⭐ |
| Qwen2.5-Coder 7B | 7B | ~8GB | 阿里代码模型,中英文优秀 | ⭐⭐⭐⭐ |
| CodeLlama 13B | 13B | ~15GB | Meta开源,稳定可靠 | ⭐⭐⭐⭐ |
| DeepSeek-Coder V2 16B | 16B | ~18GB | 代码能力强,支持多语言 | ⭐⭐⭐⭐ |
| Codestral 22B | 22B | ~25GB | Mistral出品,代码质量高 | ⭐⭐⭐⭐ |
Qwen3-Coder-Flash 特殊优势:
# 安装 Ollama(Mac 原生支持)
brew install ollama
# 下载Qwen3-Coder-Flash(首选模型)
ollama pull qwen3-coder:30b-a3b-instruct
# 下载其他推荐模型
ollama pull qwen2.5-coder:14b
ollama pull qwen2.5-coder:7b
ollama pull codellama:13b
ollama pull deepseek-coder:6.7b
# 启动服务
ollama serve现状分析: Claude Code 目前只支持 Anthropic 的官方API,但可以通过代理方式实现本地模型调用:
# claude-proxy.py - 将本地模型API转换为Claude格式
from flask import Flask, request, jsonify, Response
import requests
import json
app = Flask(__name__)
# 本地模型配置 - 推荐使用Qwen3-Coder-Flash
LOCAL_MODEL_URL = "http://localhost:11434/api/chat"
MODEL_NAME = "qwen3-coder:30b-a3b-instruct" # Qwen3-Coder-Flash
@app.route('/v1/messages', methods=['POST'])
def proxy_messages():
data = request.json
# 转换请求格式
local_request = {
"model": MODEL_NAME,
"messages": data.get("messages", []),
"stream": data.get("stream", False)
}
# 调用本地模型
response = requests.post(LOCAL_MODEL_URL, json=local_request, stream=True)
# 转换响应格式为Claude格式
if data.get("stream"):
return Response(
convert_stream_response(response),
mimetype='text/event-stream'
)
else:
return convert_response(response.json())
def convert_response(ollama_response):
# 转换Ollama响应为Claude API格式
return {
"id": "msg_local",
"type": "message",
"role": "assistant",
"content": [{"type": "text", "text": ollama_response.get("message", {}).get("content", "")}]
}
if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080)# 使用代理运行Claude Code
export ANTHROPIC_API_KEY="dummy-key"
export ANTHROPIC_BASE_URL="http://127.0.0.1:8080"
claude-code# 创建自定义配置
mkdir -p ~/.config/claude-code
cat > ~/.config/claude-code/config.json << 'EOF'
{
"apiKey": "local-key",
"baseURL": "http://127.0.0.1:8080/v1",
"model": "qwen2.5-coder",
"maxTokens": 4096
}
EOFTrae 配置本地模型:
# 安装 Trae
brew install trae
# 配置本地模型
trae config set provider ollama
trae config set model qwen2.5-coder:14b
trae config set base_url http://localhost:11434# ~/.config/trae/config.yaml
provider: ollama
model: qwen3-coder:30b-a3b-instruct # Qwen3-Coder-Flash
base_url: http://localhost:11434
temperature: 0.1
max_tokens: 8192 # 利用长上下文能力
system_prompt: |
You are an expert programming assistant powered by Qwen3-Coder-Flash.
Provide concise, accurate code and explanations. Focus on best practices
and clean, readable code. You have access to 256K context window for
analyzing large codebases.Cursor 支持自定义模型端点:
// Cursor Settings
{
"cursor.cpp.codeActions": true,
"cursor.chat.model": "custom",
"cursor.chat.customModel": {
"name": "Qwen2.5-Coder-14B",
"endpoint": "http://localhost:11434/v1/chat/completions",
"apiKey": "dummy",
"contextLength": 32768
}
}// ~/.continue/config.json - 2024最新版本
{
"models": [
{
"title": "Qwen2.5-Coder 14B",
"provider": "ollama",
"model": "qwen2.5-coder:14b",
"completionOptions": {
"temperature": 0.1,
"topP": 0.9,
"maxTokens": 2048
}
},
{
"title": "Qwen2.5-Coder 7B (Fast)",
"provider": "ollama",
"model": "qwen2.5-coder:7b",
"completionOptions": {
"temperature": 0.1,
"maxTokens": 1024
}
}
],
"tabAutocompleteModel": {
"title": "Fast Completion",
"provider": "ollama",
"model": "qwen2.5-coder:7b"
},
"embeddingsProvider": {
"provider": "ollama",
"model": "nomic-embed-text"
},
"contextProviders": [
{
"name": "codebase",
"params": {
"nRetrieve": 25,
"nFinal": 5
}
},
{
"name": "diff"
},
{
"name": "terminal"
},
{
"name": "problems"
}
]
}CLINE(原Claude Dev): VS Code中强大的AI Agent扩展,完美支持本地模型
# 在VS Code中安装CLINE扩展
# Extension ID: saoudrizwan.claude-dev// VS Code settings.json 中添加
{
"claude-dev.apiProvider": "ollama",
"claude-dev.ollamaBaseUrl": "http://localhost:11434",
"claude-dev.ollamaModel": "qwen3-coder:30b-a3b-instruct",
"claude-dev.maxTokens": 8192,
"claude-dev.temperature": 0.1
}#!/bin/bash
# mac-ai-coding-setup.sh
set -e
echo "🚀 开始配置 Mac Studio M4 Max AI编程环境..."
# 检查系统
check_system() {
if [[ $(uname -m) != "arm64" ]]; then
echo "❌ 此脚本专为 Apple Silicon Mac 设计"
exit 1
fi
echo "✅ 检测到 Apple Silicon Mac"
}
# 安装依赖
install_dependencies() {
echo "📦 安装基础依赖..."
# 安装 Homebrew(如果未安装)
if ! command -v brew &> /dev/null; then
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
# 安装工具
brew install ollama python@3.11 node npm
pip3 install aider-chat requests flask
echo "✅ 依赖安装完成"
}
# 下载和配置模型
setup_models() {
echo "🤖 配置AI模型..."
# 启动 Ollama 服务
brew services start ollama
sleep 5
# 下载推荐模型
echo "下载 Qwen3-Coder-Flash..."
ollama pull qwen3-coder:30b-a3b-instruct # Qwen3-Coder-Flash
echo "下载 Qwen2.5-Coder 模型..."
ollama pull qwen2.5-coder:14b &
ollama pull qwen2.5-coder:7b &
echo "下载其他推荐模型..."
ollama pull codellama:13b &
ollama pull deepseek-coder:6.7b &
wait
echo "✅ 模型下载完成"
}
# 配置 VS Code
setup_vscode() {
if command -v code &> /dev/null; then
echo "🔧 配置 VS Code..."
# 安装插件
code --install-extension Continue.continue
code --install-extension saoudrizwan.claude-dev # CLINE扩展
code --install-extension GitHub.copilot
code --install-extension ms-vscode.cpptools
# 创建 Continue 配置
mkdir -p ~/.continue
cat > ~/.continue/config.json << 'EOF'
{
"models": [
{
"title": "Qwen3-Coder-Flash",
"provider": "ollama",
"model": "qwen3-coder:30b-a3b-instruct"
},
{
"title": "Qwen2.5-Coder 14B",
"provider": "ollama",
"model": "qwen2.5-coder:14b"
},
{
"title": "Qwen2.5-Coder 7B",
"provider": "ollama",
"model": "qwen2.5-coder:7b"
}
],
"tabAutocompleteModel": {
"title": "Qwen2.5-Coder 7B",
"provider": "ollama",
"model": "qwen2.5-coder:7b"
}
}
EOF
# 创建 CLINE 配置
mkdir -p ~/.vscode
cat > ~/.vscode/settings.json << 'EOF'
{
"claude-dev.apiProvider": "ollama",
"claude-dev.ollamaBaseUrl": "http://localhost:11434",
"claude-dev.ollamaModel": "qwen3-coder:30b-a3b-instruct",
"claude-dev.maxTokens": 8192,
"claude-dev.temperature": 0.1
}
EOF
echo "✅ VS Code 配置完成(包含CLINE)"
fi
}
# 创建 Claude Code 代理
setup_claude_proxy() {
echo "🔧 创建 Claude Code 代理..."
cat > ~/claude-proxy.py << 'EOF'
from flask import Flask, request, jsonify, Response
import requests
import json
import uuid
from datetime import datetime
app = Flask(__name__)
LOCAL_MODEL_URL = "http://localhost:11434/api/chat"
MODEL_NAME = "qwen2.5-coder:14b"
@app.route('/v1/messages', methods=['POST'])
def proxy_messages():
data = request.json
# 转换消息格式
messages = []
for msg in data.get("messages", []):
if msg.get("role") == "user":
content = msg.get("content", "")
if isinstance(content, list):
content = " ".join([item.get("text", "") for item in content if item.get("type") == "text"])
messages.append({"role": "user", "content": content})
local_request = {
"model": MODEL_NAME,
"messages": messages,
"stream": False
}
try:
response = requests.post(LOCAL_MODEL_URL, json=local_request)
response.raise_for_status()
ollama_response = response.json()
return jsonify({
"id": f"msg_{uuid.uuid4().hex[:8]}",
"type": "message",
"role": "assistant",
"content": [{"type": "text", "text": ollama_response["message"]["content"]}],
"model": MODEL_NAME,
"usage": {"input_tokens": 0, "output_tokens": 0}
})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
print("🚀 Claude Code 代理服务启动在 http://127.0.0.1:8080")
app.run(host='127.0.0.1', port=8080, debug=False)
EOF
echo "✅ Claude Code 代理创建完成"
echo "💡 使用方法:"
echo " 1. 运行: python3 ~/claude-proxy.py"
echo " 2. 设置环境变量:"
echo " export ANTHROPIC_API_KEY='dummy-key'"
echo " export ANTHROPIC_BASE_URL='http://127.0.0.1:8080'"
}
# 安装和配置其他工具
setup_additional_tools() {
echo "🛠️ 安装其他AI编程工具..."
# 安装 Cursor(如果用户需要)
echo "💡 推荐手动安装 Cursor: https://cursor.sh"
# 配置 Aider
cat > ~/.aider.conf.yml << 'EOF'
model: ollama/qwen2.5-coder:14b
api_base: http://localhost:11434
temperature: 0.1
EOF
echo "✅ 额外工具配置完成"
}
# 性能测试
performance_test() {
echo "🧪 运行性能测试..."
# 测试模型响应
test_prompt="写一个Python函数来计算斐波那契数列"
echo "测试提示: $test_prompt"
start_time=$(date +%s.%N)
response=$(curl -s -X POST http://localhost:11434/api/generate \\
-H "Content-Type: application/json" \\
-d "{\\"model\\":\\"qwen2.5-coder:7b\\",\\"prompt\\":\\"$test_prompt\\",\\"stream\\":false}" \\
| jq -r '.response')
end_time=$(date +%s.%N)
duration=$(echo "$end_time - $start_time" | bc)
echo "✅ 测试完成,响应时间: ${duration}s"
echo "📝 响应内容预览:"
echo "$response" | head -5
}
# 创建启动脚本
create_startup_script() {
cat > ~/start-ai-coding.sh << 'EOF'
#!/bin/bash
echo "🚀 启动AI编程环境..."
# 启动 Ollama 服务
brew services start ollama
echo "✅ Ollama 服务已启动"
# 启动 Claude 代理(后台运行)
python3 ~/claude-proxy.py &
PROXY_PID=$!
echo "✅ Claude 代理已启动 (PID: $PROXY_PID)"
echo "🎉 AI编程环境已就绪!"
echo ""
echo "📋 使用指南:"
echo "1. VS Code: 使用 Cmd+I 启动 Continue"
echo "2. Terminal: aider 命令启动AI编程助手"
echo "3. Claude Code: 设置环境变量后直接使用"
echo ""
echo "🛑 停止服务: 运行 ~/stop-ai-coding.sh"
# 保存 PID 用于停止服务
echo $PROXY_PID > ~/.ai-coding-proxy.pid
EOF
cat > ~/stop-ai-coding.sh << 'EOF'
#!/bin/bash
echo "🛑 停止AI编程环境..."
# 停止代理服务
if [ -f ~/.ai-coding-proxy.pid ]; then
PID=$(cat ~/.ai-coding-proxy.pid)
kill $PID 2>/dev/null && echo "✅ Claude 代理已停止"
rm ~/.ai-coding-proxy.pid
fi
# 停止 Ollama
brew services stop ollama
echo "✅ Ollama 服务已停止"
EOF
chmod +x ~/start-ai-coding.sh ~/stop-ai-coding.sh
echo "✅ 启动脚本创建完成"
}
# 主执行流程
main() {
check_system
install_dependencies
setup_models
setup_vscode
setup_claude_proxy
setup_cline
setup_additional_tools
create_startup_script
echo ""
echo "🎉 Mac Studio M4 Max AI编程环境配置完成!"
echo ""
echo "🚀 启动服务: ~/start-ai-coding.sh"
echo "🛑 停止服务: ~/stop-ai-coding.sh"
echo ""
echo "📋 推荐使用方式:"
echo " - CLINE Agent任务: qwen3-coder-flash (30B MoE)"
echo " - Continue补全: qwen2.5-coder:7b (速度优先)"
echo " - Claude Code代理: qwen3-coder-flash"
echo ""
echo "💡 48GB内存可同时运行Flash模型+7B补全模型"
# 可选择立即启动
read -p "是否现在启动AI编程环境?(y/n): " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
~/start-ai-coding.sh
performance_test
fi
}
main "$@"# 使用 Cmd+I 启动对话
用户: 实现一个 TypeScript 的防抖函数
AI: 生成完整的防抖函数实现 + 类型定义# 在VS Code中使用CLINE
# 1. 打开项目文件夹
# 2. 按 Cmd+Shift+P,搜索 "CLINE"
# 3. 选择 "CLINE: Start New Task"
示例任务: "创建一个Vue3项目,包含用户管理系统,支持CRUD操作"
CLINE会自动: 创建项目结构 → 编写组件 → 配置路由 → 添加样式 → 运行测试# 在VS Code中使用Continue
# Cmd+I: 启动内联对话
# Cmd+L: 启动侧边栏对话
# Cmd+Shift+I: 快速编辑模式
示例: 选中代码 → Cmd+I → "优化这个函数的性能"
Continue会基于Qwen3-Coder-Flash的长上下文分析整个项目# 设置环境变量
export ANTHROPIC_API_KEY="dummy-key"
export ANTHROPIC_BASE_URL="http://127.0.0.1:8080"
# 直接使用 Claude Code 命令
claude-code "创建一个 React 组件"# 专门为MoE模型优化的配置
export OLLAMA_MAX_LOADED_MODELS=3
export OLLAMA_MAX_VRAM=36GB # 为Flash模型预留足够内存
export OLLAMA_FLASH_ATTENTION=1 # 启用Flash Attention# 同时运行多个小模型
ollama run qwen2.5-coder:7b & # 用于自动完成
ollama run codellama:7b & # 用于代码解释# 检查服务状态
check_services() {
echo "Ollama: $(curl -s http://localhost:11434/api/tags | jq -r '.models | length') models loaded"
echo "Proxy: $(curl -s http://127.0.0.1:8080/health 2>/dev/null && echo 'Running' || echo 'Stopped')"
}这个方案充分利用了Mac Studio M4 Max的硬件优势,特别针对您提到的工具需求提供了解决方案。48GB统一内存让您可以舒适地运行14B模型,甚至可以尝试22B的Codestral模型获得更好的代码质量。