Files
Neo-ZQYY/docs/specs/ai-monitoring-testing/requirements.md
Neo 70324d8542 chore: 文档与 IDE 配置整理
- .kiro/specs/ → docs/specs/(41 个历史需求 spec 迁移,移除 .config.kiro)
- CLAUDE.md 三层拆分:根文件精简 + apps/backend/CLAUDE.md + .claude/commands/
- 新增 /spec-close、/pre-change 两个工作流命令
- DDL 基线刷新(从测试库重新导出 11 个文件,dws 35→38 表,biz 18→21 表)
- BD_Manual → BD_manual 命名统一(48 个文件)
- 修复 3 处文档与数据库不一致(auth.users.status 默认值、scheduled_tasks 字段、RLS 视图数)
- 新增 BD_manual_public_rbac_tables.md(public schema 8 张 RBAC/工作流表)
- 合并 biz.trigger_jobs 文档(10→12 字段,归档独立文档)
- docs/database/README.md 索引更新

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-06 00:02:37 +08:00

21 KiB
Raw Blame History

需求文档 — P15AI 监控后台 + 测试重建 + 回填

简介

P14 完成 DashScope SDK 迁移和调度器修复后,本 Spec 覆盖三个方面:

  1. admin-web AI 监控后台4 个页面:运行总览 Dashboard、调度状态、调用明细、手动操作
  2. 测试体系重建(旧脚本归档、新全链路测试 15 个场景、属性测试更新 7 个)
  3. 历史数据回填(半年内活跃会员 <100 人,分批执行 + 断点续跑)

实施过程中如遇细节不明确,应优先查阅 PRD 原文 docs/prd/specs/P15-ai-monitoring-testing.md

问题覆盖

本 Spec 覆盖 docs/reports/2026-03-21__ai_module_issues.md 中的:

  • P2-1App5 话术缺分类(回填时验证 App5 输出包含分类字段)
  • P2-2MCP 无健康检查admin-web Dashboard 展示各 App 最近调用状态)
  • P2-4全链路测试不完整§3.2 新全链路测试)
  • P3-3Prompt 版本管理(仅监控展示部分,只读)

依赖

  • P14DashScope 迁移 + 调度器完善)— P14-ai-dashscope-migration spec 必须全部完成并验证通过

来源文档(权威参考)

  • docs/prd/specs/P15-ai-monitoring-testing.md — PRD 主文档
  • docs/reports/2026-03-21__ai_module_issues.md — 问题清单
  • docs/database/BD_Manual_ai_tables.md — AI 表 BD 手册

不在本 spec 范围

  • 多门店支持BACKLOG
  • 消息队列(单独 PRD
  • Prompt 版本管理的编辑功能BACKLOG本轮仅展示
  • 前端刷新机制P1-5
  • FDW 数据一致性P1-6
  • 企业微信/邮件告警推送(后续迭代)

术语表

  • admin-web:系统管理后台(apps/admin-web/面向系统管理员React + Vite + Ant Design
  • BackendFastAPI 后端应用,位于 apps/backend/
  • Admin_AI_Service:新增的 admin AI 聚合服务(apps/backend/app/services/ai/admin_service.py),负责聚合查询、批量操作、告警管理
  • Admin_AI_Router:新增的 admin AI 路由文件(apps/backend/app/routers/admin_ai.py),注册 13 个 API 端点
  • DashboardAI 运行总览页面展示统计卡片、趋势图、App 分布、Token 预算、告警列表
  • ai_run_logsAI 运行记录表P14 已创建),记录每次 DashScope API 调用的详细日志
  • ai_trigger_jobs调度运行记录表P14 已创建),记录事件触发的调用链执行状态
  • ai_cacheAI 应用缓存表,各应用的结构化输出结果
  • App1~App88 个百炼智能体应用App1 通用对话、App2 财务洞察、App3 维客线索、App4 关系分析、App5 话术参考、App6 备注分析、App7 客户分析、App8 维客线索整理)
  • Backfill_Script:历史数据回填脚本(scripts/ops/ai_backfill.py
  • Circuit_Breaker:熔断器,按 app_id 独立计数P14 已实现)
  • DispatcherAI 事件调度与调用链编排器P14 已实现)
  • member_retention_clue会员留存线索业务表App8 写入目标

