chatgpt-web icon indicating copy to clipboard operation
chatgpt-web copied to clipboard

feat(api): 增加多 apikey 和 accseeToken 支持

Open LinLin00000000 opened this issue 3 years ago • 30 comments

环境变量 OPENAI_API_KEY 和 OPENAI_ACCESS_TOKEN 可以以半角逗号 "," 或 换行符 "\n" 进行分隔 可选 random 和 polling 两种负载均衡策略 多 apikey 时不再支持查询余额,将直接返回"-"

resolve https://github.com/Chanzhaoyu/chatgpt-web/issues/740 https://github.com/Chanzhaoyu/chatgpt-web/issues/773 https://github.com/Chanzhaoyu/chatgpt-web/issues/821 https://github.com/Chanzhaoyu/chatgpt-web/issues/923

2023/03/28 更新: image

LinLin00000000 avatar Mar 27 '23 07:03 LinLin00000000

封号警告,啊哈哈哈

LuckyWang6 avatar Mar 27 '23 08:03 LuckyWang6

会话可以被不同 key 处理吗?

ottocsb avatar Mar 27 '23 09:03 ottocsb

会话可以被不同 key 处理吗?

不可以,只做了最简单的修改

LinLin00000000 avatar Mar 27 '23 09:03 LinLin00000000

这个功能好哦,我正想自己开发,我先拿五个apiKey试试封不封

AngelOver avatar Mar 27 '23 10:03 AngelOver

谢谢谢谢谢谢您进行此修改。我只有一个问题,我有5个ChatGPT Plus的令牌,如果其中一个令牌正在使用并且在您创建的此修改中失败,它会尝试使用下一个令牌,如果再次失败,它会尝试使用下一个令牌直到有一个可用吗?


"Thank you thank you thank you for this modification, I just have one question. I have 5 ChatGPT Plus tokens. If one token is being used and it fails with this modification you created, will it try the next token, and if that also fails, will it keep trying with the next token until one of them works?"

Root-FTW avatar Mar 27 '23 19:03 Root-FTW

谢谢谢谢谢谢您进行此修改。我只有一个问题,我有5个ChatGPT Plus的令牌,如果其中一个令牌正在使用并且在您创建的此修改中失败,它会尝试使用下一个令牌,如果再次失败,它会尝试使用下一个令牌直到有一个可用吗?

"Thank you thank you thank you for this modification, I just have one question. I have 5 ChatGPT Plus tokens. If one token is being used and it fails with this modification you created, will it try the next token, and if that also fails, will it keep trying with the next token until one of them works?"

并没有此功能,该PR仅做了最简单的实现,高级功能后续有时间我再做

LinLin00000000 avatar Mar 28 '23 00:03 LinLin00000000

谢谢谢谢谢谢您进行此修改。我只有一个问题,我有5个ChatGPT Plus的令牌,如果其中一个令牌正在使用并且在您创建的此修改中失败,它会尝试使用下一个令牌,如果再次失败,它会尝试使用下一个令牌直到有一个可用吗? "Thank you thank you thank you for this modification, I just have one question. I have 5 ChatGPT Plus tokens. If one token is being used and it fails with this modification you created, will it try the next token, and if that also fails, will it keep trying with the next token until one of them works?"

并没有此功能,该PR仅做了最简单的实现,高级功能后续有时间我再做

谢谢你的一切。希望你能够实现我解释的功能:如果一个令牌由于任何原因在某一时刻失败,则尝试使用另一个令牌,如果第二个令牌也无法使用,则继续尝试第三个、第四个、第五个(或任何其他数量的)令牌,直到其中一个可用。

Thank you!

Root-FTW avatar Mar 28 '23 01:03 Root-FTW

请问模式如何修改

LuShanYanYv avatar Mar 28 '23 02:03 LuShanYanYv

这个功能好棒!以后搞一堆access_token,多人使用体验会好很多!

zhanggaolei001 avatar Mar 28 '23 03:03 zhanggaolei001

多个OPENAI_ACCESS_TOKEN可以解决Only one message at a time. Please allow any other responses to complete before sending another messageor wait one minute.问题吗?

