这个项目能做什么

Liapi 是一个自托管的 HTTP 服务,对外暴露 OpenAI 兼容 API,对内聚合多个上游模型服务(OpenAI、Claude、OpenRouter、硅基流动、Ollama 等)。项目基于 Go 1.22+ 纯标准库实现,无第三方依赖,go build 一步生成二进制。 核心功能: - 统一鉴权:客户端 token 与上游 API Key 完全分离,支持 Bearer / x-api-key / ?token= 三种来源,使用 SHA-256 摘要 + 常量时间比较防时序攻击,token 脱敏后入日志。 - 模型路由:按 priority 升序排列,同优先级组内按 weight 加权随机;支持显式降级链(fallbacks)、精确模型别名与正则别名规则(含参数覆写)。 - 故障转移:在首次 WriteHeader 前完成切换决策,429/5xx 自动切换上游,4xx(非 429)快速失败不重试;支持单上游内部重试。 - 流式转发:检测 text/event-stream 逐行复制并 Flush,流式不设硬超时靠客户端断开驱动,客户端断开即停止读上游释放连接。 - 限流:滑动窗口限流,支持每 token 每分钟请求数与每日 UTC 配额,设备可单独覆盖。 - 日志与统计:JSONL 日志文件 + 内存环形缓冲,记录路径、模型、上游、状态、延迟、token 用量与费用估算;支持按上游/模型/token/时间段聚合,提供 P50/P90/P99 延迟与错误码分布。 - 健康检查:后台 goroutine 定期并发探测上游,连续失败 N 次标记不健康,路由时自动避开(可开关),全挂时回退全量。 - Web 管理台:基于 Nuxt 4 构建的静态 SPA,go:embed 内嵌于二进制,支持上游/令牌/设备管理、配置热重载、日志查询、统计导出、调试测试。 管理 API 提供完整 CRUD:上游管理、设备 token 管理(仅存 SHA-256 哈希,明文仅签发一次)、配置导入导出(支持 OneAPI channels 格式导入)、统计聚合与 CSV/JSON 导出、Prometheus metrics。管理台登录使用用户名 + 密码(PBKDF2-HMAC-SHA256 加盐哈希),签发短期会话 token,与业务调用 token 严格分离。配置文件强制 0600 权限并启动时校验。 业务 API 兼容 OpenAI 格式,覆盖 /v1/chat/completions、/v1/completions、/v1/embeddings、/v1/models、/v1/messages(Claude 原生格式),客户端只需改 base_url 即可使用。