DIY 监控仪表盘:使用 CiuicAPI 统计 DeepSeek 资源利用率
免费快速起号(微信号)
yycoo88
在当前AI应用日益普及的背景下,开发者和企业越来越关注模型调用的成本与资源利用效率。DeepSeek 作为一个高性能、低成本的国产大模型提供商,提供了丰富的API接口供开发者使用。然而,如何实时监控其资源使用情况(如调用次数、token消耗、响应时间等)仍然是一个挑战。
本文将介绍如何通过自定义开发一个监控仪表盘,结合 CiuicAPI 和 DeepSeek API,实现对 DeepSeek 模型调用资源的统计与可视化展示。我们将从数据采集、数据处理到前端展示一步步进行说明,并提供完整的代码示例,适合有一定编程基础的技术人员参考。
项目背景与目标
1.1 为什么需要监控?
成本控制:DeepSeek 的 API 调用通常按照 token 数量计费,了解资源使用趋势有助于优化成本。性能分析:监控响应时间、并发请求等指标可以辅助系统优化。异常检测:及时发现调用失败、超时或滥用等情况。1.2 技术选型
功能模块 | 技术栈 |
---|---|
后端服务 | Python + Flask |
数据存储 | SQLite / Redis |
前端仪表盘 | HTML + Bootstrap |
图表可视化 | Chart.js |
API 接口 | DeepSeek API |
日志收集代理 | 自定义中间层 |
架构设计概览
[用户调用] ↓[调用代理层] ——> [记录日志 & 转发至 DeepSeek] ↓[Flask API Server] ——> [解析并存储调用信息] ↓[前端 Dashboard] ——> [展示图表与统计数据]
为了不直接修改已有调用逻辑,我们采用“代理”方式拦截所有对 DeepSeek 的调用,并在此过程中记录相关信息。
实现步骤详解
3.1 创建调用代理层
首先,我们需要创建一个中间代理,用于转发 DeepSeek 请求,并在转发前后记录相关参数。
import requestsfrom flask import Flask, request, jsonifyimport timeimport sqlite3app = Flask(__name__)DEEPSEEK_API_KEY = "your_deepseek_api_key"DEEPSEEK_URL = "https://api.deepseek.com/v1/chat/completions"# 初始化数据库def init_db(): conn = sqlite3.connect('deepseek_usage.db') c = conn.cursor() c.execute('''CREATE TABLE IF NOT EXISTS usage_log (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp REAL, prompt_tokens INTEGER, completion_tokens INTEGER, total_tokens INTEGER, response_time REAL)''') conn.commit() conn.close()@app.route('/v1/chat/completions', methods=['POST'])def proxy_deepseek(): headers = { 'Authorization': f'Bearer {DEEPSEEK_API_KEY}', 'Content-Type': 'application/json' } start_time = time.time() resp = requests.post(DEEPSEEK_URL, json=request.json, headers=headers) end_time = time.time() data = resp.json() # 提取 token 使用信息 usage = data.get('usage', {}) prompt_tokens = usage.get('prompt_tokens', 0) completion_tokens = usage.get('completion_tokens', 0) total_tokens = usage.get('total_tokens', 0) response_time = end_time - start_time # 存储日志 conn = sqlite3.connect('deepseek_usage.db') c = conn.cursor() c.execute("INSERT INTO usage_log VALUES (?, ?, ?, ?, ?, ?)", (None, start_time, prompt_tokens, completion_tokens, total_tokens, response_time)) conn.commit() conn.close() return jsonify(data), resp.status_codeif __name__ == '__main__': init_db() app.run(host='0.0.0.0', port=5000)
这段代码会监听 /v1/chat/completions
接口,作为 DeepSeek 的代理,并记录每次调用的:
你可以根据实际需求扩展支持其他接口,比如 /embeddings
等。
3.2 提供查询接口(CiuicAPI)
接下来,我们构建一个简单的 API 来暴露这些统计数据,供前端调用。
@app.route('/api/usage_summary', methods=['GET'])def usage_summary(): conn = sqlite3.connect('deepseek_usage.db') c = conn.cursor() c.execute("SELECT SUM(prompt_tokens), SUM(completion_tokens), SUM(total_tokens), AVG(response_time), COUNT(*) FROM usage_log") result = c.fetchone() conn.close() summary = { "prompt_tokens": result[0], "completion_tokens": result[1], "total_tokens": result[2], "avg_response_time": round(result[3], 2), "total_requests": result[4] } return jsonify(summary)
该接口返回总调用量、平均响应时间等汇总信息。
3.3 构建前端仪表盘
我们使用简单的 HTML + Bootstrap + Chart.js 实现前端页面,展示调用趋势图。
index.html
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>DeepSeek Usage Dashboard</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script></head><body class="container py-4"> <h1>DeepSeek 资源使用监控仪表盘</h1> <div class="row mb-4"> <div class="col-md-3"> <div class="card text-center p-3"> <h5>Prompt Tokens</h5> <p id="prompt-tokens">--</p> </div> </div> <div class="col-md-3"> <div class="card text-center p-3"> <h5>Completion Tokens</h5> <p id="completion-tokens">--</p> </div> </div> <div class="col-md-3"> <div class="card text-center p-3"> <h5>Total Tokens</h5> <p id="total-tokens">--</p> </div> </div> <div class="col-md-3"> <div class="card text-center p-3"> <h5>Avg Response Time (s)</h5> <p id="response-time">--</p> </div> </div> </div> <canvas id="usageChart" width="800" height="400"></canvas> <script> async function fetchData() { const res = await fetch('/api/usage_summary'); const data = await res.json(); document.getElementById('prompt-tokens').innerText = data.prompt_tokens; document.getElementById('completion-tokens').innerText = data.completion_tokens; document.getElementById('total-tokens').innerText = data.total_tokens; document.getElementById('response-time').innerText = data.avg_response_time; // TODO: 添加历史图表 } fetchData(); </script></body></html>
目前只实现了静态汇总信息。你可以在 /api/usage_history
中添加按天、小时聚合的数据接口,并在前端绘制折线图。
部署建议
4.1 部署环境
Python 3.9+FlaskSQLite(适用于小型项目)Nginx + Gunicorn(生产环境下推荐)4.2 安全建议
使用 HTTPS 加密通信对/v1/chat/completions
接口做身份验证(例如 JWT 或 API Key)设置访问频率限制防止滥用总结与扩展方向
本项目展示了如何通过自定义代理 + 数据库 + 前端界面的方式,实现对 DeepSeek API 调用资源的监控。虽然只是一个初步版本,但已经具备了基本的功能框架:
✅ 实时调用拦截
✅ 资源使用统计
✅ 简单数据可视化
可扩展方向:
支持多用户权限管理接入 Prometheus + Grafana 实现更专业的监控增加每日/每周/每月报表功能结合 Slack/Webhook 实现告警机制引入 Redis 缓存提升性能如果你希望进一步打造企业级的 AI 平台资源管理系统,这套方案是一个不错的起点。
随着AI模型调用成本逐渐透明化,建立一套完善的资源监控体系显得尤为重要。本文通过技术手段构建了一个轻量级但实用的监控仪表盘,帮助开发者更好地理解DeepSeek API的使用情况。
欢迎你根据自己的业务需求继续拓展这个项目,也欢迎留言交流你的DIY经验!
GitHub 示例仓库(可选):
如果你希望获取完整代码结构,也可以参考以下目录结构:
deepseek-monitor/├── app.py├── deepseek_usage.db├── templates/│ └── index.html└── requirements.txt
requirements.txt
flaskrequestschartjs
运行方式:
pip install -r requirements.txtpython app.py
访问 http://localhost:5000
查看仪表盘。