或许我们能在 Router 中做更多事情
· 阅读需 5 分钟
自从claude-code-router发布以来,我收到了很多用户的反馈,至今还有不少的 issues 未处理。其中大多都是关于不同的供应商的支持和deepseek模型调用工具不积极的问题。
之前开发这个项目主要是为了我自己能以较低成本使用上claude code,所以一开始的设计并没有考虑到多供应商的情况。在实际的排查问题中,我发现尽管市面上所有的供应商几乎都宣称兼容OpenAI格式调用,即通过/chat/compeletions接口调用,但是其中的细节差异非常多。例如:
-
Gemini 的工具参数类型是 string 时,
format参数只支持date和date-time,并且没有工具调用 ID。 -
OpenRouter 需要使用
cache_control进行缓存。 -
DeepSeek 官方 API 的
max_output为 8192,而火山引擎的会更大。
除了这些问题之外,还有一些其他的小的供应商,他们或多或少参数都有点问题。于是,我打算开发一个新的项目musistudio/llms来处理这种不同服务商的兼容问题。该项目使用 OpenAI 格式为基础的通用格式,提供了一个Transformer接口,该接口用于处理转换请求和响应。当我们给不同的服务商都实现了Transformer后,我们可以实现不同服务商的混合调用。比如我在AnthropicTransformer中实现了Anthropic <-> OpenAI格式的互相转换,并监听了/v1/messages