从 DeepSeek API 切换到本地模型好消息是由于你用的是openaiSDK只要本地模型提供 OpenAI 兼容接口改动量极小——通常只需改base_url和model两个参数。一、核心原理text当前架构 Python → OpenAI SDK → https://api.deepseek.com 本地架构 Python → OpenAI SDK → http://localhost:11434/v1 本地推理服务只要本地推理服务暴露 OpenAI 兼容的/v1/chat/completions接口代码几乎不用改。二、常见本地推理方案对比方案优点缺点适用场景Ollama安装最简单一行命令拉模型吞吐量较低适合个人开发调试、个人使用vLLM吞吐量高支持并发部署较复杂需 GPU生产环境、多人使用LM Studio图形界面零配置依赖桌面环境本地测试LocalAI纯 CPU 可跑支持多种格式性能一般无 GPU 环境Xinference支持多模型管理相对小众模型实验三、方案一Ollama最简单推荐入门1. 安装 Ollamabash# Windows下载安装包 https://ollama.com/download # Linux curl -fsSL https://ollama.com/install.sh | sh2. 拉取模型bashollama pull qwen2.5:7b # 阿里通义千问 7B ollama pull deepseek-r1:7b # DeepSeek R1 蒸馏版 ollama pull llama3.1:8b # Meta Llama 3.13. 验证服务bashollama serve # 默认监听 11434 端口 curl http://localhost:11434/v1/models4. 改代码pythonimport os from openai import AsyncOpenAI client AsyncOpenAI( api_keyollama, # 本地模型不校验随便填 base_urlhttp://localhost:11434/v1, # 指向本地 Ollama ) response await client.chat.completions.create( modelqwen2.5:7b, # 换成 Ollama 里的模型名 messagesmessages, temperature0.3 )改动量只有base_url和model两个字段。四、方案二vLLM生产级高吞吐1. 安装 vLLMbashpip install vllm2. 启动 OpenAI 兼容服务bashpython -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --host 0.0.0.0 \ --port 8000 \ --tensor-parallel-size 13. 改代码pythonclient AsyncOpenAI( api_keyEMPTY, base_urlhttp://localhost:8000/v1, ) response await client.chat.completions.create( modelQwen/Qwen2.5-7B-Instruct, messagesmessages, temperature0.3 )优势支持多并发请求吞吐量是 Ollama 的数倍支持 PagedAttention显存利用率高生产环境首选五、统一封装一处配置多处切换建议把模型配置抽到环境变量或配置文件实现「云端 / 本地」一键切换。1. 配置文件config.pypythonimport os # 切换模式deepseek / ollama / vllm LLM_PROVIDER os.getenv(LLM_PROVIDER, deepseek) PROVIDER_CONFIG { deepseek: { base_url: https://api.deepseek.com, api_key: os.getenv(DEEPSEEK_API_KEY), model: deepseek-chat, }, ollama: { base_url: http://localhost:11434/v1, api_key: ollama, model: qwen2.5:7b, }, vllm: { base_url: http://localhost:8000/v1, api_key: EMPTY, model: Qwen/Qwen2.5-7B-Instruct, }, } def get_llm_config(): return PROVIDER_CONFIG[LLM_PROVIDER]2. 客户端工厂llm_client.pypythonfrom openai import AsyncOpenAI from config import get_llm_config _client None def get_llm_client() - AsyncOpenAI: global _client if _client is None: cfg get_llm_config() _client AsyncOpenAI( api_keycfg[api_key], base_urlcfg[base_url], timeout60, ) return _client def get_model_name() - str: return get_llm_config()[model]3. 业务代码pythonfrom llm_client import get_llm_client, get_model_name async def ask(question: str, messages: list) - str: client get_llm_client() response await client.chat.completions.create( modelget_model_name(), messagesmessages, temperature0.3 ) return response.choices[0].message.content4. 切换方式bash# 用 DeepSeek 云端 set LLM_PROVIDERdeepseek python main.py # 用本地 Ollama set LLM_PROVIDERollama python main.py # 用本地 vLLM set LLM_PROVIDERvllm python main.py业务代码零改动只需切换环境变量。六、本地模型 vs 云端 API 对比维度DeepSeek API本地模型成本按 Token 计费一次性硬件投入延迟受网络影响通常 1-3 秒本地推理0.5-2 秒取决于硬件隐私数据出境数据完全不出本地✅模型能力DeepSeek-V3/R1 满血版受限于本地硬件只能用 7B~32B并发能力无限扩展受限于 GPU 显存运维零运维需自己维护推理服务稳定性依赖外部服务完全自主可控七、硬件需求参考本地部署模型规模显存需求推荐硬件3B4-6 GBRTX 3060 / Mac M17B8-10 GBRTX 4070 / Mac M2 Pro14B16-20 GBRTX 4090 / Mac M3 Max32B40-48 GBA100 40G / 双卡 409070B80-140 GBA100 80G × 2量化技术可大幅降低需求Q4_K_M4bit 量化显存需求降低约 60%质量损失小Ollama 默认使用量化版本7B 模型只需 5GB 左右八、注意事项坑点说明解决方案api_key不能为空OpenAI SDK 强制要求填任意字符串如ollama模型名称必须匹配本地模型的名称和云端不同先ollama list或查看 vLLM 启动日志不支持所有参数本地模型可能不支持某些 OpenAI 参数移除logprobs、response_format等高级参数Tokenizer 差异不同模型的 Token 计算不同控制 messages 长度时留足余量上下文长度限制本地模型通常 8K~32K调整messages[-N:]的裁剪逻辑并发限制Ollama 默认单并发生产环境用 vLLM 或加OLLAMA_NUM_PARALLEL环境变量九、完整迁移清单步骤操作1选择本地推理方案Ollama / vLLM2安装推理服务并拉取模型3验证curl http://localhost:PORT/v1/models可访问4抽离配置到环境变量5修改base_url和model6移除本地模型不支持的高级参数7测试对话、超时、异常处理8观察延迟和资源占用必要时调整模型规模 总结场景推荐方案个人开发 / 快速验证Ollama 7B 量化模型团队内部使用vLLM 14B~32B 模型无 GPU 环境LocalAICPU 推理速度慢数据极度敏感本地部署 私有化模型Qwen、DeepSeek 开源版核心一句话只要本地推理服务提供 OpenAI 兼容接口切换本地模型只需改base_url和model两个字段。配合环境变量配置可以实现云端与本地一键切换业务代码完全不用动。