{"id":47922149,"url":"https://github.com/idemerge/llm-api-radar","last_synced_at":"2026-04-13T08:01:30.145Z","repository":{"id":349078091,"uuid":"1200969304","full_name":"idemerge/llm-api-radar","owner":"idemerge","description":"Self-hosted LLM benchmarking \u0026 monitoring platform. Measure latency, TTFT, throughput across OpenAI, Anthropic, Gemini \u0026 more. | 自托管 LLM 性能测试与监控平台，一键部署，支持多家服务商对比。","archived":false,"fork":false,"pushed_at":"2026-04-07T16:34:56.000Z","size":15945,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-08T10:02:38.295Z","etag":null,"topics":["anthropic","benchmark","gemini","llm-api","load-testing","monitoring","openai","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/idemerge.png","metadata":{"files":{"readme":"README-cn.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-04T03:32:52.000Z","updated_at":"2026-04-07T16:34:59.000Z","dependencies_parsed_at":"2026-04-06T08:01:48.930Z","dependency_job_id":"c6ca7c69-e4a4-49d3-a880-31bd7b3a05a9","html_url":"https://github.com/idemerge/llm-api-radar","commit_stats":null,"previous_names":["idemerge/llm-api-radar"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/idemerge/llm-api-radar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idemerge%2Fllm-api-radar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idemerge%2Fllm-api-radar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idemerge%2Fllm-api-radar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idemerge%2Fllm-api-radar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/idemerge","download_url":"https://codeload.github.com/idemerge/llm-api-radar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/idemerge%2Fllm-api-radar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31641492,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T07:40:12.752Z","status":"ssl_error","status_checked_at":"2026-04-10T07:40:11.664Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anthropic","benchmark","gemini","llm-api","load-testing","monitoring","openai","self-hosted"],"created_at":"2026-04-04T06:16:10.095Z","updated_at":"2026-04-10T12:01:12.400Z","avatar_url":"https://github.com/idemerge.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LLM API Radar\n\n[English](README.md) | **中文**\n\n[![GitHub Stars](https://img.shields.io/github/stars/idemerge/llm-api-radar?style=flat-square)](https://github.com/idemerge/llm-api-radar/stargazers)\n[![GitHub Release](https://img.shields.io/github/v/release/idemerge/llm-api-radar?style=flat-square)](https://github.com/idemerge/llm-api-radar/releases)\n[![Docker Pulls](https://img.shields.io/docker/pulls/idemerge/llm-api-radar?style=flat-square)](https://hub.docker.com/r/idemerge/llm-api-radar)\n[![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)\n\n**自托管的 LLM 性能测试与监控平台。**\n\n在一个平台上对比、监控多家 LLM API 服务商 — 测量延迟、首 Token 时间（TTFT）、吞吐量和可靠性，支持 OpenAI、Anthropic、Google Gemini 及任何 OpenAI 兼容接口。一条命令即可通过 Docker 或脚本完成部署。\n\n---\n\n## 为什么选择 LLM API Radar？\n\n在生产环境中使用 LLM 意味着要同时管理多家服务商，它们各自有着不同的延迟特征、速率限制和稳定性表现。公开的基准测试并不能反映**你的**网络环境、**你的**提示词、或**你的**流量模式。LLM API Radar 是一个自托管工具，让你可以：\n\n- **基准测试** — 使用相同提示词对比各服务商，支持可配置并发数（1–50）和预热运行\n- **健康监控** — 持续检查服务商健康状态，四级评估（健康 / 较慢 / 很慢 / 宕机），24 小时历史记录\n- **Playground** — 交互式测试任意模型，支持流式输出、多模态，完整的 Token 级指标\n- **历史追踪** — 持久化存储所有测试记录，支持并排对比和 CSV/JSON 导出\n- **一键部署** — 通过 Docker Compose 或 Shell 脚本一条命令启动，单个 `.env` 文件管理所有配置\n\n## 演示\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/demo.gif\" alt=\"LLM API Radar 演示\" width=\"960\" /\u003e\n\u003c/p\u003e\n\n## 截图\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cb\u003e工作流 — 配置与运行\u003c/b\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cb\u003e监控 — 健康检查\u003c/b\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/screenshot-workflow.png\" width=\"500\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/screenshot-monitor.png\" width=\"500\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\"\u003e\u003cb\u003ePlayground — 模型测试\u003c/b\u003e\u003c/td\u003e\n    \u003ctd align=\"center\"\u003e\u003cb\u003e历史 — 过往记录\u003c/b\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/screenshot-playground.png\" width=\"500\" /\u003e\u003c/td\u003e\n    \u003ctd\u003e\u003cimg src=\"docs/screenshots/screenshot-history.png\" width=\"500\" /\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 功能特性\n\n### 多服务商支持\n\n- **OpenAI** — GPT-4o、GPT-4o-mini、o1、o3 等\n- **Anthropic** — Claude 4 Sonnet、Opus、Haiku\n- **Google Gemini** — 2.5 Pro、Flash\n- **OpenAI 兼容接口** — DeepSeek、Mistral、本地模型（Ollama、vLLM）及其他兼容 OpenAI 协议的端点\n\n### 全面的性能指标\n\n| 指标 | 说明 |\n| --- | --- |\n| 响应时间 | 平均 / P50 / P95 / P99 延迟 |\n| Token 速度 | 每秒输入和输出 Token 数 |\n| TTFT | 首 Token 时间（流式输出） |\n| 吞吐量 | 并发负载下的每秒请求数 |\n| 成功率 | 完成请求数 vs 失败请求数 |\n| 成本估算 | 按服务商的费用明细 |\n\n### 实时可视化\n\n- 基准测试执行期间的实时流式指标\n- 按服务商分类的面积图（响应时间、Token 速度）\n- 多维雷达对比图\n- 全局统一的服务商色彩标识\n\n### 工作流引擎\n\n- 多任务工作流，顺序执行\n- 每个任务独立配置提示词、并发数和迭代次数\n- 快捷预设 — 512 / 4K / 16K Token，1–10 并发\n- 预热运行，消除冷启动偏差\n\n### Playground\n\n- 向指定服务商/模型发送提示词并查看响应\n- 支持流式和非流式模式\n- 多模态支持 — 通过图片 URL 或上传文件测试多模态模型\n- 显示 Token 计数、TTFT、TPS 和响应时间\n\n### 健康监控\n\n- 对选定的服务商/模型组合进行周期性健康检查\n- 每次探测的丰富指标：TTFT、输出 Token 数、响应验证\n- 可配置的健康阈值（延迟、TTFT、最小输出 Token 数）\n- 每个模型独立设置检查间隔（5 分钟 – 6 小时），支持全局默认值\n- 服务商并行、模型串行的调度策略\n- 24 小时历史条形图，按颜色标识健康状态\n- 自动刷新仪表盘，包含汇总统计\n\n### 认证\n\n- 基于 JWT 的登录，凭证可配置\n- 受保护的 API 路由和前端路由\n- 会话过期自动跳转登录页\n\n### 历史与导出\n\n- 持久化的运行历史，包含完整结果详情\n- 历史记录并排对比\n- 导出为 JSON 或 CSV\n\n### 部署\n\n- 一键构建脚本（`start.sh`）\n- Docker Compose，SQLite 数据卷持久化\n- 单个 `.env` 文件管理所有配置\n\n## 快速开始\n\n### 方式一：一键脚本（生产环境）\n\n```bash\ngit clone https://github.com/idemerge/llm-api-radar.git\ncd llm-benchmark\ncp .env.example .env    # 编辑 .env 设置凭证\nchmod +x start.sh \u0026\u0026 ./start.sh\n```\n\n### 方式二：Docker Compose（生产环境）\n\n```bash\ngit clone https://github.com/idemerge/llm-api-radar.git\ncd llm-benchmark\ncp .env.example .env    # 编辑 .env 设置凭证\ndocker compose up -d\n```\n\n### 方式三：开发环境\n\n```bash\ngit clone https://github.com/idemerge/llm-api-radar.git\ncd llm-benchmark\ncp .env.example .env\n\n# 后端\ncd backend \u0026\u0026 npm install \u0026\u0026 npm run dev \u0026\n\n# 前端\ncd ../frontend \u0026\u0026 npm install \u0026\u0026 npm run dev\n```\n\n打开 `http://localhost:5173`（开发）或 `http://localhost:3001`（生产）访问控制台。\n\n### 配置项\n\n所有配置通过项目根目录下的 `.env` 文件管理：\n\n| 变量 | 默认值 | 说明 |\n| --- | --- | --- |\n| `PORT` | `3001` | 服务端口 |\n| `AUTH_USERNAME` | `admin` | 登录用户名 |\n| `AUTH_PASSWORD` | `changeme` | 登录密码 |\n| `JWT_SECRET` | `your-secret-key-here` | JWT 签名密钥（部署前务必修改） |\n| `JWT_EXPIRES_IN` | `24h` | JWT 令牌过期时间 |\n\n### 接入真实服务商\n\n1. 使用凭证登录\n2. 进入 **Settings（设置）**\n3. 点击 **Add Provider（添加服务商）**\n4. 选择协议格式（OpenAI / Anthropic / Gemini / OpenAI 兼容）\n5. 输入 API 端点和密钥\n6. 点击 **Test Connection（测试连接）** 验证\n7. 开始测试！\n\n## 架构\n\n```\n┌─────────────────────────────────────────────────────────┐\n│                        浏览器                            │\n│  React 19 · Ant Design 5 · Recharts · Tailwind CSS v4  │\n└────────────────────────┬────────────────────────────────┘\n                         │ REST / SSE\n┌────────────────────────▼────────────────────────────────┐\n│                   Express 服务器                         │\n│  ┌──────────┐  ┌───────────┐  ┌──────────────────────┐  │\n│  │ 认证     │  │ REST API  │  │ SSE 流               │  │\n│  │ (JWT)    │  │ /api/*    │  │ /api/workflows/:id   │  │\n│  └──────────┘  └─────┬─────┘  └──────────┬───────────┘  │\n│                      │                   │              │\n│  ┌───────────────────▼───────────────────▼───────────┐  │\n│  │                 服务层                             │  │\n│  │  基准引擎 · 工作流运行器 · Playground              │  │\n│  │  监控调度器 (node-cron)                           │  │\n│  └───────────────────┬───────────────────────────────┘  │\n│                      │                                  │\n│  ┌───────────────────▼───────────────────────────────┐  │\n│  │              服务商适配器                           │  │\n│  │  OpenAI · Anthropic · Gemini · OpenAI 兼容        │  │\n│  └───────────────────┬───────────────────────────────┘  │\n└──────────────────────┼──────────────────────────────────┘\n                       │\n          ┌────────────▼────────────┐\n          │   SQLite (better-sqlite3) │\n          │   单文件数据库            │\n          └─────────────────────────┘\n```\n\n整个技术栈以**单个 Node.js 进程**运行 — 无需 Redis、无需 Postgres、无外部依赖。前端由 Vite 构建，作为静态文件由 Express 提供服务。SQLite 将所有基准测试、工作流、监控历史和服务商配置存储在一个文件中，备份和迁移极其简单。\n\n| 层 | 技术栈 |\n| --- | --- |\n| 前端 | React 19、Vite 8、TypeScript、Tailwind CSS v4 |\n| UI 组件 | Ant Design 5（暗色主题）、Recharts、Framer Motion |\n| 后端 | Node.js、Express 4、TypeScript |\n| 认证 | JWT（jsonwebtoken + bcryptjs） |\n| 存储 | SQLite（better-sqlite3，原生 SQL，无 ORM） |\n| 调度 | node-cron |\n| 部署 | Docker（多阶段 Alpine 构建）/ Shell 脚本 |\n\n## Star 趋势\n\n[![Star History Chart](https://api.star-history.com/svg?repos=idemerge/llm-api-radar\u0026type=Date)](https://star-history.com/#idemerge/llm-api-radar\u0026Date)\n\n## 参与贡献\n\n请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 了解开发环境搭建和贡献指南。\n\n## 许可证\n\n[MIT](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidemerge%2Fllm-api-radar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fidemerge%2Fllm-api-radar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fidemerge%2Fllm-api-radar/lists"}