docs: 全面更新 CLAUDE.md 文档以反映最新代码实现

## 更新概要

本次更新全面审查了代码库,将严重过期的 CLAUDE.md 文档更新到与当前实现一致。

## 主要更新内容

### 1. 项目概述和架构
- 更新为多平台支持(8种账户类型)
- 添加统一调度系统说明
- 补充权限控制、客户端限制、模型黑名单等新功能

### 2. 服务组件
- 从5个服务扩展到30+个服务的完整列表
- 新增核心转发服务(8个)
- 新增账户管理服务(10个)
- 新增统一调度器(4个)
- 新增核心功能服务(用户管理、定价、Webhook、LDAP等)

### 3. 环境变量配置
- 新增20+个重要环境变量说明
- 添加AWS Bedrock配置
- 添加用户管理、LDAP、Webhook配置说明

### 4. API端点
- 更新为多路由支持(Claude、Gemini、OpenAI、Droid、Azure)
- 新增用户管理端点
- 新增Webhook管理端点
- 新增系统指标端点

### 5. Redis数据结构
- 扩展为8种账户类型的数据结构
- 添加用户管理、粘性会话、并发控制相关键
- 添加成本统计、Webhook配置相关键

### 6. 故障排除
- 从4个问题扩展到13个常见问题
- 新增粘性会话、LDAP、Webhook、调度器等问题解决方案

### 7. CLI工具
- 添加数据导入导出命令
- 添加数据迁移和修复命令
- 添加成本初始化和定价更新命令

### 8. 新增功能概览章节
- 列出相比旧版本的所有新增功能
- 包括多平台支持、用户权限系统、统一调度、成本监控等

## 技术细节

- 保持所有现有章节结构
- 使用 Prettier 格式化确保代码风格一致
- 基于实际代码审查(src/services/、src/routes/、config/等)
- 确保所有端点、配置项、数据结构与代码实现一致

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
litongtongxue
2025-10-15 01:03:57 +08:00
parent b4658e5d5f
commit 1bd9002af9

429
CLAUDE.md
View File

