一个轻量级的 AI API Token 使用监控平台,支持监控 OpenAI、Anthropic、Azure 等多个平台的 Token 消耗情况。
- 多平台支持 - 支持 OpenAI、Anthropic、Azure、Gemini 等主流 AI 平台
- 实时监控 - 实时记录和统计 Token 使用量
- 成本计算 - 自动计算每次调用的预估费用
- 数据分析 - 提供详细的使用趋势和分布分析
- 配额预警 - 达到阈值时自动提醒
- 安全加密 - API Key 加密存储
- 代理模式 - 支持作为 API 代理自动记录使用量
- Node.js + Express + TypeScript
- Prisma ORM
- PostgreSQL
- JWT 认证
- React 18 + TypeScript
- Ant Design UI
- Recharts 图表
- React Query
- Zustand 状态管理
# 克隆项目
git clone <your-repo>
cd token-monitor
# 使用 Docker Compose 启动
docker-compose up -d
# 访问应用
open http://localhost:3000- Node.js 18+
- PostgreSQL 14+
- npm 或 yarn
cd backend
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
# 编辑 .env 文件,填入数据库连接等信息
# 生成 Prisma Client
npx prisma generate
# 运行数据库迁移
npx prisma migrate dev
# 启动开发服务器
npm run dev后端服务运行在 http://localhost:3001
cd frontend
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
# 启动开发服务器
npm run dev前端应用运行在 http://localhost:5173
# 数据库连接
DATABASE_URL="postgresql://postgres:password@localhost:5432/token_monitor?schema=public"
# 服务器配置
PORT=3001
NODE_ENV=development
# JWT 密钥
JWT_SECRET="your-super-secret-jwt-key-change-this"
JWT_EXPIRES_IN="7d"
# 加密密钥(32字节的十六进制字符串)
ENCRYPTION_KEY="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
# CORS 配置
CORS_ORIGIN="http://localhost:5173"VITE_API_BASE_URL=http://localhost:3001/api- 访问 "平台管理" 页面
- 点击 "添加平台" 按钮
- 填写平台信息:
- 平台名称(如:OpenAI GPT-4)
- 提供商(openai/anthropic/azure/gemini)
- API Key
- Base URL(可选)
- 定价配置(输入/输出价格 per 1K tokens)
- 月度配额(可选)
- 预警阈值
// 通过监控平台的代理接口调用 API
const response = await fetch('http://localhost:3001/api/proxy/{platformId}/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
messages: [
{ role: 'user', content: 'Hello!' }
],
model: 'gpt-4',
}),
});
// 使用量会自动记录到数据库// 先调用你的 AI API
const response = await openai.chat.completions.create({
model: 'gpt-4',
messages: [{ role: 'user', content: 'Hello!' }],
});
// 然后上报使用数据
await fetch('http://localhost:3001/api/usage/report', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
platformId: 'your-platform-id',
model: response.model,
promptTokens: response.usage.prompt_tokens,
completionTokens: response.usage.completion_tokens,
totalTokens: response.usage.total_tokens,
}),
});- 仪表板 - 查看今日和本月的总体使用情况
- 使用记录 - 查看详细的每次调用记录
- 数据分析 - 查看趋势图表和分布分析
GET /api/platforms # 获取平台列表
POST /api/platforms # 创建平台
GET /api/platforms/:id # 获取平台详情
PUT /api/platforms/:id # 更新平台
DELETE /api/platforms/:id # 删除平台
GET /api/usage/logs # 获取使用记录(支持筛选)
GET /api/usage/stats # 获取统计数据
POST /api/usage/report # 手动上报使用量
POST /api/proxy/:platformId/chat # OpenAI 兼容的聊天代理
npm run dev # 启动开发服务器
npm run build # 编译 TypeScript
npm start # 启动生产服务器
npx prisma studio # 打开数据库管理界面
npx prisma migrate dev --name xxx # 创建新的数据库迁移npm run dev # 启动开发服务器
npm run build # 构建生产版本
npm run preview # 预览生产构建主要表结构:
- users - 用户表
- platforms - 平台配置表
- usage_logs - Token 使用记录表
详细 Schema 见 backend/prisma/schema.prisma
- API Key 加密:所有 API Key 使用 AES-256-CBC 加密存储
- 环境变量:敏感信息通过环境变量配置,不要提交到版本控制
- HTTPS:生产环境务必使用 HTTPS
- JWT 密钥:使用强随机密钥并定期更换
- 加密密钥:生成方式:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
- 为
usage_logs表添加适当的索引 - 定期清理或归档历史数据
- 使用 Redis 缓存热点数据
- 考虑实现数据分页和懒加载
# 更新数据库
cd backend
npx prisma migrate deploy
# 重启服务
docker-compose restart backend欢迎提交 Issue 和 Pull Request!
MIT License
如有问题或建议,请提交 Issue 或联系维护者。
- 用户认证系统
- 多用户/团队支持
- 邮件/Webhook 告警
- 更多图表和分析功能
- 导出报表功能
- API 速率限制
- 成本预算管理
- 移动端适配