楼层: 首页/ 软件技术/ Spring AI/ 模型管理与成本控制
十

模型管理与成本控制

Model Management & Cost

调大模型是按 token 计费的。选错模型、参数没调对、缓存没做,一个月账单能让你怀疑人生。这一章讲怎么选模型、怎么调参数、怎么省钱。

模型特点什么时候用
Qwen-Max最强,最贵复杂推理、高质量写作。
Qwen-Plus性价比均衡日常对话、客服,主力模型。
Qwen-Turbo最快,最便宜简单分类、抽取、高频调用。

三个关键参数

参数意思与建议
temperature0~1。越低越确定(适合抽取、分类),越高越有创造力(适合写故事)。客服场景建议 0.3。
top_p核采样,跟 temperature 二选一调,别同时瞎调。
max_tokens限制输出长度。防止模型啰嗦半天,也防止 token 爆炸。

模型降级与 Token 计数

主模型挂了或限流了,自动切到备用模型(Max → Plus → Turbo),别让服务直接 500。另外每次调用返回里都带 token 使用量,记日志方便核算成本、排查为啥账单超了。

拿到 token 使用量

ChatResponse resp = chatClient.prompt(q).call().chatResponse(); Usage usage = resp.getMetadata().getUsage(); log.info("prompt tokens={}, completion tokens={}, total={}", usage.getPromptTokens(), usage.getCompletionTokens(), usage.getTotalTokens());

多模型切换:一套代码接多个模型

Spring AI 抽象得好的地方在于:业务代码只认 ChatClient,底下接哪个模型随便换。想接通义千问就引 alibaba starter,想接 OpenAI 就换 OpenAI starter,业务代码一行不改。生产上可以做"主模型 + 备用模型":主模型超时了,自动切备用。

不同场景用不同模型(思路)

// 简单分类:用 Turbo,便宜快 chatClient.prompt().user(q).options(o -> o.model("qwen-turbo")).call(); // 复杂写作:用 Max,质量高 chatClient.prompt().user(q).options(o -> o.model("qwen-max")).call(); // 业务代码同一套,只是 options 里换了模型名
成本控制三板斧

① 能缓存就缓存:相同 Prompt 直接返回上次结果,别重复调模型。② 简单任务用小模型:分类这种活交给 Qwen-Turbo,别用 Max。③ 截断对话历史:别把 100 轮历史每次都发给模型。这三招能把账单砍到十分之一。

模型路由:一个入口,按请求分发到不同模型

上面是"业务代码自己在 options 里选模型"。模型路由(Routing)更进一步:做一个统一入口,根据请求内容自动决定该派给哪个模型——省钱又省心。这是企业级 AI 网关的核心能力。

路由策略人话
按任务类型分类/打标签走便宜小模型;写作/推理走大模型。
按成本预算高峰期/预算紧张时自动降级到小模型,闲时再上大模型。
按可用性主模型超时/报错,自动 fallback 到备用厂商(A 厂挂了切 B 厂)。
按敏感等级含敏感词/内部数据的请求,路由到可私有化部署的模型,不发给公有云。
// 路由思路(伪代码):先判任务复杂度,再选模型
public ChatModel route(String query) {
    if (isSimpleClassification(query)) return smallModel;   // 便宜快
    if (isSensitive(query))             return localModel;     // 私有化
    return bigModel;                                     // 默认大模型
}

论别一开始就自建网关

路由、fallback、限流、统计这一整套,自己写是个不小的工程。先在业务层用 if-else 把路由策略写出来,跑通再说;量大了再接专门的 LLM 网关(如 spring-ai-alibaba 的路由能力,或开源网关)。以当前版本能力为准。