Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat:新增限流功能 #718

Merged
merged 2 commits into from
Mar 21, 2023
Merged

Conversation

zhuxindong
Copy link
Contributor

@zhuxindong zhuxindong commented Mar 20, 2023

feat:新增限流功能:
可选参数 - MAX_REQUEST_PERHOUR 每小时最大请求次数,可选,不填时默认36000次

@slwl
Copy link

slwl commented Mar 20, 2023

请问自定义api功能如何开启呢,看你的介绍里面有自定义,但是搭建后没找到

@zhuxindong
Copy link
Contributor Author

请问自定义api功能如何开启呢,看你的介绍里面有自定义,但是搭建后没找到

因同一ip请求多个api可能导致较高的封号风险,故此feature未采纳

@zhuxindong zhuxindong changed the title 请求速率限制 feat:请求速率限制 Mar 20, 2023
@zhuxindong zhuxindong changed the title feat:请求速率限制 feat:新增限流功能 Mar 20, 2023
@Chanzhaoyu
Copy link
Owner

这个是服务端总数量吗?

@zhuxindong
Copy link
Contributor Author

这个是服务端总数量吗?

针对单个IP的

@zhuxindong
Copy link
Contributor Author

动画演示:我将每小时的请求数限制到5,超出后就会返回429限流。
image

@yi-ge
Copy link
Collaborator

yi-ge commented Mar 20, 2023

未填写时可以修改为不限制吗?

@zhuxindong
Copy link
Contributor Author

未填写时可以修改为不限制吗?

不开启时目前的默认值已经很大了(单个请求ip限制每小时请求3.6w次,相当于一秒10次)。如果觉得还不够大,可以调整limiter.ts里面的值

@Chanzhaoyu
Copy link
Owner

未填写时可以修改为不限制吗?

不开启时目前的默认值已经很大了(单个请求ip限制每小时请求3.6w次,相当于一秒10次)。如果觉得还不够大,可以调整limiter.ts里面的值

再请教个问题状态码 429 可以自定义吗?因为如果添加这个功能,需要和现在的 OpwnAI 的状态码区分下。我电脑不在身边,我没法看 npm 上的文档。

@Chanzhaoyu
Copy link
Owner

还有需要加个 number 类型的判断,现在只判断了变量是否存在,不过我来处理也可以

@zhuxindong
Copy link
Contributor Author

未填写时可以修改为不限制吗?

不开启时目前的默认值已经很大了(单个请求ip限制每小时请求3.6w次,相当于一秒10次)。如果觉得还不够大,可以调整limiter.ts里面的值

再请教个问题状态码 429 可以自定义吗?因为如果添加这个功能,需要和现在的 OpwnAI 的状态码区分下。我电脑不在身边,我没法看 npm 上的文档。

目前框架默认就是429,业界通用的429就是请求速率受限。而且当达到请求速率上限时,并不会调用OpenAI接口 而是直接给前端返回了429状态码,可能需要前端做一下状态码的判断

@zhuxindong
Copy link
Contributor Author

还有需要加个 number 类型的判断,现在只判断了变量是否存在,不过我来处理也可以

感谢~

@tanpengsccd
Copy link

这个不错,期待合并进主分支.

@Chanzhaoyu Chanzhaoyu merged commit e02ab1f into Chanzhaoyu:main Mar 21, 2023
Equim-chan pushed a commit to Equim-chan/chatgpt-web that referenced this pull request Mar 21, 2023
* 请求速率限制

* perf: 优化代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>
pzcn pushed a commit to pzcn/chatgpt-web2 that referenced this pull request Mar 21, 2023
* 请求速率限制

* perf: 优化代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>
@tanpengsccd
Copy link

tanpengsccd commented Mar 21, 2023

希望改为

const limiter = rateLimit({
  windowMs: 60 * 60 * 1000, // Maximum number of accesses within an hour
  max: maxCount,
  statusCode: 200, // 200 means success,but the message is  `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`
  message: async (req, res) => {
    res.send({ status: 'Fail', message: `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`, data: null })
  },
})

image

提示会更明确.

@zhuxindong
Copy link
Contributor Author

希望改为

const limiter = rateLimit({
  windowMs: 60 * 60 * 1000, // Maximum number of accesses within an hour
  max: maxCount,
  statusCode: 200, // 200 means success,but the message is  `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`
  message: async (req, res) => {
    res.send({ status: 'Fail', message: `Exceeded the limit of ${maxCount} questions per hour. Please try again later.`, data: null })
  },
})
image

提示会更明确.

