From 53e0577e1933c69bbdc0a8a599956c67d30b4921 Mon Sep 17 00:00:00 2001 From: leslie Date: Fri, 25 Jul 2025 21:48:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0claude=E8=B4=A6=E5=8F=B7?= =?UTF-8?q?=E7=BB=B4=E5=BA=A6=E8=AE=A1=E7=AE=97token=E8=B4=B9=E7=94=A8?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/routes/openaiClaudeRoutes.js | 6 ++++-- src/services/apiKeyService.js | 15 ++++++++++----- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/routes/openaiClaudeRoutes.js b/src/routes/openaiClaudeRoutes.js index b72c1257..247fc127 100644 --- a/src/routes/openaiClaudeRoutes.js +++ b/src/routes/openaiClaudeRoutes.js @@ -258,7 +258,8 @@ async function handleChatCompletion(req, res, apiKeyData) { outputTokens, cacheCreateTokens, cacheReadTokens, - model + model, + accountId ).catch(error => { logger.error('❌ Failed to record usage:', error); }); @@ -327,7 +328,8 @@ async function handleChatCompletion(req, res, apiKeyData) { usage.output_tokens || 0, usage.cache_creation_input_tokens || 0, usage.cache_read_input_tokens || 0, - claudeRequest.model + claudeRequest.model, + accountId ).catch(error => { logger.error('❌ Failed to record usage:', error); }); diff --git a/src/services/apiKeyService.js b/src/services/apiKeyService.js index 7c397904..e53976c2 100644 --- a/src/services/apiKeyService.js +++ b/src/services/apiKeyService.js @@ -249,11 +249,16 @@ class ApiKeyService { keyData.lastUsedAt = new Date().toISOString(); await redis.setApiKey(keyId, keyData); - // 记录账户级别的使用统计 - const claudeAccountId = accountId || keyData.claudeAccountId; - if (claudeAccountId) { - await redis.incrementAccountUsage(claudeAccountId, totalTokens, inputTokens, outputTokens, cacheCreateTokens, cacheReadTokens, model); - logger.database(`📊 Recorded account usage: ${claudeAccountId} - ${totalTokens} tokens`); + // 记录账户级别的使用统计(只统计实际处理请求的账户) + if (accountId) { + await redis.incrementAccountUsage(accountId, totalTokens, inputTokens, outputTokens, cacheCreateTokens, cacheReadTokens, model); + logger.database(`📊 Recorded account usage: ${accountId} - ${totalTokens} tokens (API Key: ${keyId})`); + } else if (keyData.claudeAccountId) { + // 如果没有传入accountId,但API Key绑定了专属账户,也记录统计 + await redis.incrementAccountUsage(keyData.claudeAccountId, totalTokens, inputTokens, outputTokens, cacheCreateTokens, cacheReadTokens, model); + logger.database(`📊 Recorded account usage (from API Key binding): ${keyData.claudeAccountId} - ${totalTokens} tokens (API Key: ${keyId})`); + } else { + logger.debug(`⚠️ No accountId provided and API Key not bound to account, skipping account-level statistics`); } }