我把Codex放到服务器上跑自动化任务以后,纠结的重点很快就变了。

一开始总想找最聪明的模型。真正跑起来才发现,模型能力只是其中一项。业务数据能不能发出去,任务量上来以后费用怎么算,服务临时不可用怎么办,哪天供应商调整接口时能不能顺利换走,这些问题更接近真实工作。

最近Kimi K3这类开放权重模型的能力继续提高,很多开发者又开始纠结一个老问题。

到底应该继续调用闭源API,还是把模型部署到自己的环境里?

我的答案不是二选一。

大多数团队应该先用闭源API验证价值,同时从第一天就把模型接入层拆开。敏感数据、稳定的大批量任务和强定制需求,再逐步迁移到开放权重模型。

真正要选的不是模型,而是交付方式

闭源API更像租用一项服务。

应用把请求发送给模型供应商,对方负责模型部署、显卡、扩容、安全更新和版本维护。开发团队只需要处理接口、提示词和业务逻辑,上手成本最低。

开放权重则允许团队下载模型参数,把它运行在自己的服务器、私有云或托管平台中。部署位置、推理框架、量化方式和部分安全策略都可以自己决定,但维护责任也会一起转移过来。

两种方案解决的是同一个需求,交给团队的权利和责任却完全不同。

开放权重不等于完整开源

不少文章会把开放权重直接叫作开源模型。日常交流没什么问题,做技术选型时最好分清楚。

模型权重可以理解为训练完成后得到的核心参数。权重开放后,开发者通常可以下载、自托管、量化和微调模型。

但这不代表训练数据、数据清洗过程、完整训练代码和周边基础设施也全部公开。

拿汽车打个比方,开放权重更像拿到了可以拆装和改造的发动机。发动机怎么设计、用了哪些生产数据、整条生产线如何运转,你未必都能看到。

因此评估一款开放模型时,我会额外确认这些内容。

检查项 需要确认的问题
许可证 是否允许商业使用、修改和再分发
模型文件 是否提供完整权重、量化版本和校验值
推理支持 能否使用vLLM、llama.cpp或团队现有框架
硬件需求 显存、内存、磁盘和并发能力是否匹配
上下文能力 长文本是否真正可用,而不只是标称长度
工具调用 结构化输出和Function Calling是否稳定
安全边界 是否需要额外增加内容审核与权限控制

不要只看参数量。

参数规模、上下文长度和厂商Benchmark能帮助了解模型,但它们无法代替自己的业务评测。真正重要的是,模型能不能稳定完成你准备交给它的任务。

六个维度看清两种方案

把闭源API和开放权重放到企业应用里,可以从下面几个维度比较。

维度 闭源API 开放权重
接入速度 快,通常几小时即可跑通 慢,需要准备推理环境
前期成本 低,按实际调用付费 较高,需要硬件和部署投入
运维成本 主要由供应商承担 监控、扩容和升级由团队承担
数据控制 数据需要经过外部接口 可以保留在自有环境
定制能力 受平台能力和规则限制 可量化、微调和修改推理配置
迁移能力 容易受接口和模型行为影响 模型与部署位置更容易自主调整
前沿能力 通常更新更快 取决于开放模型的能力与硬件
故障责任 双方共同处理 团队承担更多基础设施责任

这里最容易踩的坑,是把开放权重理解成免费。

模型文件可以免费下载,推理并不会凭空发生。显卡、云主机、存储、网络、监控和维护人员都要花钱。

我更习惯用总拥有成本来算。

月度总成本
= API调用费用
+ GPU或云主机费用
+ 存储与网络费用
+ 部署和升级的人力成本
+ 监控与故障处理成本
+ 未来迁移的改造成本

调用量不大、业务还没跑通时,闭源API往往更省钱。

任务足够稳定、调用量持续增长,或者数据无法离开内部环境时,自托管才更容易体现价值。

不要把供应商名字写进业务代码

不管当前选择哪种模型,我都不建议业务服务直接依赖某一家SDK。

今天用一个API,明天换成本地模型,如果Controller、Service和定时任务里到处都是供应商特有参数,迁移会非常痛苦。

比较稳妥的做法,是在业务层与模型之间增加一层Model Gateway。

业务任务
   │
   ▼
模型策略层
   ├─ 数据敏感度
   ├─ 能力要求
   ├─ 延迟要求
   └─ 成本上限
   │
   ▼
统一模型接口
   ├─ CloudModelAdapter
   ├─ LocalModelAdapter
   └─ BackupModelAdapter
   │
   ▼
