CANNbot成本异常检测需求

CANNbot成本异常检测需求 REQ-004: Cost Anomaly Detection【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills概述自动检测 session 中 token 异常飙升的 turn标记并在 UI 中高亮显示关联 tool call 和 context 变化帮助用户分析原因。背景在长 session 中某些 turn 的 token 用量会突然飙升如上下文爆炸、无效重试、大文件读取用户需要快速定位这些异常 turn 并理解原因。功能要求1. 异常检测算法在src/lib/ingest/下新建anomaly-detector.ts检测策略对每个 session 的 assistant turns使用以下策略检测异常策略 A — 统计偏离2σfunction detectAnomalies(turns: TurnRow[]): AnomalyResult[] { const assistantTurns turns.filter(t t.role assistant t.totalTokens 0); if (assistantTurns.length 3) return []; // 样本太少跳过 const mean assistantTurns.reduce((s, t) s t.totalTokens, 0) / assistantTurns.length; const stddev Math.sqrt( assistantTurns.reduce((s, t) s Math.pow(t.totalTokens - mean, 2), 0) / assistantTurns.length ); const threshold mean 2 * stddev; return assistantTurns .filter(t t.totalTokens threshold) .map(t ({ turnId: t.id, turnIndex: t.turnIndex, totalTokens: t.totalTokens, mean, stddev, zScore: (t.totalTokens - mean) / stddev, severity: classifySeverity(t.totalTokens, mean, stddev), possibleCauses: analyzePossibleCauses(t, turns), })); }策略 B — 绝对阈值单个 turn 的 input tokens context window 的 70% 时标记。策略 C — 环比突增当前 turn 的 totalTokens 上一 turn 的 3 倍时标记。严重级别级别条件UI 颜色warningzScore 2 且 3黄色criticalzScore ≥ 3红色可能原因分析function analyzePossibleCauses(turn: TurnRow, allTurns: TurnRow[]): string[] { const causes: string[] []; // 原因1: 上下文过大 if (turn.contextWindowPct turn.contextWindowPct 70) { causes.push(Context window usage high); } // 原因2: 大 tool call 结果 if (turn.inputMessagesTokens 0) { const prevTurn allTurns.find(t t.turnIndex turn.turnIndex - 1); if (prevTurn turn.inputMessagesTokens prevTurn.inputMessagesTokens * 2) { causes.push(Large input message increase); } } // 原因3: cache miss if (turn.cacheReadTokens 0 turn.inputTokens 10000) { causes.push(No cache hit (cold start or cache eviction)); } // 原因4: 大量 reasoning if (turn.reasoningTokens turn.outputTokens * 5) { causes.push(Heavy reasoning (thinking tokens output tokens)); } return causes; }2. 数据模型在Turn模型中添加异常标记字段不修改 Prisma schema通过运行时计算// src/lib/ingest/anomaly-detector.ts export interface AnomalyResult { turnId: string; turnIndex: number; totalTokens: number; mean: number; stddev: number; zScore: number; severity: warning | critical; possibleCauses: string[]; }3. API 变更新增 API 路由GET /api/observe/session/{sessionId}/anomalies返回{ anomalies: [ { turnId: ..., turnIndex: 5, totalTokens: 85000, mean: 12000, stddev: 8000, zScore: 9.125, severity: critical, possibleCauses: [Context window usage high, No cache hit], turn: { ...turnData }, toolCalls: [ ...toolCallData ] } ], stats: { mean: 12000, stddev: 8000, threshold: 28000 } }4. UI 变更4.1 TurnTimeline 异常标记在TurnTimeline.tsx中异常 turn 的时间线条目添加⚠️ 图标warning 黄色 / critical 红色hover 显示 z-score 和可能原因4.2 Overview 异常统计在 Session 详情 Overview tab 添加 Anomaly Summary 卡片异常 turn 数量最高 z-score异常 turn 的总 token 占比4.3 Anomaly 详情面板点击异常 turn 时在TurnDetail面板顶部显示 Anomaly 信息卡token 分布当前 vs 平均z-score 可视化进度条可能原因列表关联的 tool calls5. 文件变更文件变更src/lib/ingest/anomaly-detector.ts新建— 异常检测算法src/app/api/observe/session/[sessionId]/anomalies/route.ts新建— Anomaly APIsrc/components/observe/AnomalyBadge.tsx新建— 异常标记组件src/components/observe/AnomalySummary.tsx新建— Overview 异常统计卡src/components/observe/AnomalyDetail.tsx新建— 异常详情面板src/components/observe/TurnTimeline.tsx修改— 添加异常标记src/components/observe/TurnDetail.tsx修改— 添加异常信息卡src/app/session/[taskId]/page.tsx修改— 传递 anomaly 数据测试要求在tests/下创建anomaly-detector.test.ts覆盖正常数据不产生异常单个异常 turnzScore 2多个异常 turn样本不足 3 个 turn跳过检测绝对阈值检测contextWindowPct 70%环比突增检测严重级别分类正确可能原因分析准确关键文件参考src/lib/ingest/turn-split.ts—TurnRow接口定义src/lib/ingest/cost-calculator.ts— 费用计算参考src/components/observe/TurnTimeline.tsx— Turn 时间线组件src/components/observe/TurnDetail.tsx— Turn 详情组件src/components/observe/TokenBarChart.tsx— SVG 图表参考src/app/api/observe/session/turns/route.ts— Turns API 参考src/app/session/[taskId]/page.tsx— Session 详情页面【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考