yifangyujason avatar Mar 28 '23 03:03 yifangyujason

这样做,上下文就关联就没有了

ludashi2020 avatar Mar 28 '23 03:03 ludashi2020

请问模式如何修改

image 可以在这里修改

LinLin00000000 avatar Mar 28 '23 05:03 LinLin00000000

多个OPENAI_ACCESS_TOKEN可以解决Only one message at a time. Please allow any other responses to complete before sending another messageor wait one minute.问题吗?

理论上可以,不过默认策略是随机,应改用轮询比较好

LinLin00000000 avatar Mar 28 '23 05:03 LinLin00000000

这样做,上下文就关联就没有了

这个不影响的,上下文跟你的key没有关系

LinLin00000000 avatar Mar 28 '23 05:03 LinLin00000000

谢谢谢谢谢谢您进行此修改。我只有一个问题,我有5个ChatGPT Plus的令牌,如果其中一个令牌正在使用并且在您创建的此修改中失败,它会尝试使用下一个令牌,如果再次失败,它会尝试使用下一个令牌直到有一个可用吗? "Thank you thank you thank you for this modification, I just have one question. I have 5 ChatGPT Plus tokens. If one token is being used and it fails with this modification you created, will it try the next token, and if that also fails, will it keep trying with the next token until one of them works?"

并没有此功能,该PR仅做了最简单的实现,高级功能后续有时间我再做

谢谢你的一切。希望你能够实现我解释的功能:如果一个令牌由于任何原因在某一时刻失败,则尝试使用另一个令牌,如果第二个令牌也无法使用,则继续尝试第三个、第四个、第五个(或任何其他数量的)令牌,直到其中一个可用。

Thank you!

多个OPENAI_ACCESS_TOKEN可以解决Only one message at a time. Please allow any other responses to complete before sending another messageor wait one minute.问题吗?

已实现

LinLin00000000 avatar Mar 28 '23 13:03 LinLin00000000

您好,看了下代码,请问您是随机调用的key吗?能否加一个参数,在当前key用完余额后再调用下一个key呢?这样可能会减少封号的风险,万分感谢!

mkdirmushroom avatar Mar 28 '23 15:03 mkdirmushroom

您好,看了下代码,请问您是随机调用的key吗?能否加一个参数,在当前key用完余额后再调用下一个key呢?这样可能会减少封号的风险,万分感谢!

很简单,不用 loadbalancer 来生成 next 函数,自定义一个实现:保存一个数组元素的指针,从指向第一个元素开始,暴露一个使指针+1的 increase 方法,在 chatprocess 捕获异常时检测是否为余额不足的错误,是的话就调用 increase 方法,然后重新执行 chatprocess 函数,这样就可以自动切换到下一个有余额的账号了

LinLin00000000 avatar Mar 28 '23 16:03 LinLin00000000

您好,看了下代码,请问您是随机调用的key吗?能否加一个参数,在当前key用完余额后再调用下一个key呢?这样可能会减少封号的风险,万分感谢!

很简单,不用 loadbalancer 来生成 next 函数,自定义一个实现:保存一个数组元素的指针,从指向第一个元素开始,暴露一个使指针+1的 increase 方法,在 chatprocess 捕获异常时检测是否为余额不足的错误,是的话就调用 increase 方法,然后重新执行 chatprocess 函数,这样就可以自动切换到下一个有余额的账号了

好的,谢谢,我尝试修改下,没有写过ts 233

mkdirmushroom avatar Mar 29 '23 01:03 mkdirmushroom

他们不再接受拉动请求了吗? 这个请求已经存在好几天了,他们没有把它上传到主页。

Root-FTW avatar Mar 30 '23 18:03 Root-FTW

他们不再接受拉动请求了吗? 这个请求已经存在好几天了,他们没有把它上传到主页。

作者应该是有他的考量才没有合并,就像 #589 那样,留给有需要的人自行合并

LinLin00000000 avatar Apr 01 '23 05:04 LinLin00000000

希望作者能确认这是否会成为最终版本。