评测、日志、费用与告警

在Java项目中,可以先定义一个与供应商无关的接口。

public interface AiModelClient {

    String provider();

    AiResult execute(AiRequest request);
}

每个模型单独实现适配器。

@Component
public class CloudModelClient implements AiModelClient {

    @Override
    public String provider() {
        return "cloud";
    }

    @Override
    public AiResult execute(AiRequest request) {
        // 调用外部模型API
        return callRemoteModel(request);
    }
}

@Component
public class LocalModelClient implements AiModelClient {

    @Override
    public String provider() {
        return "local";
    }

    @Override
    public AiResult execute(AiRequest request) {
        // 调用内部推理服务
        return callLocalInference(request);
    }
}

再由路由层根据任务属性选择模型。

@Component
public class AiModelRouter {

    private final Map<String, AiModelClient> clients;

    public AiModelRouter(List<AiModelClient> clientList) {
        this.clients = clientList.stream()
                .collect(Collectors.toUnmodifiableMap(
                        AiModelClient::provider,
                        Function.identity()
                ));
    }

    public AiResult execute(AiTask task) {
        String provider = selectProvider(task);
        return clients.get(provider).execute(task.toRequest());
    }

    private String selectProvider(AiTask task) {
        if (task.containsSensitiveData()) {
            return "local";
        }
        return task.requiresFrontierCapability() ? "cloud" : "local";
    }
}

这段代码只是结构示例,生产环境还需要补上超时、重试、熔断、限流和降级。

它解决的关键问题不是少写几行代码,而是让业务逻辑不再绑定某个模型。

真实工作流应该怎么分

我现在会让服务器上的Agent整理日报和周报,再把结果发送到邮箱。服务器出现异常时,通过钉钉给我推送告警。

这两类任务看起来都在使用AI,选型方法却不一样。

日报生成通常是批处理任务,对响应速度不敏感。如果输入内容已经脱敏,可以先使用价格合适的云端模型。任务量稳定以后,再测试开放模型能否以更低成本完成同样的摘要。

服务器告警可能带有日志、内部地址甚至敏感配置。原始日志不适合直接发送到外部接口。可以先用规则过滤和脱敏,也可以把初步分析放到内部模型中,只把必要信息交给更强的云端模型复核。

代码任务对模型能力要求更高,但执行权限比模型选择更重要。无论使用闭源模型还是开放模型,都应该限制可读目录、可执行命令和网络范围,并保留Diff、测试与人工审批。

所以我不会按产品名字分配任务,而是按四个条件来分。

  • 数据是否敏感
  • 是否需要当前最强能力
  • 调用量是否稳定
  • 错误结果能否低成本恢复

同一个系统同时使用两到三个模型并不奇怪。用昂贵模型处理复杂规划,用便宜模型做分类和摘要,用内部模型处理敏感内容,通常比强行统一更合理。

没有评测,选型就是凭感觉

模型切换之前,我建议准备一套自己的Golden Dataset。

它不需要很大。先从实际业务里挑选50到200个有代表性的任务,覆盖正常输入、边界输入和容易失败的情况,再记录人工认可的结果。

每次升级或更换模型,都跑一遍同样的测试。

至少记录下面这些指标。

指标 作用
任务成功率 判断模型是否真正完成工作
人工驳回率 观察输出需要多少次返工
P95延迟 避免平均值掩盖慢请求
单任务成本 评估规模化后的真实费用
工具调用成功率 检查结构化输出是否稳定
降级触发率 判断主模型是否经常不可用
高风险错误数 单独跟踪越权、泄露和错误执行

公开排行榜只能回答模型在一套公开题目上表现怎样。

自己的评测集才能回答,它适不适合你的系统。

我的选择很明确

如果是一个刚开始做AI功能的普通开发团队,我会先用闭源API。

理由很简单。先把业务价值验证出来,比提前维护一套复杂的推理集群更重要。

但我会从第一天就做好三件事。

模型调用经过统一接口,提示词和工具协议不散落在业务代码里,所有请求都有日志、费用和质量记录。

等到敏感数据、固定高并发或深度定制成为主要问题,再迁移合适的任务,而不是一次性把整个系统推倒重来。

开放权重和闭源API并不是互相替代的关系。

闭源API适合快速获得强能力,开放权重适合换取更多控制。团队真正需要避免的,是在还没意识到风险时,就把数据、成本和业务流程全部锁进一家供应商。

先用最合适的工具完成工作,同时把离开的路留好。

这才是我理解的企业AI选型。

更多推荐