mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-11-07 09:47:23 +00:00
README 从 642 行降到 131 行,只保留简介、核心能力、最小快速开始、文档索引、 改名说明、目录结构与测试入口。其余内容迁到 docs/,中英文索引一一对应: docs/features.md 实现与完整特性清单(原 README 的"实现/特性") docs/configuration.md 配置文件、自动探测模型、多密钥与配额 docs/routing.md 模型路由、AUTO 链、冷却与半冷却、源/适配器、源模板 docs/performance.md 实测内存占用与调优、thinking 预算 docs/webui.md WebUI 使用 docs/adapters.md Lua 适配器协议与内置适配器清单 docs/gui.md 桌面端 Headless/Desktop 两种产物与构建 docs/development.md 目录职责、开发协作、测试 docs/deployment.md 部署、发行包、目录权限、llmsproxy 迁移与验证清单 中性化:README / README_EN / GUI 注释里的 `Clash Verge` 类比全部改为 「桌面壳 / desktop shell」,仓库内(源码与文档)已无该表述。
3.7 KiB
3.7 KiB
实现与完整特性
本文档由 README 拆分而来:架构来源与完整特性清单(README 只保留摘要)。 返回 README。
实现
统一 OpenAI 兼容网关:把多个上游 LLM 源(DeepSeek、Qijiar、OpenAI、Anthropic、Gemini、
Groq、Mistral、Ollama、KimiCode…)通过 Lua 适配器 做协议转换,对内网暴露
一个标准 OpenAI Chat Completions 接口(/v1/chat/completions + /v1/models),
支持单次结算、SSE 流式、AUTO 模型路由与多模态透传。
从 HomeAgent 的多源 LLM 适配层
(internal/agent/api/provider.go + internal/lua/adapters/*)抽离而来并独立演进。
特性
- 多源:一个进程内配置任意多个上游源,按请求的
model自动路由。 - AUTO 模式:
default_model: AUTO时按优先级页保存的 AUTO 链档位逐档调度并发请求。 - 统一输出:所有源对外都是 OpenAI 格式(含
reasoning_content、tool_calls、usage)。 - 生图:
POST /v1/images/generations,kind: image的模型独立路由。 - 多模态:
content数组(image_url等)在多源间无损透传,Anthropic/Gemini/Ollama 自动转换。 - LuaJIT VM:基于 golua 绑定的 LuaJIT,每个适配器独立 VM + worker 池,安全并发。
池是 弹性 的:
Σ max_concurrent只是上限而非预分配,状态按需创建、空闲时自动回收, 因此空载网关几乎不持有 Lua 状态(启动 0 个)。- 扩容步长由适配器最大并发决定:
clamp(ceil(max/8), 1, 8),且仅在真实并发争用 (所有现有状态均已占用)时批量预热,顺序流量始终只用 1 个状态。 - 缩容步长由当前连接数决定:
clamp(ceil(冗余/(1+占用)), 1, 冗余)——无连接时一轮收到 常驻下限,忙时每轮只释放 1 个,保护热路径。WebUI「适配器」页展示实时池指标。
- 扩容步长由适配器最大并发决定:
- thinking 预算:请求里的推理开关/预算归一为中立的
thinking:{enabled,budget_tokens}, 适配器映射到各自协议(Anthropicthinking.budget_tokens、GeminithinkingConfig、 DeepSeekthinking.type="disabled")。 - Lua 适配协议:每个源挂一个
.lua适配器,完成transform_request/transform_response/transform_stream_chunk双向转换,协议差异全在 Lua 层。 - 签名 / 请求头钩子:适配器可定义
build_headers(meta),在 Go 发 HTTP 前 动态注入/签名请求头——用于云端 API 校验调用方 app(如 KimiCode 只放行特定 agent)。提供hmac_sha256_hex/sha256_hex/base64_encode等签名辅助。 - WebUI:内置管理界面,可在线查看/新增/编辑上游源与模型、配置 AUTO 优先级链、 管理密钥模型范围,写入运行时文件持久化。
- 密钥加密存储:运行时文件中的上游
api_key、自定义请求头值、网关 key 均以 AES-256-GCM 加密落盘(master.key独立 0600,或MODELROUTER_MASTER_KEY)。 - 实时源探测:状态页探测各源可达性(
GET {base}/models,失败回退最小请求), 不污染正常调度的退避状态,错误信息在 UI 可悬停查看。 - 鉴权:网关自身用
gateway_keys校验客户端 Bearer key;与上游各自的 key 相互独立。 - 流式:SSE
chat.completion.chunk,含角色首包与[DONE]收尾。 - 全链路审计:HTTP 访问日志、登录/配置变更审计、请求记录 CSV 导出、密钥用量统计 CSV 导出
- AES-256-GCM 加密存储:运行时文件敏感字段加密落盘,master.key 0600 权限,支持环境变量注入主密钥