feat: 聊天会话底部显示token消耗

This commit is contained in:
digua
2025-12-24 00:49:11 +08:00
parent f84eeb9b38
commit dc71592980
11 changed files with 171 additions and 25 deletions
+1 -1
View File
@@ -20,7 +20,7 @@
- **严禁**用于窃取、监控或分析未经授权的他人隐私。
- **严禁**将分析结果用于骚扰、诈骗、人肉搜索或任何侵犯他人权益的行为。
- **严禁**用于规避安全措施或网络渗透测试。
- **禁止商用**我们严禁任何个人或机构将本软件用于任何形式的商业盈利行为(如打包销售、提供有偿代分析服务等),因此产生的纠纷与损失由用户自行承担。
- **禁止商用**:严禁任何个人或机构将本软件用于任何形式的商业盈利行为(如打包销售、提供有偿代分析服务等),因此产生的纠纷与损失由用户自行承担。
## 4. 风险警告
+12 -1
View File
@@ -27,6 +27,7 @@ const {
currentConversationId,
currentToolStatus,
toolsUsedInCurrentRound,
sessionTokenUsage,
sendMessage,
loadConversation,
startNewConversation,
@@ -514,8 +515,18 @@ watch(
</template>
</UPopover>
<!-- 右侧:配置状态指示 -->
<!-- 右侧:Token 使用量 + 配置状态指示 -->
<div class="flex items-center gap-3">
<!-- Token 使用量 -->
<div
v-if="sessionTokenUsage.totalTokens > 0"
class="flex items-center gap-1.5 text-xs text-gray-400"
title="本次会话累计 Token 使用量"
>
<UIcon name="i-heroicons-chart-bar-square" class="h-3.5 w-3.5" />
<span>{{ sessionTokenUsage.totalTokens.toLocaleString() }} tokens</span>
</div>
<div
v-if="!isCheckingConfig"
class="flex items-center gap-1.5 text-xs transition-colors"
+24 -2
View File
@@ -67,6 +67,13 @@ export interface ToolStatus {
result?: unknown
}
// Token 使用量类型
export interface TokenUsage {
promptTokens: number
completionTokens: number
totalTokens: number
}
// 工具名称映射(英文 → 中文)
const TOOL_DISPLAY_NAMES: Record<string, string> = {
search_messages: '搜索聊天记录',
@@ -105,6 +112,9 @@ export function useAIChat(
const currentToolStatus = ref<ToolStatus | null>(null)
const toolsUsedInCurrentRound = ref<string[]>([])
// Token 使用量(当前会话累计)
const sessionTokenUsage = ref<TokenUsage>({ promptTokens: 0, completionTokens: 0, totalTokens: 0 })
// 中止控制
let isAborted = false
// 当前请求 ID,用于区分不同请求的响应
@@ -339,9 +349,18 @@ export function useAIChat(
break
case 'done':
// 完成
console.log('[AI] Agent 完成')
// 完成 - 更新 Token 使用量
console.log('[AI] Agent 完成', chunk.usage)
currentToolStatus.value = null
// 更新会话累计 Token(流式响应在最后一个 chunk 返回 usage
if (chunk.usage) {
sessionTokenUsage.value = {
promptTokens: sessionTokenUsage.value.promptTokens + chunk.usage.promptTokens,
completionTokens: sessionTokenUsage.value.completionTokens + chunk.usage.completionTokens,
totalTokens: sessionTokenUsage.value.totalTokens + chunk.usage.totalTokens,
}
console.log('[AI] Token 使用量更新:', sessionTokenUsage.value)
}
break
case 'error':
@@ -506,6 +525,8 @@ export function useAIChat(
messages.value = []
sourceMessages.value = []
currentKeywords.value = []
// 重置 Token 计数
sessionTokenUsage.value = { promptTokens: 0, completionTokens: 0, totalTokens: 0 }
if (welcomeMessage) {
messages.value.push({
@@ -573,6 +594,7 @@ export function useAIChat(
currentConversationId,
currentToolStatus,
toolsUsedInCurrentRound,
sessionTokenUsage,
// 方法
sendMessage,