Files
tbphp 08172b9e88 feat(web): implement the modern management frontend (#668)
* feat(web): 搭建新旧前端独立架构与界面切换

* feat(web): 设计珊瑚主题新版工作区框架

* refactor(web): 精调新版框架并移除预览占位内容

* fix(web): 隔离新版页面路由并恢复经典版启动

* fix(web): 修复页头菜单定位并精简导航提示

* feat(web): 优化导航布局并接入侧栏版本检查

* refactor(web): 精调侧栏底部外链与版本展示

* refactor(web): 整理侧栏外链并增加赞助入口

* refactor(web): 调整路由检查菜单与版本栏对齐

* Codex worktree snapshot: archive-cleanup

Co-authored-by: Codex

* fix(web): 恢复新版浮层组件样式

* feat(web): 完成新版登录认证与会话管理

* feat(web): 增加登录记忆选项并精简登录页

* fix(web): 独立展示访问密钥身份标识

* fix(modern): 调整快速导航触发器高度

* refactor(modern): 统一页面标题与设计令牌规范

* feat(modern): 完善分组工作区与公共框架

* feat(modern): 完善分组列表与公共组件

* feat(modern): 完成 API 密钥分组创建与模型批量选择

* feat(modern): 完善订阅分组创建与并行账号接入

* feat(modern): 完善分组详情与凭据管理

* feat(modern): 完善凭据卡片与高级配置交互

* feat(modern): 完善分组筛选并校正凭据统计

* feat(modern): 完善分组操作并统一消息与路由状态

* fix(modern): 统一凭据卡片底栏文字对齐

* feat(modern): 完善访问密钥管理与公共表单组件

* fix(modern): 区分页面与局部操作的加载反馈

* feat(modern): 完善请求日志页面与筛选展示

* refactor(modern): 精简日志表格字段与排版并降低渲染开销

表格只有单一字号、两档色阶,且每个配对单元格重复渲染表头已有的标签。
建立五档字号与三档色阶,数字列改等宽右对齐,删除格内标签。

字段配对从 7 组扩到 17 组并覆盖全部字段,避免非默认列各占一列;
细分缓存写入与两个完整性状态移出表格,仅保留在详情面板;
思考模式、强度、预算合并为一列,按强度、预算、开关的优先级取一,
等级保留上游原值不作翻译。列宽按内容与表头重排,全展开总宽减少约 480px。

表头与内容原先分属两个滚动容器、靠 JS 同步 scrollLeft,横向滚动有延迟,
改为同一容器内 sticky;行右内边距归零,固定列不再随滚动露出缝隙。

渲染上,AppOverflowText 仅在文字溢出时才创建 AppTooltip,
溢出检测共用一个 ResizeObserver,AppTooltip 的作用域属性改为缓存计算。

* refactor(modern): 重排日志高级筛选并精简筛选标签

* feat(modern): 统一协议标签并优化日志详情

* feat(modern): 完善请求日志展示与脱敏复制

* perf(modern): 减少页面切换等待与重复渲染开销

* fix(modern): 精简分页提示并缩小日期弹层

* feat(modern): 完善用量统计页面

* feat(modern): 支持日志字段快捷筛选

* feat(modern): 完善健康状态页面

* fix(health): 返回全部异常账号

* refactor(modern): 精简健康页并统一监控交互

* fix(brand): 统一品牌图形并修复刷新位置跳动

* feat(modern): 实现模型管理页面

* feat(modern): 完善全局设置页面

* fix(modern): 统一原生协议展示与弹窗确认焦点

* fix(modern): 优化全局滚动条体验

* refactor(modern): 模型卡片改为来源价格表格式并支持分组跳转

- 来源行改为与表头共用同一套列定义(来源/分组/4 项价格/计价方式/操作),
  多来源时价格上下对齐可比
- 协议折成一行中性摘要,悬浮查看完整列表,不再占用卡片最强的颜色
- 分组徽章对管理员改为可点击跳转到分组详情,非管理员保持纯展示
- 计价方式按常见程度分级:自动匹配为默认灰字,待计价才用警示徽章
- 卡片列表最小宽度从 320px 提到 620px 以容纳价格表;表格内容超宽时整体横向滚动

* fix(modern): 修正模型卡片价格溢出、行高不齐与列错位

- 价格列宽改为按本卡最长价格计算的共享变量:原先写死 52px,9 位小数的
  单价会溢出压到隔壁列;用 max-content 则表头与来源行各算各的导致列错位
- 来源单元格由 flex-wrap 改为网格:长渠道名原先会把图标、名称、档位各自
  甩到新行,单元格高度从 24px 涨到 87px
- 分组只展开第一个并禁止换行,超出交给 +N 提示,行高不再被撑乱
- 行内容压进 40px 下限,有无上游模型的行等高
- 溢出时行宽跟随内容,底色与分隔线不再在容器右边缘断掉
- 分组标签常态加描边,亮色下 subtle 几乎等于卡片白底、看不出可点

* feat(modern): 模型卡改多列排布并重做卡头视觉

- 网格改为 CSS 多列:来源数不同导致卡高不一,网格按行内最高的卡留空洞,
  实测同一批数据容器高从 616px 降到 576px 且无空洞
- 卡头加冷色渐变,自右上向左下淡出,左侧留白给模型名
- 新增 --modern-model-card-tint,沿用账号卡那套 info 蓝调,避开主色的橙
- 模型名靠左独占一端,协议/来源/分组三项统计右对齐

* refactor(modern): 精简模型详情侧边栏

- 去掉「全部来源」中间页:多来源靠顶部下拉切换即可,进面板直接落到
  第一个来源,随之移除返回箭头与只服务于该页的 ModelSourcePreview
- 面板宽度 sheet(660px) 改回 default(540px),与日志详情、访问密钥面板一致
- 价格由每档重复四个标签的块改为表格:表头只写一次,标准档与各阶梯档、
  各模式上下对齐可比,极端价格不再撑破容器
- 模型资料标签列定宽右对齐,原先 auto 会让每行按各自内容算宽而行间错位
- 关联分组去掉 AppButton>RouterLink>AppBadge 三层嵌套,改用与模型卡共用的
  可点标签样式(新增 model-group-chip.css)
- 清理随视图作废的样式与导入

* fix(modern): 换掉卡头底色并重排侧边栏价格表

- 卡头 tint 换成冷灰蓝 #e4ebf5/#2c3340,渐变两端都保留色:原先淡出到
  纯白,左下角与内容底色无差,所以区分不出卡头
- 修正上一轮未生效的改动:tint 仍混着 8% accent-soft(橙),当时单行
  replace 没匹配上已被格式化成多行的定义,且漏了断言
- 价格表单位说明移入表头首列,消掉标签列 225px 空白(占表宽 44%)
- 去掉价格表外框与表头底色,540px 侧栏里原先过重
- 价格四列收紧靠右(各 64px),数字挨在一起才便于比较
- 计价方式徽章移到「计价规则」分段标题行

* fix(modern): 卡头改用右上角径向晕染

照搬用量统计顶部卡片的手法:radial-gradient(ellipse at top right) 配低比例
混色,基色取成功绿。原先用线性渐变方向一直不对——to bottom left 会按盒子
比例换算,卡头宽高比约 15:1 时算出来接近 86°,等于水平色带;即便改成固定
225deg,扁盒子里的线性渐变也只是一条生硬的斜带,做不出角落发散的效果。

* feat(modern): 模型卡卡头晕染定为蓝调

基色改用 --modern-chart-input,与用量统计里 Token 卡同一支蓝,两页同源。

* fix(modern): 阶梯价入口仅保留标准档,Fast/Ultrafast 不再翻译

- Fast、Ultrafast 是计价档位专名(对应 OpenAI service_tier),三语一律不译
- 阶梯价的新增入口收窄到标准档:后端 NormalizeModePriceSchedules 直接驳回
  Fast 带阶梯,此前编辑器对所有档位都给了按钮,加完保存必然失败;
  Ultrafast 后端虽未拦截,按约定前端统一不做
- 非标准档改为提示「仅标准档支持阶梯价」,已存在的阶梯仍可见可删,
  避免静默隐藏却在保存时原样回传

* fix(modern): Fast 与 Ultrafast 档位行为对齐

后端对两档一视同仁:validPricingModeKey 只排除 standard,没有模型级限制;
计费同走 quote.go 查 ModeSchedules,仅触发参数不同(service_tier 取
fast/priority 与 ultrafast)。此前前端只给 Ultrafast 添加入口、删除按钮也
只对 Ultrafast 开放,目录同步来的 Fast 档因此无法删除。

- 添加入口改为按 optionalModes 渲染,两档对称
- 删除按钮放开到所有非标准档
- 阶梯价仍只在标准档提供(Fast 后端驳回,Ultrafast 按约定统一不做)

* fix(modern): 修正价格表头下方的边框重叠

选择器 .row + .row:not(--head) 把紧跟表头的第一个数据行也匹配进去了,
它的上边框与表头的下边框落在同一像素,叠出一条明显更粗的线。改为要求
前一项也是数据行。

* fix(frontend): 限制经典版入口为管理员

* refactor(modern): 精调全局设置页排版

- 状态徽章只在有状态时出现:17 个里 14 个是「默认」,等于反复声明
  「这里没什么特别的」,现仅剩已配置/已修改/环境锁定 3 个
- 设置项控件列由 auto 改为定宽,右边缘从 4 种位置收敛到 1 种
- 表单限宽 760px:内容区近 1000px,撑满会把标签与控件拉得过开
- 分区之间加细线隔断,功能边界不再只靠留白区分
- 子分组标题原先比它统领的设置项标签还小还淡,层级倒置;改用组标签
  质感(caption + 字距 + 延伸线)
- 移除「显示模式 / 界面语言」:右上角已有同样入口,此处重复
- 新版界面预览改用概念图:原先是 24KB 真实截图,与经典版的抽象示意
  图风格割裂;仓库里原有的 modern.svg 实为带虚线框的加号占位图,
  已按 classic.svg 的色板与抽象度重画为「左侧栏 + 卡片」
- 系统信息标签列定宽右对齐:原先 dt 用 flex:none 按各自文字宽度收缩,
  「数据库」与「管理员密钥来源」差近一倍,取值起点全部错开;
  三种更新状态也合并为一行

* refactor(modern): 梳理设置页布局与交互细节

* feat(modern): 完善吉祥物彩蛋与版本更新提示

* feat(modern): 补全总览与路由检查页面

* refactor(modern): 精简首页并整合路由检查

* feat(modern): 重做首页为接入优先布局

首页原本只展示分组、模型、凭据、密钥四个库存计数,这些数字一周不变,
且每个都对应侧边栏的一个导航项。真正回答「现在跑得怎么样」的
/api/home/statistics 接口后端早已实现,经典版在用,新版一直没接。

- 顶部换成一行状态条:服务状态 + 库存事实 + 版本与运行时长
- 接入客户端重做成左目录 + 按客户端类型分化的配置输出:
  CLI 客户端给可一次粘贴执行的终端命令(Codex 的 toml 改写成 heredoc),
  图形客户端给设置界面示意图与编号字段对照,可深链的把一键导入置顶
- 修掉 Cline 的缺口:它需要模型名但输出形态返回空块,
  界面上选了模型却没有任何地方显示,现在模型名是字段表的一行
- 协议不匹配改为选择前就在目录里禁用,提示里点名具体协议
- 路由检查折叠成工具条,不再以完整工作台占据首页
- 右栏依次为订阅账号、需要处理、24 小时请求趋势、访问密钥;
  需要处理由已有的分组数据推出,不额外请求健康接口,
  额度预警不重复(订阅账号已按账号画了额度条)

* refactor(modern): 精调首页接入面板与侧栏排版

上一版实现丢了设计稿里的若干排版细节,逐条补回:

- 客户端目录恢复协议标签。协议枚举全称有 16 个字符放不下,
  给 AppProtocolTag 加 short 模式取短名(Responses / Completions),
  颜色仍由同一处定义,不另写一套
- 界面示意图补上窗口标题栏文字,此前只画了三个点
- 没登记字段原文的客户端补两行无标签占位,示意图要读起来像一个设置表单,
  而不是「这个界面只有三个框」;不替没核实过的客户端编字段名
- 补上「把右边的值按编号填到左图对应的位置」的引导语
- 一键导入横幅不再复用确认对话框的文案(那句带问号),改用常驻横幅的说法
- 整段配置块的标题从裸的 JSON 改成「也可以直接复制完整配置」
- 状态条加入待办入口,与右栏面板共用 collectAttention 的同一份计数
- 订阅账号卡去掉「更新于」(页头已有整页刷新时间)、重置券并进页脚,
  并限制为前 3 个:账号多时这块会把下面三块全顶到折叠线以下

* fix(modern): 修正首页待办取材与侧栏面板的溢出

- 需要处理改读 /api/health。此前只按分组凭据计数判定,推不出额度将尽、
  充值卡临期、访问密钥被费用额度挡住这几类,健康实例上永远是空的,
  看起来就像坏了。现在覆盖无可用凭据、凭据被拉黑、额度将尽、
  充值卡临期、密钥受限五类,状态条计数与面板读同一份结果
- 订阅账号按设计改成一个账号一条进度条,取剩余最少的那个窗口;
  额度宽裕时不写重置时刻,可用是常态不出徽章
- 访问密钥不再溢出:grid 与 flex 子项的 min-width:auto 会让长密钥名
  把徽章顶出卡片,链路上每层都要显式解开;徽章与结论数字不参与压缩
- 补回 HomeAccounts 漏掉的 AppPanel 导入。Vue 对未注册组件不报错,
  整块面板被渲染成 <apppanel> 字面标签,标题与边框全部丢失
- 「还有 N 项」不再套用条目行的三列栅格,此前文字被挤进 14px 的
  图标列,一个字一行
- 待办条目以分组名优先收缩,说明文字先被截断;说明文字同时收短
- 接入面板去掉无用的副标题

* refactor(modern): 精调首页布局与接入交互

* fix(modern): 收紧首页布局并移除客户端协议限制

* fix(modern): 优化首页接入对齐与侧栏密度

* fix(modern): 记住客户端接入选择并修正订阅额度展示

* fix(modern): 统一客户端接入输入尺寸并精简说明

* fix(modern): 优化分组排序与订阅账号周期及并行同步

* fix(modern): 优化订阅额度周期与同步反馈

* fix(modern): 完善首页健康提醒与独立路由检查

* feat(modern): 增加额度窗口满额预估

* refactor(modern): decouple shared frontend utilities

* docs(readme): refresh localized screenshots

* fix(web): harden startup fallback and Group ID parsing
2026-09-16 21:56:51 +08:00

28 KiB
Raw Permalink Blame History

GPT-Load

GPT-Load

マルチチャネル・マルチ認証情報向けのセルフホスト AI ゲートウェイ

API キー、サブスクリプションアカウント、トラフィック制御、障害処理、リクエストログ、使用量集計を一つの入口にまとめます。

English · 中文 · 日本語 | 公式サイト

Release Docker Go License

tbphp/gpt-load | Trendshift Featured|HelloGitHub


スポンサー

スポンサーになる

スポンサー詳細(折りたたみ可能)
OfoxAI OfoxAI:テキスト・画像・動画 AI を一つのプラットフォームで
OfoxAI は、複数のプロバイダーのテキスト・画像・動画モデルを集約する AI API プラットフォームです。OpenAI 互換 API と Anthropic・Gemini のネイティブ API に対応。開発者は一つのプラットフォームから AI アプリ、エージェント、コンテンツ制作向けのモデルを利用し、タスクに合った機能を選べます。 OfoxAI のモデルと API を見る →
PackyCode PackyCode
PackyCode は、安定性と効率性を重視した AI API 中継サービスです。ひとつの API エンドポイントと API キーで主要な大規模モデルに接続できます。統一ドメイン、統一キー、スマートな障害切り替えに対応し、可用性は 97% としています。人民元で 1:1 チャージでき、為替差損や追加手数料の心配はありません。新規ユーザーは初回チャージ割引と $1 の無料体験クレジットを受け取れ、複数グループでは最大 80% の割引、Codex/Claude Code 専用の高速ルートも利用できます。リンクから登録して、すぐに利用を開始できます。
Fluxion AI 一つの入口で、世界の主要AIモデルに接続・管理
Fluxion AIは、個人開発者、技術チーム、企業向けに、統一APIで世界の主要AIモデルへの接続と管理を提供します。複数経路の動的なスケジューリングで可用性を高め、モデルの性能、応答時間、料金を透明に確認できます。モデルや経路によっては、API利用料を公式価格または基準価格より40%〜98%抑えられます。今すぐアクセスして登録すると、$7分のAPIクレジットを受け取れます。(専用リンク)
AxisNow ウェブサイトと API を保護・高速化し、中国本土および世界各地のアクセス体験にも配慮し、クライアント SDK を通じて高速化とセキュリティの機能をネイティブ/モバイルアプリにまで拡張します — 自社構築・プライベート運用 CDN|サブスクリプション型高防御 CDN|自主的に制御でき、柔軟に組み合わせられる CDN ネットワーク。
APIMart APIMartによる本プロジェクトへのスポンサー支援に感謝します!APIMartはAI画像・動画生成に特化した低価格APIプラットフォームで、GPT-Image-2は1枚$0.006から、1ドルで160枚以上の画像を生成できます。画像と動画の両方に対応する1つの非同期APIで、タスクを送信してIDを取得し、ポーリングまたはコールバックで結果を取得できます。数万枚規模の一括処理でもタイムアウトせず、モデルを切り替えてもコードを変更する必要はありません。従量課金制で月額料金は不要です。こちらの登録リンクから登録して、すぐにご利用いただけます。

GPT-Load を選ぶ理由

アプリケーション側で必要なのは、一つの Base URL と一つの AccessKey だけです。プロバイダー、アカウント、認証情報、モデル、ルーティングポリシーはすべて管理画面で設定します。

GPT-Load の統合アクセスとアップストリームルーティング構成図
  • 単一ゲートウェイでネイティブプロトコルを維持 — 公式 API、クラウド基盤、モデルサービス、互換中継を一元管理しながら、クライアントは OpenAI、Anthropic、Gemini のネイティブインターフェイスをそのまま使えます。
  • API キーとサブスクリプションを統一管理 — Codex、Claude、Antigravity、Grok と API キーチャネルで、認証情報管理・スケジューリング・健全性管理を共通化します。
  • スケジューリングと障害分離を内蔵 — 複数認証情報のスケジューリング、設定可能なウェイト、リトライ、クールダウン、ブラックリスト、セッションアフィニティにより、過負荷や失効の影響を抑えます。
  • 可観測で導入しやすく、データを自己管理 — 健全性、ルート、ログ、使用量、コスト概算を確認でき、SQLite、MySQL、PostgreSQL とローカル認証情報暗号化を単一バイナリで利用できます。

クイックスタート

Warning

1.x を使用している場合は、先に「1.x からの移行」を確認してください。2.0 は 1.x データを開く・インポートする・その場で移行することはできません。

1. サービスを起動する

Docker と Docker Compose が必要です。

git clone --depth 1 https://github.com/tbphp/gpt-load.git
cd gpt-load

cp .env.example .env
docker compose up -d

起動を確認します:

curl --fail http://127.0.0.1:3001/health

初回起動時に管理キーが自動生成されます。読み出して安全に保管してください:

docker compose exec gpt-load sh -c 'cat /app/data/auth.key'

http://127.0.0.1:3001 を開き、そのキーでコンソールにログインします。

起動前に .env の AUTH_KEY で管理キーを明示的に指定することもできます。既定ではローカルアドレスのみを待ち受け、インターネットには直接公開されません。

2. 初期設定を行う

初期設定は 3 ステップです:

  1. チャネルを追加 — アップストリームサービスを選び、API キーを 1 つ以上登録します。サブスクリプションチャネルは画面の案内に従って OAuth 認可または認証情報のインポートを行います。
  2. Group を作成 — チャネルを選び、利用可能なモデルと実行ポリシーを設定します。
  3. AccessKey を作成 — アクセスを許可する Group とクライアントプロトコルを設定し、生成された AccessKey をアプリケーションに渡します。
サブスクリプションチャネルの OAuth コールバックポート

Codex、Claude、Antigravity の OAuth クライアントは固定のコールバックポートを使用します。Compose はそれらを HOST で設定したアドレスに公開し、既定値は 127.0.0.1 です。HOST=0.0.0.0 を設定すると、これらのコールバックポートもホストの全ネットワークインターフェイスに公開されます。ポートはアップストリームのクライアント側で固定されているため、同一ホスト上で同時に実行できる既定の Compose インスタンスは 1 つだけです。

SSH やリモートブラウザ経由で操作する場合、ブラウザの localhost から GPT-Load に到達できないことがあります。その場合はコールバック URL 全体を認可ダイアログに貼り付けることでフローを完了できます。

画面プレビュー

グループ概要 — チャネル、モデル、認証情報数、トラフィック、健全性をまとめて確認

GPT-Load の新しいグループ概要

使用量統計 — リクエスト傾向、キャッシュヒット率、Token 分類、コスト概算を確認

GPT-Load の新しい使用量統計

サポート範囲

クライアントプロトコル

プロトコル 主なエンドポイント
OpenAI Chat Completions POST /v1/chat/completions
OpenAI Responses /v1/responses およびそのリソースパス
OpenAI Images POST /v1/images/...
OpenAI Embeddings POST /v1/embeddings
Rerank POST /v1/rerank
Anthropic Messages POST /v1/messages
Gemini /v1beta/models/...

各チャネルは実行可能なプロトコルと機能を明示的に宣言します。GPT-Load はサポート対象の機能間で変換を行いますが、任意のプロトコル・任意の JSON を扱う汎用コンバーターではありません。

Embeddings は初期段階では OpenAI、OpenRouter、OpenAI Compatible の API Key チャネルでのみネイティブな OpenAI 互換ワイヤーを提供し、サブスクリプションチャネルとプロトコル変換には対応していません。プロトコルフィルターを設定していない AccessKey は既存の「有効なプロトコルをすべて許可する」動作を維持するため、アップグレード後に Embeddings へのアクセス権も得ます。最小権限で運用する場合は、プロトコルフィルターを明示的に設定してください。

Rerank は独立した rerank プロトコルを使用し、OpenAI Compatible、New API、GPT-Load の API Key チャネルで POST /v1/rerank に対応します。リクエストには model、query、テキストのみの documents 配列を指定し、top_n や return_documents などの上流パラメーターも利用できます。ストリーミング、サブスクリプション、プロトコル変換には対応しません。OpenAI Compatible には完全な API プレフィックス(例:https://host/v1)、New API / GPT-Load にはゲートウェイのルートを設定します。上流は互換 Rerank API を提供する必要があります。プロトコルフィルターのない AccessKey は Rerank へのアクセス権も得ます。search_units など Token 以外の単位のみが返る場合は未計価とし、Token 数や無料リクエストとして扱いません。

組み込みチャネル

  • 公式・クラウド:OpenAI、Anthropic、Gemini、xAI、Azure OpenAI、AWS Bedrock、Google Vertex AI
  • モデルサービス:DeepSeek、Moonshot AI、SiliconFlow、Zhipu AI、Alibaba、Volcengine、OpenRouter、Groq
  • サブスクリプション:Codex、Claude、Antigravity、Grok
  • カスタム:OpenAI Compatible(任意の互換中継)

デプロイとデータ

Docker Compose は既定でアプリケーション管理の SQLite を使用します。データは gpt-load-data という名前付きボリュームに保存され、データベース、auth.key、encryption.key を含みます。

Important

encryption.key はチャネル認証情報の復号に使われます。バックアップや移行の際は、データベースと鍵を必ず一緒に保管してください。鍵を失ったり置き換えたりすると、既存の暗号化済み認証情報は復元できません。また現行バージョンはマスターキーのローテーションに対応していません。

外部データベースを使う

統一された DATABASE_DSN で SQLite、MySQL、PostgreSQL に接続します:

mysql://user:password@db.example:3306/gpt_load?charset=utf8mb4&collation=utf8mb4_bin
postgres://user:password@db.example:5432/gpt_load?sslmode=require

よく使う運用コマンド:

docker compose logs -f      # ログを確認
docker compose pull && docker compose up -d   # 最新の 2.x イメージへ更新
docker compose stop         # サービスを停止

公式 Compose は ghcr.io/tbphp/gpt-load:2 を使用します。GA 前の 2 は検証済みの 2.0 Beta / RC を追跡し、GA 後は安定版 2.x のみを追跡します。イメージの完全なタグからは Git tag の v 接頭辞を除き(例:2.0.0-beta.25)、2.0-beta は 2.0 Beta チャネルとして残します。latest は引き続き 1.x を指します。

ネイティブバイナリを使う

GitHub Releases からプラットフォームに合ったファイルをダウンロードし、同梱の SHA256SUMS で検証してから使用してください:

chmod +x ./gpt-load-linux-amd64

HOST=127.0.0.1 DATA_DIR=./data ./gpt-load-linux-amd64

起動後 http://127.0.0.1:3001 にアクセスします。Linux、macOS(amd64 / arm64)、Windows の計 5 種類のポータブルビルドを提供し、gpt-load-windows-amd64.exe は従来どおりフォアグラウンドで動作します。

Windows の一般ユーザーは代わりに gpt-load-windows-setup.exe を利用できます。管理者権限を一度承認すると、低権限の Windows サービスをインストールして起動し、自動起動を設定したうえで、デスクトップとスタートメニューに GPT-Load 管理画面へのショートカットを作成します。インストール中に生成された管理キーが表示されるため、画面を閉じる前に保存してください。保護されたキーは %ProgramData%\GPT-Load\data\auth.key に残ります。サービス設定と .env は %ProgramData%\GPT-Load、永続データは %ProgramData%\GPT-Load\data に保存されます。

新しい Setup による上書きインストールでは、サービスを安全に停止してから更新します。Windows のアンインストールはプログラムとサービスを削除しますが、データは保持します。上級ユーザーは gpt-load-windows-amd64.exe service start|stop|restart|status でもサービスを管理できます。

環境設定

アプリケーションは起動時にカレントディレクトリの .env を読み込み、既存のプロセス環境変数を優先します。特記がない限り、変更後はプロセスまたはコンテナを再起動してください。一般的な設定テンプレートは .env.example を参照してください。

すべての環境変数を表示
変数 既定値 説明
HOST 127.0.0.1 Native モードの待受アドレスであり、Compose のメインポートと OAuth コールバックポートをホストに公開する既定アドレスです。Compose コンテナ内部では常に 0.0.0.0 で待ち受けます。
PORT 3001 HTTP サービスポート。1–65535 である必要があり、Compose はコンテナポート、ホスト公開ポート、ヘルスチェックにも使用します。
BIND_ADDRESS 空、HOST を継承 Compose のみ。OAuth コールバックポートを変更せず、メインサービスポートのホスト公開アドレスを上書きします。
OAUTH_CALLBACK_BIND_ADDRESS 空、HOST を継承 Compose のみ。固定 OAuth コールバックポート 1455、54545、51121 のホスト公開アドレスを上書きします。
GRACEFUL_SHUTDOWN_TIMEOUT 10 停止シグナル後にリクエストの完了を待つ最大時間。正の整数、単位は秒です。
CONTAINER_STOP_GRACE_PERIOD 15s Compose がコンテナを強制停止する前に待つ Docker duration。GRACEFUL_SHUTDOWN_TIMEOUT より長くすることを推奨します。
READ_TIMEOUT 60 HTTP リクエストの読み取りタイムアウト。正の整数、単位は秒です。
IDLE_TIMEOUT 120 HTTP keep-alive アイドル接続のタイムアウト。正の整数、単位は秒です。
DATA_DIR ./data 管理対象データベース、auth.key、encryption.key、実行状態ファイルのディレクトリ。公式 Compose では /app/data、Windows Setup サービスでは %ProgramData%\GPT-Load\data を使用します。
DATABASE_DSN 空、${DATA_DIR}/gpt-load.db を使用 空の場合はアプリケーション管理の SQLite を使用します。空でない場合は SQLite のパスまたは URL、MySQL URL、PostgreSQL URL に対応し、運用者管理の外部データベースとして扱います。コンテナ内のファイルパスはマウント済みディレクトリ内である必要があります。
DATABASE_MAX_OPEN_CONNECTIONS 10 MySQL と PostgreSQL の最大オープン接続数。正の整数である必要があります。SQLite は常に単一接続を使用します。
DATABASE_MAX_IDLE_CONNECTIONS 5 MySQL と PostgreSQL の最大アイドル接続数。正の整数かつ DATABASE_MAX_OPEN_CONNECTIONS 以下である必要があります。SQLite は常に単一接続を使用します。
AUTH_KEY 空、${DATA_DIR}/auth.key を読み込むか生成 管理画面と /api 管理 API の Bearer キー。データプレーンの AccessKey とは異なります。
ENCRYPTION_KEY 空、${DATA_DIR}/encryption.key を読み込むか生成 チャネル認証情報を暗号化します。変更または紛失すると既存の認証情報を復号できないため、データベースと一緒にバックアップしてください。
HTTP_PROXY 空 HTTP アップストリームリクエストの環境プロキシ。
HTTPS_PROXY 空 HTTPS アップストリームリクエストの環境プロキシ。
NO_PROXY 空 環境プロキシをバイパスするホスト、ドメイン、IP のカンマ区切りリスト。
LOG_LEVEL info panic、fatal、error、warn、warning、info、debug、trace に対応します。無効な値は警告を出して info に戻ります。
LOG_FORMAT text text と json に対応します。それ以外の値では起動に失敗します。
MODELS_DEV_AUTO_SYNC_ENABLED 未設定、初期既定値 true 未設定時は管理画面に保存された設定を使用します。設定時は Models.dev の自動同期を強制的に有効または無効にし、管理画面の同名オプションを読み取り専用にします。

環境プロキシは、認証情報、Group、グローバル設定のいずれにもプロキシが指定されていない場合にのみ適用されます。

本番運用の注意事項

  • 既定では 127.0.0.1 のみを待ち受けます。リモートアクセスが必要な場合は、管理されたネットワークまたは TLS 対応のリバースプロキシ経由で公開し、ACL とファイアウォールを設定してください。
  • AUTH_KEY と ENCRYPTION_KEY は厳重に管理し、実際のキーをリポジトリ、ログ、スクリーンショット、公開 Issue に含めないでください。
  • 2.0 は単一アプリケーションインスタンスを前提に設計されています。インスタンス間で状態を共有しないため、そのままの水平スケールには対応していません。
  • 使用量とコストはアップストリームの応答に基づく概算です。運用分析やリソース評価には使えますが、プロバイダーの請求書や会計上の照合結果とは一致しません。
  • サブスクリプションチャネルはアップストリームの OAuth と互換プロトコルに依存し、アップストリームの変更に伴って調整が必要になる場合があります。利用権限のあるアカウントのみを接続し、各プロバイダーの規約に従ってください。
  • Responses の previous_response_id による継続は、ネイティブ Responses と上流での状態管理を宣言した経路に自動で適用されます。現在は openai、gpt_load、xai、newapi、cliproxyapi、sub2api が該当します。帰属を AccessKey ごとに分離し、現在のルーティングで許可される元の認証情報へ固定します。ソフトアフィニティ設定には依存せず、状態が実際に利用できるかは上流に依存します。ステートレス応答と変換された応答は登録せず、Codex サブスクリプションの WebSocket 継続はまだ接続していません。アップグレード前やゲートウェイ外で作成されたものを含め、不明な ID は拒否されます。Group のパラメータ上書きでこのフィールドを変更することはできません。
  • 応答の帰属はメモリに最大 30 日間保持され、上限は 100,000 件および ID テキスト合計 16 MiB です。容量に達すると古い記録を削除します。通常終了時に checkpoint の保存が成功すれば、同じデータディレクトリから復元できます。クラッシュからの復元や、アップストリームの履歴が引き続き有効であることは保証しません。
  • conversation とその他の既存リソース ID はこの帰属ルーティングの対象外であり、単一の認証情報またはアップストリームでの認証情報間のリソース共有が引き続き必要です。

1.x からの移行

Warning

GPT-Load 2.0 は完全な書き直しです。1.x のデータを開く・インポートする・その場で移行することはできません。

2.0 は独立したデータベース、DATA_DIR、ポート、Docker ボリュームでデプロイしてください。検証完了後に本番トラフィックを切り替え、ロールバック期間が終了するまで既存の 1.x 環境を保持してください。1.4.x メンテナンスラインのドキュメントは公式ドキュメントにあります。

オープンソース依存

GPT-Load の一部機能は以下のプロジェクトを基盤としています。感謝いたします:

プロジェクト 役割 ライセンス
Bifrost Core 各プロバイダーの認証、リクエスト/レスポンス変換、ストリーミング、使用量の正規化 Apache-2.0
CLIProxyAPI サブスクリプションチャネルの OAuth と実行アダプター MIT
Lobe Icons 管理画面のチャネルブランドアイコン MIT

認証情報の保存、アカウント選択、スケジューリング、リトライ、健全性、アフィニティ、ログ、使用量ポリシーは GPT-Load が担います。サードパーティ表記は THIRD_PARTY_NOTICES.md、ライセンス全文は LICENSES/ にあり、各リリースには Go 依存関係を対象とした CycloneDX SBOM が付属します。

チャネルアイコンは対応するアップストリームプロバイダーを識別するために使用しています。商標権は各所有者に帰属し、本プロジェクトはこれらのプロバイダーと提携関係や推奨関係にはありません。

プロジェクト支援

OpenAI
プラットフォーム支援
LINUX DO
コミュニティ支援
DigitalOcean
インフラ支援

MIT License · サードパーティ表記 · セキュリティポリシー