需求

模块 Aadmin-web AI 监控后台 — 后端 API

需求 A1Dashboard 总览统计 API

用户故事: 作为系统管理员,我希望通过 Dashboard API 获取 AI 运行总览数据以便在一个页面内掌握今日调用次数、成功率、Token 消耗、平均延迟和近 7 天趋势。

验收标准
  1. THE Backend SHALL 实现 GET /api/admin/ai/dashboard 端点,返回以下聚合数据:今日调用次数、今日成功率、今日 Token 消耗总量、今日平均延迟ms
  2. THE Backend SHALL 在 Dashboard 响应中包含近 7 天的调用量和成功率按日聚合数据,用于趋势图展示
  3. THE Backend SHALL 在 Dashboard 响应中包含各 App 调用占比分布数据(按 ai_run_logs.app_type 分组)
  4. THE Backend SHALL 在 Dashboard 响应中包含日/月 Token 预算使用进度(已用量 / 预算上限)
  5. THE Backend SHALL 在 Dashboard 响应中包含最近失败/超时/熔断告警事件列表(取自 ai_run_logs WHERE status IN ('failed', 'timeout', 'circuit_open')
  6. THE Backend SHALL 支持 site_id 查询参数进行门店筛选
  7. THE Backend SHALL 在 Dashboard 响应中包含各 App 最近一次调用状态,用于展示 App 健康状态(覆盖 P2-2 MCP 健康检查需求)

需求 A2调度任务列表与详情 API

用户故事: 作为系统管理员,我希望查看调度任务的列表和详情,以便了解事件触发的执行状态、调用链和去重统计。

验收标准
  1. THE Backend SHALL 实现 GET /api/admin/ai/trigger-jobs 端点返回分页的调度任务列表包含事件类型、会员、状态、执行链app_chain、耗时
  2. THE Backend SHALL 支持以下筛选参数:event_typestatussite_iddate_fromdate_to
  3. THE Backend SHALL 在列表响应中包含今日跳过的重复事件数(ai_trigger_jobs WHERE status='skipped_duplicate' AND created_at >= 今日零点)
  4. THE Backend SHALL 实现 GET /api/admin/ai/trigger-jobs/:id 端点,返回单条调度任务的完整详情(含 payload、error_message

需求 A3手动重跑 API

用户故事: 作为系统管理员,我希望对失败的调度任务进行手动重跑,以便修复因临时故障导致的执行失败。

验收标准
  1. THE Backend SHALL 实现 POST /api/admin/ai/trigger-jobs/:id/retry 端点,对指定调度任务发起手动重跑
  2. WHEN 手动重跑时THE Backend SHALL 创建新的 ai_trigger_jobs 记录,标记 is_forced=true,跳过去重检查
  3. THE Backend SHALL 在重跑请求后立即返回新的 trigger_job_idstatus: "pending",调用链在后台异步执行

需求 A4调用记录列表与详情 API

用户故事: 作为系统管理员,我希望查看 AI 调用记录的列表和详情,以便追踪每次调用的 prompt、response、token 消耗和错误信息。

验收标准
  1. THE Backend SHALL 实现 GET /api/admin/ai/run-logs 端点,返回分页的调用记录列表,包含 app_type、trigger_type、member_id、tokens_used、latency_ms、status
  2. THE Backend SHALL 支持以下筛选参数:app_typestatustrigger_typesite_iddate_fromdate_to
  3. THE Backend SHALL 实现 GET /api/admin/ai/run-logs/:id 端点,返回单条调用记录的完整详情,包含完整 request_prompt、完整 response_text、error_message
  4. THE Backend SHALL 对调用记录详情不做脱敏处理,系统管理员可查看原文

需求 A5缓存失效 API

用户故事: 作为系统管理员,我希望按 App / 会员 / 门店批量将缓存标记为失效,以便在数据异常时强制重新生成 AI 分析结果。

验收标准
  1. THE Backend SHALL 实现 POST /api/admin/ai/cache/invalidate 端点,接受请求体包含:app_type(可选)、member_id(可选)、site_id(必填)
  2. WHEN 缓存失效请求到达时THE Backend SHALL 将匹配条件的 ai_cache 记录的 status 字段更新为 invalidated
  3. THE Backend SHALL 返回受影响的缓存记录数量

需求 A6Token 预算查询 API

用户故事: 作为系统管理员,我希望查看 Token 预算的使用情况,以便监控 AI 调用成本。

验收标准
  1. THE Backend SHALL 实现 GET /api/admin/ai/budget 端点,返回日预算和月预算的使用情况:已用量、预算上限、使用百分比
  2. THE Backend SHALL 从 ai_run_logs.tokens_used 按日/月聚合计算已消耗 token 数

需求 A7批量执行与成本二次确认 API

用户故事: 作为系统管理员,我希望批量执行 AI 调用前能看到预估成本,确认后才真正执行,以便防止误操作导致大量 API 调用和费用。

验收标准
  1. THE Backend SHALL 实现 POST /api/admin/ai/batch-run 端点,接受请求体包含:app_typesApp 列表)、member_ids(会员 ID 列表)、site_id(门店 ID
  2. WHEN 批量执行请求到达时THE Backend SHALL 计算预估调用次数(会员数 × App 数)和预估 Token 消耗,返回 { batch_id, estimated_calls, estimated_tokens },不立即执行
  3. THE Backend SHALL 实现 POST /api/admin/ai/batch-run/confirm 端点,接受 { batch_id },确认后在后台异步执行批量调用
  4. IF batch_id 无效或已过期THEN THE Backend SHALL 返回 HTTP 400 错误

需求 A8告警管理 API

用户故事: 作为系统管理员,我希望查看、确认和忽略 AI 运行告警,以便对失败事件进行分类处理。

验收标准
  1. THE Backend SHALL 实现 GET /api/admin/ai/alerts 端点,返回告警列表(来源:ai_run_logs WHERE status IN ('failed', 'timeout', 'circuit_open')),支持分页和状态筛选
  2. THE Backend SHALL 实现 POST /api/admin/ai/alerts/:id/ack 端点,将指定告警标记为"已确认"
  3. THE Backend SHALL 实现 POST /api/admin/ai/alerts/:id/ignore 端点,将指定告警标记为"已忽略"
  4. THE Backend SHALL 支持告警的三种状态:pending(待处理)、acknowledged(已确认)、ignored(已忽略)

需求 A9API 认证与权限

用户故事: 作为系统管理员,我希望 AI 监控后台的所有 API 端点都受 JWT 认证保护,以便只有授权管理员才能访问。

验收标准
  1. THE Backend SHALL 对所有 /api/admin/ai/* 端点使用 JWT Bearer Token 认证,复用现有 admin 权限体系
  2. IF JWT Token 缺失或无效THEN THE Backend SHALL 返回 HTTP 401
  3. THE Backend SHALL 确保系统管理员对所有 AI 监控数据全量可见,不做数据脱敏

模块 Badmin-web AI 监控后台 — 前端页面

需求 B1AI 运行总览页面Dashboard

用户故事: 作为系统管理员,我希望在 admin-web 中看到 AI 运行总览 Dashboard以便一目了然地掌握 AI 模块的运行状况。

验收标准
  1. THE admin-web SHALL 新增 AI 运行总览页面包含以下区域顶部统计卡片今日调用次数、成功率、Token 消耗、平均延迟)、近 7 天趋势折线图(调用量 + 成功率)、各 App 调用占比饼图、Token 预算使用进度条(日/月)、告警列表
  2. THE admin-web SHALL 在 Dashboard 页面展示各 App 最近一次调用状态,用于健康状态监控
  3. THE admin-web SHALL 支持门店筛选(site_id 下拉选择)
  4. THE admin-web SHALL 展示当前 App 配置信息(只读),覆盖 P3-3 Prompt 版本管理的监控展示需求

需求 B2调度状态页面

用户故事: 作为系统管理员,我希望在 admin-web 中查看调度任务的执行状态,以便监控事件触发链的运行情况。

验收标准
  1. THE admin-web SHALL 新增调度状态页面包含分页表格展示事件类型、会员、状态、执行链app_chain、耗时
  2. THE admin-web SHALL 提供筛选器event_type / status / site_id / 日期范围
  3. THE admin-web SHALL 在页面顶部展示今日跳过的重复事件数
  4. THE admin-web SHALL 在操作列提供"查看详情"和"手动重跑"按钮
  5. WHEN 点击"手动重跑"时THE admin-web SHALL 弹出确认对话框,确认后调用 POST /api/admin/ai/trigger-jobs/:id/retry

需求 B3调用明细页面

用户故事: 作为系统管理员,我希望在 admin-web 中查看 AI 调用的详细记录,以便排查问题和分析调用模式。

验收标准
  1. THE admin-web SHALL 新增调用明细页面包含分页表格展示app_type、trigger_type、member_id、tokens_used、latency_ms、status
  2. THE admin-web SHALL 提供筛选器app_type / status / trigger_type / site_id / 日期范围
  3. WHEN 点击表格行时THE admin-web SHALL 展开详情抽屉Drawer展示完整 prompt、完整 response、error_message

需求 B4手动操作页面

用户故事: 作为系统管理员,我希望在 admin-web 中执行手动重跑、缓存失效、批量执行和告警管理操作,以便在需要时进行人工干预。

验收标准
  1. THE admin-web SHALL 新增手动操作页面,包含以下功能区域:手动重跑、缓存失效、批量执行(含成本二次确认)、告警确认/忽略
  2. THE admin-web SHALL 在手动重跑区域提供 App 选择、会员输入、门店选择,触发单次执行
  3. THE admin-web SHALL 在缓存失效区域提供按 App / 会员 / 门店的批量失效操作
  4. THE admin-web SHALL 在批量执行区域实现成本二次确认流程:选择操作参数 → 调用 POST /api/admin/ai/batch-run 获取预估 → 展示确认弹窗("本次将执行 N 次 AI 调用,预估消耗 M tokens确认执行")→ 确认后调用 POST /api/admin/ai/batch-run/confirm
  5. THE admin-web SHALL 在告警区域展示告警列表,每条告警提供"确认"和"忽略"操作按钮

模块 C测试体系重建

需求 C1旧测试脚本归档

用户故事: 作为开发者,我希望将基于旧 openai SDK 的测试脚本归档到 _archived/ 目录,以便清理过时代码,避免误用。

验收标准
  1. THE Backend SHALL 将以下 7 个脚本从 scripts/ops/ 移至 scripts/ops/_archived/ai_full_chain_test.pytest_chat_e2e.pytest_chat_ai_quality.pytest_bailian_apps.pytest_bailian_single.pytest_bailian_full.py_run_ai_tests_remaining.py
  2. THE Backend SHALL 将 apps/backend/tests/test_ai_bailian.py 移至 apps/backend/tests/_archived/test_ai_bailian.py
  3. THE Backend SHALL 将 docs/reports/2026-03-21__ai_full_chain_test.md 移至 docs/reports/_archived/2026-03-21__ai_full_chain_test.md
  4. THE Backend SHALL 保留归档文件内容不变,仅移动位置
  5. THE Backend SHALL 不删除 docs/audit/ 中的审计记录,仅停止引用

需求 C2新全链路测试 — 15 个场景

用户故事: 作为开发者,我希望建立覆盖 15 个场景的全链路测试,以便验证 DashScope 迁移后所有 AI 应用的端到端功能正确性。

验收标准
  1. THE Backend SHALL 实现 App1 对话测试,覆盖 10 种入口general、customer_detail、coach_detail、task_detail、finance_overview、member_list、settlement_detail、note_detail、dashboard、report验证 SSE 流式输出、session_id 双轨持久化、对话复用规则
  2. THE Backend SHALL 实现 App2 定时预生成测试,验证 8 个时间维度(今日、昨日、本周、上周、本月、上月、本季、上季)的缓存写入和 JSON 合法性
  3. THE Backend SHALL 实现消费事件触发链测试App3→App8→App7验证事件传播、缓存写入、业务表写入
  4. THE Backend SHALL 实现助教消费触发链测试App3→App8→App7→App4→App5验证完整链路和助教关联
  5. THE Backend SHALL 实现备注事件触发链测试App6→App8验证备注分析和线索整合
  6. THE Backend SHALL 实现任务分配触发链测试App4→App5验证关系分析和话术生成
  7. THE Backend SHALL 实现缓存命中测试App2~8验证缓存有效期内直接返回、过期后重新生成
  8. THE Backend SHALL 实现缓存失效测试App2~8验证 admin-web 手动失效后重新生成
  9. THE Backend SHALL 实现熔断触发测试,验证连续 5 次失败→熔断→半开→恢复的完整流程
  10. THE Backend SHALL 实现 Token 预算超限测试,验证超限后正确降级
  11. THE Backend SHALL 实现失败记录测试,验证 ai_run_logs 记录完整且 error_message 有值
  12. THE Backend SHALL 实现后台可见性测试,验证 admin-web API 能返回所有运行记录和详情
  13. THE Backend SHALL 实现 JSON 兜底测试App2~8验证非法 JSON 重试 3 次
  14. THE Backend SHALL 实现幂等验证测试App8验证同一 member 同一天重复触发只执行一次
  15. THE Backend SHALL 实现内容质量测试App2~8验证返回内容包含必要字段、格式正确
  16. THE Backend SHALL 支持 Mock 模式和真实 API 模式双轨运行Mock 模式用于 CI 环境,真实 API 模式用于集成验证

需求 C3属性测试更新 — 7 个属性测试

用户故事: 作为开发者,我希望更新 Hypothesis 属性测试,以便通过随机输入验证 AI 模块的关键不变量。

验收标准
  1. THE Backend SHALL 实现熔断器状态机属性测试验证状态转换合法性closed→open→half_open→closed/open任意操作序列不产生非法状态
  2. THE Backend SHALL 实现 Token 预算计算属性测试,验证日/月聚合值等于各条记录 tokens_used 之和(聚合不变量)
  3. THE Backend SHALL 实现去重逻辑属性测试,验证相同 (event_type, member_id, site_id, date) 只产生一条非 skipped 记录
  4. THE Backend SHALL 实现缓存过期属性测试,验证 expires_at 过期的缓存 status 必须为 expired
  5. THE Backend SHALL 实现 App8 幂等属性测试,验证同一 member 同一天的 member_retention_clue 只有一组记录
  6. THE Backend SHALL 实现 session_id 重建属性测试,验证重建后的 messages 数组与本地 ai_messages 一致round-trip 属性)
  7. THE Backend SHALL 实现限流计数属性测试,验证窗口内请求数不超过上限

模块 D历史数据回填

需求 D1回填脚本

用户故事: 作为系统管理员,我希望通过回填脚本为半年内活跃会员生成 AI 分析数据,以便新上线的 AI 功能对历史会员也有完整的分析结果。

验收标准
  1. THE Backend SHALL 实现回填脚本 scripts/ops/ai_backfill.py查询半年内2025-09-21 ~ 2026-03-21三者并集的活跃会员有消费记录、有备注记录、有任务变更
  2. THE Backfill_Script SHALL 写死门店范围 site_id = 2790685415443269
  3. THE Backfill_Script SHALL 分批执行:每批 10 个会员,批间间隔 5 秒
  4. THE Backfill_Script SHALL 实现断点续跑:将已完成的 member_id 列表记录到本地文件,失败后从断点继续
  5. THE Backfill_Script SHALL 对每个会员执行以下调用链App3维客线索→ App8线索整理→ App7客户分析如有助教关联→ App4关系分析→ App5话术参考如有备注→ App6备注分析→ App8再次整合
  6. THE Backfill_Script SHALL 对 App8 写入 member_retention_clue 业务表时使用 DELETE + INSERT 事务包裹
  7. THE Backfill_Script SHALL 不备份现有数据

需求 D2回填成本确认

用户故事: 作为系统管理员,我希望在执行回填前通过 admin-web 二次确认预估成本,以便防止意外的大量 API 调用。

验收标准
  1. THE Backfill_Script SHALL 在执行前输出预估信息:会员数量、预估调用次数(会员数 × 平均 5 个 App、预估 Token 消耗(每次约 2000 tokens
  2. THE Backfill_Script SHALL 支持通过 admin-web 的批量执行 + 成本二次确认流程触发(复用需求 A7 的 API
  3. THE Backfill_Script SHALL 在回填过程中验证 App5 输出包含分类字段(覆盖 P2-1 问题修复)

模块 E数据保留与清理

需求 E1数据保留策略

用户故事: 作为系统管理员,我希望 AI 相关数据按策略自动清理,以便控制数据库存储增长。

验收标准
  1. THE Backend SHALL 永久保留 App1 对话记录(ai_conversations + ai_messages),不自动删除
  2. THE Backend SHALL 对 App2~8 缓存(ai_cache)每个 App 保留最新 20,000 条,超出部分按 created_at 排序删除最旧记录
  3. THE Backend SHALL 对 ai_run_logs 保留 90 天,删除 90 天前的记录
  4. THE Backend SHALL 对 ai_trigger_jobs 保留 90 天,删除 90 天前的记录

需求 E2清理定时任务

用户故事: 作为系统管理员,我希望数据清理任务每日自动执行,以便无需人工干预即可维持数据保留策略。

验收标准
  1. THE Backend SHALL 实现数据清理定时任务,每日凌晨 03:00 执行
  2. THE Backend SHALL 在清理任务中依次执行:删除 90 天前的 ai_run_logs、删除 90 天前的 ai_trigger_jobs、对每个 App 类型清理超出 20,000 条上限的 ai_cache 记录
  3. THE Backend SHALL 记录每次清理任务的执行结果(删除记录数)到日志

模块 F数据库查询优化与收尾

需求 F1Dashboard 聚合查询优化

用户故事: 作为后端开发者,我希望 Dashboard 的聚合查询性能良好,以便页面加载不卡顿。

验收标准
  1. THE Backend SHALL 为 ai_run_logs 的 Dashboard 聚合查询评估并添加 BRIN 索引(基于 created_at 列),提升按时间范围聚合的查询性能
  2. THE Backend SHALL 确保 Dashboard API 的响应时间在合理范围内(分页 + 索引 + 90 天保留策略共同保障)

需求 F2文档同步

用户故事: 作为开发者,我希望所有相关文档在 P15 完成后保持同步更新,以便文档与代码一致。

验收标准
  1. THE Backend SHALL 更新 apps/admin-web/README.md,新增 AI 监控页面说明
  2. THE Backend SHALL 更新 apps/backend/README.md,新增 admin AI API 说明
  3. THE Backend SHALL 更新 docs/DOCUMENTATION-MAP.md,新增 P15 相关条目
  4. THE Backend SHALL 更新 docs/database/BD_Manual_ai_tables.md,补充 admin API 相关的查询模式说明
  5. THE Backend SHALL 确认 docs/prd/ai-app-prompts.md 中环境变量已全部更新P14 遗留确认)