统一适配层设计
如果你要同时支持多个 provider,建议不要让业务层直接面对每家的原始响应结构。
推荐中间结构
ts
export interface NormalizedToolCall {
provider: 'openai' | 'anthropic' | 'gemini'
id: string
name: string
input: Record<string, unknown>
raw: unknown
}
export interface NormalizedToolResult {
id: string
name: string
output: unknown
isError?: boolean
}为什么值得做
好处有三个:
- 业务执行层更稳定
- 新增 provider 时只改 adapter
- 日志和调试口径更统一
一条很实用的原则
provider 差异留在边界层,业务逻辑只吃统一结构。
这样后面你再加流式、并行、重试、监控,复杂度会低很多。