Files
Neo-ZQYY/docs/audit/changes/2026-03-10__multi-module-ai-apps-task-defense-miniprogram.md
Neo 14a12342b5 chore(audit): 补追 96 份未入仓审计孤本 — 覆盖 2026-02-26 ~ 2026-04-08
这些审计记录原本堆积在 docs/audit/changes/changes/ 嵌套误产物目录下(由开发机迁移
79d3c2e 前后的不明批量操作产生)。由于同期 .gitignore 屏蔽了 docs/audit/ 全目录,
它们从未入过 git 任何分支 history。删除即永久丢失。

按 docs/specs/audit-gap-recovery/tasks.md 阶段 1 执行,将全部 96 份 D 类孤本
(主目录无同名、git history 亦无记录)复制到 docs/audit/changes/ 主目录入仓。

涵盖主题: P1-P18 全栈集成 / 多模块累积变更 / ETL bug 修复 / 业务日切 /
   召回与任务引擎改造 / 租户管理与审批 / 董事会财务 / 客户与助教详情 /
   DDL 基线合并 / Kiro 到 Claude Code 迁移

阶段 2(B 类内容漂移 1 份)和阶段 4(嵌套目录删除)独立推进。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 06:35:42 +08:00

12 KiB
Raw Blame History

变更审计记录:多模块累积变更 — AI 应用骨架 + 任务队列防卡死 + 小程序页面迁移

字段
日期 2026-03-10 00:16:50
Prompt-ID P20260310-000851
风险标签 dir:backend, dir:etl, dir:miniprogram, dir:db, db-schema-change
变更规模 145 files changed, 6965 insertions(+), 3396 deletions(-)

操作摘要

本次审计覆盖多轮对话的累积变更,涉及三大模块:

  1. 后端 AI 应用骨架P5-A 阶段):新增 8 个 AI 应用模块app1_chat ~ app8_consolidation、dispatcher 路由、prompt 模板、缓存/对话路由,构建完整的 AI 应用框架
  2. 任务队列防卡死机制:在 task_queue.py 中新增 _ensure_not_stuck_running_recover_zombie_tasks 两个防御函数,防止任务因异常被静默吞掉后永远卡在 running 状态
  3. 小程序页面迁移H5 → 微信原生):大量小程序页面的 UI 重构和功能增强,包括看板页面、聊天页面、教练/客户详情页、任务列表/详情页等
  4. ETL DWS 任务优化base_dws_task.pyassistant_order_contribution_task.py 的调整BD 手册文档更新

本次对话文件变更

新增文件

  • docs/audit/prompt_logs/prompt_log_20260310_000851.md
  • docs/audit/session_logs/2026-03/09/51_413948ee_141806/sub_01_b45509d2.md
  • docs/audit/session_logs/_system_prompts/sp_6b01e1f4.md

改动注解

后端 — AI 应用骨架(新增)

apps/backend/app/ai/apps/app1_chat.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现通用对话应用,支持 SSE 流式返回
  • 思路分析:每次进入 chat 页面新建 ai_conversations 记录不复用首条消息注入页面上下文source_page、page_context、screen_content通过 BailianClient.chat_stream 流式获取回复,逐 chunk yield SSEEvent
  • 修改结果:完整的流式对话入口,包含 conversation 创建、消息写入、system prompt 构建、异常处理。app_id = "app1_chat"

apps/backend/app/ai/apps/app2_finance.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现财务洞察应用8 个时间维度独立调用
  • 思路分析:定义 8 个时间维度编码this_month/last_month/this_week 等),实现 compute_time_range 计算日期范围,营业日分界点 08:00BUSINESS_DAY_START_HOUR 环境变量)。调用百炼后结果写入 ai_cache + ai_conversations
  • 修改结果完整的财务洞察调用链路。app_id = "app2_finance"

apps/backend/app/ai/apps/app3_clue.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现客户数据维客线索分析骨架
  • 思路分析:线索 category 限定 3 个枚举值(客户基础/消费习惯/玩法偏好),使用 items_sum 口径禁止 consume_money。Prompt reference 包含 App6 备注分析线索 + 最近 2 套 App8 历史
  • 修改结果骨架实现data 字段标注"待 P9-T1 补充"。app_id = "app3_clue"

