1. 先想清楚你要的到底是“能用”还是“好用”很多人一上来就问“本地部署和 API 哪个好”这个问题本身就问错了。就像问“自己做饭和点外卖哪个好”一样答案完全取决于你今天是想省钱、想吃得健康、还是想省时间。大模型这件事也一样本地部署和调用 API 不是对立关系而是两种不同成本结构的工具选哪个得先看你手里的牌。我见过太多人踩的第一个坑就是被“数据安全”“完全可控”这些词冲昏头脑花两天时间在本地把模型跑起来了结果发现回答质量跟网页版差了一大截推理速度慢到没法用最后又灰溜溜回去调 API。也见过另一种极端什么都调 API结果月底账单出来发现比租一台带显卡的服务器还贵而且关键数据全发出去了心里又不踏实。所以这篇文章我不打算给你一个“标准答案”而是把这两种路线的成本结构、适用场景、实操细节和踩坑经验全部摊开讲。你看完应该能自己判断我这个需求到底该本地跑还是调 API或者两者怎么混着用。先给一个最粗的判断框架后面再展开判断维度倾向本地部署倾向调用 API数据敏感度数据绝对不能出内网数据可以脱敏后外发使用频率高频、长期、稳定调用低频、临时、波动大预算结构有一次性硬件预算接受按量付费技术能力有运维和调优能力只想调接口写业务模型要求固定某个开源模型即可需要追最新最强模型延迟要求内网低延迟可接受网络往返这张表你先存着后面每一节我都会把里面的逻辑讲透。下面从最核心的成本问题开始拆。2. 成本这笔账90% 的人第一次都算错了2.1 本地部署的真实成本不只是那张显卡一说到本地部署大部分人第一反应是“买张显卡要多少钱”。这个思路对但远远不够。本地部署大模型的成本至少包含四块硬件采购、电力与散热、运维人力、机会成本。很多人只算了第一块后面三块全忽略了结果用起来才发现“怎么比想象中贵这么多”。先说硬件。跑大模型最关键的指标是显存不是算力。因为模型权重必须全部装进显存才能跑得动装不下就得量化或者用内存显存混合速度会断崖式下跌。给你一个粗略的对照这是社区里比较公认的经验值模型参数量FP16 显存需求INT8 量化INT4 量化典型硬件7B约 14GB约 7GB约 4GB单张 12G/16G 卡13B约 26GB约 13GB约 7GB单张 24G 卡32B约 64GB约 32GB约 18GB双卡 24G 或单卡 48G70B约 140GB约 70GB约 40GB多卡并联这个表怎么用举个例子你想本地跑一个 32B 的模型用 INT4 量化大概需要 18GB 显存那么一张 24GB 的消费级卡就能勉强装下但留给上下文缓存KV Cache的空间就不多了长对话会爆显存。所以实际选型时显存要留出至少 30% 的余量给上下文和批处理这是很多人第一次部署时想不到的。再说电费和散热。一张 300W 到 450W 的显卡如果 7×24 小时满载跑一个月电费按居民电价算大概一两百块看起来不多但加上空调散热、机箱风扇、UPS实际功耗要再上浮 20% 到 30%。如果是放在办公室或者机房里还得考虑噪音和散热改造。这些隐性成本短期看不出来长期跑下来是实打实的支出。运维人力是最容易被低估的一块。本地部署不是装完就完事了你得处理模型更新、依赖冲突、显存泄漏、服务崩溃自动重启、日志监控、访问鉴权。这些活儿如果交给一个工程师按人力成本折算一年下来可能比 API 费用还高。所以我的经验是如果你没有至少一个懂 Linux 和 Python 环境的人本地部署的隐性成本会远超你的预期。2.2 API 的成本结构看起来便宜用起来可能很贵API 的计费逻辑通常是按输入 token 和输出 token 分别计价单位是“每百万 token 多少钱”。这个模式的好处是前期零投入用多少付多少。但坑在于很多人估算用量时只算了“我问了多少字”没算“模型回了多少字”更没算多轮对话里上下文反复累积带来的 token 膨胀。举个真实的例子。假设你做一个客服问答机器人每次用户提问平均 100 token模型回答平均 300 token看起来一次对话才 400 token。但如果是多轮对话每一轮都要把之前的全部历史重新发一遍到第 10 轮的时候单次请求的输入可能已经累积到 2000 token 以上。这时候你的实际消耗是线性增长的而不是你以为的固定值。我一般建议用这个公式做粗估月成本 ≈ 日均请求数 × 30 × 平均单次总 token 数 × 单价其中“平均单次总 token 数”要按你实际的多轮深度来估宁可估高。算完之后再和本地部署的“硬件折旧 电费 运维”做对比你心里就有数了。还有一个隐藏成本是限流和稳定性。免费或低价的 API 通常有 QPS 限制高峰期可能排队甚至超时。如果你的业务对稳定性要求高就得买更高档位的服务单价会上去。而本地部署虽然前期贵但一旦跑起来边际调用成本几乎为零这是它最大的优势。2.3 一个实用的成本对比方法我自己的做法是做一个“盈亏平衡点”测算。假设本地部署一次性投入 X 元每年运维成本 Y 元API 单价折算下来每次调用 Z 元那么盈亏平衡调用量 (X Y) / Z如果我的年调用量超过这个数本地部署更划算低于这个数API 更划算。这个测算不用很精确量级对了就行。很多人纠结半天其实一算就发现自己的用量根本撑不起本地部署或者反过来用量大到 API 账单吓人。3. 本地部署大模型从选型到跑通的完整路径3.1 模型选型别一上来就冲最大的本地部署第一个决策是选哪个模型。新手最容易犯的错就是“我要跑最大的那个”结果硬件扛不住或者跑起来了但速度慢到没法用。我的建议是从 7B 到 14B 这个区间起步先把整条链路跑通再根据实际效果决定要不要上更大的。选型时重点看三个指标参数量、量化支持、社区活跃度。参数量决定能力上限量化支持决定你能不能在小显存上跑社区活跃度决定你遇到问题能不能搜到答案。一个模型再强如果社区没人用、文档稀烂你踩坑的时间成本会非常高。目前社区里比较主流的本地部署工具是Ollama它的优势是把模型下载、量化、服务化都封装好了一条命令就能跑起来。对于想快速验证的人来说这是最低门槛的入口。如果你需要更细粒度的控制比如自定义量化、调整推理参数那就得上llama.cpp或者vLLM这类更底层的框架。3.2 硬件与环境的准备要点硬件这块前面讲了显存是核心。除此之外还要注意内存要足够大因为模型加载时会先读到内存再进显存内存不够会直接 OOM硬盘要留足空间一个 7B 的模型量化后也有几个 GB多个模型叠加很快就是几十上百 GB电源功率要够多卡并联时电源是常见瓶颈。软件环境方面驱动版本、CUDA 版本、框架版本三者必须匹配这是本地部署最容易翻车的地方。我的经验是先确定框架要求的 CUDA 版本再倒推装对应的驱动而不是先装最新驱动再找框架。版本不匹配导致的报错往往很隐晦排查起来非常痛苦。3.3 用 Ollama 跑通第一个本地模型下面给一个可以直接抄的操作流程。假设你是一台带 NVIDIA 显卡的 Linux 机器# 安装 Ollama curl -fsSL https://ollama.com/install.sh | sh # 拉取一个 7B 级别的模型首次会下载几个 GB ollama pull qwen2.5:7b # 直接对话测试 ollama run qwen2.5:7b # 以服务方式启动暴露 API 端口 ollama serve启动服务后默认会在11434端口提供兼容 OpenAI 格式的接口你可以直接用 HTTP 请求调用curl http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d { model: qwen2.5:7b, messages: [{role: user, content: 用一句话解释什么是量化}] }这套流程跑通之后你就有了一个完全本地、不依赖外网、数据不出机器的推理服务。接下来要做的就是把它接入你的业务代码这一步和调 API 的写法几乎一样因为接口格式是兼容的。注意Ollama 默认监听本地回环地址如果要让局域网内其他机器访问需要配置监听地址同时务必加上访问鉴权否则等于把模型服务裸奔在内网里。3.4 本地部署的性能调优经验跑通只是第一步跑得好是另一回事。本地部署常见的性能问题有三个首 token 延迟高、吞吐低、长上下文爆显存。首 token 延迟高通常是模型加载和 prompt 处理慢可以通过预热提前发一个空请求让模型加载进显存来缓解。吞吐低往往是批处理没开或者并发设置不合理vLLM 这类框架支持连续批处理能显著提升并发能力。长上下文爆显存是因为 KV Cache 随上下文线性增长解决办法是限制最大上下文长度或者启用量化 KV Cache。还有一个很实用的技巧根据任务复杂度动态切换模型。简单任务用 7B复杂任务用更大的模型这样能在效果和速度之间取得平衡。这个思路和 API 侧“按需选模型”是一样的只是本地部署时切换成本更低因为模型都在你自己机器上。4. 调用 API怎么选、怎么调、怎么省钱4.1 API 选型的几个关键维度市面上的大模型 API 很多选的时候别只看价格。我一般看这几个维度模型能力、上下文长度、稳定性、计费方式、是否兼容 OpenAI 格式。模型能力不用多说直接决定输出质量。上下文长度决定了你能塞多少资料进去做长文档处理时这个指标很关键有些模型标称支持很长的上下文但实际有效长度会打折需要实测。稳定性方面要看服务商的 SLA 和历史口碑尤其是高峰期会不会频繁超时。计费方式上有的按 token有的按调用次数有的有免费额度要结合自己的用量模式选。兼容 OpenAI 格式这一点很实用意味着你换服务商时业务代码几乎不用改。4.2 一个标准的 API 调用示例大部分 API 的调用方式都大同小异下面是一个通用模板import requests url https://api.example.com/v1/chat/completions headers { Authorization: Bearer YOUR_API_KEY, Content-Type: application/json } payload { model: your-model-name, messages: [ {role: system, content: 你是一个严谨的助手}, {role: user, content: 帮我总结这段文字} ], temperature: 0.7, max_tokens: 1024 } resp requests.post(url, headersheaders, jsonpayload, timeout60) data resp.json() print(data[choices][0][message][content])这段代码里几个参数值得说temperature控制随机性做事实性任务时调低做创意任务时调高max_tokens限制输出长度防止意外产生超长回复导致费用飙升timeout一定要设否则网络卡住时程序会一直挂着。4.3 省钱和提效的实操技巧API 用得好不好差距很大。我总结了几个实用技巧第一控制上下文长度。多轮对话时不要把全部历史都带上可以只保留最近几轮或者对历史做摘要压缩。这一招能省下大量输入 token。第二缓存高频请求。如果有些问题是重复的把结果缓存起来命中缓存就不调 API这是最直接的省钱方式。第三分级调用。简单问题用便宜的小模型复杂问题才用贵的大模型。很多业务里 80% 的请求都是简单问题分级之后成本能降一大截。第四做好错误重试和降级。API 偶尔会超时或报错要有重试机制同时准备一个降级方案比如切换到备用服务商或者返回缓存结果。注意重试要设置上限和退避策略否则遇到持续性故障时会疯狂重试既浪费钱又可能触发限流。4.4 常见 API 报错与排查调 API 时最常见的报错有几类我整理成速查表报错类型典型信息排查方向鉴权失败401 / no api key检查 key 是否正确、是否过期额度不足402 / quota exceeded检查账户余额和套餐限流429 / rate limit降低并发加退避重试上下文超限maximum context length缩短输入做历史压缩模型不存在model not found核对模型名称拼写超时timeout检查网络增大超时加重试其中“上下文超限”是最常见的尤其是做长文档处理时。解决办法不是简单截断而是做分段处理 结果汇总这样既不丢信息又能控制在限制内。5. 混合方案成年人当然全都要5.1 什么情况下该混着用纯本地和纯 API 都有明显短板实际项目里我更推荐混合方案。典型场景是敏感数据走本地通用任务走 API。比如企业内部文档问答涉及商业机密的走本地模型公开资料的总结翻译走 API这样既保证了数据安全又享受了 API 的模型能力。另一个场景是本地做兜底API 做增强。平时用本地模型扛住大部分请求遇到本地模型搞不定的复杂任务再转发给 API。这样既控制了成本又保证了效果上限。5.2 混合架构的落地思路混合架构的核心是路由层。你需要一个统一的入口根据请求的特征决定走本地还是走 API。判断依据可以是数据敏感度标签、任务复杂度、当前本地负载等。实现上可以做一个简单的路由函数def route_request(query, is_sensitive, complexity): if is_sensitive: return call_local_model(query) if complexity high: return call_api_model(query) if local_model_overloaded(): return call_api_model(query) return call_local_model(query)这个路由逻辑不用很复杂关键是把决策规则显式化而不是拍脑袋。规则定好之后后续优化就有据可依。5.3 统一接口层的好处不管你走本地还是 API我都强烈建议在业务代码和模型之间加一层统一接口。这层接口负责统一请求格式、统一错误处理、统一日志记录、统一计费统计。好处是业务代码不关心底层是本地还是 API将来切换或混用时改动最小。这一层看起来是额外工作但实际项目里能省下大量重构时间。我见过太多项目一开始直接调 API后来想加本地模型时发现代码到处都要改就是因为缺了这一层抽象。6. 踩过的坑和独家经验6.1 本地部署的常见坑坑一显存刚好够一跑长对话就崩。前面提过显存要留余量。我的经验是至少留 30%做长上下文任务时留 50%。坑二模型下载慢或中断。大模型文件动辄几个 GB下载中断很常见。建议用支持断点续传的工具或者提前把模型文件准备好。坑三依赖版本冲突。Python 环境里 CUDA、PyTorch、框架版本互相打架是家常便饭。强烈建议用虚拟环境或容器隔离别在系统环境里直接装。坑四服务没有自动重启。本地服务跑久了可能因为内存泄漏崩掉一定要配进程守护崩了自动拉起来。6.2 API 使用的常见坑坑一没设 max_tokens输出失控。有些模型会一直输出停不下来费用直接起飞。务必设上限。坑二把 key 硬编码在代码里。一旦代码泄露key 就废了。用环境变量或密钥管理服务。坑三忽略并发限制。批量任务时并发开太高会被限流甚至封号。要按服务商的限制来加队列和退避。坑四不做用量监控。等到账单出来才发现超支就晚了。一定要做实时用量统计和告警。6.3 我的选型决策清单最后给你一个我实际用的决策清单按顺序问自己数据能不能出内网不能直接本地。有没有现成显卡没有且不想买直接 API。年调用量算下来本地和 API 哪个便宜按盈亏平衡点算。有没有人维护本地服务没有优先 API。需不需要追最新最强模型需要优先 API。以上都不明确先 API 快速验证跑通业务后再评估要不要本地化。这个清单不保证每次都对但能帮你避开大部分明显的错误决策。实际项目里很多选择不是一次定死的而是随着业务发展不断调整。先跑起来再优化比一开始就纠结完美方案要务实得多。