For the complete documentation index, see llms.txt. This page is also available as Markdown.

7.1 模型抽象层设计

模型抽象层连接智能体应用与具体 LLM API,支持灵活的多模型或单模型策略。本节介绍配置管理系统、故障转移链路、Provider 接口设计和模型选择引擎。

7.1.1 核心概念

模型抽象层是连接智能体应用与具体 LLM API 的中间层。其目标是:

  1. 统一接口:提供一致的 API,支持 Claude、GPT、DeepSeek、Gemini 等多种模型

  2. 灵活切换:动态选择或回退模型,无需修改业务逻辑

  3. 配置驱动:通过配置文件管理模型选择、默认值、故障转移策略

  4. 错误隔离:单个模型的故障不影响整个系统

7.1.2 设计权衡:多模型 vs 单模型绑定

Claude Code 方案(单模型绑定)

  • 绑定 Claude 模型家族(Opus/Sonnet/Haiku)

  • 专注于版本管理与推理预算调优

  • 深度集成 Adaptive Thinking 等 Claude 特性

  • 场景:需要最佳性能、深度功能集成、模型特性充分利用

OpenClaw 方案(多模型支持)

  • 支持多供应商切换(Claude/GPT/DeepSeek/Gemini/Ollama)

  • 供应商认证与接入配置(openclaw.json)

  • 模型故障转移链路(fallback mechanism)

  • 场景:需要成本优化、供应商多元化、灰度迁移

选择建议:

  • 小团队初期选择单模型绑定降低复杂度

  • 成熟产品需要多模型以应对供应商依赖和成本波动

7.1.3 配置管理系统

模型选择策略

模型选择的实现方式如下:

故障转移链路

故障转移链路定义了模型失败时的替代方案:

实现示例:

Provider 接口设计

Provider 接口定义了模型的核心操作。使用 Python Protocol 提供灵活的鸭子类型:

具体实现:Claude Provider

Claude Provider 的具体实现如下:

模型选择引擎

模型选择引擎的实现方式如下:

配置文件管理

配置文件的结构示例如下:

模型抽象层架构图

模型抽象层的整体架构如下所示:

图 7-1:模型抽象层架构 —— 应用通过统一的路由器访问多个模型提供商

总结

模型抽象层通过 Provider 接口、配置驱动的选择策略和故障转移机制,实现了:

  • 灵活的多模型支持或单模型绑定

  • 透明的故障切换,对上层应用无感

  • 可观测的模型健康度和选择决策

  • 成本与性能的可控权衡

这为后续的输出解析、质量门控奠定了基础。

7.1.4 能力降级与权限收缩

前面的故障转移链路解决的是可用性问题:主模型不可用时换一个能用的,让请求继续得到响应。但 select_model() 的判据只有 CircuitBreaker.is_available(),也就是「这个模型现在能不能调通」。它没有回答另一个问题:换上来的模型,是否仍然有能力承担原来那些自动执行的决策

这两件事被混为一谈时,会出现一种很难察觉的生产状态:

维度
状态

服务可用性

正常,仪表板全绿

模型能力

已下降(上下文更小、结构化输出更弱、工具调用不稳定)

智能体权限

未变,仍可自动执行

主模型故障是一次显性事件,会触发告警、进入值班流程;而回退成功之后,告警恢复、可用性指标回到 99.99%,能力下降却不会触发任何东西。系统看起来已经恢复了。

问题出在能力下降会静默改变决策的输入。假设回退模型的上下文预算更小,抽象层为了让工作流继续跑通,只能截掉一部分证据;智能体于是在一份不完整的材料上做判断。如果被截掉的恰好是一条限制性条款,而剩下的材料看起来都很正常,模型会给出一个自信、无幻觉、推理链条完整的结论——然后被自动放行。这里没有任何一个组件报错:模型没编造,回退机制按设计工作,熔断器状态正常。真正的缺陷是系统把能力降级当成了基础设施细节,而不是一次权限变更

因此,回退策略除了定义「主模型失败后换谁」,还应该定义「能力变化时权限如何跟着变」:

对应地,模型选择引擎返回的就不再只是一个 provider,而是「provider + 当前可用权限」这一对值:

这样一来,回退期间智能体仍然可以读取、分析、生成建议,只是不再拥有自动批准和对外执行的权限——服务没有中断,风险敞口却收窄了。

这里的核心判断是:可用性回退不应该静默地变成权限回退。为无状态服务做冗余时,副本和主库提供的是等价能力,切换是透明的;而不同模型之间除了性能差异,能安全承担的决策范围也不一样。所以回退链路本身属于部署策略的一部分,不只是一项基础设施配置。

由此还可以推出一个更基本的取舍:不是所有能力都应该「优雅降级」。

类别
典型任务
回退期间的处理

可降级

提取、摘要、草稿、低风险建议

继续执行

不可降级

高价值执行、不可逆操作、受监管决策

暂停自动路径,转人工

对不可降级的任务,正确的行为不是「保持服务可用」,而是明确返回「自动决策当前不可用」并转入人工审核。这与 11.3 容错模式 中「失败要显式、不要静默吞掉」是同一条原则在权限维度上的体现。

最后,降级期间的运行事实需要被记录下来,否则事后无法回答「这段时间到底发生了什么」:哪些请求是在降级状态下处理的、其中有没有本该走人工的决策被自动放行、恢复后是否需要回溯复核。可用性仪表板上的 99.99% 并不能替代这份记录,因为它衡量的是「系统有没有响应」,而不是「系统响应时是否具备原有的保障」。恢复主模型时也同样需要一道显式的门槛——健康检查通过、抽样回归通过、降级期间积压的高风险决策已经处理完毕,之后才把权限调回原位。

最后更新于