监控 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."。
程序输出日志中包含删除的密钥,注意记录这些信息,如遇到误删则从日志中找到密钥并恢复。
- 安装 Rust。
- 克隆代码仓库。
- 创建并配置
config/config.json文件。 - 运行应用:
cargo run
docker run --rm -v $(pwd)/config:/app/config libook/gpt_load_cleaner可以修改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 镜像:
docker-buildx build . -t gpt_load_cleaner - 运行 Docker 容器:
请确保你的
docker run --rm -v $(pwd)/config:/app/config gpt_load_cleanerconfig目录挂载到了容器的/app/config目录。