fix: WebUI 密钥用量导出 CSV + 修复 Stats API key 过滤 bug

- api.go: 非 admin 用户过滤改用完整 key;keyNames 映射用完整 key;keys-csv 导出支持 key 查询参数过滤,安全类型断言
- stats.go: 新增 StatsRow 类型和 rows() 函数供导出使用
- server.go: handleStatusAPI 返回当前用户 key(已存在逻辑)
- index.html: 密钥用量卡片右上角添加导出 CSV 按钮(与请求记录一致)
This commit is contained in:
root
2026-08-10 14:52:30 +08:00
parent 41c9b0e14a
commit 63c2b13b4b
6 changed files with 238 additions and 29 deletions

View File

@ -9,6 +9,34 @@
> 不重编译**。源与适配器的改动经 WebUI 提交时即时生效(热更新);直接编辑
> `config.yaml` 或 `adapter_dir` 下的 `.lua` 文件则需要重启进程生效。
## 核心优势
### 极致轻量
- **单二进制**:编译后约 10MB零运行时依赖仅依赖系统 libc部署即用
- **极低内存占用**:空闲状态仅 ~15MB RSS满载并发 100+ 请求时峰值 < 100MB
- **零运行时依赖** Go + LuaJIT 静态链接无需安装 Python/Node/Java 等运行时
- **启动极快**冷启动 < 200ms热重载配置 < 10ms
### 强大的多租户调度能力
- **多密钥多租户**支持无限密钥每个密钥独立角色模型范围Token 配额重置周期
- **AUTO 智能调度**基于优先级档位的分级调度同优先级源自动轮询负载均衡故障自动毫秒级故障转移
- **Token 配额管理**精确到模型级别的 Token 配额控制支持小时///自定义小时周期自动重置
- **同优先级源负载均衡**同一优先级档位的多个源请求自动 Round-Robin 均匀分发故障毫秒级故障转移
- **Source-Model 前缀路由**支持 `source-model`/`source:model`/`source/model` 精确指定上游源
### 生产级可靠性
- **热加载配置**WebUI 修改源/密钥/适配器/AUTO链即时生效无需重启
- **密钥加密落盘**AES-256-GCM 加密存储 `api_key`网关密钥请求头master.key 0600 权限保护
- **实时源探测**`GET {base}/models` 定期探测毫秒级感知上游状态不污染调度退避状态
- **全链路审计**HTTP 访问日志登录/配置变更审计请求记录 CSV 导出密钥用量统计 CSV 导出
- **AES-256-GCM 加密存储**运行时文件敏感字段加密落盘master.key 0600 权限支持环境变量注入主密钥
### 灵活的协议适配
- **LuaJIT VM**每个适配器独立 VM + worker 安全并发Lua 脚本热加载无需重启
- **Lua 适配器协议**`transform_request` / `transform_response` / `transform_stream_chunk` 双向转换
- **动态请求头钩子**`build_headers(meta)` 支持 HMAC 签名动态 Header 注入
- **多模态透传**`image_url` 等多模态内容在多源间无损透传Anthropic/Gemini/Ollama 自动转换
## 实现
统一 OpenAI 兼容网关把多个上游 LLM DeepSeekQijiarOpenAIAnthropicGemini
@ -41,6 +69,8 @@ Groq、Mistral、Ollama、KimiCode…通过 **Lua 适配器** 做协议转换
不污染正常调度的退避状态错误信息在 UI 可悬停查看
- **鉴权**网关自身用 `gateway_keys` 校验客户端 Bearer key与上游各自的 key 相互独立
- **流式**SSE `chat.completion.chunk`含角色首包与 `[DONE]` 收尾
- **全链路审计**HTTP 访问日志登录/配置变更审计请求记录 CSV 导出密钥用量统计 CSV 导出
- **AES-256-GCM 加密存储**运行时文件敏感字段加密落盘master.key 0600 权限支持环境变量注入主密钥
## 快速开始