排障表补一条:所有页面一起卡 → Milvus 抖动 + 同步调用阻塞事件循环

## 为什么补这一条

把审查报告的 P1–P3 共 45 项按 8 个演示场景筛完,**"会砸演示"的是 0 条**
(P0 四条已全修)。剩下的分两类:37 项演示路径根本走不到,8 项是"边缘"
(平时无感、特定条件才暴露)。

这 8 项里只有 **P1-2** 属于"一处慢、全平台卡":检索层用的是**同步** Milvus 客户端,
单次 `search` 卡 3 秒会让整个 API 进程停摆 3 秒,连 Worker 心跳一起停。

它同时也是**最容易被误判**的一个 —— 现象是"客服、风控、看板一起变慢",
而排障表原有的 6 条全是**单点**故障(503 行情 / Worker 没起 / 浏览器缓存 /
知识库没同步 / MySQL 没起 / 风控样本用完),**没有一条对得上"全场同时变慢"**。
没有这一条,现场会往"服务挂了"的方向查,而它其实是外部依赖抖动、不需要改代码、
也不需要重启。

所以这条的价值不在改代码,而在**把一个边缘隐患变成一眼能认出的现象**:
演示版本选择不修 P1-2(Milvus 正常时完全无感),代价就是必须知道它长什么样。

## 依据(都是会话内实际核过的)

- 客服链路确认:`app/service/knowledge_tool.py:29` 的 `search_knowledge` 工具
  → `get_knowledge_search_service().search(...)`;
  而 `knowledge_search_service.py:207-213 / 224 / 229` 调的是**同步** `MilvusClient`
  (`app/infrastructure/vector_memory.py` 的 `def search(...)`,非 `async def`)。
- 对照:项目在其它 10+ 处已用 `asyncio.to_thread`(如
  `app/infrastructure/fund_market_adapter.py:273/382`),说明异步规范已建立,
  这 4 处是遗漏 —— 但**不是演示阻塞项**,本次不改。
- "风控日报会不会砸"(P1-6,报告标了【确定】)也核过了:`_distribution` 的
  `counts` 键是字段**值**,两个调用点用的 `risk_level`(中文高/中/低)与
  `alert_type` 都是字符串,`str(key) == key` 恒成立,**触发不了** —— 场景 6 安全。

## 改动范围

只改 `docs/44-演示流程.md` 的 §4 排障表,**新增一行**,未动其它内容。
This commit is contained in:
2026-09-14 20:41:34 +08:00
parent 36c7a9d8d2
commit e85e958389
+1
View File
@@ -320,6 +320,7 @@ A:**这项本期是占位值,不是真实算出来的**,不回避这一点
|---|---|---|
| 客户下单返回 `503 行情已过期` | 行情快照过期(**有效期仅 15 分钟**) | `python tools/sync_market_prices.py` —— **立即生效,无需重启服务** |
| 客服一直"繁忙/超时" | **Worker 没在跑** | 看 `start.ps1` 起的第二个窗口;或 `python -m app.worker` |
| **所有页面一起变慢/卡住**(不是某一个请求超时,而是客服、风控、看板**同时**迟钝) | 检索层用的是**同步** Milvus 客户端,单次 `search` 卡住会**阻塞整个 API 进程**(连 Worker 心跳一起停)—— 已知项,见 `docs/演示用/代码库全面审查报告-2026-09-14.md` **P1-2** | 先在 Docker Desktop 确认 Milvus 在跑;**不用改代码也不用重启** —— Milvus 恢复后自动正常。这条是「演示版本不修、但要能一眼认出」的典型:平时完全无感,只有 Milvus 抖动时才现形 |
| 改了页面看不到效果 | 浏览器缓存 | `Ctrl+F5` 硬刷新 |
| 知识库问答答不上 | 向量没同步 | 确认 Worker 在跑,然后跑 `tools/seed_knowledge_demo.py` |
| 平台起不来 | MySQL 没起 | 看 `start.ps1` 的依赖检查输出 |