[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-tbphp--gpt-load":3,"tool-tbphp--gpt-load":64},[4,16,27,35,48,56],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":15},8272,"opencode","anomalyco\u002Fopencode","OpenCode 是一款开源的 AI 编程助手（Coding Agent），旨在像一位智能搭档一样融入您的开发流程。它不仅仅是一个代码补全插件，而是一个能够理解项目上下文、自主规划任务并执行复杂编码操作的智能体。无论是生成全新功能、重构现有代码，还是排查难以定位的 Bug，OpenCode 都能通过自然语言交互高效完成，显著减少开发者在重复性劳动和上下文切换上的时间消耗。\n\n这款工具专为软件开发者、工程师及技术研究人员设计，特别适合希望利用大模型能力来提升编码效率、加速原型开发或处理遗留代码维护的专业人群。其核心亮点在于完全开源的架构，这意味着用户可以审查代码逻辑、自定义行为策略，甚至私有化部署以保障数据安全，彻底打破了传统闭源 AI 助手的“黑盒”限制。\n\n在技术体验上，OpenCode 提供了灵活的终端界面（Terminal UI）和正在测试中的桌面应用程序，支持 macOS、Windows 及 Linux 全平台。它兼容多种包管理工具，安装便捷，并能无缝集成到现有的开发环境中。无论您是追求极致控制权的资深极客，还是渴望提升产出的独立开发者，OpenCode 都提供了一个透明、可信",144296,1,"2026-04-16T14:50:03",[13,14],"Agent","插件","ready",{"id":17,"name":18,"github_repo":19,"description_zh":20,"stars":21,"difficulty_score":22,"last_commit_at":23,"category_tags":24,"status":15},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,2,"2026-04-10T01:20:03",[14,13,25,26],"图像","开发框架",{"id":28,"name":29,"github_repo":30,"description_zh":31,"stars":32,"difficulty_score":22,"last_commit_at":33,"category_tags":34,"status":15},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[14,26],{"id":36,"name":37,"github_repo":38,"description_zh":39,"stars":40,"difficulty_score":22,"last_commit_at":41,"category_tags":42,"status":15},2268,"ML-For-Beginners","microsoft\u002FML-For-Beginners","ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程，旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周，包含 26 节精炼课程和 52 道配套测验，内容涵盖从基础概念到实际应用的完整流程，有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。\n\n无论是希望转型的开发者、需要补充算法背景的研究人员，还是对人工智能充满好奇的普通爱好者，都能从中受益。课程不仅提供了清晰的理论讲解，还强调动手实践，让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持，通过自动化机制提供了包括简体中文在内的 50 多种语言版本，极大地降低了全球不同背景用户的学习门槛。此外，项目采用开源协作模式，社区活跃且内容持续更新，确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路，ML-For-Beginners 将是理想的起点。",85267,"2026-04-18T11:00:28",[25,43,44,14,13,45,46,26,47],"数据工具","视频","其他","语言模型","音频",{"id":49,"name":50,"github_repo":51,"description_zh":52,"stars":53,"difficulty_score":22,"last_commit_at":54,"category_tags":55,"status":15},51,"gstack","garrytan\u002Fgstack","gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置，旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战，gstack 提供了一套标准化解决方案，帮助开发者实现堪比二十人团队的高效产出。\n\n这套配置特别适合希望提升交付效率的创始人、技术负责人，以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具，涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令（如 `\u002Freview` 进行代码审查、`\u002Fqa` 执行测试、`\u002Fplan-ceo-review` 规划功能），即可自动化处理从需求分析到部署上线的全链路任务。\n\n所有操作基于 Markdown 和斜杠命令，无需复杂配置，完全免费且遵循 MIT 协议。gstack 不仅是一套工具集，更是一种现代化的软件工厂实践，让单人开发者也能拥有严谨的工程流程。",75502,"2026-04-18T11:08:56",[13,14],{"id":57,"name":58,"github_repo":59,"description_zh":60,"stars":61,"difficulty_score":10,"last_commit_at":62,"category_tags":63,"status":15},7525,"codex","openai\u002Fcodex","Codex 是 OpenAI 推出的一款轻量级编程智能体，专为在终端环境中高效运行而设计。它允许开发者直接在命令行界面与 AI 交互，完成代码生成、调试、重构及项目维护等任务，无需频繁切换至浏览器或集成开发环境，从而显著提升了编码流程的连贯性与专注度。\n\n这款工具主要解决了传统 AI 辅助编程中上下文割裂的问题。通过将智能体本地化运行，Codex 能够更紧密地结合当前工作目录的文件结构，提供更具针对性的代码建议，同时支持以自然语言指令驱动复杂的开发操作，让“对话即编码”成为现实。\n\nCodex 非常适合习惯使用命令行的软件工程师、全栈开发者以及技术研究人员。对于追求极致效率、偏好键盘操作胜过图形界面的极客用户而言，它更是理想的结对编程伙伴。\n\n其独特亮点在于灵活的部署方式：既可作为全局命令行工具通过 npm 或 Homebrew 一键安装，也能无缝对接现有的 ChatGPT 订阅计划（如 Plus 或 Pro），直接复用账户权益。此外，它还提供了从纯文本终端到桌面应用的多形态体验，并支持基于 API 密钥的深度定制，充分满足不同场景下的开发需求。",75220,"2026-04-14T14:40:34",[46,13,14],{"id":65,"github_repo":66,"name":67,"description_en":68,"description_zh":69,"ai_summary_zh":69,"readme_en":70,"readme_zh":71,"quickstart_zh":72,"use_case_zh":73,"hero_image_url":74,"owner_login":75,"owner_name":75,"owner_avatar_url":76,"owner_bio":77,"owner_company":78,"owner_location":78,"owner_email":79,"owner_twitter":78,"owner_website":80,"owner_url":81,"languages":82,"stars":115,"forks":116,"last_commit_at":117,"license":118,"difficulty_score":22,"env_os":119,"env_gpu":120,"env_ram":120,"env_deps":121,"category_tags":129,"github_topics":130,"view_count":22,"oss_zip_url":78,"oss_zip_packed_at":78,"status":15,"created_at":138,"updated_at":139,"faqs":140,"releases":171},9305,"tbphp\u002Fgpt-load","gpt-load","Multi-channel AI proxy with intelligent key rotation. 智能密钥轮询的多渠道 AI 代理。","gpt-load 是一款专为高并发生产环境打造的高性能 AI API 透明代理工具。它核心解决了企业在整合多个 AI 服务时面临的密钥管理混乱、单点故障风险高以及负载均衡复杂等痛点。通过智能密钥轮询机制，gpt-load 能自动在多个 API 密钥间切换，并在检测到故障时迅速隔离与恢复，确保服务持续稳定运行，同时支持 OpenAI、Google Gemini 和 Anthropic Claude 等多种主流模型格式的原生兼容。\n\n这款工具非常适合需要大规模集成 AI 能力的开发者、技术团队及企业用户。无论是构建复杂的 AI 应用，还是管理庞大的密钥池，gpt-load 都能提供企业级的架构支持。其独特的技术亮点包括基于 Go 语言实现的零拷贝流式传输与连接池复用，确保了极致的响应速度；支持配置热更新，无需重启即可调整策略；此外，还配备了基于 Vue 3 的现代化管理后台，提供实时监控、健康检查及细粒度的权限控制，让复杂的分布式部署变得直观易用。借助 gpt-load，用户可以轻松实现横向扩展，以低成本构建高可用的 AI 服务网关。","# GPT-Load\n\nEnglish | [中文](README_CN.md) | [日本語](README_JP.md)\n\n[![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Ftbphp\u002Fgpt-load)](https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Freleases)\n![Go Version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGo-1.24+-blue.svg)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green.svg)](LICENSE)\n\nA high-performance, enterprise-grade AI API transparent proxy service designed specifically for enterprises and developers who need to integrate multiple AI services. Built with Go, featuring intelligent key management, load balancing, and comprehensive monitoring capabilities, designed for high-concurrency production environments.\n\nFor detailed documentation, please visit [Official Documentation](https:\u002F\u002Fwww.gpt-load.com\u002Fdocs?lang=en)\n\n\u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F14880\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_1145cd82417e.png\" alt=\"tbphp%2Fgpt-load | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fhellogithub.com\u002Frepository\u002Ftbphp\u002Fgpt-load\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fapi.hellogithub.com\u002Fv1\u002Fwidgets\u002Frecommend.svg?rid=554dc4c46eb14092b9b0c56f1eb9021c&claim_uid=Qlh8vzrWJ0HCneG\" alt=\"Featured｜HelloGitHub\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" \u002F>\u003C\u002Fa>\n\n## Features\n\n- **Transparent Proxy**: Complete preservation of native API formats, supporting OpenAI, Google Gemini, and Anthropic Claude among other formats\n- **Intelligent Key Management**: High-performance key pool with group-based management, automatic rotation, and failure recovery\n- **Load Balancing**: Weighted load balancing across multiple upstream endpoints to enhance service availability\n- **Smart Failure Handling**: Automatic key blacklist management and recovery mechanisms to ensure service continuity\n- **Dynamic Configuration**: System settings and group configurations support hot-reload without requiring restarts\n- **Enterprise Architecture**: Distributed leader-follower deployment supporting horizontal scaling and high availability\n- **Modern Management**: Vue 3-based web management interface that is intuitive and user-friendly\n- **Comprehensive Monitoring**: Real-time statistics, health checks, and detailed request logging\n- **High-Performance Design**: Zero-copy streaming, connection pool reuse, and atomic operations\n- **Production Ready**: Graceful shutdown, error recovery, and comprehensive security mechanisms\n- **Dual Authentication**: Separate authentication for management and proxy, with proxy authentication supporting global and group-level keys\n\n## Supported AI Services\n\nGPT-Load serves as a transparent proxy service, completely preserving the native API formats of various AI service providers:\n\n- **OpenAI Format**: Official OpenAI API, Azure OpenAI, and other OpenAI-compatible services\n- **Google Gemini Format**: Native APIs for Gemini Pro, Gemini Pro Vision, and other models\n- **Anthropic Claude Format**: Claude series models, supporting high-quality conversations and text generation\n\n## Quick Start\n\n### System Requirements\n\n- Go 1.24+ (for source builds)\n- Docker (for containerized deployment)\n- MySQL, PostgreSQL, or SQLite (for database storage)\n- Redis (for caching and distributed coordination, optional)\n\n### Method 1: Docker Quick Start\n\n```bash\ndocker run -d --name gpt-load \\\n    -p 3001:3001 \\\n    -e AUTH_KEY=your-secure-key-here \\\n    -v \"$(pwd)\u002Fdata\":\u002Fapp\u002Fdata \\\n    ghcr.io\u002Ftbphp\u002Fgpt-load:latest\n```\n\n> Please change `your-secure-key-here` to a strong password (never use the default value), then you can log in to the management interface: \u003Chttp:\u002F\u002Flocalhost:3001>\n\n### Method 2: Using Docker Compose (Recommended)\n\n**Installation Commands:**\n\n```bash\n# Create Directory\nmkdir -p gpt-load && cd gpt-load\n\n# Download configuration files\nwget https:\u002F\u002Fraw.githubusercontent.com\u002Ftbphp\u002Fgpt-load\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yml\nwget -O .env https:\u002F\u002Fraw.githubusercontent.com\u002Ftbphp\u002Fgpt-load\u002Frefs\u002Fheads\u002Fmain\u002F.env.example\n\n# Edit the .env file and change AUTH_KEY to a strong password. Never use default or simple keys like sk-123456.\n\n# Start services\ndocker compose up -d\n```\n\nBefore deployment, you must change the default admin key (AUTH_KEY). A recommended format is: sk-prod-[32-character random string].\n\nThe default installation uses the SQLite version, which is suitable for lightweight, single-instance applications.\n\nIf you need to install MySQL, PostgreSQL, and Redis, please uncomment the required services in the `docker-compose.yml` file, configure the corresponding environment variables, and restart.\n\n**Other Commands:**\n\n```bash\n# Check service status\ndocker compose ps\n\n# View logs\ndocker compose logs -f\n\n# Restart Service\ndocker compose down && docker compose up -d\n\n# Update to latest version\ndocker compose pull && docker compose down && docker compose up -d\n```\n\nAfter deployment:\n\n- Access Web Management Interface: \u003Chttp:\u002F\u002Flocalhost:3001>\n- API Proxy Address: \u003Chttp:\u002F\u002Flocalhost:3001\u002Fproxy>\n\n> Use your modified AUTH_KEY to log in to the management interface.\n\n### Method 3: Source Build\n\nSource build requires a locally installed database (SQLite, MySQL, or PostgreSQL) and Redis (optional).\n\n```bash\n# Clone and build\ngit clone https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load.git\ncd gpt-load\ngo mod tidy\n\n# Create configuration\ncp .env.example .env\n\n# Edit the .env file and change AUTH_KEY to a strong password. Never use default or simple keys like sk-123456.\n# Modify DATABASE_DSN and REDIS_DSN configurations in .env\n# REDIS_DSN is optional; if not configured, memory storage will be enabled\n\n# Run\nmake run\n```\n\nAfter deployment:\n\n- Access Web Management Interface: \u003Chttp:\u002F\u002Flocalhost:3001>\n- API Proxy Address: \u003Chttp:\u002F\u002Flocalhost:3001\u002Fproxy>\n\n> Use your modified AUTH_KEY to log in to the management interface.\n\n### Method 4: Cluster Deployment\n\nCluster deployment requires all nodes to connect to the same MySQL (or PostgreSQL) and Redis, with Redis being mandatory. It's recommended to use unified distributed MySQL and Redis clusters.\n\n**Deployment Requirements:**\n\n- All nodes must configure identical `AUTH_KEY`, `DATABASE_DSN`, `REDIS_DSN`\n- Leader-follower architecture where follower nodes must configure environment variable: `IS_SLAVE=true`\n\nFor details, please refer to [Cluster Deployment Documentation](https:\u002F\u002Fwww.gpt-load.com\u002Fdocs\u002Fcluster?lang=en)\n\n## Configuration System\n\n### Configuration Architecture Overview\n\nGPT-Load adopts a dual-layer configuration architecture:\n\n#### 1. Static Configuration (Environment Variables)\n\n- **Characteristics**: Read at application startup, immutable during runtime, requires application restart to take effect\n- **Purpose**: Infrastructure configuration such as database connections, server ports, authentication keys, etc.\n- **Management**: Set via `.env` files or system environment variables\n\n#### 2. Dynamic Configuration (Hot-Reload)\n\n- **System Settings**: Stored in database, providing unified behavioral standards for the entire application\n- **Group Configuration**: Behavior parameters customized for specific groups, can override system settings\n- **Configuration Priority**: Group Configuration > System Settings > Environment Configuration\n- **Characteristics**: Supports hot-reload, takes effect immediately after modification without application restart\n\n\u003Cdetails>\n\u003Csummary>Static Configuration (Environment Variables)\u003C\u002Fsummary>\n\n**Server Configuration:**\n\n| Setting                   | Environment Variable               | Default         | Description                                     |\n| ------------------------- | ---------------------------------- | --------------- | ----------------------------------------------- |\n| Service Port              | `PORT`                             | 3001            | HTTP server listening port                      |\n| Service Address           | `HOST`                             | 0.0.0.0         | HTTP server binding address                     |\n| Read Timeout              | `SERVER_READ_TIMEOUT`              | 60              | HTTP server read timeout (seconds)              |\n| Write Timeout             | `SERVER_WRITE_TIMEOUT`             | 600             | HTTP server write timeout (seconds)             |\n| Idle Timeout              | `SERVER_IDLE_TIMEOUT`              | 120             | HTTP connection idle timeout (seconds)          |\n| Graceful Shutdown Timeout | `SERVER_GRACEFUL_SHUTDOWN_TIMEOUT` | 10              | Service graceful shutdown wait time (seconds)   |\n| Follower Mode             | `IS_SLAVE`                         | false           | Follower node identifier for cluster deployment |\n| Timezone                  | `TZ`                               | `Asia\u002FShanghai` | Specify timezone                                |\n\n**Security Configuration:**\n\n| Setting        | Environment Variable | Default | Description                                                                       |\n| -------------- | -------------------- | ------- | --------------------------------------------------------------------------------- |\n| Admin Key      | `AUTH_KEY`           | -       | Access authentication key for the **management end**, please change it to a strong password |\n| Encryption Key | `ENCRYPTION_KEY`     | -       | Encrypts API keys at rest. Supports any string or leave empty to disable encryption. See [Data Encryption Migration](#data-encryption-migration) |\n\n**Database Configuration:**\n\n| Setting             | Environment Variable | Default              | Description                                         |\n| ------------------- | -------------------- | -------------------- | --------------------------------------------------- |\n| Database Connection | `DATABASE_DSN`       | `.\u002Fdata\u002Fgpt-load.db` | Database connection string (DSN) or file path       |\n| Redis Connection    | `REDIS_DSN`          | -                    | Redis connection string, uses memory storage when empty |\n\n**Performance & CORS Configuration:**\n\n| Setting                 | Environment Variable      | Default                       | Description                                     |\n| ----------------------- | ------------------------- | ----------------------------- | ----------------------------------------------- |\n| Max Concurrent Requests | `MAX_CONCURRENT_REQUESTS` | 100                           | Maximum concurrent requests allowed by system   |\n| Enable CORS             | `ENABLE_CORS`             | false                          | Whether to enable Cross-Origin Resource Sharing |\n| Allowed Origins         | `ALLOWED_ORIGINS`         | -                             | Allowed origins, comma-separated                |\n| Allowed Methods         | `ALLOWED_METHODS`         | `GET,POST,PUT,DELETE,OPTIONS` | Allowed HTTP methods                            |\n| Allowed Headers         | `ALLOWED_HEADERS`         | `*`                           | Allowed request headers, comma-separated        |\n| Allow Credentials       | `ALLOW_CREDENTIALS`       | false                         | Whether to allow sending credentials            |\n\n**Logging Configuration:**\n\n| Setting             | Environment Variable | Default               | Description                         |\n| ------------------- | -------------------- | --------------------- | ----------------------------------- |\n| Log Level           | `LOG_LEVEL`          | `info`                | Log level: debug, info, warn, error |\n| Log Format          | `LOG_FORMAT`         | `text`                | Log format: text, json              |\n| Enable File Logging | `LOG_ENABLE_FILE`    | false                 | Whether to enable file log output   |\n| Log File Path       | `LOG_FILE_PATH`      | `.\u002Fdata\u002Flogs\u002Fapp.log` | Log file storage path               |\n\n**Proxy Configuration:**\n\nGPT-Load automatically reads proxy settings from environment variables to make requests to upstream AI providers.\n\n| Setting     | Environment Variable | Default | Description                                     |\n| ----------- | -------------------- | ------- | ----------------------------------------------- |\n| HTTP Proxy  | `HTTP_PROXY`         | -       | Proxy server address for HTTP requests          |\n| HTTPS Proxy | `HTTPS_PROXY`        | -       | Proxy server address for HTTPS requests         |\n| No Proxy    | `NO_PROXY`           | -       | Comma-separated list of hosts or domains to bypass the proxy |\n\nSupported Proxy Protocol Formats:\n\n- **HTTP**: `http:\u002F\u002Fuser:pass@host:port`\n- **HTTPS**: `https:\u002F\u002Fuser:pass@host:port`\n- **SOCKS5**: `socks5:\u002F\u002Fuser:pass@host:port`\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>Dynamic Configuration (Hot-Reload)\u003C\u002Fsummary>\n\n**Basic Settings:**\n\n| Setting            | Field Name                           | Default                 | Group Override | Description                                  |\n| ------------------ | ------------------------------------ | ----------------------- | -------------- | -------------------------------------------- |\n| Project URL        | `app_url`                            | `http:\u002F\u002Flocalhost:3001` | ❌             | Project base URL                             |\n| Global Proxy Keys  | `proxy_keys`                         | Initial value from `AUTH_KEY` | ❌         | Globally effective proxy keys, comma-separated |\n| Log Retention Days | `request_log_retention_days`         | 7                       | ❌             | Request log retention days, 0 for no cleanup |\n| Log Write Interval | `request_log_write_interval_minutes` | 1                       | ❌             | Log write to database cycle (minutes)        |\n| Enable Request Body Logging | `enable_request_body_logging` | false | ✅ | Whether to log complete request body content in request logs |\n\n**Request Settings:**\n\n| Setting                       | Field Name                | Default | Group Override | Description                                                         |\n| ----------------------------- | ------------------------- | ------- | -------------- | ------------------------------------------------------------------- |\n| Request Timeout               | `request_timeout`         | 600     | ✅             | Forward request complete lifecycle timeout (seconds)                |\n| Connection Timeout            | `connect_timeout`         | 15      | ✅             | Timeout for establishing connection with upstream service (seconds) |\n| Idle Connection Timeout       | `idle_conn_timeout`       | 120     | ✅             | HTTP client idle connection timeout (seconds)                       |\n| Response Header Timeout       | `response_header_timeout` | 600     | ✅             | Timeout for waiting upstream response headers (seconds)             |\n| Max Idle Connections          | `max_idle_conns`          | 100     | ✅             | Connection pool maximum total idle connections                      |\n| Max Idle Connections Per Host | `max_idle_conns_per_host` | 50      | ✅             | Maximum idle connections per upstream host                          |\n| Proxy URL                     | `proxy_url`               | -       | ✅             | HTTP\u002FHTTPS proxy for forwarding requests, uses environment if empty |\n\n**Key Configuration:**\n\n| Setting                    | Field Name                        | Default | Group Override | Description                                                                |\n| -------------------------- | --------------------------------- | ------- | -------------- | -------------------------------------------------------------------------- |\n| Max Retries                | `max_retries`                     | 3       | ✅             | Maximum retry count using different keys for single request                |\n| Blacklist Threshold        | `blacklist_threshold`             | 3       | ✅             | Number of consecutive failures before key enters blacklist                 |\n| Key Validation Interval    | `key_validation_interval_minutes` | 60      | ✅             | Background scheduled key validation cycle (minutes)                        |\n| Key Validation Concurrency | `key_validation_concurrency`      | 10      | ✅             | Concurrency for background validation of invalid keys                      |\n| Key Validation Timeout     | `key_validation_timeout_seconds`  | 20      | ✅             | API request timeout for validating individual keys in background (seconds) |\n\n\u003C\u002Fdetails>\n\n## Data Encryption Migration\n\nGPT-Load supports encrypted storage of API keys. You can enable, disable, or change the encryption key at any time.\n\n\u003Cdetails>\n\u003Csummary>View Data Encryption Migration Details\u003C\u002Fsummary>\n\n### Migration Scenarios\n\n- **Enable Encryption**: Encrypt plaintext data for storage - Use `--to \u003Cnew-key>`\n- **Disable Encryption**: Decrypt encrypted data to plaintext - Use `--from \u003Ccurrent-key>`\n- **Change Encryption Key**: Replace the encryption key - Use `--from \u003Ccurrent-key> --to \u003Cnew-key>`\n\n### Operation Steps\n\n#### Docker Compose Deployment\n\n```bash\n# 1. Update the image (ensure using the latest version)\ndocker compose pull\n\n# 2. Stop the service\ndocker compose down\n\n# 3. Backup the database (strongly recommended)\n# Before migration, you must manually backup the database or export your keys to avoid key loss due to operations or exceptions.\n\n# 4. Execute migration command\n# Enable encryption (your-32-char-secret-key is your key, recommend using 32+ character random string)\ndocker compose run --rm gpt-load migrate-keys --to \"your-32-char-secret-key\"\n\n# Disable encryption\ndocker compose run --rm gpt-load migrate-keys --from \"your-current-key\"\n\n# Change encryption key\ndocker compose run --rm gpt-load migrate-keys --from \"old-key\" --to \"new-32-char-secret-key\"\n\n# 5. Update configuration file\n# Edit .env file, set ENCRYPTION_KEY to match the --to parameter\n# If disabling encryption, remove ENCRYPTION_KEY or set it to empty\nvim .env\n# Add or modify: ENCRYPTION_KEY=your-32-char-secret-key\n\n# 6. Restart the service\ndocker compose up -d\n```\n\n#### Source Build Deployment\n\n```bash\n# 1. Stop the service\n# Stop the running service process (Ctrl+C or kill process)\n\n# 2. Backup the database (strongly recommended)\n# Before migration, you must manually backup the database or export your keys to avoid key loss due to operations or exceptions.\n\n# 3. Execute migration command\n# Enable encryption\nmake migrate-keys ARGS=\"--to your-32-char-secret-key\"\n\n# Disable encryption\nmake migrate-keys ARGS=\"--from your-current-key\"\n\n# Change encryption key\nmake migrate-keys ARGS=\"--from old-key --to new-32-char-secret-key\"\n\n# 4. Update configuration file\n# Edit .env file, set ENCRYPTION_KEY to match the --to parameter\necho \"ENCRYPTION_KEY=your-32-char-secret-key\" >> .env\n\n# 5. Restart the service\nmake run\n```\n\n### Important Notes\n\n⚠️ **Important Reminders**:\n- **Once ENCRYPTION_KEY is lost, encrypted data CANNOT be recovered!** Please securely backup this key. Consider using a password manager or secure key management system\n- **Service must be stopped** before migration to avoid data inconsistency\n- Strongly recommended to **backup the database** in case migration fails and recovery is needed\n- Keys should use **32 characters or longer random strings** for security\n- Ensure `ENCRYPTION_KEY` in `.env` matches the `--to` parameter after migration\n- If disabling encryption, remove or clear the `ENCRYPTION_KEY` configuration\n\n### Key Generation Examples\n\n```bash\n# Generate secure random key (32 characters)\nopenssl rand -base64 32 | tr -d \"=+\u002F\" | cut -c1-32\n```\n\n\u003C\u002Fdetails>\n\n## Web Management Interface\n\nAccess the management console at: \u003Chttp:\u002F\u002Flocalhost:3001> (default address)\n\n### Interface Overview\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_a89ef5c20c87.png\" alt=\"Dashboard\" width=\"600\"\u002F>\n\n\u003Cbr\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_fd04efa51155.png\" alt=\"Key Management\" width=\"600\"\u002F>\n\n\u003Cbr\u002F>\n\nThe web management interface provides the following features:\n\n- **Dashboard**: Real-time statistics and system status overview\n- **Key Management**: Create and configure AI service provider groups, add, delete, and monitor API keys\n- **Request Logs**: Detailed request history and debugging information\n- **System Settings**: Global configuration management and hot-reload\n\n## API Usage Guide\n\n\u003Cdetails>\n\u003Csummary>Proxy Interface Invocation\u003C\u002Fsummary>\n\nGPT-Load routes requests to different AI services through group names. Usage is as follows:\n\n### 1. Proxy Endpoint Format\n\n```text\nhttp:\u002F\u002Flocalhost:3001\u002Fproxy\u002F{group_name}\u002F{original_api_path}\n```\n\n- `{group_name}`: Group name created in the management interface\n- `{original_api_path}`: Maintain complete consistency with original AI service paths\n\n### 2. Authentication Methods\n\nConfigure **Proxy Keys** in the web management interface, which supports system-level and group-level proxy keys.\n\n- **Authentication Method**: Consistent with the native API, but replace the original key with the configured proxy key.\n- **Key Scope**: **Global Proxy Keys** configured in system settings can be used in all groups. **Group Proxy Keys** configured in a group are only valid for the current group.\n- **Format**: Multiple keys are separated by commas.\n\n### 3. OpenAI Interface Example\n\nGPT-Load currently supports two OpenAI-compatible group types:\n\n- `openai` (OpenAI Chat Completions format)\n- `openai-response` (OpenAI Responses format)\n\nAssuming a group named `openai` was created:\n\n**Original invocation:**\n\n```bash\ncurl -X POST https:\u002F\u002Fapi.openai.com\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Authorization: Bearer sk-your-openai-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"gpt-4.1-mini\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**Proxy invocation:**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Authorization: Bearer your-proxy-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"gpt-4.1-mini\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**Changes required:**\n\n- Replace `https:\u002F\u002Fapi.openai.com` with `http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai`\n- Replace original API Key with the **Proxy Key**\n\n**OpenAI Responses format example (`openai-response` group):**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai-response\u002Fv1\u002Fresponses \\\n  -H \"Authorization: Bearer your-proxy-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"gpt-4.1-mini\", \"input\": \"Hello\"}'\n```\n\n### 4. Gemini Interface Example\n\nAssuming a group named `gemini` was created:\n\n**Original invocation:**\n\n```bash\ncurl -X POST https:\u002F\u002Fgenerativelanguage.googleapis.com\u002Fv1beta\u002Fmodels\u002Fgemini-2.5-pro:generateContent?key=your-gemini-key \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"contents\": [{\"parts\": [{\"text\": \"Hello\"}]}]}'\n```\n\n**Proxy invocation:**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fgemini\u002Fv1beta\u002Fmodels\u002Fgemini-2.5-pro:generateContent?key=your-proxy-key \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"contents\": [{\"parts\": [{\"text\": \"Hello\"}]}]}'\n```\n\n**Changes required:**\n\n- Replace `https:\u002F\u002Fgenerativelanguage.googleapis.com` with `http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fgemini`\n- Replace `key=your-gemini-key` in URL parameter with the **Proxy Key**\n\n### 5. Anthropic Interface Example\n\nAssuming a group named `anthropic` was created:\n\n**Original invocation:**\n\n```bash\ncurl -X POST https:\u002F\u002Fapi.anthropic.com\u002Fv1\u002Fmessages \\\n  -H \"x-api-key: sk-ant-api03-your-anthropic-key\" \\\n  -H \"anthropic-version: 2023-06-01\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"claude-sonnet-4-20250514\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**Proxy invocation:**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fanthropic\u002Fv1\u002Fmessages \\\n  -H \"x-api-key: your-proxy-key\" \\\n  -H \"anthropic-version: 2023-06-01\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"claude-sonnet-4-20250514\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**Changes required:**\n\n- Replace `https:\u002F\u002Fapi.anthropic.com` with `http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fanthropic`\n- Replace the original API Key in `x-api-key` header with the **Proxy Key**\n\n### 6. Supported Interfaces\n\n**OpenAI Chat Completions Format (`openai`):**\n\n- `\u002Fv1\u002Fchat\u002Fcompletions` - Chat conversations\n- `\u002Fv1\u002Fcompletions` - Text completion\n- `\u002Fv1\u002Fembeddings` - Text embeddings\n- `\u002Fv1\u002Fmodels` - Model list\n- And all other OpenAI-compatible interfaces\n\n**OpenAI Responses Format (`openai-response`):**\n\n- `\u002Fv1\u002Fresponses` - Unified response generation\n- `\u002Fv1\u002Fmodels` - Model list\n- And all other OpenAI Responses-compatible interfaces\n\n**Gemini Format:**\n\n- `\u002Fv1beta\u002Fmodels\u002F*\u002FgenerateContent` - Content generation\n- `\u002Fv1beta\u002Fmodels` - Model list\n- And all other Gemini native interfaces\n\n**Anthropic Format:**\n\n- `\u002Fv1\u002Fmessages` - Message conversations\n- `\u002Fv1\u002Fmodels` - Model list (if available)\n- And all other Anthropic native interfaces\n\n### 7. Client SDK Configuration\n\n**OpenAI Python SDK:**\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"your-proxy-key\",  # Use the proxy key\n    base_url=\"http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai\"  # Use proxy endpoint\n)\n\nresponse = client.chat.completions.create(\n    model=\"gpt-4.1-mini\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n```\n\n**Google Gemini SDK (Python):**\n\n```python\nimport google.generativeai as genai\n\n# Configure API key and base URL\ngenai.configure(\n    api_key=\"your-proxy-key\",  # Use the proxy key\n    client_options={\"api_endpoint\": \"http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fgemini\"}\n)\n\nmodel = genai.GenerativeModel('gemini-2.5-pro')\nresponse = model.generate_content(\"Hello\")\n```\n\n**Anthropic SDK (Python):**\n\n```python\nfrom anthropic import Anthropic\n\nclient = Anthropic(\n    api_key=\"your-proxy-key\",  # Use the proxy key\n    base_url=\"http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fanthropic\"  # Use proxy endpoint\n)\n\nresponse = client.messages.create(\n    model=\"claude-sonnet-4-20250514\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n```\n\n> **Important Note**: As a transparent proxy service, GPT-Load completely preserves the native API formats and authentication methods of various AI services. You only need to replace the endpoint address and use the **Proxy Key** configured in the management interface for seamless migration.\n\n\u003C\u002Fdetails>\n\n## Related Projects\n\n- **[New API](https:\u002F\u002Fgithub.com\u002FQuantumNous\u002Fnew-api)** - Excellent AI model aggregation management and distribution system\n\n## Contributing\n\nThanks to all the developers who have contributed to GPT-Load!\n\n[![Contributors](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_0f4efd42b589.png)](https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fgraphs\u002Fcontributors)\n\n## Supporters\n\n- Thank you very much for the support from the [LINUX DO](https:\u002F\u002Flinux.do) community!\n\n- This project is supported by DigitalOcean.  \n  [![DigitalOcean Referral Badge](https:\u002F\u002Fweb-platforms.sfo2.cdn.digitaloceanspaces.com\u002FWWW\u002FBadge%202.svg)](https:\u002F\u002Fwww.digitalocean.com\u002F?refcode=3d52cff21342&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## Star History\n\n[![Stargazers over time](https:\u002F\u002Fstarchart.cc\u002Ftbphp\u002Fgpt-load.svg?variant=adaptive)](https:\u002F\u002Fstarchart.cc\u002Ftbphp\u002Fgpt-load)\n","# GPT-Load\n\n英语 | [中文](README_CN.md) | [日语](README_JP.md)\n\n[![发布](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Ftbphp\u002Fgpt-load)](https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Freleases)\n![Go版本](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FGo-1.24+-blue.svg)\n[![许可证](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green.svg)](LICENSE)\n\n一款高性能、企业级的AI API透明代理服务，专为需要集成多种AI服务的企业和开发者设计。基于Go语言构建，具备智能密钥管理、负载均衡和全面监控能力，适用于高并发生产环境。\n\n如需详细文档，请访问[官方文档](https:\u002F\u002Fwww.gpt-load.com\u002Fdocs?lang=en)\n\n\u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F14880\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_1145cd82417e.png\" alt=\"tbphp%2Fgpt-load | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fhellogithub.com\u002Frepository\u002Ftbphp\u002Fgpt-load\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fapi.hellogithub.com\u002Fv1\u002Fwidgets\u002Frecommend.svg?rid=554dc4c46eb14092b9b0c56f1eb9021c&claim_uid=Qlh8vzrWJ0HCneG\" alt=\"精选｜HelloGitHub\" style=\"width: 250px; height: 54px;\" width=\"250\" height=\"54\" \u002F>\u003C\u002Fa>\n\n## 特性\n\n- **透明代理**：完整保留原生API格式，支持OpenAI、Google Gemini、Anthropic Claude等多种格式\n- **智能密钥管理**：高性能密钥池，支持分组管理、自动轮换及故障恢复\n- **负载均衡**：多上游端点加权负载均衡，提升服务可用性\n- **智能故障处理**：自动密钥黑名单管理与恢复机制，确保服务连续性\n- **动态配置**：系统设置和分组配置支持热加载，无需重启\n- **企业级架构**：分布式主从部署，支持水平扩展与高可用性\n- **现代化管理**：基于Vue 3的Web管理界面，直观易用\n- **全面监控**：实时统计、健康检查及详细请求日志记录\n- **高性能设计**：零拷贝流式传输、连接池复用及原子操作\n- **生产就绪**：优雅关闭、错误恢复及全面的安全机制\n- **双重认证**：管理与代理分开认证，代理认证支持全局与分组级别密钥\n\n## 支持的AI服务\n\nGPT-Load作为透明代理服务，完全保留各AI服务商的原生API格式：\n\n- **OpenAI格式**：官方OpenAI API、Azure OpenAI及其他兼容OpenAI的服务\n- **Google Gemini格式**：Gemini Pro、Gemini Pro Vision等模型的原生API\n- **Anthropic Claude格式**：Claude系列模型，支持高质量对话与文本生成\n\n## 快速入门\n\n### 系统要求\n\n- Go 1.24+（用于源码构建）\n- Docker（用于容器化部署）\n- MySQL、PostgreSQL或SQLite（用于数据库存储）\n- Redis（用于缓存及分布式协调，可选）\n\n### 方法1：Docker快速启动\n\n```bash\ndocker run -d --name gpt-load \\\n    -p 3001:3001 \\\n    -e AUTH_KEY=your-secure-key-here \\\n    -v \"$(pwd)\u002Fdata\":\u002Fapp\u002Fdata \\\n    ghcr.io\u002Ftbphp\u002Fgpt-load:latest\n```\n\n> 请将`your-secure-key-here`替换为强密码（切勿使用默认值），随后即可登录管理界面：http:\u002F\u002Flocalhost:3001\n\n### 方法2：使用Docker Compose（推荐）\n\n**安装命令：**\n\n```bash\n# 创建目录\nmkdir -p gpt-load && cd gpt-load\n\n# 下载配置文件\nwget https:\u002F\u002Fraw.githubusercontent.com\u002Ftbphp\u002Fgpt-load\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yml\nwget -O .env https:\u002F\u002Fraw.githubusercontent.com\u002Ftbphp\u002Fgpt-load\u002Frefs\u002Fheads\u002Fmain\u002F.env.example\n\n# 编辑.env文件，将AUTH_KEY修改为强密码。切勿使用默认或简单密钥，如sk-123456。\n\n# 启动服务\ndocker compose up -d\n```\n\n部署前，务必更改默认管理员密钥（AUTH_KEY）。推荐格式为：sk-prod-[32位随机字符串]。\n\n默认安装使用SQLite版本，适合轻量级单实例应用。\n\n如需安装MySQL、PostgreSQL及Redis，请在`docker-compose.yml`文件中取消注释相关服务，配置相应环境变量并重启。\n\n**其他命令：**\n\n```bash\n# 查看服务状态\ndocker compose ps\n\n# 查看日志\ndocker compose logs -f\n\n# 重启服务\ndocker compose down && docker compose up -d\n\n# 更新至最新版本\ndocker compose pull && docker compose down && docker compose up -d\n```\n\n部署完成后：\n\n- 访问Web管理界面：http:\u002F\u002Flocalhost:3001\n- API代理地址：http:\u002F\u002Flocalhost:3001\u002Fproxy\n\n> 请使用您修改后的AUTH_KEY登录管理界面。\n\n### 方法3：源码构建\n\n源码构建需要本地安装数据库（SQLite、MySQL或PostgreSQL）以及Redis（可选）。\n\n```bash\n# 克隆并构建\ngit clone https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load.git\ncd gpt-load\ngo mod tidy\n\n# 创建配置\ncp .env.example .env\n\n# 编辑.env文件，将AUTH_KEY修改为强密码。切勿使用默认或简单密钥，如sk-123456。\n# 修改.env中的DATABASE_DSN和REDIS_DSN配置\n# REDIS_DSN为可选项；若未配置，则启用内存存储\n\n# 运行\nmake run\n```\n\n部署完成后：\n\n- 访问Web管理界面：http:\u002F\u002Flocalhost:3001\n- API代理地址：http:\u002F\u002Flocalhost:3001\u002Fproxy\n\n> 请使用您修改后的AUTH_KEY登录管理界面。\n\n### 方法4：集群部署\n\n集群部署要求所有节点连接到同一套MySQL（或PostgreSQL）和Redis，其中Redis为必选项。建议使用统一的分布式MySQL和Redis集群。\n\n**部署要求：**\n\n- 所有节点必须配置相同的`AUTH_KEY`、`DATABASE_DSN`、`REDIS_DSN`\n- 主从架构下，从节点需配置环境变量：`IS_SLAVE=true`\n\n详情请参阅[集群部署文档](https:\u002F\u002Fwww.gpt-load.com\u002Fdocs\u002Fcluster?lang=en)\n\n## 配置体系\n\n### 配置架构概述\n\nGPT-Load采用双层配置架构：\n\n#### 1. 静态配置（环境变量）\n\n- **特点**：应用启动时读取，运行期间不可更改，需重启应用才能生效\n- **用途**：基础设施配置，如数据库连接、服务器端口、认证密钥等\n- **管理**：通过`.env`文件或系统环境变量设置\n\n#### 2. 动态配置（热加载）\n\n- **系统设置**：存储在数据库中，为整个应用提供统一的行为标准\n- **分组配置**：针对特定分组自定义的行为参数，可以覆盖系统设置\n- **配置优先级**：分组配置 > 系统设置 > 环境配置\n- **特点**：支持热加载，修改后立即生效，无需重启应用\n\n\u003Cdetails>\n\u003Csummary>静态配置（环境变量）\u003C\u002Fsummary>\n\n**服务器配置：**\n\n| 设置                   | 环境变量               | 默认         | 描述                                     |\n| ------------------------- | ---------------------------------- | --------------- | ----------------------------------------------- |\n| 服务端口              | `PORT`                             | 3001            | HTTP服务器监听端口                      |\n| 服务地址           | `HOST`                             | 0.0.0.0         | HTTP服务器绑定地址                     |\n| 读取超时          | `SERVER_READ_TIMEOUT`              | 60              | HTTP服务器读取超时（秒）              |\n| 写入超时         | `SERVER_WRITE_TIMEOUT`             | 600             | HTTP服务器写入超时（秒）             |\n| 空闲超时          | `SERVER_IDLE_TIMEOUT`              | 120             | HTTP连接空闲超时（秒）                |\n| 优雅关闭超时    | `SERVER_GRACEFUL_SHUTDOWN_TIMEOUT` | 10              | 服务优雅关闭等待时间（秒）   |\n| 从属模式          | `IS_SLAVE`                         | false           | 集群部署中的从属节点标识符        |\n| 时区              | `TZ`                               | `Asia\u002FShanghai` | 指定时区                                |\n\n**安全配置：**\n\n| 设置        | 环境变量 | 默认 | 描述                                                                       |\n| -------------- | -------------------- | ------- | --------------------------------------------------------------------------------- |\n| 管理员密钥      | `AUTH_KEY`           | -       | **管理端**的访问认证密钥，请将其更改为强密码 |\n| 加密密钥 | `ENCRYPTION_KEY`     | -       | 对API密钥进行静态加密。支持任意字符串，或留空以禁用加密。参见[数据加密迁移](#data-encryption-migration) |\n\n**数据库配置：**\n\n| 设置             | 环境变量 | 默认              | 描述                                         |\n| ------------------- | -------------------- | -------------------- | --------------------------------------------------- |\n| 数据库连接 | `DATABASE_DSN`       | `.\u002Fdata\u002Fgpt-load.db` | 数据库连接字符串（DSN）或文件路径       |\n| Redis连接    | `REDIS_DSN`          | -                    | Redis连接字符串，为空时使用内存存储     |\n\n**性能与CORS配置：**\n\n| 设置                 | 环境变量      | 默认                       | 描述                                     |\n| ----------------------- | ------------------------- | ----------------------------- | ----------------------------------------------- |\n| 最大并发请求数 | `MAX_CONCURRENT_REQUESTS` | 100                           | 系统允许的最大并发请求数   |\n| 启用CORS             | `ENABLE_CORS`             | false                          | 是否启用跨域资源共享 |\n| 允许的源         | `ALLOWED_ORIGINS`         | -                             | 全部来源，逗号分隔                |\n| 允许的方法         | `ALLOWED_METHODS`         | `GET,POST,PUT,DELETE,OPTIONS` | 允许的HTTP方法                            |\n| 允许的头         | `ALLOWED_HEADERS`         | `*`                           | 允许的请求头，逗号分隔        |\n| 允许凭证       | `ALLOW_CREDENTIALS`       | false                         | 是否允许发送凭据            |\n\n**日志配置：**\n\n| 设置             | 环境变量 | 默认               | 描述                         |\n| ------------------- | -------------------- | --------------------- | ----------------------------------- |\n| 日志级别           | `LOG_LEVEL`          | `info`                | 日志级别：debug、info、warn、error |\n| 日志格式          | `LOG_FORMAT`         | `text`                | 日志格式：文本、json              |\n| 启用文件日志      | `LOG_ENABLE_FILE`    | false                 | 是否启用文件日志输出   |\n| 日志文件路径       | `LOG_FILE_PATH`      | `.\u002Fdata\u002Flogs\u002Fapp.log` | 日志文件存储路径               |\n\n**代理配置：**\n\nGPT-Load会自动从环境变量中读取代理设置，以便向上游AI提供商发起请求。\n\n| 设置     | 环境变量 | 默认 | 描述                                     |\n| ----------- | -------------------- | ------- | ----------------------------------------------- |\n| HTTP代理  | `HTTP_PROXY`         | -       | HTTP请求的代理服务器地址          |\n| HTTPS代理 | `HTTPS_PROXY`        | -       | HTTPS请求的代理服务器地址         |\n| 不使用代理    | `NO_PROXY`           | -       | 需要绕过代理的主机或域名列表，逗号分隔 |\n\n支持的代理协议格式：\n\n- **HTTP**: `http:\u002F\u002Fuser:pass@host:port`\n- **HTTPS**: `https:\u002F\u002Fuser:pass@host:port`\n- **SOCKS5**: `socks5:\u002F\u002Fuser:pass@host:port`\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>动态配置（热加载）\u003C\u002Fsummary>\n\n**基础设置：**\n\n| 设置            | 字段名称                           | 默认                 | 分组覆盖 | 描述                                  |\n| ------------------ | ------------------------------------ | ----------------------- | -------------- | -------------------------------------------- |\n| 项目URL        | `app_url`                            | `http:\u002F\u002Flocalhost:3001` | ❌             | 项目基础URL                             |\n| 全局代理密钥  | `proxy_keys`                         | 初始值来自 `AUTH_KEY` | ❌         | 全局生效的代理密钥，逗号分隔 |\n| 日志保留天数 | `request_log_retention_days`         | 7                       | ❌             | 请求日志保留天数，0表示不清理 |\n| 日志写入间隔 | `request_log_write_interval_minutes` | 1                       | ❌             | 日志写入数据库的周期（分钟）        |\n| 启用请求体日志记录 | `enable_request_body_logging` | false | ✅ | 是否在请求日志中记录完整的请求体内容 |\n\n**请求设置：**\n\n| 设置                       | 字段名称                | 默认值 | 组级覆盖 | 描述                                                         |\n| ----------------------------- | ------------------------- | ------- | -------------- | ------------------------------------------------------------------- |\n| 请求超时时间               | `request_timeout`         | 600     | ✅             | 转发请求完整生命周期的超时时间（秒）                        |\n| 连接超时时间            | `connect_timeout`         | 15      | ✅             | 与上游服务建立连接的超时时间（秒）                          |\n| 空闲连接超时时间       | `idle_conn_timeout`       | 120     | ✅             | HTTP 客户端空闲连接的超时时间（秒）                         |\n| 响应头超时时间       | `response_header_timeout` | 600     | ✅             | 等待上游响应头的超时时间（秒）                             |\n| 最大空闲连接数          | `max_idle_conns`          | 100     | ✅             | 连接池中允许的最大空闲连接总数                              |\n| 每个主机最大空闲连接数 | `max_idle_conns_per_host` | 50      | ✅             | 每个上游主机允许的最大空闲连接数                            |\n| 代理 URL                     | `proxy_url`               | -       | ✅             | 用于转发请求的 HTTP\u002FHTTPS 代理，若为空则使用环境变量代理    |\n\n**关键配置：**\n\n| 设置                    | 字段名称                        | 默认值 | 组级覆盖 | 描述                                                                |\n| -------------------------- | --------------------------------- | ------- | -------------- | -------------------------------------------------------------------------- |\n| 最大重试次数                | `max_retries`                     | 3       | ✅             | 单次请求使用不同密钥的最大重试次数                                      |\n| 黑名单阈值        | `blacklist_threshold`             | 3       | ✅             | 密钥连续失败达到此次数后将进入黑名单                                  |\n| 密钥验证周期    | `key_validation_interval_minutes` | 60      | ✅             | 后台定时执行密钥验证的周期（分钟）                                    |\n| 密钥验证并发数  | `key_validation_concurrency`      | 10      | ✅             | 后台对无效密钥进行验证时的并发数量                                    |\n| 密钥验证超时时间 | `key_validation_timeout_seconds`  | 20      | ✅             | 后台验证单个密钥时的 API 请求超时（秒）                                |\n\n\u003C\u002Fdetails>\n\n\n\n## 数据加密迁移\n\nGPT-Load 支持以加密方式存储 API 密钥。您可以随时启用、禁用或更换加密密钥。\n\n\u003Cdetails>\n\u003Csummary>查看数据加密迁移详情\u003C\u002Fsummary>\n\n### 迁移场景\n\n- **启用加密**：将明文数据加密存储 - 使用 `--to \u003Cnew-key>`\n- **禁用加密**：将加密数据解密为明文 - 使用 `--from \u003Ccurrent-key>`\n- **更换加密密钥**：替换加密密钥 - 使用 `--from \u003Ccurrent-key> --to \u003Cnew-key>`\n\n### 操作步骤\n\n#### Docker Compose 部署\n\n```bash\n# 1. 更新镜像（确保使用最新版本）\ndocker compose pull\n\n# 2. 停止服务\ndocker compose down\n\n# 3. 备份数据库（强烈建议）\n# 在迁移之前，您必须手动备份数据库或导出您的密钥，以免因操作或异常导致密钥丢失。\n\n# 4. 执行迁移命令\n# 启用加密（your-32-char-secret-key 是您的密钥，建议使用 32 位以上的随机字符串）\ndocker compose run --rm gpt-load migrate-keys --to \"your-32-char-secret-key\"\n\n# 禁用加密\ndocker compose run --rm gpt-load migrate-keys --from \"your-current-key\"\n\n# 更换加密密钥\ndocker compose run --rm gpt-load migrate-keys --from \"old-key\" --to \"new-32-char-secret-key\"\n\n# 5. 更新配置文件\n# 编辑 .env 文件，将 ENCRYPTION_KEY 设置为与 --to 参数一致的值。\n# 如果禁用加密，则移除 ENCRYPTION_KEY 或将其设置为空。\nvim .env\n# 添加或修改：ENCRYPTION_KEY=your-32-char-secret-key\n\n# 6. 重启服务\ndocker compose up -d\n```\n\n#### 源码构建部署\n\n```bash\n# 1. 停止服务\n# 停止正在运行的服务进程（Ctrl+C 或终止进程）\n\n# 2. 备份数据库（强烈建议）\n# 在迁移之前，您必须手动备份数据库或导出您的密钥，以免因操作或异常导致密钥丢失。\n\n# 3. 执行迁移命令\n# 启用加密\nmake migrate-keys ARGS=\"--to your-32-char-secret-key\"\n\n# 禁用加密\nmake migrate-keys ARGS=\"--from your-current-key\"\n\n# 更换加密密钥\nmake migrate-keys ARGS=\"--from old-key --to new-32-char-secret-key\"\n\n# 4. 更新配置文件\n# 编辑 .env 文件，将 ENCRYPTION_KEY 设置为与 --to 参数一致的值。\necho \"ENCRYPTION_KEY=your-32-char-secret-key\" >> .env\n\n# 5. 重启服务\nmake run\n```\n\n### 重要提示\n\n⚠️ **重要提醒**：\n- **一旦丢失 ENCRYPTION_KEY，加密数据将无法恢复！** 请务必安全备份此密钥。建议使用密码管理器或安全的密钥管理系统。\n- **迁移前必须停止服务**，以避免数据不一致。\n- 强烈建议在迁移前 **备份数据库**，以便在迁移失败时进行恢复。\n- 密钥应使用 **32 位或更长的随机字符串** 以确保安全性。\n- 迁移完成后，请确保 `.env` 文件中的 `ENCRYPTION_KEY` 与 `--to` 参数一致。\n- 如果禁用加密，则需移除或清空 `ENCRYPTION_KEY` 配置。\n\n### 密钥生成示例\n\n```bash\n# 生成安全随机密钥（32 位）\nopenssl rand -base64 32 | tr -d \"=+\u002F\" | cut -c1-32\n```\n\n\u003C\u002Fdetails>\n\n## Web 管理界面\n\n访问管理控制台地址： \u003Chttp:\u002F\u002Flocalhost:3001>（默认地址）\n\n### 界面概览\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_a89ef5c20c87.png\" alt=\"仪表盘\" width=\"600\"\u002F>\n\n\u003Cbr\u002F>\n\n\u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_fd04efa51155.png\" alt=\"密钥管理\" width=\"600\"\u002F>\n\n\u003Cbr\u002F>\n\nWeb 管理界面提供以下功能：\n\n- **仪表盘**：实时统计信息和系统状态概览\n- **密钥管理**：创建和配置 AI 服务提供商组，添加、删除和监控 API 密钥\n- **请求日志**：详细的请求历史记录和调试信息\n- **系统设置**：全局配置管理和热加载\n\n## API 使用指南\n\n\u003Cdetails>\n\u003Csummary>代理接口调用\u003C\u002Fsummary>\n\nGPT-Load 通过分组名称将请求路由到不同的 AI 服务。使用方法如下：\n\n### 1. 代理端点格式\n\n```text\nhttp:\u002F\u002Flocalhost:3001\u002Fproxy\u002F{group_name}\u002F{original_api_path}\n```\n\n- `{group_name}`：在管理界面中创建的分组名称\n- `{original_api_path}`：与原始 AI 服务路径保持完全一致\n\n### 2. 认证方式\n\n在Web管理界面中配置**代理密钥**，支持系统级和组级代理密钥。\n\n- **认证方法**：与原生API一致，但需将原始密钥替换为已配置的代理密钥。\n- **密钥作用范围**：在系统设置中配置的**全局代理密钥**可在所有组中使用。而在某个组中配置的**组代理密钥**仅对该组有效。\n- **格式**：多个密钥之间用逗号分隔。\n\n### 3. OpenAI接口示例\n\nGPT-Load目前支持两种兼容OpenAI的组类型：\n\n- `openai`（OpenAI聊天完成格式）\n- `openai-response`（OpenAI响应格式）\n\n假设已创建一个名为`openai`的组：\n\n**原始调用：**\n\n```bash\ncurl -X POST https:\u002F\u002Fapi.openai.com\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Authorization: Bearer sk-your-openai-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"gpt-4.1-mini\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**代理调用：**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Authorization: Bearer your-proxy-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"gpt-4.1-mini\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**需要更改的内容：**\n\n- 将`https:\u002F\u002Fapi.openai.com`替换为`http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai`\n- 将原始API密钥替换为**代理密钥**\n\n**OpenAI响应格式示例（`openai-response`组）：**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai-response\u002Fv1\u002Fresponses \\\n  -H \"Authorization: Bearer your-proxy-key\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"gpt-4.1-mini\", \"input\": \"Hello\"}'\n```\n\n### 4. Gemini接口示例\n\n假设已创建一个名为`gemini`的组：\n\n**原始调用：**\n\n```bash\ncurl -X POST https:\u002F\u002Fgenerativelanguage.googleapis.com\u002Fv1beta\u002Fmodels\u002Fgemini-2.5-pro:generateContent?key=your-gemini-key \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"contents\": [{\"parts\": [{\"text\": \"Hello\"}]}]}'\n```\n\n**代理调用：**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fgemini\u002Fv1beta\u002Fmodels\u002Fgemini-2.5-pro:generateContent?key=your-proxy-key \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"contents\": [{\"parts\": [{\"text\": \"Hello\"}]}]}'\n```\n\n**需要更改的内容：**\n\n- 将`https:\u002F\u002Fgenerativelanguage.googleapis.com`替换为`http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fgemini`\n- 将URL参数中的`key=your-gemini-key`替换为**代理密钥**\n\n### 5. Anthropic接口示例\n\n假设已创建一个名为`anthropic`的组：\n\n**原始调用：**\n\n```bash\ncurl -X POST https:\u002F\u002Fapi.anthropic.com\u002Fv1\u002Fmessages \\\n  -H \"x-api-key: sk-ant-api03-your-anthropic-key\" \\\n  -H \"anthropic-version: 2023-06-01\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"claude-sonnet-4-20250514\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**代理调用：**\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fanthropic\u002Fv1\u002Fmessages \\\n  -H \"x-api-key: your-proxy-key\" \\\n  -H \"anthropic-version: 2023-06-01\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"model\": \"claude-sonnet-4-20250514\", \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]}'\n```\n\n**需要更改的内容：**\n\n- 将`https:\u002F\u002Fapi.anthropic.com`替换为`http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fanthropic`\n- 将`x-api-key`头中的原始API密钥替换为**代理密钥**\n\n### 6. 支持的接口\n\n**OpenAI聊天完成格式（`openai`）：**\n\n- `\u002Fv1\u002Fchat\u002Fcompletions` - 聊天对话\n- `\u002Fv1\u002Fcompletions` - 文本补全\n- `\u002Fv1\u002Fembeddings` - 文本嵌入\n- `\u002Fv1\u002Fmodels` - 模型列表\n- 以及其他所有兼容OpenAI的接口\n\n**OpenAI响应格式（`openai-response`）：**\n\n- `\u002Fv1\u002Fresponses` - 统一响应生成\n- `\u002Fv1\u002Fmodels` - 模型列表\n- 以及其他所有兼容OpenAI响应格式的接口\n\n**Gemini格式：**\n\n- `\u002Fv1beta\u002Fmodels\u002F*\u002FgenerateContent` - 内容生成\n- `\u002Fv1beta\u002Fmodels` - 模型列表\n- 以及其他所有Gemini原生接口\n\n**Anthropic格式：**\n\n- `\u002Fv1\u002Fmessages` - 消息对话\n- `\u002Fv1\u002Fmodels` - 模型列表（如有）\n- 以及其他所有Anthropic原生接口\n\n### 7. 客户端SDK配置\n\n**OpenAI Python SDK：**\n\n```python\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=\"your-proxy-key\",  # 使用代理密钥\n    base_url=\"http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fopenai\"  # 使用代理端点\n)\n\nresponse = client.chat.completions.create(\n    model=\"gpt-4.1-mini\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n```\n\n**Google Gemini SDK（Python）：**\n\n```python\nimport google.generativeai as genai\n\n# 配置API密钥和基础URL\ngenai.configure(\n    api_key=\"your-proxy-key\",  # 使用代理密钥\n    client_options={\"api_endpoint\": \"http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fgemini\"}\n)\n\nmodel = genai.GenerativeModel('gemini-2.5-pro')\nresponse = model.generate_content(\"Hello\")\n```\n\n**Anthropic SDK（Python）：**\n\n```python\nfrom anthropic import Anthropic\n\nclient = Anthropic(\n    api_key=\"your-proxy-key\",  # 使用代理密钥\n    base_url=\"http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fanthropic\"  # 使用代理端点\n)\n\nresponse = client.messages.create(\n    model=\"claude-sonnet-4-20250514\",\n    messages=[{\"role\": \"user\", \"content\": \"Hello\"}]\n)\n```\n\n> **重要提示**：作为透明代理服务，GPT-Load完全保留了各类AI服务的原生API格式和认证方式。您只需替换端点地址，并使用管理界面中配置的**代理密钥**，即可实现无缝迁移。\n\n\u003C\u002Fdetails>\n\n## 相关项目\n\n- **[New API](https:\u002F\u002Fgithub.com\u002FQuantumNous\u002Fnew-api)** - 优秀的AI模型聚合管理和分发系统\n\n## 贡献\n\n感谢所有为GPT-Load做出贡献的开发者！\n\n[![Contributors](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_readme_0f4efd42b589.png)](https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fgraphs\u002Fcontributors)\n\n## 支持者\n\n- 非常感谢[LINUX DO](https:\u002F\u002Flinux.do)社区的支持！\n\n- 本项目由DigitalOcean提供支持。  \n  [![DigitalOcean Referral Badge](https:\u002F\u002Fweb-platforms.sfo2.cdn.digitaloceanspaces.com\u002FWWW\u002FBadge%202.svg)](https:\u002F\u002Fwww.digitalocean.com\u002F?refcode=3d52cff21342&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)\n\n## 许可证\n\nMIT许可证 - 详情请参阅[LICENSE](LICENSE)文件。\n\n## 星标历史\n\n[![Stargazers over time](https:\u002F\u002Fstarchart.cc\u002Ftbphp\u002Fgpt-load.svg?variant=adaptive)](https:\u002F\u002Fstarchart.cc\u002Ftbphp\u002Fgpt-load)","# GPT-Load 快速上手指南\n\nGPT-Load 是一款高性能、企业级的 AI API 透明代理网关。它支持 OpenAI、Google Gemini、Anthropic Claude 等多种格式，提供智能密钥管理、负载均衡及故障自动恢复功能，专为高并发生产环境设计。\n\n## 环境准备\n\n在部署前，请确保您的服务器满足以下要求：\n\n*   **操作系统**：Linux \u002F macOS \u002F Windows\n*   **容器化部署（推荐）**：\n    *   Docker (最新版)\n    *   Docker Compose (v2.0+)\n*   **源码编译部署**：\n    *   Go 1.24+\n    *   数据库：MySQL, PostgreSQL 或 SQLite (默认)\n    *   Redis (可选，用于缓存和集群协调)\n\n> **国内加速提示**：如遇 Docker 镜像拉取缓慢，建议配置国内 Docker 镜像加速器（如阿里云、腾讯云等）后再执行安装命令。\n\n## 安装步骤\n\n推荐使用 **Docker Compose** 方式进行部署，便于管理和后续升级。\n\n### 1. 创建项目目录并下载配置\n\n```bash\n# 创建目录\nmkdir -p gpt-load && cd gpt-load\n\n# 下载 docker-compose.yml 配置文件\nwget https:\u002F\u002Fraw.githubusercontent.com\u002Ftbphp\u002Fgpt-load\u002Frefs\u002Fheads\u002Fmain\u002Fdocker-compose.yml\n\n# 下载环境变量示例文件并重命名为 .env\nwget -O .env https:\u002F\u002Fraw.githubusercontent.com\u002Ftbphp\u002Fgpt-load\u002Frefs\u002Fheads\u002Fmain\u002F.env.example\n```\n\n### 2. 配置安全密钥\n\n**重要**：在启动前必须修改默认的管理员密钥 (`AUTH_KEY`)，严禁使用默认值或简单密码。\n\n编辑 `.env` 文件：\n```bash\nvim .env\n```\n\n找到 `AUTH_KEY` 行，修改为强密码（推荐格式：`sk-prod-[32 位随机字符串]`）：\n```ini\nAUTH_KEY=sk-prod-your-secure-random-string-here\n```\n\n> 如需使用 MySQL\u002FPostgreSQL 或 Redis，请在 `.env` 中取消对应服务的注释并配置连接信息。默认配置使用 SQLite，适合单机轻量级场景。\n\n### 3. 启动服务\n\n```bash\ndocker compose up -d\n```\n\n### 4. 验证运行状态\n\n```bash\n# 查看容器运行状态\ndocker compose ps\n\n# 实时查看日志\ndocker compose logs -f\n```\n\n## 基本使用\n\n部署完成后，您可以通过以下方式访问和管理服务。\n\n### 1. 访问管理后台\n\n打开浏览器访问：\n\u003Chttp:\u002F\u002Flocalhost:3001>\n\n*   **登录密码**：您在 `.env` 文件中设置的 `AUTH_KEY`。\n*   **功能**：在此界面可配置上游 AI 服务商密钥、设置负载均衡策略、查看实时监控数据及管理用户组。\n\n### 2. 调用代理 API\n\n所有 AI 请求请发送至统一的代理地址，GPT-Load 会自动处理路由和密钥轮换。\n\n*   **代理地址**：`http:\u002F\u002Flocalhost:3001\u002Fproxy`\n*   **使用示例**（以 curl 调用 OpenAI 接口为例）：\n\n```bash\ncurl http:\u002F\u002Flocalhost:3001\u002Fproxy\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Authorization: Bearer YOUR_GROUP_OR_GLOBAL_KEY\" \\\n  -d '{\n    \"model\": \"gpt-4o\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello\"}]\n  }'\n```\n\n> **注意**：请求头中的 `Authorization` 需使用您在管理后台配置的**分组密钥**或**全局密钥**，而非原始厂商的 API Key。\n\n### 3. 常用运维命令\n\n```bash\n# 重启服务\ndocker compose down && docker compose up -d\n\n# 升级到最新版本\ndocker compose pull && docker compose down && docker compose up -d\n\n# 停止服务\ndocker compose down\n```","某中型电商公司正在开发智能客服系统，需同时调用 OpenAI、Claude 和 Gemini 多个模型以应对不同场景，且要求服务在促销高峰期保持 99.9% 可用性。\n\n### 没有 gpt-load 时\n- **密钥管理混乱**：开发团队需在代码中硬编码多个 API Key，一旦某个密钥配额耗尽或失效，整个服务立即中断，人工轮换耗时且易出错。\n- **单点故障风险**：直接连接单一上游服务商，若某家厂商接口波动或限流，缺乏自动熔断与切换机制，导致用户请求大量报错。\n- **运维监控盲区**：无法统一查看各渠道的实时用量、延迟和错误率，排查问题时需在多个厂商后台来回切换，效率极低。\n- **架构扩展困难**：每次新增模型供应商或调整负载均衡策略，都必须修改代码并重新部署服务，无法适应快速变化的业务需求。\n\n### 使用 gpt-load 后\n- **智能密钥轮询**：gpt-load 接管所有 API Key，自动检测配额状态并进行毫秒级无缝轮换，即使个别密钥失效，前端服务也完全无感知。\n- **高可用负载均衡**：通过加权轮询机制将流量智能分发至多个上游节点，当某渠道异常时自动剔除并尝试恢复，确保服务持续在线。\n- **统一可观测性**：内置的 Web 管理面板实时展示全链路监控数据，包括各模型组的 QPS、响应时间及健康状态，故障定位从小时级缩短至分钟级。\n- **动态热配置**：运营人员可在不重启服务的情况下，通过界面动态调整路由策略或添加新模型通道，轻松支撑业务快速迭代。\n\ngpt-load 将复杂的多模型调度转化为稳定的基础设施能力，让团队专注于业务逻辑而非底层运维。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Ftbphp_gpt-load_a89ef5c2.png","tbphp","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Ftbphp_87331fa4.jpg","Code Craftsman, AI Believer.",null,"tangb7420@gmail.com","https:\u002F\u002Fgpt-load.com","https:\u002F\u002Fgithub.com\u002Ftbphp",[83,87,91,95,99,103,107,111],{"name":84,"color":85,"percentage":86},"Go","#00ADD8",48.6,{"name":88,"color":89,"percentage":90},"Vue","#41b883",36.5,{"name":92,"color":93,"percentage":94},"TypeScript","#3178c6",13.1,{"name":96,"color":97,"percentage":98},"CSS","#663399",1.1,{"name":100,"color":101,"percentage":102},"JavaScript","#f1e05a",0.4,{"name":104,"color":105,"percentage":106},"Makefile","#427819",0.2,{"name":108,"color":109,"percentage":110},"Dockerfile","#384d54",0.1,{"name":112,"color":113,"percentage":114},"HTML","#e34c26",0,6138,633,"2026-04-18T15:51:16","MIT","Linux, macOS, Windows","未说明",{"notes":122,"python":123,"dependencies":124},"该工具是基于 Go 语言开发的 AI API 透明代理服务，并非本地运行的 AI 模型，因此不需要 GPU 支持。部署方式支持 Docker 容器化部署或源码编译运行。数据库默认使用 SQLite（适合轻量级单实例），生产环境建议配置 MySQL 或 PostgreSQL 以及 Redis（集群部署时 Redis 为必需）。管理界面默认端口为 3001，首次部署务必修改默认的 AUTH_KEY 以确保安全。","不需要",[125,126,127,128],"Go 1.24+","Docker","MySQL\u002FPostgreSQL\u002FSQLite","Redis (可选)",[14],[131,132,133,134,135,136,137],"go","golang","openai","gemini","gin","anthropic","claude","2026-03-27T02:49:30.150509","2026-04-19T06:01:40.397089",[141,146,151,156,161,166],{"id":142,"question_zh":143,"answer_zh":144,"source_url":145},41755,"为什么 GPT-5 模型报错提示不支持 'max_tokens' 参数？","GPT-5 模型要求使用 'max_completion_tokens' 替代 'max_tokens' 参数。该问题已在 PR #140 中修复，并将在 v1.0.20 版本中发布。在更新版本前，建议暂时使用其他模型进行测试，或等待升级后正常使用 GPT-5 对话。","https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fissues\u002F134",{"id":147,"question_zh":148,"answer_zh":149,"source_url":150},41756,"频繁遇到 'Gemini 生成上下文流错误：The model is overloaded (503)' 该如何解决？","此错误通常由上游 Gemini 服务过载引起，特别是在流式输出过程中突然返回 503 状态码（尽管整体请求可能显示为 200）。由于数据可能已部分发送，直接重试会导致内容重复，因此项目暂不针对此情况进行特殊处理。这多见于免费 Key 或算力紧张时段，建议检查 Key 的质量、减少并发或稍后重试。","https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fissues\u002F90",{"id":152,"question_zh":153,"answer_zh":154,"source_url":155},41757,"批量导入大量 Key 时进度条不显示或导入看似失败怎么办？","若批量导入（如 600+ Key）时进度条一闪而过或未提示详细结果，可能是网络波动或个别 Key 重复导致。建议：1. 确认数据库中是否已存在重复 Key；2. 尝试调高系统设置中的“测试并发”数（例如调至 200）；3. 确保本地网络与上游节点之间的连接稳定且未超过 RPM 限制。若问题偶发且后续正常，可忽略。","https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fissues\u002F158",{"id":157,"question_zh":158,"answer_zh":159,"source_url":160},41758,"当无效 Key 数量巨大（如 3 万个）时，点击清除无效 Key 失败报错 'too many SQL variables' 如何解决？","这是由于一次性查询或删除的 Key 数量过多，导致 SQL 语句变量超出数据库限制。目前官方尚未在界面层做分批处理优化。临时解决办法是直接在数据库中执行分批删除操作，或者联系维护者关注后续版本是否会增加分批清理功能。","https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fissues\u002F206",{"id":162,"question_zh":163,"answer_zh":164,"source_url":165},41759,"为什么项目暂不支持空回（无内容返回）后的自动重试功能？","经过调试发现，大多数所谓的“空回”实际上是流式响应已经开始，只是模型处于思考阶段，并非真正的无返回。对此类情况进行重试优化效果不明显，且可能破坏流式体验。此外，为了保持与上游行为一致，目前优先级较低，暂不处理。","https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fissues\u002F75",{"id":167,"question_zh":168,"answer_zh":169,"source_url":170},41760,"调用 Gemini 视频\u002FTTS 模型或 Files API 时遇到权限错误怎么办？","调用 Gemini 的异步任务接口（如 Veo 视频生成）或 Files API 上传文件时，必须保证整个流程（从上传\u002F创建任务到最终获取结果）使用同一个 API Key，否则会出现权限错误。此外，项目已修复日志中明文记录 Key 的问题，现在请求日志中不再显示 '?key=xxxx' 以增强安全性。","https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fissues\u002F115",[172,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267],{"id":173,"version":174,"summary_zh":175,"released_at":176},333826,"v1.4.6","## 变更内容\n* 修复：群组滚动问题，由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F402 中完成\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.4.5...v1.4.6","2026-03-29T14:54:42",{"id":178,"version":179,"summary_zh":180,"released_at":181},333827,"v1.4.5","## 变更内容\n* 功能（分组）：新增分组列表的拖拽排序功能，由 @QLHazyCoder 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F398 中实现。\n* 修复：升级 filippo.io\u002Fedwards25519 至 v1.2.0，以修复 CVE-2026-26958 漏洞，由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F389 中完成。\n\n## 新贡献者\n* @QLHazyCoder 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F398 中完成了首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.4.4...v1.4.5","2026-03-29T06:20:35",{"id":183,"version":184,"summary_zh":185,"released_at":186},333828,"v1.4.4","## 变更内容\n* 功能：新增 OpenAI 响应通道类型支持，由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F387 中实现\n* 杂项：升级依赖并同步 Go 1.24 文档，由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F388 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.4.3...v1.4.4","2026-02-16T01:37:01",{"id":188,"version":189,"summary_zh":190,"released_at":191},333829,"v1.4.3","- 修复密钥列表使用状态显示错误\n- 恢复 `last_used_at` 字段，并按最后使用时间排序\n- 优化密钥列表查询性能\n\n## 变更内容\n* 修复：确保密钥的 `last_used_at` 准确无误，并按团队范围进行分组，由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F383 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.4.2...v1.4.3","2026-02-10T05:27:47",{"id":193,"version":194,"summary_zh":195,"released_at":196},333830,"v1.4.2","# 大规模密钥性能优化\n\n- 支持导入 txt 文件\n- 优化了大量密钥的导入速度\n- 优化了密钥相关查询性能\n\n## 变更内容\n* feat: 由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F371 中对大规模密钥进行优化\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.4.1...v1.4.2","2026-01-25T22:53:09",{"id":198,"version":199,"summary_zh":200,"released_at":201},333831,"v1.4.1","## 变更内容\n* 功能新增：优化添加密钥功能，支持更多字符串，由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F347 中实现。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.4.0...v1.4.1","2025-11-23T11:23:16",{"id":203,"version":204,"summary_zh":205,"released_at":206},333832,"v1.4.0","文档：https:\u002F\u002Fwww.gpt-load.com\u002Fdocs\u002Farchitecture-design\u002Fmodel-redirect\n\n## 变更内容\n* 功能：由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F334 中实现的模型重定向\n* 功能：由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F335 中实现的取消模型重定向的自我限制\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.2...v1.4.0","2025-11-09T12:30:13",{"id":208,"version":209,"summary_zh":210,"released_at":211},333833,"v1.4.0-beta.2","## 变更内容\n* 功能：@tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F335 中取消了模型重定向的自我限制\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.4.0-beta.1...v1.4.0-beta.2","2025-11-09T00:31:46",{"id":213,"version":214,"summary_zh":215,"released_at":216},333834,"v1.4.0-beta.1","## 变更内容\n* 功能：由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F334 中实现的模型重定向\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.2...v1.4.0-beta.1","2025-11-08T18:13:46",{"id":218,"version":219,"summary_zh":220,"released_at":221},333835,"v1.3.2","## 变更内容\n* 修复：由 @tbphp 在 https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F321 中清理了关键注释。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.1...v1.3.2","2025-10-19T13:15:02",{"id":223,"version":224,"summary_zh":225,"released_at":226},333836,"v1.3.1","## What's Changed\r\n* fix: Input group style by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F315\r\n* feat: Add key notes by @paopaoandlingyia in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F265\r\n* fix: Test url error flag by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F318\r\n\r\n## New Contributors\r\n* @paopaoandlingyia made their first contribution in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F265\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.0...v1.3.1","2025-10-13T13:57:27",{"id":228,"version":229,"summary_zh":230,"released_at":231},333837,"v1.3.0","# 聚合分组功能正式发布！\r\n\r\n## What's Changed\r\n* feat: Aggregate groups by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F280\r\n* fix: Add subgroup notfound by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F304\r\n* fix: Gemini test payload by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F305\r\n* fix: Dashboard stats error by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F306\r\n* feat: Optimize aggregate group UI by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F310\r\n* feat: Integrate into New API by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F312\r\n* fix: Display aggregate group in log detail by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F313\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.2.1...v1.3.0","2025-10-08T12:38:59",{"id":233,"version":234,"summary_zh":235,"released_at":236},333838,"v1.3.0-beta.6","# 聚合分组功能 beta发布！\r\n\r\n**beta版本不稳定，用于抢先测试和体验功能。升级前请务必备份好数据！！！**\r\n欢迎测试反馈新功能问题！\r\n\r\n## What's Changed\r\n* feat: Integrate into New API by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F312\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.0-beta.5...v1.3.0-beta.6","2025-10-07T02:44:27",{"id":238,"version":239,"summary_zh":240,"released_at":241},333839,"v1.3.0-beta.5","# 聚合分组功能 beta发布！\r\n\r\n**beta版本不稳定，用于抢先测试和体验功能。升级前请务必备份好数据！！！**\r\n欢迎测试反馈新功能问题！\r\n\r\n## What's Changed\r\n* feat: Optimize aggregate group UI by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F310\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.0-beta.4...v1.3.0-beta.5","2025-10-04T14:05:01",{"id":243,"version":244,"summary_zh":245,"released_at":246},333840,"v1.3.0-beta.4","# 聚合分组功能 beta发布！\r\n\r\n**beta版本不稳定，用于抢先测试和体验功能。升级前请务必备份好数据！！！**\r\n欢迎测试反馈新功能问题！\r\n\r\n## What's Changed\r\n* fix: Dashboard stats error by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F306\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.0-beta.3...v1.3.0-beta.4","2025-10-02T06:30:24",{"id":248,"version":249,"summary_zh":250,"released_at":251},333841,"v1.3.0-beta.3","# 聚合分组功能 beta发布！\r\n\r\n**beta版本不稳定，用于抢先测试和体验功能。升级前请务必备份好数据！！！**\r\n欢迎测试反馈新功能问题！\r\n\r\n## What's Changed\r\n* fix: Gemini test payload by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F305\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.0-beta.2...v1.3.0-beta.3","2025-10-01T09:28:15",{"id":253,"version":254,"summary_zh":255,"released_at":256},333842,"v1.3.0-beta.2","# 聚合分组功能 beta发布！\r\n\r\n**beta版本不稳定，用于抢先测试和体验功能。升级前请务必备份好数据！！！**\r\n欢迎测试反馈新功能问题！\r\n\r\n## What's Changed\r\n* fix: Add subgroup notfound by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F304\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.3.0-beta.1...v1.3.0-beta.2","2025-10-01T04:44:30",{"id":258,"version":259,"summary_zh":260,"released_at":261},333843,"v1.3.0-beta.1","# 聚合分组功能 beta发布！\r\n\r\n**beta版本不稳定，用于抢先测试和体验功能。升级前请务必备份好数据！！！**\r\n欢迎测试反馈新功能问题！\r\n\r\n## What's Changed\r\n* feat: Aggregate groups by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F280\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.2.1...v1.3.0-beta.1","2025-09-30T16:22:06",{"id":263,"version":264,"summary_zh":265,"released_at":266},333844,"v1.2.1","## What's Changed\r\n* fix: Fix log list scroll-x by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F273\r\n* feat: Group list scroll positioning by @xunxun1982 in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F284\r\n\r\n## New Contributors\r\n* @xunxun1982 made their first contribution in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F284\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.2.0...v1.2.1","2025-09-21T13:58:23",{"id":268,"version":269,"summary_zh":270,"released_at":271},333845,"v1.2.0","## What's Changed\r\n* feat: Internationalization by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F252\r\n* feat: Encryption translation by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F259\r\n* feat: Log table optimization by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F261\r\n* feat: Support disabling when upstream weight is 0 by @ChuwuYo in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F204\r\n* feat: Translation group validator by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F263\r\n* style: Optimize task timeout code by @tbphp in https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fpull\u002F267\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Ftbphp\u002Fgpt-load\u002Fcompare\u002Fv1.1.0...v1.2.0","2025-09-14T13:08:56"]