┌─────────────────────────────────────────────────────────┐
│ 客户端 (各类 AI 工具等) │
│ 配置: LLM-Router URL 为 OpenAI Base URL │
│ 配置: LLM-Router API Key 为 OpenAI API Key │
└──────────────────────────┬──────────────────────────────┘
│ HTTP/HTTPS
▼
┌─────────────────────────────────────────────────────────┐
│ LLM-Router (Express, Port 11411) │
│ │
│ ┌─────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ app.ts │──▶│ config/ │ │ logger/ │ │
│ │ (入口) │ │ (配置加载) │ │ (Winston) │ │
│ └─────────────┘ └──────────────┘ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Express 中间件链 │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │
│ │ │ CORS处理 │ │ 认证检查 │ │ 请求预处理 │ │ │
│ │ │ (cors.ts) │ │(auth.ts) │ │(preprocess) │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ │ │
│ └─────────────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ handler/ (请求处理) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │
│ │ │ 模型别名 │ │ 前缀路由 │ │ 流式检测 │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ │ │
│ └─────────────────────┬───────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ proxy/ (反向代理层) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │ │
│ │ │ Proxy Map │ │ Director │ │ 事件钩子 │ │ │
│ │ │ 前缀→代理 │ │ 请求改写 │ │ 日志/调试 │ │ │
│ │ └──────────┘ └──────────┘ └──────────────┘ │ │
│ └─────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────┼──────────────┐ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ OpenAI 后端 │ │ Ollama 后端 │ │ Groq 后端 │ │
│ │ (需要 API Key)│ │ (本地无 Key) │ │ (需要 API Key)│ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ app.ts │────▶│ config/ │────▶│ types/ │
│ (启动) │ │ (加载配置) │ │ (Zod Schema) │
└────┬─────┘ └──────────────┘ └──────────────┘
│
│ 注册中间件与路由
▼
┌──────────────────────────────────────┐
│ Express 中间件链 │
│ │
│ cors → auth → body-parser → routes │
└──────────────┬───────────────────────┘
│
┌─────────┼─────────┐
▼ ▼
┌───────────┐ ┌───────────────────┐
│ routes/ │ │ middleware/ │
│ (路由) │────▶│ (预处理: 别名, │
│ │ │ 重写, 过滤) │
└─────┬─────┘ └───────────────────┘
│
▼
┌───────────┐ ┌───────────────────┐
│ handler/ │────▶│ proxy/ │
│ (处理) │ │ (转发到后端) │
└───────────┘ └───────────────────┘
客户端请求
│
▼
Express 服务器接收
│
├── OPTIONS 请求? ──▶ CORS 中间件返回 204
│
├── Bearer Token 认证 ──▶ 401 Unauthorized (无效)
│
├── POST /chat/completions?
│ │
│ ├── 1. 解析请求体 (JSON)
│ ├── 2. 检测流式标记 (stream: true)
│ ├── 3. 应用模型别名 (aliases 映射)
│ ├── 4. 匹配后端前缀 → 选择代理
│ ├── 5. 移除前缀 (openai/gpt-4o → gpt-4o)
│ ├── 6. 应用角色重写 (role_rewrites)
│ ├── 7. 移除不支持参数 (unsupported_params)
│ └── 8. 代理转发 → 后端 API
│
└── 其他路径 ──▶ DefaultProxy 转发
└── 无默认后端 → 502
1. 解析命令行参数 (commander/yargs)
↓
2. 初始化 Winston 日志器 (createLogger)
↓
3. 加载 .env 文件 (dotenv)
↓
4. 加载配置文件 (JSON/YAML, 支持 JSONC)
↓ 文件不存在?
→ 使用硬编码默认配置
↓
5. Zod Schema 验证配置 (validateConfig)
↓ 验证失败?
→ 输出详细错误信息并退出进程
↓
6. 应用命令行参数覆盖 (port, apiKeyEnv, apiKey)
↓
7. 确定 LLM_ROUTER_API_KEY (命令行 > 环境变量 > 自动生成)
↓
8. 初始化反向代理 (initializeProxies)
↓
9. 注册 Express 中间件与路由
↓
10. 启动 HTTP 服务 (app.listen)