跳到主要内容

1 篇博文 含有标签「transformer」

查看所有标签

或许我们能在 Router 中做更多事情

· 阅读需 5 分钟

自从claude-code-router发布以来,我收到了很多用户的反馈,至今还有不少的 issues 未处理。其中大多都是关于不同的供应商的支持和deepseek模型调用工具不积极的问题。 之前开发这个项目主要是为了我自己能以较低成本使用上claude code,所以一开始的设计并没有考虑到多供应商的情况。在实际的排查问题中,我发现尽管市面上所有的供应商几乎都宣称兼容OpenAI格式调用,即通过/chat/compeletions接口调用,但是其中的细节差异非常多。例如:

  1. Gemini 的工具参数类型是 string 时,format参数只支持datedate-time,并且没有工具调用 ID。

  2. OpenRouter 需要使用cache_control进行缓存。

  3. DeepSeek 官方 API 的 max_output 为 8192,而火山引擎的会更大。

除了这些问题之外,还有一些其他的小的供应商,他们或多或少参数都有点问题。于是,我打算开发一个新的项目musistudio/llms来处理这种不同服务商的兼容问题。该项目使用 OpenAI 格式为基础的通用格式,提供了一个Transformer接口,该接口用于处理转换请求和响应。当我们给不同的服务商都实现了Transformer后,我们可以实现不同服务商的混合调用。比如我在AnthropicTransformer中实现了Anthropic <-> OpenAI格式的互相转换,并监听了/v1/messages端点,在GeminiTransformer中实现了Gemini <-> OpenAI格式的互相转换,并监听了/v1beta/models/:modelAndAction端点,当他们的请求和响应都被转换成一个通用格式的时候,就可以实现他们的互相调用。