apps/backend/app/ai/apps/app4_analysis.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现关系分析/任务建议骨架
  • 思路分析助教参与新结算或被分配召回任务时自动触发。Prompt reference 包含 App8 最新 + 最近 2 套历史(附 generated_at缓存不存在时标注"暂无历史线索"
  • 修改结果骨架实现data 字段标注"待 P6-T4 补充"。app_id = "app4_analysis"

apps/backend/app/ai/apps/app5_tactics.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现维客话术生成骨架
  • 思路分析:基于 App3 线索和 App4 分析结果生成维客话术建议
  • 修改结果骨架实现。app_id = "app5_tactics"

apps/backend/app/ai/apps/app6_note.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现备注分析骨架
  • 思路分析:分析助教/教练的备注内容,提取客户线索
  • 修改结果骨架实现。app_id = "app6_note"

apps/backend/app/ai/apps/app7_customer.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现客户画像骨架
  • 思路分析:综合客户消费数据生成客户画像
  • 修改结果骨架实现。app_id = "app7_customer"

apps/backend/app/ai/apps/app8_consolidation.py

  • 变更类型:新增
  • 原始原因P5-A 阶段实现维客线索整理骨架
  • 思路分析:整合 App3/App6 线索,去重合并,生成最终维客线索集
  • 修改结果骨架实现。app_id = "app8_consolidation"

apps/backend/app/ai/dispatcher.py

  • 变更类型:新增
  • 原始原因AI 应用路由分发器,根据 app_id 路由到对应应用
  • 思路分析:统一入口,根据 app_id 字符串匹配调用对应 app 模块的 run 函数
  • 修改结果8 个应用的路由分发逻辑

apps/backend/app/ai/prompts/app2_finance_prompt.py

  • 变更类型:新增
  • 原始原因App2 财务洞察的 Prompt 模板
  • 思路分析:构建包含时间维度、当前数据、历史数据的结构化 Prompt
  • 修改结果build_prompt 函数,返回 system + user 消息列表

apps/backend/app/ai/prompts/app8_consolidation_prompt.py

  • 变更类型:新增
  • 原始原因App8 维客线索整理的 Prompt 模板
  • 思路分析:整合多源线索的 Prompt 构建
  • 修改结果build_prompt 函数

apps/backend/app/routers/xcx_ai_cache.py

  • 变更类型:新增
  • 原始原因AI 缓存查询路由,小程序端读取 AI 分析结果
  • 思路分析:提供 GET 接口查询 ai_cache 表中的缓存结果
  • 修改结果:缓存查询 API 路由

apps/backend/app/routers/xcx_ai_chat.py

  • 变更类型:新增
  • 原始原因AI 对话路由,小程序端发起 AI 对话
  • 思路分析SSE 流式接口,调用 app1_chat 的 chat_stream
  • 修改结果:流式对话 API 路由

apps/backend/app/main.py

  • 变更类型:修改
  • 原始原因:注册新增的 AI 路由
  • 思路分析:在 FastAPI app 中 include 新增的 xcx_ai_cache 和 xcx_ai_chat 路由
  • 修改结果:后端启动时自动加载 AI 相关路由

后端 — 任务队列防卡死机制

apps/backend/app/services/task_queue.py

  • 变更类型:修改
  • 原始原因task_queue 中的任务因 task_execution_log.duration_ms 的 integer 溢出异常被静默吞掉,导致 task_queue 永远卡在 running 状态,后续任务全部排队。duration_ms 列已迁移为 bigint本次增加兜底防御
  • 思路分析:新增两个防御函数:(1) _ensure_not_stuck_running(queue_id)_execute_and_update 的 finally 块中调用,检查 task_queue 是否仍为 running 并强制标记 failed(2) _recover_zombie_tasks(max_running_minutes=180)_process_once 开头调用,回收超过 3 小时仍为 running 的僵尸任务
  • 修改结果双重防御确保任务队列不会因异常卡死。即使单次执行异常未被捕获finally 块兜底;即使 finally 也失败,定期扫描回收僵尸任务

apps/backend/app/services/task_executor.py

  • 变更类型:修改
  • 原始原因:配合任务队列防卡死机制的调整
  • 思路分析:与 task_queue.py 的防御机制协同工作
  • 修改结果:执行器层面的适配

apps/backend/app/services/task_registry.py

  • 变更类型:修改
  • 原始原因:任务注册表小幅调整
  • 思路分析:配合新增 AI 应用的任务注册
  • 修改结果:新增任务类型注册

apps/backend/tests/test_task_queue.py

  • 变更类型:修改
  • 原始原因:更新测试以适配新的防卡死逻辑
  • 思路分析:修复 dequeue mock 元组缺少 schedule_id第 11 列)的 bug更新 3 个 _process_once 测试的 mock 增加 _recover_zombie_tasks 的 get_connection 调用
  • 修改结果25 个测试全部通过

