/gpt_load_cleaner

自动清理GPT-Load中失效的key

Primary LanguageRustMIT LicenseMIT

GPT-Load Cleaner

监控 GPT-Load 的日志,并删除日志中出现的密钥。

背景

GPT-Load可以在key返回状态>=400的时将key标记为失败,失败次数达到阈值后可以将key标记为“无效”,也就是黑名单,等待下次自动或手动验证确定key又恢复有效了再改回“有效”状态。key返回失败包含很多种情况,比如400、403、429、499、500、503等等;有些失败是暂时性的,稍后重新调用可能会重新有效,比如429和499;确定不会再有效的应该是403和几种说key不再valid的400.

GPT-Load可以验证无效密钥,但不能自动删除确定不再有效的密钥,T佬的设计是可以在日志中自己筛选日志,把确定不再有效的密钥(如返回信息说key不再valid的)一键导出为CSV文件,然后可以手动从CSV文件中批量复制key,粘贴到GPT-Load提供的批量删除key的对话框中,手动删除。

我这个程序就是把这个过程自动化了,可以自己在config.json中配置日志的筛选条件,定时按条件查询日志,并自动删除日志中出现的key。

功能

  • /api/logs 端点获取日志。
  • 根据 config/config.json 中的配置过滤日志。
  • 从日志中提取 group_id 并调用 /api/keys/delete-async 端点来删除密钥。
  • 应用使用 tokio 进行异步操作。

如何运行

配置文件

应用启动时会读取 config/config.json 文件。请确保该文件存在并且格式正确。 第一次部署可以复制项目中的 config.example.json 到config目录下,并更名为config.json,然后再修改配置信息为你GPT-Load的信息。

  • api_address: GPT-Load 的地址,如 http://127.0.0.1:8080
  • auth_key: GPT-Load 的访问密钥,需要具备删除密钥的权限。
  • interval: 日志检查的间隔时间,单位为毫秒。
  • log_configs: 这里面是GPT-Load日志的查询条件。
    • group_name: 日志组名称,注意不是显示名。
    • status_code: 密钥的返回状态码,如"403"
    • error_contains: 密钥的返回信息中包含的字符串,如"API key not valid. Please pass a valid API key."

误删密钥怎么办

程序输出日志中包含删除的密钥,注意记录这些信息,如遇到误删则从日志中找到密钥并恢复。

使用 Cargo 运行

  1. 安装 Rust
  2. 克隆代码仓库。
  3. 创建并配置 config/config.json 文件。
  4. 运行应用:
    cargo run

使用现有 Docker 镜像运行

docker run --rm -v $(pwd)/config:/app/config libook/gpt_load_cleaner

使用 Docker Compose 运行

可以修改GPT-Load的Docker compose文件

services:
  gpt-load:
    ……原有内容……

  gpt-load-cleaner:
    image: libook/gpt_load_cleaner:latest
    container_name: GPT-Load-Cleaner
    restart: unless-stopped
    env_file:
      - .env
    volumes:
      - 你的config路径:/app/config
    depends_on:
      - gpt-load

使用 Docker 构建

  1. 在项目根目录构建 Docker 镜像:
    docker-buildx build . -t gpt_load_cleaner
  2. 运行 Docker 容器:
    docker run --rm -v $(pwd)/config:/app/config gpt_load_cleaner
    请确保你的 config 目录挂载到了容器的 /app/config 目录。