背景
现在的大模型领域各种模型层出不穷,有OpenAI的GPT系列,有阿里的通义,也有Anthropic的Claude系列。从我个人的需求而言,在通用和语言领域我已经有了官方的OpenAI的API,但是在代码编写领域,尽管OpenAI的GPT-4o堪堪能用,但是还是急缺一个Claude-sonnet系列模型,这点也可以从AI模型的评分中可以看到:
而对于Claude官方,由于我人身处国内,那Web账号的封号,信用卡支付的不方便等多种原因都阻碍我去直接使用相关的功能,寻找一个中转站便是一个不错的选择。
中转站介绍
通过网上搜索,发现了梦境API(https://oneapi.paintbot.top/)这个中转站点,优势主要有以下两点:
- 模型齐全,包含OpenAI/Gemini/Claude
- 便宜,官方宣传:目前价格为1¥兑换1$,全部模型目前都是官方倍率,相当于比官方价格便宜7倍多。
支持的模型列表截图:
中转站痛点
找中转站不难,但痛点在于,大部分的中转站基本都基于New-API这个开源程序,导致所有的渠道(OpenAI/Claude/Gemini)的返回格式都会变成OpenAI的兼容格式,这点也可以在原程序中的介绍和issue中找到相关讨论痕迹。issue地址:https://github.com/Calcium-Ion/new-api/issues/578
这样的格式转换尽管部分时候是好用的,但是仍然会带来一个问题,那就是对于我客户端而言,我无法拆开我的OpenAI和Claude两个渠道,只能作为同一个渠道进行使用。例如,在中转站中的lobechat客户端使用Claude模型将会变成这样:
这对于我而言是不可接受的,在背景中我有提到我有OpenAI的渠道,我仅仅只是想使用中转站的Claude模型而已。
解决方案
方案一(不成功):
在issue中,官方的答案是建议使用new-api-horizon这个免费使用但闭源的软件:
我尝试使用了这个方案,但这个系统应该是针对我渠道本来就是Claude模式设计的,当遇到OpenAI的兼容模式内容时,尽快能正常输出,但是每句的回复开始2-3个字符会被吞掉,无法正常使用。一个可能的案例如下:
方案二:
使用一些软件,能够配置OpenAI和OpenAI Compatible两个渠道,此时就可以比较好的满足我的需求,例如使用OpenCat软件即可符合我的需求:
方案三:
其实方案二已经基本满足了我的需求,但是仍然还有一下几个痛点无法解决:
- OpenCat是MacOS/iOS的独占软件,在Windows上没办法使用
- 无法分享给第三方使用(尽管可能性很小)
- 我的常用软件是LobeChat,OpenCat已经很少使用了
- 完美主义犯病…
在搜索了互联网后,发现对于AI的格式转换上,由于OpenAI的爆火和市占率,大家都写了非常多的格式转换器,但基本上都是xxx to OpenAI格式,对于我的需求,OpenAI to Claude一个都没有…迫于无奈计划开始自己写一个转换器:
首先参考Claude AI的API文档,查看当流输出时的格式:https://docs.anthropic.com/en/api/messages-streaming
一个Basic的示例,将会以message_start
的event开始,接着会发出content_block_start和ping的
event,接着就是正常的流式输出content_block_delta
,停止时发送一个空的message_stop
。
然后查看New-API软件(中转站使用)的源码,了解中转站是如何将Claude的响应转成OpenAI兼容模式的:
接下来对照格式和中转站的转换逻辑将代码逆向写一遍即可完成,基本逻辑是当收到中转站的第一个响应时,往客户端发出message_start
/content_block_start
/ping
三个event,然后将获取的内容按顺序返回给前端,最终输出message_stop
即可:
完整的源代码可以见我的github:
结尾
最终得到如下的效果:
推广
如果你对这个中转站有兴趣,可以使用我的推广码注册:https://oneapi.paintbot.top/register?aff=J57n
说明:毕竟不是官方的API,群主说即使跑路了也会退款,大家自行判断
发表回复