其实感觉没有必要,根据安全性原则,接口的限流参数无需对客户端提示。提示了最大次数之后反而会更利于别人精确控制请求你接口的频率

pzcn pushed a commit to pzcn/chatgpt-web2 that referenced this pull request Mar 22, 2023
* 请求速率限制

* perf: 优化代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>
lizhengxiang87 added a commit to lizhengxiang87/chatgpt-web that referenced this pull request Mar 25, 2023
* chore: change docs

* feat: 添加 Prompt 模板和 Prompt 商店支持 (Chanzhaoyu#268)

* feat: 添加Prompt模板和Prompt商店支持

* feat: well done

---------

Co-authored-by: Redon <[email protected]>

* feat: 设置添加关闭按钮

* chore: format

* chore: 2.10.4

* chore: cover

* fix: 更新JSON导入检查 (Chanzhaoyu#523)

* feat: Improve zh-TW locale (Chanzhaoyu#511)

* fix: cors in auth_secret_key model (Chanzhaoyu#499)

* fix: 修改最大行数与官方保持一致 (Chanzhaoyu#502)

* chore: rename environment variables files

* docs: update README.md about .env file

* feat: support long reply

* chore: upgrade chatgpt package and set long reply to false default

* chore: set long reply to false default

* fix: change maxRows to 8

* feat: mobile max row

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* feat: support linux command line proxy standard (Chanzhaoyu#308)

* feat: support linux command line proxy standard with env HTTPS_PROXY and ALL_PROXY

* chore: update docs for linux command linux proxy standard

* fix: Prompt商店在线导入可以导入两种recommend.json里提到的模板 (Chanzhaoyu#516) (Chanzhaoyu#521)

* fix(PromptStore): import prompt template using different dict keys

* chore(PromptStore): clear url field after downloading

* feat: 仓库添加翻译

* feat: 仓库查询筛选

* feat: 调整界面

* chore: update deps

* feat: improve zh-TW locale, translate new strings (Chanzhaoyu#542)

* feat: 语言设定改为下拉框选择

* feat: 修改 Prompt Store 移动端样式

* chore: docs change

* feat: 权限输入框改为密码类型

* fix: 清空上下文时不应该重置会话标题

* chore: docs change

* chore: optimize dockerfile to speed up building and reduce docker image size (Chanzhaoyu#520)

* chore: v2.10.5

* fix: 修复导入、导出错误

* fix: inverted parameter for before each function (Chanzhaoyu#585)

* fix: 🐛 fix scroll bar style (Chanzhaoyu#617)

* fix: typo (Chanzhaoyu#636)

* perf: 优化移动端 prompt 商店样式 (Chanzhaoyu#608)

* feat: 修改移动端 prompt 商店样式

* add: 修改移动端 prompt 商店样式

* perf: 清理代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* chore: extract proxy setup code into reusable function (Chanzhaoyu#583)

* perf: 记录上下文设定保存到本地

* perf: 优化部份判断

* docs: 移除 docker-compose.yml 省略

* feat: show api balance (Chanzhaoyu#582)

* feat: show api balance

* Update index.ts

* 保留小数点后五位

* perf: 判断优化

---------

Co-authored-by: Redon <[email protected]>

* chore: update deps and lint fix

* feat: session 返回接口方式做显示判断

* fix: highlight.js 控制台兼容性警告

* chore: v2.10.6

* fix: 回退 chatgpt 版本导致的代理失效

* fix: 添加 usingContext 缺省

* chore: v2.10.7

* feat: 查询余额使用 API_BASE_URL 参数

* feat: 渲染的链接新窗口打开

* perf: config 接口添加权限验证

* fix: 手动重置异常的 loading

* feat: 添加用于显示回复消息原文的选项 (Chanzhaoyu#672)

* feat: 添加显示用于原文的选项

* chore: 修复暗色主题下文本颜色问题

给输入和输出气泡添加了 css 类,用来处理在暗色主题下聊天气泡的文本颜色

* feat: 用户输入不应该被渲染,防止 xss

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* feat: 新增限流功能 (Chanzhaoyu#718)

* 请求速率限制

* perf: 优化代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* feat: 添加角色设定预留API 设定页(Chanzhaoyu#768)

* add systemMessage

* perf: 优化代码和类型

* perf: 补全翻译和为以后做准备

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* perf: 重置回答时滚动定位至该回答 (Chanzhaoyu#781)

* chore: 重置回答时滚动定位至该回答

* perf: format code

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* perf: scrollToBottom 改成 scrollToBottomIfAtBottom (Chanzhaoyu#771)

* feat: 更新依赖并兼容已存在的代理

* feat: 当用gpt-4的API 时增加可用的 Max Tokens (Chanzhaoyu#729)

* fix: 用GPT-4 API时增加max token

* style: eslint fix

---------

Co-authored-by: Redon <[email protected]>

* feat: Create start.cmd (Chanzhaoyu#656)

在windows下也可以运行

* chore(vsc-debug): 增加 visual-studio-code 的 debug 启动文件 (Chanzhaoyu#296)

* fix line end with new-line in some backend (Chanzhaoyu#474)

* fix line end with new-line in some backend

In backend with golang (like https://github.com/sashabaranov/go-openai), the responseText always has '\n'.

* feat: 补全遗漏

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* feat: 增加 ChatGPTUnofficialProxyAPI 的模型自定义配置 (Chanzhaoyu#632)

* feat: 增加 ChatGPTUnofficialProxyAPI 的模型自定义配置(Chanzhaoyu#618)

* perf: 修改判断

---------

Co-authored-by: ChenZhaoYu <[email protected]>

* chore: 显示原文时使用 .whitespace-pre-wrap (Chanzhaoyu#779)

显示 ChatGPT 输出的原文时保留空格和换行

* feat:  PWA 默认不开启

* feat:  切换 history 时自动聚焦输入框 (Chanzhaoyu#735)

* feat: 修改 scrollToBottom 行为(当滚动条在底部或发送问题时才会进入自动滚动,滚轮向上滚动会中止自动滚动,方便复制和查看之前的代码; 切换 history 时自动聚焦输入框,方便直接输入文字,不用再次去点击输入框;)

* chore: 通过eslint检查

* perf: 清理重复功能

---------

Co-authored-by: Redon <[email protected]>

* perf: 网络连接时 500 自动跳转到主页

* docs: fix docker port to private (Chanzhaoyu#802)

* feat: add zh-TW prompts in the Promt Store (Chanzhaoyu#796)

* fix: prompt store 样式问题

* chore: v2.10.8

* fix: 重置时应该移除本地储存

* fix: PWA 未添加的问题 (Chanzhaoyu#807)

Co-authored-by: bingo235 <>

* fix: 移动端新建会话关闭侧边栏 (Chanzhaoyu#813)

* perf: 移动端删除 chat 时,侧边栏应该收起

* fix: ESM error (Chanzhaoyu#826)

* perf: 自动焦点时移动端上的不便

* fix: 移动端焦点不触发的问题

* perf: 本地地址

* fix: 反向代理限流失效 (Chanzhaoyu#863)

https://docs.colyseus.io/zh_hk/colyseus/how-to/rate-limit/

使用nginx限流会只识别为服务器ip,需启用trust proxy

---------

Co-authored-by: ChenZhaoYu <[email protected]>
Co-authored-by: Nothing1024 <[email protected]>
Co-authored-by: Peter Dave Hello <[email protected]>
Co-authored-by: Yige <[email protected]>
Co-authored-by: Eason <[email protected]>
Co-authored-by: 吴杉(Shan Wu) <[email protected]>
Co-authored-by: Wisdom <[email protected]>
Co-authored-by: Hayden Chen <[email protected]>
Co-authored-by: 碎花爱洋裙 <[email protected]>
Co-authored-by: CornerSkyless <[email protected]>
Co-authored-by: Kirk Lin <[email protected]>
Co-authored-by: pzcn <[email protected]>
Co-authored-by: Yi <[email protected]>
Co-authored-by: xiaozhu <[email protected]>
Co-authored-by: quzard <[email protected]>
Co-authored-by: 舜岳 <[email protected]>
Co-authored-by: 吴杉(Shan Wu) <[email protected]>
Co-authored-by: vulgate <[email protected]>
Co-authored-by: KeepRunning <[email protected]>
Co-authored-by: Liut <[email protected]>
Co-authored-by: hncboy <[email protected]>
Co-authored-by: Allen <[email protected]>
Co-authored-by: 东子 <[email protected]>
Co-authored-by: Bing <[email protected]>
Co-authored-by: Kid <[email protected]>
Co-authored-by: gitgitgogogo <[email protected]>
jingChen55 pushed a commit to jingChen55/chatgpt-web that referenced this pull request Mar 27, 2023
* 请求速率限制

* perf: 优化代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>
jingChen55 pushed a commit to jingChen55/chatgpt-web that referenced this pull request Mar 27, 2023
* 请求速率限制

* perf: 优化代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>
suikodev referenced this pull request in AstraSurge/gpteams Mar 27, 2023
* 请求速率限制

* perf: 优化代码

---------

Co-authored-by: ChenZhaoYu <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants