新提供商与提示缓存修复
自 6 月分支更新日志 以来,本分支新增了多个订阅类提供商,并修复了转换器栈中的提示缓存可靠性。以下日期来自 git 历史:
自 6 月分支更新日志 以来,本分支新增了多个订阅类提供商,并修复了转换器栈中的提示缓存可靠性。以下日期来自 git 历史:
本分支在 claude-code-router 基础上新增了多项提供商集成、UI 改进和基础设施变更。以下是各功能的时间线。
自从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端点,在GeminiTransformer中实现了Gemini <-> OpenAI格式的互相转换,并监听了/v1beta/models/:modelAndAction端点,当他们的请求和响应都被转换成一个通用格式的时候,就可以实现他们的互相调用。
早在 Claude Code 发布的第二天(2025-02-25),我就尝试并完成了对该项目的逆向。当时要使用 Claude Code 你需要注册一个 Anthropic 账号,然后申请 waitlist,等待通过后才能使用。但是因为众所周知的原因,Anthropic 屏蔽了中国区的用户,所以通过正常手段我无法使用,通过已知的信息,我发现:
console.log获取想要的信息,也可以使用--inspect将其接入Chrome Devtools,甚至你可以使用d8去调试某些加密混淆的代码。由于我的目标是让我在没有 Anthropic 账号的情况下使用Claude Code,我并不需要获得完整的源代码,只需要将Claude Code请求 Anthropic 模型时将其转发到我自定义的接口即可。接下来我就开启了我的逆向过程:
Claude Code