Adapter(适配器 / 翻译层) 产品与架构
别名:
翻译官
Provider 抽象里每家厂商各一层的「翻译官」(如 `createOpenAIProvider` / `createAnthropicProvider`):负责把统一的规范化消息翻译成该厂商的请求格式,再把响应解析回统一形状。业务代码只面向 `{ chat }`,换厂商只改一行。
它是什么
Adapter(适配器 / 翻译层)是 Provider 抽象里每家厂商各一层的「翻译官」:负责把统一的规范化消息翻译成该厂商的请求格式,再把响应解析回统一形状。createOpenAIProvider 与 createAnthropicProvider 都返回同一个 { chat },区别只在内部怎么构造请求、怎么解析响应。
翻译工作量集中在哪
OpenAI 版几乎是第 02 章裸调的照搬;Anthropic 版集中在两处:① system 从 messages 里抽到顶层字段(多个 system 消息用空行拼接),② 每条消息的 content 字符串包成 [{type:'text', text}] block 数组,还要补上必填的 max_tokens。这正是设计模式里的 Adapter:让接口不兼容的对象协作,业务代码只面向统一接口。
常见坑
baseUrl 末尾斜杠拼出 //v1/messages 双斜杠、content 是字符串还是 block 数组两头各一套、用量字段名拿错会静默得到 undefined 继而算成 NaN——第 04 章练习特意用「同一份断言同时打两家」压这类不对称。换厂商只改一行(createOpenAIProvider → createAnthropicProvider)的前提是接口参数一致。