16 KiB
计费与资源管理 API
基础URL: http://localhost:8002/api/billing-admin
权限说明: 以下接口需要管理员权限(super_admin、billing_admin、operations_admin)
目录
配额管理
1. 获取用户配额信息
GET /api/billing-admin/quota/user/{user_id}
获取指定用户的配额汇总信息,包括余额、速率限制、活跃预警等。
响应示例:
{
"success": true,
"data": {
"hasQuota": true,
"alertType": null,
"balance": {
"balance": 2450.50,
"creditLimit": 5000.00,
"available": 7450.50,
"dailyAvgCost": 85.30,
"estimatedDays": 87.3
},
"rateLimit": {
"currentRpm": 12,
"rpmLimit": 60,
"allowed": true
},
"activeAlerts": 0,
"alerts": []
}
}
2. 获取渠道配额信息
GET /api/billing-admin/quota/channel/{channel_id}
响应示例:
{
"success": true,
"data": {
"hasQuota": true,
"alertType": null,
"channelCredit": 100000.00,
"monthlyUsage": 15680.50,
"usagePercent": 15.68
}
}
3. 获取配额预警列表
GET /api/billing-admin/quota/alerts
查询参数:
user_id(string, 可选): 用户ID筛选channel_id(string, 可选): 渠道ID筛选
响应示例:
{
"success": true,
"data": {
"alerts": [
{
"id": "alert-uuid-1",
"alertType": "balance_warning",
"thresholdPercent": 20,
"currentValue": 150.00,
"thresholdValue": 200.00,
"status": "active",
"createdAt": "2025-12-26T10:00:00Z"
}
],
"count": 1
}
}
4. 确认配额预警
PUT /api/billing-admin/quota/alerts/{alert_id}/acknowledge
响应示例:
{
"success": true,
"message": "预警已确认"
}
5. 解决配额预警
PUT /api/billing-admin/quota/alerts/{alert_id}/resolve
响应示例:
{
"success": true,
"message": "预警已解决"
}
资源监控
6. 获取平台资源概览
GET /api/billing-admin/resources/overview
获取平台整体资源使用概览(管理员视图)。
响应示例:
{
"success": true,
"data": {
"todayCalls": 1580,
"monthCalls": 45680,
"activeUsersToday": 85,
"activeAgents": 125,
"monthTotalEu": 4568,
"timestamp": "2025-12-26T12:00:00Z"
}
}
7. 获取用户资源使用汇总
GET /api/billing-admin/resources/user/{user_id}
查询参数:
start_date(string, 必需): 开始日期 (ISO 8601)end_date(string, 必需): 结束日期 (ISO 8601)
响应示例:
{
"success": true,
"data": {
"totalCpuSeconds": 12580.5,
"totalMemoryMbSeconds": 458720.0,
"totalNetworkBytes": 156800000,
"totalStorageBytes": 52428800,
"totalApiCalls": 1580,
"startDate": "2025-12-01T00:00:00Z",
"endDate": "2025-12-26T23:59:59Z"
}
}
8. 获取资源使用趋势
GET /api/billing-admin/resources/trends
查询参数:
user_id(string, 必需): 用户IDperiod(string, 可选): 时间范围,可选值:7d,30d,90d(默认:7d)granularity(string, 可选): 粒度,可选值:hourly,daily(默认:daily)
响应示例:
{
"success": true,
"data": {
"trends": [
{
"periodStart": "2025-12-25T00:00:00Z",
"periodEnd": "2025-12-25T23:59:59Z",
"cpuSeconds": 458.5,
"memoryMbSeconds": 16720.0,
"networkBytes": 5680000,
"apiCalls": 58
}
]
}
}
9. 获取Agent资源统计
GET /api/billing-admin/resources/agent/{agent_id}
查询参数:
start_date(string, 必需): 开始日期end_date(string, 必需): 结束日期
响应示例:
{
"success": true,
"data": {
"agentId": "agent-uuid-1",
"totalExecutions": 1580,
"avgExecutionTime": 145.2,
"totalEuConsumed": 158.0,
"successRate": 98.5,
"startDate": "2025-12-01T00:00:00Z",
"endDate": "2025-12-26T23:59:59Z"
}
}
事件管理
10. 获取待处理事件
GET /api/billing-admin/events/pending
获取待处理的计费事件列表。
查询参数:
limit(int, 可选): 返回数量限制 (默认: 100, 最大: 1000)
响应示例:
{
"success": true,
"data": {
"events": [
{
"id": "event-uuid-1",
"eventId": "evt_abc123",
"eventType": "execution.end",
"userId": "user-uuid-1",
"agentId": "agent-uuid-1",
"payload": {
"success": true,
"duration_ms": 1250,
"eu_consumed": 0.13
},
"status": "pending",
"createdAt": "2025-12-26T12:00:00Z"
}
],
"count": 1
}
}
11. 重试失败事件
POST /api/billing-admin/events/retry-failed
查询参数:
max_retries(int, 可选): 最大重试次数 (默认: 3, 最大: 10)
响应示例:
{
"success": true,
"data": {
"retriedCount": 5
},
"message": "已重试 5 个事件"
}
12. 获取事件统计
GET /api/billing-admin/events/stats
查询参数:
start_date(string, 必需): 开始日期end_date(string, 必需): 结束日期
响应示例:
{
"success": true,
"data": {
"startDate": "2025-12-01T00:00:00Z",
"endDate": "2025-12-26T23:59:59Z",
"byStatus": {
"completed": 4520,
"pending": 15,
"failed": 3
},
"byType": {
"execution.end": 4200,
"execution.start": 4200,
"balance.deduct": 138
},
"total": 4538
}
}
追踪管理
13. 获取执行追踪详情
GET /api/billing-admin/traces/execution/{execution_id}
获取单个执行的完整追踪信息。
响应示例:
{
"success": true,
"data": {
"executionId": "exec-uuid-1",
"traceId": "trace-abc123",
"spans": [
{
"spanId": "span-1",
"parentSpanId": null,
"operationName": "agent_execute",
"operationType": "agent_call",
"startedAt": "2025-12-26T12:00:00Z",
"endedAt": "2025-12-26T12:00:01.250Z",
"durationMs": 1250,
"status": "success",
"inputData": {"prompt": "***REDACTED***"},
"outputData": {"result": "..."},
"tokensUsed": 450,
"euConsumed": 0.13
}
],
"totalDurationMs": 1250,
"totalEuConsumed": 0.13,
"spanCount": 1
}
}
14. 查询追踪记录
GET /api/billing-admin/traces
查询参数:
user_id(string, 可选): 用户ID筛选agent_id(string, 可选): Agent ID筛选status(string, 可选): 状态筛选 (running,success,error)start_date(string, 可选): 开始日期end_date(string, 可选): 结束日期page(int, 可选): 页码 (默认: 1)page_size(int, 可选): 每页数量 (默认: 20, 最大: 100)
响应示例:
{
"success": true,
"data": {
"total": 150,
"page": 1,
"pageSize": 20,
"totalPages": 8,
"traces": [
{
"traceId": "trace-abc123",
"executionId": "exec-uuid-1",
"agentId": "agent-uuid-1",
"agentName": "weather-agent",
"userId": "user-uuid-1",
"startedAt": "2025-12-26T12:00:00Z",
"endedAt": "2025-12-26T12:00:01.250Z",
"durationMs": 1250,
"spanCount": 3,
"totalTokens": 450,
"totalEu": 0.13
}
]
}
}
15. 获取追踪统计
GET /api/billing-admin/traces/stats
查询参数:
user_id(string, 可选): 用户ID筛选start_date(string, 必需): 开始日期end_date(string, 必需): 结束日期
响应示例:
{
"success": true,
"data": {
"startDate": "2025-12-01T00:00:00Z",
"endDate": "2025-12-26T23:59:59Z",
"totalTraces": 4200,
"totalSpans": 12600,
"totalDurationMs": 5250000,
"avgDurationMs": 1250.0,
"totalTokens": 1890000,
"totalEu": 546.0,
"byStatus": {
"success": 4150,
"error": 50
},
"byOperationType": [
{"operationType": "agent_call", "count": 4200, "avgDurationMs": 850.0},
{"operationType": "tool_call", "count": 6300, "avgDurationMs": 120.5},
{"operationType": "llm_call", "count": 2100, "avgDurationMs": 980.0}
]
}
}
审计日志
16. 查询审计日志
GET /api/billing-admin/audit/logs
查询参数:
user_id(string, 可选): 用户ID筛选action(string, 可选): 操作类型筛选resource_type(string, 可选): 资源类型筛选success(bool, 可选): 成功/失败筛选start_date(string, 可选): 开始日期end_date(string, 可选): 结束日期page(int, 可选): 页码 (默认: 1)page_size(int, 可选): 每页数量 (默认: 20, 最大: 100)
可用的action类型:
| 操作类型 | 说明 |
|---|---|
auth.login |
用户登录 |
auth.logout |
用户登出 |
auth.password_change |
密码修改 |
user.create |
创建用户 |
user.update |
更新用户 |
user.delete |
删除用户 |
channel.create |
创建渠道 |
channel.update |
更新渠道 |
channel.delete |
删除渠道 |
agent.create |
创建Agent |
agent.delete |
删除Agent |
application.approve |
审批通过 |
application.reject |
审批拒绝 |
billing.charge |
计费扣款 |
provider.pricing_update |
更新模型定价 |
响应示例:
{
"success": true,
"data": {
"total": 500,
"page": 1,
"pageSize": 20,
"totalPages": 25,
"logs": [
{
"id": "log-uuid-1",
"action": "channel.create",
"actionName": "创建渠道",
"resourceType": "channel",
"resourceId": "channel-uuid-1",
"userId": "admin-uuid-1",
"userName": "超级管理员",
"success": true,
"details": {"channelName": "合作渠道A"},
"errorMessage": null,
"ipAddress": "192.168.1.100",
"createdAt": "2025-12-26T10:00:00Z"
}
]
}
}
17. 获取审计日志汇总
GET /api/billing-admin/audit/summary
查询参数:
start_date(string, 必需): 开始日期end_date(string, 必需): 结束日期
响应示例:
{
"success": true,
"data": {
"startDate": "2025-12-01T00:00:00Z",
"endDate": "2025-12-26T23:59:59Z",
"total": 1580,
"successTotal": 1550,
"failTotal": 30,
"byAction": [
{"action": "auth.login", "actionName": "用户登录", "count": 850, "successCount": 820, "failCount": 30},
{"action": "agent.create", "actionName": "创建Agent", "count": 45, "successCount": 45, "failCount": 0}
],
"byResourceType": [
{"resourceType": "user", "count": 520},
{"resourceType": "agent", "count": 380},
{"resourceType": "channel", "count": 150}
]
}
}
18. 获取用户活动历史
GET /api/billing-admin/audit/user/{user_id}/activity
查询参数:
days(int, 可选): 天数 (默认: 30, 最大: 90)
响应示例:
{
"success": true,
"data": {
"activity": [
{
"action": "auth.login",
"actionName": "用户登录",
"resourceType": "user",
"resourceId": "user-uuid-1",
"success": true,
"ipAddress": "192.168.1.100",
"createdAt": "2025-12-26T08:00:00Z"
}
]
}
}
供应商健康检查
19. 获取所有供应商健康状态
GET /api/billing-admin/providers/health
响应示例:
{
"success": true,
"data": {
"providers": [
{
"providerId": "provider-uuid-1",
"providerName": "OpenAI",
"provider": "openai",
"status": "active",
"isHealthy": true,
"lastResponseTimeMs": 45,
"lastCheckAt": "2025-12-26T12:00:00Z",
"uptime24h": 99.9
}
]
}
}
20. 获取供应商健康详情
GET /api/billing-admin/providers/{provider_id}/health
查询参数:
hours(int, 可选): 统计时间范围 (默认: 24, 最大: 168)
响应示例:
{
"success": true,
"data": {
"providerId": "provider-uuid-1",
"providerName": "OpenAI",
"currentStatus": "active",
"period": "24h",
"totalChecks": 1440,
"healthyCount": 1438,
"unhealthyCount": 2,
"uptimePercent": 99.86,
"avgResponseTimeMs": 42.5,
"maxResponseTimeMs": 180,
"minResponseTimeMs": 25,
"recentChecks": [
{
"isHealthy": true,
"responseTimeMs": 45,
"statusCode": 200,
"errorMessage": null,
"createdAt": "2025-12-26T12:00:00Z"
}
]
}
}
21. 执行供应商健康检查
POST /api/billing-admin/providers/health-check
立即执行所有供应商的健康检查。
响应示例:
{
"success": true,
"data": {
"timestamp": "2025-12-26T12:00:00Z",
"totalProviders": 3,
"healthyCount": 3,
"unhealthyCount": 0,
"checks": [
{
"providerId": "provider-uuid-1",
"providerName": "OpenAI",
"isHealthy": true,
"responseTimeMs": 45,
"statusCode": 200,
"errorMessage": null
}
]
}
}
模型定价管理
22. 获取模型定价列表
GET /api/billing-admin/pricing/models
查询参数:
provider_id(string, 可选): 供应商ID筛选model_name(string, 可选): 模型名称模糊搜索
响应示例:
{
"success": true,
"data": {
"pricing": [
{
"id": "pricing-uuid-1",
"providerId": "provider-uuid-1",
"providerName": "OpenAI",
"modelName": "gpt-4o",
"inputPricePer1k": 0.005,
"outputPricePer1k": 0.015,
"euPer1kTokens": 0.1,
"maxContextLength": 128000,
"maxOutputTokens": 4096,
"isActive": true,
"effectiveFrom": "2025-12-01T00:00:00Z"
}
]
}
}
23. 创建/更新模型定价
POST /api/billing-admin/pricing/models
请求体:
{
"providerId": "provider-uuid-1",
"modelName": "gpt-4o-mini",
"inputPricePer1k": 0.00015,
"outputPricePer1k": 0.0006,
"euPer1kTokens": 0.05,
"maxContextLength": 128000,
"maxOutputTokens": 16384
}
请求参数说明:
providerId(string, 必需): 供应商IDmodelName(string, 必需): 模型名称inputPricePer1k(float, 必需): 输入价格(每1K tokens),单位USDoutputPricePer1k(float, 必需): 输出价格(每1K tokens),单位USDeuPer1kTokens(float, 可选): EU转换率(默认: 0.1)maxContextLength(int, 可选): 最大上下文长度(默认: 4096)maxOutputTokens(int, 可选): 最大输出tokens(默认: 2048)
响应示例:
{
"success": true,
"data": {
"id": "pricing-uuid-2",
"modelName": "gpt-4o-mini"
},
"message": "模型定价已更新"
}
24. 计算模型调用成本
POST /api/billing-admin/pricing/calculate
计算指定模型调用的成本预估。
查询参数:
model_name(string, 必需): 模型名称input_tokens(int, 必需): 输入tokens数量output_tokens(int, 必需): 输出tokens数量
请求示例:
curl -X POST "http://localhost:8002/api/billing-admin/pricing/calculate?model_name=gpt-4o&input_tokens=1000&output_tokens=500" \
-H "Authorization: Bearer $TOKEN"
响应示例:
{
"success": true,
"data": {
"modelName": "gpt-4o",
"inputTokens": 1000,
"outputTokens": 500,
"inputCost": 0.005,
"outputCost": 0.0075,
"totalCost": 0.0125,
"euConsumed": 0.15
}
}