什么是 ChatModel?
ChatModel 是调用对话式语言模型的应用层抽象,通过结构化消息、标准化参数、可选流式输出、工具调用支持和供应商无关的响应处理来封装模型调用。
工作原理
ChatModel 是 AI 应用编排和具体模型供应商 API 之间的边界。它避免每个工作流都直接理解 OpenAI 兼容接口、Claude 风格消息、本地模型运行时、重试行为或流式分片格式等细节,而是提供一个稳定契约来发送聊天消息并接收模型输出。设计良好的 ChatModel 抽象应当让模型替换、降级、测试、追踪和策略执行都不需要重写应用其他部分。
主要特点
- 面向消息的接口:处理结构化聊天角色,而不是直接拼接原始文本
- 供应商归一化:隐藏请求字段、响应对象、流式分片和错误结构差异
- 能力表面:可暴露工具调用、JSON 或结构化输出、多模态输入、token 统计和流式能力
- 运行边界:为超时、重试、降级、限流和追踪策略提供统一施加位置
- 可测试性:允许用确定性 mock 和 fixture 测试依赖非确定性模型输出的工作流
常见用途
- 在云端 LLM 和本地模型之间切换,而不改变编排代码
- 把模型调用注入 Chain、Graph、Workflow 或 Agent 运行时
- 在统一层捕获 token 用量、延迟、请求 ID 和模型错误
- 用模拟模型响应测试 RAG 和工具调用流程
- 当主模型供应商失败或超过成本限制时执行模型降级
示例
loading...
Loading code...常见问题
ChatModel 和 LLM 是一回事吗?
不是。LLM 是底层模型,ChatModel 是应用调用对话式模型时使用的接口。同一个 ChatModel 抽象可以封装不同供应商、不同版本或不同部署方式的模型。
为什么不直接调用模型供应商 SDK?
小实验中直接调用 SDK 可以接受,但生产系统更需要稳定边界。ChatModel 抽象可以集中处理重试、超时、流式输出、追踪、降级、测试和供应商差异归一化。
生产级 ChatModel 应该暴露哪些信息?
至少应暴露消息输入、模型选项、响应内容、错误和供应商元数据。根据应用需要,还可以暴露流式分片、工具调用请求、token 用量、结构化输出校验和安全信息。
ChatModel 可以被 mock 吗?
可以。把 ChatModel 定义为接口的重要原因之一,就是测试时可以用确定性 fixture 替换真实模型。这样可以在不支付模型调用成本、也不依赖非确定性响应的情况下评估编排逻辑。