前言
忘了在微信公众号是先看到了FastGPT还是One API了,反正对于自己来说知识库或One API都是个新东西,都有很强大的活力。One API在我看来,可能更基础、部署更简单一些,于是打算先搞个One API部署来看看。
One API是开源的,github介绍第一句就是“通过标准的 OpenAI API 格式访问所有的大模型,开箱即用”
部署安装
推荐是docker安装,不过我电脑没有安装docker而且docker使用经验有限,因此使用了手动部署方式,下载exe直接运行。
由于最新的release下只有SourceCode,而且它主要是js和Go开发的,不会编译,因此选择了上一版本的exe双击运行(地址:Releases · songquanpeng/one-api (github.com))
弹出cmd界面,访问:http://localhost:3000/
即可正常访问
配置
登录
点击其他链接,即弹出登录界面,默认用户root,密码123456
渠道
登录后,就有了渠道链接,渠道主要是维护各个大模型的调用信息,以便可以以统一的格式调用与返回信息。
点击“添加新的渠道”:
类型,选择即可,目前智谱ChatGLM、讯飞星火、阿里通义千问都有免费token可用,可以优先使用这几个。
名称,随便写,可以标识是哪个大模型就好
分组,默认default即可
模型,在选择了类型后,会进行数据筛选、并默认选中
秘钥,即对应大模型的apikey,根据格式提示填写即可(如讯飞星火需要填写APPID|APISecret|APIKey,而有些大模型只需要一个apikey即可)
令牌
令牌,用于通过webapi调用One API的时候提供鉴权。
点击“添加新的令牌”:
名称,随便写
过期日期,自己用可以设置为永不过期,也可以自定义
额度,随便设置,主要给其他人用的时候,可以用于控制额度
使用
apipost测试
api地址:http://localhost:3000/v1/chat/completions
http方法:post
header:Authorization:Bearer {设置的令牌,复制即可}
注意:这里一定要带上Bearer,且和令牌之间有一个空格,一开始我就是这里没设置对,一直有问题
body:这里就和openai格式完全一样了,这也是One API的设计初衷,简化调用与返回格式,实现格式统一。如下是一个简单的示例
{
"model": "qwen-turbo",
"messages": [
{
"role": "user",
"content": "你是谁?"
}
]
}
这里是不是有个疑问,如果配置了多个渠道,那么在这里使用哪个渠道(大模型)呢?
github上面的说明是,会自动通过负载均衡使用多个渠道。
我测试的情况是,会根据model确定使用哪个大模型,毕竟模型对不上,也没法使用其他大模型。
指定渠道ID
github说明也提到了,管理员可以指定渠道ID,这样就可以强制使用某个渠道的大模型
header:Authorization:Bearer {设置的令牌,复制即可}-{渠道ID}
python代码调用
直接使用调用openai的代码,只需修改环境变量OPENAI_BASE_URL和OPENAI_API_KEY即可,注意在apikey里也可以添加渠道号ID,和直接apipost测试是一致的。
SK调用
之前测试的时候,一直调用出错,大概错误:Role must be user or assistant and Content length must be greater than 0 (request id: 20240219174234243074400QqnFKmsk)
Status: 400 (Bad Request)
ErrorCode: bad_response_status_code
但是使用原本的openai的baseurl和apikey测试没问题。
写文章的时候又试了下,如果使用One API代理本来的openai,调用openai是可以的(设置模型为gpt的),因此推测问题是由于模型设置的不是openai的模型,SK底层可能做了参数验证,导致最终调用没法通过。
不确定的
对于function call这些,大模型也是存在差异的,这块不知能不能统一,估计够呛吧,有待验证