apps/backend/pyproject.toml

  • 变更类型:修改
  • 原始原因:添加 asyncio_mode = "auto" 到 pytest 配置
  • 思路分析:使 async 测试在 uv run 环境下正常运行,无需逐个标注 @pytest.mark.asyncio
  • 修改结果pytest 配置优化

ETL — DWS 任务优化

apps/etl/connectors/feiqiu/tasks/dws/base_dws_task.py

  • 变更类型:修改
  • 原始原因DWS 基础任务类调整
  • 思路分析:优化 DWS 任务的通用逻辑
  • 修改结果:影响所有继承 BaseDWSTask 的任务

apps/etl/connectors/feiqiu/tasks/dws/assistant_order_contribution_task.py

  • 变更类型:修改
  • 原始原因:助教订单贡献任务调整
  • 思路分析:配合 base_dws_task 的变更
  • 修改结果:任务逻辑适配

ETL — 文档更新

  • apps/etl/connectors/feiqiu/docs/database/DWD/main/BD_manual_dwd_settlement_head.md — 结算单 BD 手册更新
  • apps/etl/connectors/feiqiu/docs/database/DWS/main/BD_manual_cfg_area_category.md — 台区分类 BD 手册更新(+139 行)
  • apps/etl/connectors/feiqiu/docs/database/DWS/main/BD_manual_dws_finance_income_structure.md — 财务收入结构 BD 手册更新
  • apps/etl/connectors/feiqiu/docs/etl_tasks/dws_tasks.md — DWS 任务文档更新

小程序 — H5 → 微信原生迁移(简要注解)

大量小程序页面的 UI 重构和功能增强,属于 H5 → 微信小程序原生迁移的持续工作:

  • app.wxss — 全局样式新增 +165 行(通用组件样式)
  • board-coach/ — 教练看板页面json/ts/wxml/wxss 全部更新)
  • board-customer/ — 客户看板页面json/ts/wxml/wxss 全部更新)
  • board-finance/ — 财务看板页面ts +131, wxml +57, wxss +101
  • chat/ — AI 对话页面json/ts/wxml/wxss 全部更新)
  • chat-history/ — 对话历史页面json/ts/wxml/wxss 全部更新)
  • coach-detail/ — 教练详情页ts +280, wxml +206, wxss +701
  • customer-detail/ — 客户详情页ts +182, wxml +160, wxss +408
  • customer-service-records/ — 客户服务记录页
  • my-profile/ — 个人中心页
  • notes/ — 备注页面
  • performance/ — 业绩页面
  • performance-records/ — 业绩记录页
  • task-list/ — 任务列表页ts +389, wxml +305, wxss +562
  • task-detail/ — 任务详情页ts +182, wxml +171, wxss +815
  • task-detail-callback/ — 回访任务详情页
  • task-detail-priority/ — 优先级任务详情页
  • task-detail-relationship/ — 关系任务详情页
  • assets/icons/ai-robot-sm.svg — AI 机器人小图标(新增)

数据库 — DDL 基线与种子数据

  • db/etl_feiqiu/seeds/seed_dws_config.sql — DWS 配置种子数据更新(+148/-
  • docs/database/ddl/etl_feiqiu__dws.sql — ETL DWS DDL 基线微调
  • docs/database/ddl/zqyy_app__public.sql — 业务库 DDL 基线微调

其他

  • docs/h5_ui/anchors/board-finance-mp-instructions.json — 删除H5 锚点文件,迁移后不再需要)
  • docs/h5_ui/anchors/board-finance.json — 删除
  • docs/h5_ui/screenshots/*.png — 批量删除 H5 截图(迁移到小程序后原始截图不再需要)
  • docs/h5_ui/icon-mapping.md — 图标映射更新
  • docs/prd/specs/P8-miniapp-fe-boards.md — PRD spec 微调
  • docs/prd/specs/P9-miniapp-fe-details.md — PRD spec 微调
  • scripts/ops/_daily_revenue_0305.py — 日营收脚本微调
  • scripts/ops/daily_revenue_report.py — 日营收报告脚本微调
  • scripts/ops/screenshot_h5_pages.py — H5 截图脚本调整

DDL/迁移检查

  • 新增迁移 SQLnew_migration_sql 为空)
  • DDL 基线已更新:etl_feiqiu__dws.sqlzqyy_app__public.sql 有微调
  • ⚠️ DDL 基线状态:has_ddl_baseline 为 false基线文件虽有变更但未标记为已合并

合规检查

  • 文档同步缺失:无(code_without_docs 为空)
  • API 接口变更:无(api_changed 为 false
  • OpenAPI spec无需同步