@@ -6,34 +6,87 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## 项目概述 ## 项目概述
Claude Relay Service 是一个功能完整的 AI API 中转服务,支持 Claude 和 Gemini 双平台。提供多账户管理、API Key 认证、代理配置和现代化 Web 管理界面。该服务作为客户端(如 SillyTavern、Claude Code、Gemini CLI与 AI API 之间的中间件,提供认证、限流、监控等功能。 Claude Relay Service 是一个多平台 AI API 中转服务,支持 **Claude (官方/Console)、Gemini、OpenAI Responses (Codex)、AWS Bedrock、Azure OpenAI、Droid (Factory.ai)、CCR** 等多种账户类型。提供完整的多账户管理、API Key 认证、代理配置、用户管理、LDAP认证、Webhook通知和现代化 Web 管理界面。该服务作为客户端(如 Claude Code、Gemini CLI、Codex、Droid CLI、Cherry Studio 等)与 AI API 之间的中间件,提供认证、限流、监控、定价计算、成本统计等功能。
## 核心架构 ## 核心架构
### 关键架构概念 ### 关键架构概念
- **代理认证流**: 客户端用自建API Key → 验证 → 获取Claude账户OAuth token → 转发到Anthropic - **统一调度系统**: 使用 unifiedClaudeScheduler、unifiedGeminiScheduler、unifiedOpenAIScheduler、droidScheduler 实现跨账户类型的智能调度
- **多账户类型支持**: 支持 claude-official、claude-console、bedrock、ccr、droid、gemini、openai-responses、azure-openai 等账户类型
- **代理认证流**: 客户端用自建API Key → 验证 → 统一调度器选择账户 → 获取账户token → 转发到对应API
- **Token管理**: 自动监控OAuth token过期并刷新支持10秒提前刷新策略 - **Token管理**: 自动监控OAuth token过期并刷新支持10秒提前刷新策略
- **代理支持**: 每个Claude账户支持独立代理配置OAuth token交换也通过代理进行 - **代理支持**: 每个账户支持独立代理配置OAuth token交换也通过代理进行
- **数据加密**: 敏感数据refreshToken, accessToken使用AES加密存储在Redis - **数据加密**: 敏感数据refreshToken, accessToken, credentials使用AES加密存储在Redis
- **粘性会话**: 支持会话级别的账户绑定,同一会话使用同一账户,确保上下文连续性
- **权限控制**: API Key支持权限配置all/claude/gemini/openai等控制可访问的服务类型
- **客户端限制**: 基于User-Agent的客户端识别和限制支持ClaudeCode、Gemini-CLI等预定义客户端
- **模型黑名单**: 支持API Key级别的模型访问限制
### 主要服务组件 ### 主要服务组件
- **claudeRelayService.js**: 核心代理服务,处理请求转发和流式响应 #### 核心转发服务
- **claudeAccountService.js**: Claude账户管理OAuth token刷新和账户选择
- **geminiAccountService.js**: Gemini账户管理Google OAuth token刷新和账户选择 - **claudeRelayService.js**: Claude官方API转发处理OAuth认证和流式响应
- **apiKeyService.js**: API Key管理验证、限流和使用统计 - **claudeConsoleRelayService.js**: Claude Console账户转发服务
- **geminiRelayService.js**: Gemini API转发服务
- **bedrockRelayService.js**: AWS Bedrock API转发服务
- **azureOpenaiRelayService.js**: Azure OpenAI API转发服务
- **droidRelayService.js**: Droid (Factory.ai) API转发服务
- **ccrRelayService.js**: CCR账户转发服务
- **openaiResponsesRelayService.js**: OpenAI Responses (Codex) 转发服务
#### 账户管理服务
- **claudeAccountService.js**: Claude官方账户管理OAuth token刷新和账户选择
- **claudeConsoleAccountService.js**: Claude Console账户管理
- **geminiAccountService.js**: Gemini账户管理Google OAuth token刷新
- **bedrockAccountService.js**: AWS Bedrock账户管理
- **azureOpenaiAccountService.js**: Azure OpenAI账户管理
- **droidAccountService.js**: Droid账户管理
- **ccrAccountService.js**: CCR账户管理
- **openaiResponsesAccountService.js**: OpenAI Responses账户管理
- **openaiAccountService.js**: OpenAI兼容账户管理
- **accountGroupService.js**: 账户组管理,支持账户分组和优先级
#### 统一调度器
- **unifiedClaudeScheduler.js**: Claude多账户类型统一调度claude-official/console/bedrock/ccr
- **unifiedGeminiScheduler.js**: Gemini账户统一调度
- **unifiedOpenAIScheduler.js**: OpenAI兼容服务统一调度
- **droidScheduler.js**: Droid账户调度
#### 核心功能服务
- **apiKeyService.js**: API Key管理验证、限流、使用统计、成本计算
- **userService.js**: 用户管理系统支持用户注册、登录、API Key管理
- **pricingService.js**: 定价服务,模型价格管理和成本计算
- **costInitService.js**: 成本数据初始化服务
- **webhookService.js**: Webhook通知服务
- **webhookConfigService.js**: Webhook配置管理
- **ldapService.js**: LDAP认证服务
- **tokenRefreshService.js**: Token自动刷新服务
- **rateLimitCleanupService.js**: 速率限制状态清理服务
- **claudeCodeHeadersService.js**: Claude Code客户端请求头处理
#### 工具服务
- **oauthHelper.js**: OAuth工具PKCE流程实现和代理支持 - **oauthHelper.js**: OAuth工具PKCE流程实现和代理支持
- **workosOAuthHelper.js**: WorkOS OAuth集成
- **openaiToClaude.js**: OpenAI格式到Claude格式的转换
### 认证和代理流程 ### 认证和代理流程
1. 客户端使用自建API Keycr\_前缀格式发送请求 1. 客户端使用自建API Keycr\_前缀格式发送请求到对应路由(/api、/claude、/gemini、/openai、/droid等
2. authenticateApiKey中间件验证API Key有效性速率限制 2. **authenticateApiKey中间件**验证API Key有效性速率限制、权限、客户端限制、模型黑名单
3. claudeAccountService自动选择可用Claude账户 3. **统一调度器**(如 unifiedClaudeScheduler根据请求模型、会话hash、API Key权限选择最优账户
4. 检查OAuth access token有效性过期则自动刷新使用代理 4. 检查选中账户的token有效性过期则自动刷新使用代理
5. 移除客户端API Key使用OAuth Bearer token转发请求 5. 根据账户类型调用对应的转发服务claudeRelayService、geminiRelayService等
6. 通过账户配置的代理发送到Anthropic API 6. 移除客户端API Key使用账户凭据OAuth Bearer token、API Key等转发请求
7. 流式或非流式返回响应,记录使用统计 7. 通过账户配置的代理发送到目标APIAnthropic、Google、AWS等
8. 流式或非流式返回响应捕获真实usage数据
9. 记录使用统计input/output/cache_create/cache_read tokens和成本计算
10. 更新速率限制计数器和并发控制
### OAuth集成 ### OAuth集成
@@ -42,6 +95,51 @@ Claude Relay Service 是一个功能完整的 AI API 中转服务,支持 Claud
- **代理支持**: OAuth授权和token交换全程支持代理配置 - **代理支持**: OAuth授权和token交换全程支持代理配置
- **安全存储**: claudeAiOauth数据加密存储包含accessToken、refreshToken、scopes - **安全存储**: claudeAiOauth数据加密存储包含accessToken、refreshToken、scopes
## 新增功能概览(相比旧版本)
### 多平台支持
-**Claude Console账户**: 支持Claude Console类型账户
-**AWS Bedrock**: 完整的AWS Bedrock API支持
-**Azure OpenAI**: Azure OpenAI服务支持
-**Droid (Factory.ai)**: Factory.ai API支持
-**CCR账户**: CCR凭据支持
-**OpenAI兼容**: OpenAI格式转换和Responses格式支持
### 用户和权限系统
-**用户管理**: 完整的用户注册、登录、API Key管理系统
-**LDAP认证**: 企业级LDAP/Active Directory集成
-**权限控制**: API Key级别的服务权限all/claude/gemini/openai
-**客户端限制**: 基于User-Agent的客户端识别和限制
-**模型黑名单**: API Key级别的模型访问控制
### 统一调度和会话管理
-**统一调度器**: 跨账户类型的智能调度系统
-**粘性会话**: 会话级账户绑定,支持自动续期
-**并发控制**: Redis Sorted Set实现的并发限制
-**负载均衡**: 自动账户选择和故障转移
### 成本和监控
-**定价服务**: 模型价格管理和自动成本计算
-**成本统计**: 详细的token使用和费用统计
-**缓存监控**: 全局缓存统计和命中率分析
-**实时指标**: 可配置窗口的实时统计METRICS_WINDOW
### Webhook和通知
-**Webhook系统**: 事件通知和Webhook配置管理
-**多URL支持**: 支持多个Webhook URL逗号分隔
### 高级功能
-**529错误处理**: 自动识别Claude过载状态并暂时排除账户
-**HTTP调试**: DEBUG_HTTP_TRAFFIC模式详细记录HTTP请求/响应
-**数据迁移**: 完整的数据导入导出工具(含加密/脱敏)
-**自动清理**: 并发计数、速率限制、临时错误状态自动清理
## 常用命令 ## 常用命令
### 基本开发命令 ### 基本开发命令
@@ -69,19 +167,47 @@ npm run service:logs # 查看日志
npm run service:stop # 停止服务 npm run service:stop # 停止服务
### 开发环境配置 ### 开发环境配置
必须配置的环境变量:
#### 必须配置的环境变量
- `JWT_SECRET`: JWT密钥32字符以上随机字符串 - `JWT_SECRET`: JWT密钥32字符以上随机字符串
- `ENCRYPTION_KEY`: 数据加密密钥32字符固定长度 - `ENCRYPTION_KEY`: 数据加密密钥32字符固定长度
- `REDIS_HOST`: Redis主机地址默认localhost - `REDIS_HOST`: Redis主机地址默认localhost
- `REDIS_PORT`: Redis端口默认6379 - `REDIS_PORT`: Redis端口默认6379
- `REDIS_PASSWORD`: Redis密码可选 - `REDIS_PASSWORD`: Redis密码可选
初始化命令: #### 新增重要环境变量(可选)
- `USER_MANAGEMENT_ENABLED`: 启用用户管理系统默认false
- `LDAP_ENABLED`: 启用LDAP认证默认false
- `LDAP_URL`: LDAP服务器地址如 ldaps://ldap.example.com:636
- `LDAP_TLS_REJECT_UNAUTHORIZED`: LDAP证书验证默认true
- `WEBHOOK_ENABLED`: 启用Webhook通知默认true
- `WEBHOOK_URLS`: Webhook通知URL列表逗号分隔
- `CLAUDE_OVERLOAD_HANDLING_MINUTES`: Claude 529错误处理持续时间分钟0表示禁用
- `STICKY_SESSION_TTL_HOURS`: 粘性会话TTL小时默认1
- `STICKY_SESSION_RENEWAL_THRESHOLD_MINUTES`: 粘性会话续期阈值分钟默认0
- `METRICS_WINDOW`: 实时指标统计窗口分钟1-60默认5
- `MAX_API_KEYS_PER_USER`: 每用户最大API Key数量默认1
- `ALLOW_USER_DELETE_API_KEYS`: 允许用户删除自己的API Keys默认false
- `DEBUG_HTTP_TRAFFIC`: 启用HTTP请求/响应调试日志默认false仅开发环境
- `PROXY_USE_IPV4`: 代理使用IPv4默认true
- `REQUEST_TIMEOUT`: 请求超时时间毫秒默认600000即10分钟
#### AWS Bedrock配置可选
- `CLAUDE_CODE_USE_BEDROCK`: 启用Bedrock设置为1启用
- `AWS_REGION`: AWS默认区域默认us-east-1
- `ANTHROPIC_MODEL`: Bedrock默认模型
- `ANTHROPIC_SMALL_FAST_MODEL`: Bedrock小型快速模型
- `ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION`: 小型模型区域
- `CLAUDE_CODE_MAX_OUTPUT_TOKENS`: 最大输出tokens默认4096
- `MAX_THINKING_TOKENS`: 最大思考tokens默认1024
- `DISABLE_PROMPT_CACHING`: 禁用提示缓存设置为1禁用
#### 初始化命令
```bash ```bash
cp config/config.example.js config/config.js cp config/config.example.js config/config.js
cp .env.example .env cp .env.example .env
npm run setup # 自动生成密钥并创建管理员账户 npm run setup # 自动生成密钥并创建管理员账户
```` ```
## Web界面功能 ## Web界面功能
@@ -95,31 +221,82 @@ npm run setup # 自动生成密钥并创建管理员账户
### 核心管理功能 ### 核心管理功能
- **实时仪表板**: 系统统计、账户状态、使用量监控 - **实时仪表板**: 系统统计、账户状态、使用量监控、实时指标METRICS_WINDOW配置窗口
- **API Key管理**: 创建、配额设置、使用统计查看 - **API Key管理**: 创建、配额设置、使用统计查看、权限配置、客户端限制、模型黑名单
- **Claude账户管理**: OAuth账户添加、代理配置、状态监控 - **多平台账户管理**:
- **系统日志**: 实时日志查看,多级别过滤 - Claude账户官方/Console: OAuth账户添加、代理配置、状态监控
- Gemini账户: Google OAuth授权、代理配置
- OpenAI Responses (Codex)账户: API Key配置
- AWS Bedrock账户: AWS凭据配置
- Azure OpenAI账户: Azure凭据和端点配置
- Droid账户: Factory.ai API Key配置
- CCR账户: CCR凭据配置
- **用户管理**: 用户注册、登录、API Key分配USER_MANAGEMENT_ENABLED启用时
- **系统日志**: 实时日志查看多级别过滤HTTP调试日志DEBUG_HTTP_TRAFFIC启用时
- **Webhook配置**: Webhook URL管理、事件配置
- **主题系统**: 支持明亮/暗黑模式切换,自动保存用户偏好设置 - **主题系统**: 支持明亮/暗黑模式切换,自动保存用户偏好设置
- **成本分析**: 详细的token使用和成本统计基于pricingService
- **缓存监控**: 解密缓存统计和性能监控
## 重要端点 ## 重要端点
### API转发端点 ### API转发端点(多路由支持)
- `POST /api/v1/messages` - 主要消息处理端点(支持流式) #### Claude服务路由
- `GET /api/v1/models` - 模型列表(兼容性 - `POST /api/v1/messages` - Claude消息处理支持流式
- `POST /claude/v1/messages` - Claude消息处理别名路由
- `POST /v1/messages/count_tokens` - Token计数Beta API
- `GET /api/v1/models` - 模型列表
- `GET /api/v1/usage` - 使用统计查询 - `GET /api/v1/usage` - 使用统计查询
- `GET /api/v1/key-info` - API Key信息 - `GET /api/v1/key-info` - API Key信息
- `GET /v1/me` - 用户信息Claude Code客户端需要
- `GET /v1/organizations/:org_id/usage` - 组织使用统计
### OAuth管理端点 #### Gemini服务路由
- `POST /gemini/v1/models/:model:generateContent` - 标准Gemini API格式
- `POST /gemini/v1/models/:model:streamGenerateContent` - Gemini流式
- `GET /gemini/v1/models` - Gemini模型列表
- 其他Gemini兼容路由保持向后兼容
#### OpenAI兼容路由
- `POST /openai/v1/chat/completions` - OpenAI格式转发支持responses格式
- `POST /openai/claude/v1/chat/completions` - OpenAI格式转Claude
- `POST /openai/gemini/v1/chat/completions` - OpenAI格式转Gemini
- `GET /openai/v1/models` - OpenAI格式模型列表
#### Droid (Factory.ai) 路由
- `POST /droid/claude/v1/messages` - Droid Claude转发
- `POST /droid/openai/v1/chat/completions` - Droid OpenAI转发
#### Azure OpenAI 路由
- `POST /azure/...` - Azure OpenAI API转发
### 管理端点
#### OAuth和账户管理
- `POST /admin/claude-accounts/generate-auth-url` - 生成OAuth授权URL含代理 - `POST /admin/claude-accounts/generate-auth-url` - 生成OAuth授权URL含代理
- `POST /admin/claude-accounts/exchange-code` - 交换authorization code - `POST /admin/claude-accounts/exchange-code` - 交换authorization code
- `POST /admin/claude-accounts` - 创建OAuth账户 - `POST /admin/claude-accounts` - 创建Claude OAuth账户
- 各平台账户CRUD端点gemini、openai、bedrock、azure、droid、ccr
#### 用户管理USER_MANAGEMENT_ENABLED启用时
- `POST /users/register` - 用户注册
- `POST /users/login` - 用户登录
- `GET /users/profile` - 用户资料
- `POST /users/api-keys` - 创建用户API Key
#### Webhook管理
- `GET /admin/webhook/configs` - 获取Webhook配置
- `POST /admin/webhook/configs` - 创建Webhook配置
- `PUT /admin/webhook/configs/:id` - 更新Webhook配置
- `DELETE /admin/webhook/configs/:id` - 删除Webhook配置
### 系统端点 ### 系统端点
- `GET /health` - 健康检查 - `GET /health` - 健康检查(包含组件状态、版本、内存等)
- `GET /web` - Web管理界面 - `GET /metrics` - 系统指标使用统计、uptime、内存
- `GET /web` - 传统Web管理界面
- `GET /admin-next/` - 新版SPA管理界面主界面
- `GET /admin/dashboard` - 系统概览数据 - `GET /admin/dashboard` - 系统概览数据
## 故障排除 ## 故障排除
@@ -138,17 +315,43 @@ npm run setup # 自动生成密钥并创建管理员账户
### 常见开发问题 ### 常见开发问题
1. **Redis连接失败**: 确认Redis服务运行检查连接配置 1. **Redis连接失败**: 确认Redis服务运行检查REDIS_HOST、REDIS_PORT、REDIS_PASSWORD配置
2. **管理员登录失败**: 检查init.json同步到Redis运行npm run setup 2. **管理员登录失败**: 检查data/init.json存在运行npm run setup重新初始化
3. **API Key格式错误**: 确保使用cr\_前缀格式 3. **API Key格式错误**: 确保使用cr\_前缀格式可通过API_KEY_PREFIX配置修改
4. **代理连接问题**: 验证SOCKS5/HTTP代理配置和认证信息 4. **代理连接问题**: 验证SOCKS5/HTTP代理配置和认证信息检查PROXY_USE_IPV4设置
5. **粘性会话失效**: 检查Redis中session数据确认STICKY_SESSION_TTL_HOURS配置通过Nginx代理时需添加 `underscores_in_headers on;`
6. **LDAP认证失败**:
- 检查LDAP_URL、LDAP_BIND_DN、LDAP_BIND_PASSWORD配置
- 自签名证书问题:设置 LDAP_TLS_REJECT_UNAUTHORIZED=false
- 查看日志中的LDAP连接错误详情
7. **用户管理功能不可用**: 确认USER_MANAGEMENT_ENABLED=true检查userService初始化
8. **Webhook通知失败**:
- 确认WEBHOOK_ENABLED=true
- 检查WEBHOOK_URLS格式逗号分隔
- 查看logs/webhook-*.log日志
9. **统一调度器选择账户失败**:
- 检查账户状态status: 'active'
- 确认账户类型与请求路由匹配
- 查看粘性会话绑定情况
10. **并发计数泄漏**: 系统每分钟自动清理过期并发计数concurrency cleanup task重启时也会自动清理
11. **速率限制未清理**: rateLimitCleanupService每5分钟自动清理过期限流状态
12. **成本统计不准确**: 运行 `npm run init:costs` 初始化成本数据检查pricingService是否正确加载模型价格
13. **缓存命中率低**: 查看缓存监控统计调整LRU缓存大小配置
### 调试工具 ### 调试工具
- **日志系统**: Winston结构化日志支持不同级别 - **日志系统**: Winston结构化日志支持不同级别logs/目录下分类存储
- **CLI工具**: 命令行状态查看和管理 - `logs/claude-relay-*.log` - 应用主日志
- **Web界面**: 实时日志查看和系统监控 - `logs/token-refresh-error.log` - Token刷新错误
- **健康检查**: /health端点提供系统状态 - `logs/webhook-*.log` - Webhook通知日志
- `logs/http-debug-*.log` - HTTP调试日志DEBUG_HTTP_TRAFFIC=true时
- **CLI工具**: 命令行状态查看和管理npm run cli
- **Web界面**: 实时日志查看和系统监控(/admin-next/
- **健康检查**: /health端点提供系统状态redis、logger、内存、版本等
- **系统指标**: /metrics端点提供详细的使用统计和性能指标
- **缓存监控**: cacheMonitor提供全局缓存统计和命中率分析
- **数据导出工具**: npm run data:export 导出Redis数据进行调试
- **Redis Key调试**: npm run data:debug 查看所有Redis键
## 开发最佳实践 ## 开发最佳实践
@@ -197,23 +400,57 @@ npm run setup # 自动生成密钥并创建管理员账户
### 常见文件位置 ### 常见文件位置
- 核心服务逻辑:`src/services/` 目录 - 核心服务逻辑:`src/services/` 目录30+服务文件)
- 路由处理:`src/routes/` 目录 - 路由处理:`src/routes/` 目录api.js、admin.js、geminiRoutes.js、openaiRoutes.js等13个路由文件
- 中间件:`src/middleware/` 目录 - 中间件:`src/middleware/` 目录auth.js、browserFallback.js、debugInterceptor.js等
- 配置管理:`config/config.js` - 配置管理:`config/config.js`(完整的多平台配置)
- Redis 模型:`src/models/redis.js` - Redis 模型:`src/models/redis.js`
- 工具函数:`src/utils/` 目录 - 工具函数:`src/utils/` 目录
- `logger.js` - 日志系统
- `oauthHelper.js` - OAuth工具
- `proxyHelper.js` - 代理工具
- `sessionHelper.js` - 会话管理
- `cacheMonitor.js` - 缓存监控
- `costCalculator.js` - 成本计算
- `rateLimitHelper.js` - 速率限制
- `webhookNotifier.js` - Webhook通知
- `tokenMask.js` - Token脱敏
- `workosOAuthHelper.js` - WorkOS OAuth
- `modelHelper.js` - 模型工具
- `inputValidator.js` - 输入验证
- CLI工具`cli/index.js` 和 `src/cli/` 目录
- 脚本目录:`scripts/` 目录
- `setup.js` - 初始化脚本
- `manage.js` - 服务管理
- `migrate-apikey-expiry.js` - API Key过期迁移
- `fix-usage-stats.js` - 使用统计修复
- `data-transfer.js` / `data-transfer-enhanced.js` - 数据导入导出
- `update-model-pricing.js` - 模型价格更新
- `test-pricing-fallback.js` - 价格回退测试
- `debug-redis-keys.js` - Redis调试
- 前端主题管理:`web/admin-spa/src/stores/theme.js` - 前端主题管理:`web/admin-spa/src/stores/theme.js`
- 前端组件:`web/admin-spa/src/components/` 目录 - 前端组件:`web/admin-spa/src/components/` 目录
- 前端页面:`web/admin-spa/src/views/` 目录 - 前端页面:`web/admin-spa/src/views/` 目录
- 初始化数据:`data/init.json`(管理员凭据存储)
- 日志目录:`logs/`(各类日志文件)
### 重要架构决策 ### 重要架构决策
- 所有敏感数据OAuth token、refreshToken都使用 AES 加密存储在 Redis - **统一调度系统**: 使用统一调度器unifiedClaudeScheduler等实现跨账户类型的智能调度支持粘性会话、负载均衡、故障转移
- 每个 Claude 账户支持独立的代理配置,包括 SOCKS5 和 HTTP 代理 - **多账户类型支持**: 支持8种账户类型claude-official、claude-console、bedrock、ccr、droid、gemini、openai-responses、azure-openai
- API Key 使用哈希存储,支持 `cr_` 前缀格式 - **加密存储**: 所有敏感数据OAuth token、refreshToken、credentials都使用 AES 加密存储在 Redis
- 请求流程API Key 验证 → 账户选择 → Token 刷新(如需)→ 请求转发 - **独立代理**: 每个账户支持独立的代理配置SOCKS5/HTTP包括OAuth授权流程
- 支持流式和非流式响应,客户端断开时自动清理资源 - **API Key哈希**: 使用SHA-256哈希存储支持自定义前缀默认 `cr_`
- **权限系统**: API Key支持细粒度权限控制all/claude/gemini/openai等
- **请求流程**: API Key验证含权限、客户端、模型黑名单 → 统一调度器选择账户 → Token刷新如需→ 请求转发 → Usage捕获 → 成本计算
- **流式响应**: 支持SSE流式响应实时捕获真实usage数据客户端断开时自动清理资源AbortController
- **粘性会话**: 基于请求内容hash的会话绑定同一会话始终使用同一账户支持自动续期
- **自动清理**: 定时清理任务过期Key、错误账户、临时错误、并发计数、速率限制状态
- **缓存优化**: 多层LRU缓存解密缓存、账户缓存全局缓存监控和统计
- **成本追踪**: 实时token使用统计input/output/cache_create/cache_read和成本计算基于pricingService
- **并发控制**: Redis Sorted Set实现的并发计数支持自动过期清理
- **客户端识别**: 基于User-Agent的客户端限制支持预定义客户端ClaudeCode、Gemini-CLI等
- **错误处理**: 529错误自动标记账户过载状态配置时长内自动排除该账户
### 核心数据流和性能优化 ### 核心数据流和性能优化
@@ -235,36 +472,107 @@ npm run setup # 自动生成密钥并创建管理员账户
### Redis 数据结构 ### Redis 数据结构
- **API Keys**: `api_key:{id}` (详细信息) + `api_key_hash:{hash}` (快速查找) - **API Keys**:
- **Claude 账户**: `claude_account:{id}` (加密的 OAuth 数据) - `api_key:{id}` - API Key详细信息含权限、客户端限制、模型黑名单等
- **管理员**: `admin:{id}` + `admin_username:{username}` (用户名映射) - `api_key_hash:{hash}` - 哈希到ID的快速映射
- **会话**: `session:{token}` (JWT 会话管理) - `api_key_usage:{keyId}` - 使用统计数据
- **使用统计**: `usage:daily:{date}:{key}:{model}` (多维度统计) - `api_key_cost:{keyId}` - 成本统计数据
- **系统信息**: `system_info` (系统状态缓存) - **账户数据**(多类型):
- `claude_account:{id}` - Claude官方账户加密的OAuth数据
- `claude_console_account:{id}` - Claude Console账户
- `gemini_account:{id}` - Gemini账户
- `openai_responses_account:{id}` - OpenAI Responses账户
- `bedrock_account:{id}` - AWS Bedrock账户
- `azure_openai_account:{id}` - Azure OpenAI账户
- `droid_account:{id}` - Droid账户
- `ccr_account:{id}` - CCR账户
- **用户管理**:
- `user:{id}` - 用户信息
- `user_email:{email}` - 邮箱到用户ID映射
- `user_session:{token}` - 用户会话
- **管理员**:
- `admin:{id}` - 管理员信息
- `admin_username:{username}` - 用户名映射
- `admin_credentials` - 管理员凭据从data/init.json同步
- **会话管理**:
- `session:{token}` - JWT会话管理
- `sticky_session:{sessionHash}` - 粘性会话账户绑定
- `session_window:{accountId}` - 账户会话窗口
- **使用统计**:
- `usage:daily:{date}:{key}:{model}` - 按日期、Key、模型的使用统计
- `usage:account:{accountId}:{date}` - 按账户的使用统计
- `usage:global:{date}` - 全局使用统计
- **速率限制**:
- `rate_limit:{keyId}:{window}` - 速率限制计数器
- `rate_limit_state:{accountId}` - 账户限流状态
- `overload:{accountId}` - 账户过载状态529错误
- **并发控制**:
- `concurrency:{accountId}` - Redis Sorted Set实现的并发计数
- **Webhook配置**:
- `webhook_config:{id}` - Webhook配置
- **系统信息**:
- `system_info` - 系统状态缓存
- `model_pricing` - 模型价格数据pricingService
### 流式响应处理 ### 流式响应处理
- 支持 SSE (Server-Sent Events) 流式传输 - 支持 SSE (Server-Sent Events) 流式传输,实时推送响应数据
- 自动从流中解析 usage 数据并记录 - 自动从SSE流中解析真实usage数据input/output/cache_create/cache_read tokens
- 客户端断开时通过 AbortController 清理资源 - 客户端断开时通过 AbortController 清理资源和并发计数
- 错误时发送适当的 SSE 错误事件 - 错误时发送适当的 SSE 错误事件(带时间戳和错误类型)
- 支持大文件流式传输REQUEST_TIMEOUT配置超时时间
- 禁用Nagle算法确保数据立即发送socket.setNoDelay
- 设置 `X-Accel-Buffering: no` 禁用Nginx缓冲
### CLI 工具使用示例 ### CLI 工具使用示例
```bash ```bash
# 创建新的 API Key # API Key管理
npm run cli keys create -- --name "MyApp" --limit 1000 npm run cli keys create -- --name "MyApp" --limit 1000
npm run cli keys list
npm run cli keys delete -- --id <keyId>
npm run cli keys update -- --id <keyId> --limit 2000
# 查看系统状态 # 系统状态查看
npm run cli status npm run cli status # 查看系统概况
npm run status # 统一状态脚本
npm run status:detail # 详细状态
# 管理 Claude 账户 # Claude账户管理
npm run cli accounts list npm run cli accounts list
npm run cli accounts refresh <accountId> npm run cli accounts refresh <accountId>
npm run cli accounts add -- --name "Account1"
# Gemini账户管理
npm run cli gemini list
npm run cli gemini add -- --name "Gemini1"
# 管理员操作 # 管理员操作
npm run cli admin create -- --username admin2 npm run cli admin create -- --username admin2
npm run cli admin reset-password -- --username admin npm run cli admin reset-password -- --username admin
npm run cli admin list
# 数据管理
npm run data:export # 导出Redis数据
npm run data:export:sanitized # 导出脱敏数据
npm run data:export:enhanced # 增强导出(含解密)
npm run data:export:encrypted # 导出加密数据
npm run data:import # 导入数据
npm run data:import:enhanced # 增强导入
npm run data:debug # 调试Redis键
# 数据迁移和修复
npm run migrate:apikey-expiry # API Key过期时间迁移
npm run migrate:apikey-expiry:dry # 干跑模式
npm run migrate:fix-usage-stats # 修复使用统计
# 成本和定价
npm run init:costs # 初始化成本数据
npm run update:pricing # 更新模型价格
npm run test:pricing-fallback # 测试价格回退
# 监控
npm run monitor # 增强监控脚本
``` ```
# important-instruction-reminders # important-instruction-reminders
@@ -273,3 +581,4 @@ Do what has been asked; nothing more, nothing less.
NEVER create files unless they're absolutely necessary for achieving your goal. NEVER create files unless they're absolutely necessary for achieving your goal.
ALWAYS prefer editing an existing file to creating a new one. ALWAYS prefer editing an existing file to creating a new one.
NEVER proactively create documentation files (\*.md) or README files. Only create documentation files if explicitly requested by the User. NEVER proactively create documentation files (\*.md) or README files. Only create documentation files if explicitly requested by the User.
````