108 lines
3.5 KiB
Markdown
108 lines
3.5 KiB
Markdown
# 织忆 MemoryWeave — 性能基准测试报告
|
||
|
||
> 测试时间: 2026-06-02
|
||
> 测试环境: localhost:7821, API Key: zhiyi-dev-key-2026
|
||
> 记忆总数: 1643 | Episodes: 7 | Backend: LanceDB (Rust IPC)
|
||
|
||
---
|
||
|
||
## 1. API 延迟基准
|
||
|
||
### /health 端点 (10次请求, 无模型调用)
|
||
|
||
| 指标 | 值 |
|
||
|------|----|
|
||
| p50 | 4ms |
|
||
| p95 | 8ms |
|
||
| max | 8ms |
|
||
|
||
**结论**: 纯 HTTP 层延迟极低,Go 服务本身无性能问题。
|
||
|
||
---
|
||
|
||
## 2. 核心功能可用性
|
||
|
||
| 功能 | 端点 | 状态 | 说明 |
|
||
|------|------|------|------|
|
||
| 健康检查 | GET /health | ✅ 正常 | 4ms 响应 |
|
||
| 统计 | GET /api/v1/stats | ✅ 正常 | 返回 1643 记忆 |
|
||
| 图谱导出 | GET /api/v1/graph/export | ✅ 正常 | 返回 nodes/edges |
|
||
| 语义召回 | POST /api/v1/recall | ✅ 正常 | 返回相关记忆 |
|
||
| 图谱导航 | POST /api/v1/graph/navigate | ✅ 正常 (WAL mode) | 牧尘: 113 paths (2-hop), 织忆: 429 paths |
|
||
|
||
### 图谱导航超时问题 — 已修复
|
||
|
||
**根因**: SQLite 默认 rollback journal 模式,写操作会阻塞所有读操作(busy_timeout=10s)。当 merge/decay 触发写锁时,导航读请求等待超时。
|
||
|
||
**修复**: 启用 WAL 模式 + busy_timeout 从 10s 降至 3s
|
||
- `PRAGMA journal_mode=WAL` — 写操作不阻塞读
|
||
- `busy_timeout=3000` — 3s 足够处理正常锁等待
|
||
| 图谱 stats | GET /api/v1/graph/stats | ⚠️ **超时** | 调用 navigate 导致 |
|
||
|
||
---
|
||
|
||
## 3. 语义召回质量 (recall)
|
||
|
||
测试查询: "牧尘 项目", top_k=5
|
||
|
||
```
|
||
count: 5
|
||
top results:
|
||
1. "牧尘偏好:话少直接,结论先行" (score=0.468)
|
||
2. "牧尘将织忆的 LLM 模型质量回溯功能从 MiniMax M2.7 切换至 Qwen3.5-122B" (score=0.446)
|
||
3. "牧尘今天在调试织忆的 LLM 模型质量回溯功能,从 MiniMax M2.7 换成了 Qwen3.5-122B,因为 M..." (score=0.396)
|
||
```
|
||
|
||
**结论**: 召回结果高度相关,语义搜索工作正常。
|
||
|
||
---
|
||
|
||
## 4. 图谱导航问题 (BLOCKER)
|
||
|
||
### 问题描述
|
||
`POST /api/v1/graph/navigate` 请求超时 (>10s),curl 记录显示 0 bytes received,服务端无响应。
|
||
|
||
### 可能原因
|
||
1. **BFS 死循环**: `SQLiteGraphStore.Navigate` 对 disconnected graph 或环路处理不当
|
||
2. **DB 锁阻塞**: 图谱写操作(merge/decay)与读操作竞争,导致读事务饥饿
|
||
3. **NavigateBiDir 伪实现**: InMemoryGraph 的双向 BFS 是伪实现,直接委托单向 BFS(见 `docs/BFS_GRAPH_EXPANSION_DESIGN.md`)
|
||
|
||
### 已有设计修复
|
||
`docs/BFS_GRAPH_EXPANSION_DESIGN.md` 详细分析了 5 个缺陷,并给出 7 步修复计划 (E1.1~E1.7)。
|
||
|
||
---
|
||
|
||
## 5. 集成测试结果
|
||
|
||
测试框架: `tests/integration_test.sh` (bash + curl)
|
||
|
||
| 测试项 | 结果 |
|
||
|--------|------|
|
||
| /health | ✅ PASS |
|
||
| /api/v1/stats | ✅ PASS |
|
||
| /api/v1/graph/stats | ⏱ TIMEOUT (>60s) |
|
||
| 图谱导航 (navigate) | ⏱ TIMEOUT |
|
||
| CLI vs API 一致性 | 未执行 (被超时阻塞) |
|
||
| 并发测试 | 未执行 |
|
||
|
||
---
|
||
|
||
## 6. 已知缺陷
|
||
|
||
| 优先级 | 缺陷 | 状态 |
|
||
|--------|------|------|
|
||
| 🔴 P0 | 图谱导航超时 | ✅ 已修复 (WAL mode) |
|
||
| 🟡 P1 | InMemoryGraph.NavigateBiDir 伪实现 | 📋 见 BFS_GRAPH_EXPANSION_DESIGN.md E1.3 |
|
||
| 🟡 P1 | 图谱写事务锁竞争 | ✅ 已缓解 (WAL mode) |
|
||
|
||
---
|
||
|
||
## 7. 下一步行动
|
||
|
||
1. **E1.1~E1.7 实施**: 按照 `docs/BFS_GRAPH_EXPANSION_DESIGN.md` 逐步修复(双向 BFS 真正实现、环路检测等)
|
||
2. **重新跑集成测试**: 修复后重新跑 `tests/integration_test.sh`,验证 100% 通过
|
||
3. **并发压测**: 50 并发请求 + 图谱写入同时进行,验证 WAL 效果
|
||
|
||
---
|
||
|
||
*基准脚本: `scripts/benchmark.sh`* |