Root-FTW avatar Apr 03 '23 04:04 Root-FTW

如果能加上会话排队功能就更好了

sleikang avatar Apr 07 '23 23:04 sleikang

如果能加上会话排队功能就更好了

会话排队功能是什么样的?详细说说

LinLin00000000 avatar Apr 08 '23 03:04 LinLin00000000

如果能加上会话排队功能就更好了

会话排队功能是什么样的?详细说说

https://github.com/moeakwak/chatgpt-web-share 这个项目就有,就是本身网页版并不支持多个会话同时回答,这个就是多用户使用的时候,自动进入排队系统

sleikang avatar Apr 08 '23 13:04 sleikang

是只能在配置文件里面配置吗,我打包之后,在docker命令里面添加貌似不生效。

firstsaofan avatar Apr 11 '23 12:04 firstsaofan

是只能在配置文件里面配置吗,我打包之后,在docker命令里面添加貌似不生效。

首先请确保你使用了该 PR 的代码,其次配置是用原有的环境变量进行配置的,可直接添加 OPENAI_API_KEY 和 OPENAI_ACCESS_TOKEN,如果仍然有问题,请把详细说明遇到的问题以及配置环境

LinLin00000000 avatar Apr 12 '23 01:04 LinLin00000000

感谢您的回复.Sorry,第一次合并代码出了点问题,可以读取到配置的多key,但是当我配置2个key的时候,我和我朋友同时测试,我的长回答还是会被截断。我们的使用场景是,一个key同一时刻只能有一个回答。后者会把前者在回答的内容截断。多个key轮循的话,可以解决。测试结果是不可以。由于我前端不是很了解。我猜测是否是是因为流返回,截断,属于返回错误,没有生成合法对应的parentid的内容。导致失去了上下文。

firstsaofan avatar Apr 12 '23 01:04 firstsaofan

感谢您的回复.Sorry,第一次合并代码出了点问题,可以读取到配置的多key,但是当我配置2个key的时候,我和我朋友同时测试,我的长回答还是会被截断。我们的使用场景是,一个key同一时刻只能有一个回答。后者会把前者在回答的内容截断。多个key轮循的话,可以解决。测试结果是不可以。由于我前端不是很了解。我猜测是否是是因为流返回,截断,属于返回错误,没有生成合法对应的parentid的内容。导致失去了上下文。

apikey 的话不会限制同一时刻只能有一个回答的。如果是短回答的话能正常运作吗?长回答被截断我还没试过,可以参考 #1334 #1347 #1312 #1307

LinLin00000000 avatar Apr 12 '23 01:04 LinLin00000000

@LinLin00000000 其实被截止也没关系,我自己写了接口测试,api没有记忆功能,是看传上下之前得会话让他的回答保持不扩散,我现在遇到的问题就是被截断以后,上下文继续不了了。还有api同一时刻官方不限制只能回答一个请求吗?时间那个设置我已经设置为0了,服务器是海外服务器。一个key一个人用 ,不会出现问题 ,上下文可以保持继续。我一般测试问题就是:nginx论文,不少于2000字,等他输出一些内容,你同时另外一个客户端请求,这边内容会被截断,然后这里的上下文接不上了。

firstsaofan avatar Apr 12 '23 01:04 firstsaofan

@LinLin00000000 其实被截止也没关系,我自己写了接口测试,api没有记忆功能,是看传上下之前得会话让他的回答保持不扩散,我现在遇到的问题就是被截断以后,上下文继续不了了。还有api同一时刻官方不限制只能回答一个请求吗?时间那个设置我已经设置为0了,服务器是海外服务器。一个key一个人用 ,不会出现问题 ,上下文可以保持继续。我一般测试问题就是:nginx论文,不少于2000字,等他输出一些内容,你同时另外一个客户端请求,这边内容会被截断,然后这里的上下文接不上了。

抱歉,最近比较忙,没时间解决这个问题。你可以看看在单个 key 的情况下会不会出现这个问题,也有问题的话可以在主仓库给作者提个 issue

LinLin00000000 avatar Apr 13 '23 00:04 LinLin00000000