agentscope-ai / agentscope-ai/agentscope-java

[Bug]:harnessAgent编排模式,Memory 的 `concatWith` 后置钩子阻塞了 `call()` Flux complete处理,导致编排长时间等待?是否有其他方案

Đang mở
#2,276 2 bình luận 0 reaction 0 người được giao Xem trên GitHub
area/core/memory bug
Ngôn ngữ chính
Java
Star
5.6k
Fork
1.3k
Merge trung bình
4 ngày 12 giờ
Pull request đã merge (30 ngày)
77

Mô tả

## 结论(已坐实)

**根因就是 Memory 的 `concatWith` 后置钩子阻塞了 `call()` Flux complete。**

父编排器感知逻辑正常;子 Agent 业务结果也早已产出。慢在:

1. **MemoryMaintenance.consolidate().block()**(约 44.6s,首次)
2. **MemoryFlush.flushMemories LLM**(`FlushTrigger{ALWAYS}`,每次约 19–27s)

总耗时 **244 秒**。

---

## product-recommend-agent 耗时拆解

| 阶段 | 耗时 | 日志 |
|------|------|------|
| 工具 `searchProducts` | ~0.6s | `TOOL_DONE` |
| 二次 LLM 出文案 | ~19.8s | `TOOL_DONE` → `AGENT_RESULT` |
| **核心结束** | — | `AGENT_END`(与 RESULT 同 ms) |
| **CONSOLIDATE_LLM** | **44.6s** | `CONSOLIDATE_LLM_START` → `END` |
| **FLUSH_LLM**(ALWAYS) | **19.6s** | `FLUSH_LLM_START` → `END` |
| offload | 20ms | 可忽略 |
| **AGENT_RESULT → CALL_COMPLETE** | **64.3s** | 几乎全是上面两段 Memory LLM |

时间线:

```
18:36:36.169 AGENT_RESULT / AGENT_END
18:36:36.177 CONSOLIDATE_LLM_START
18:37:20.810 CONSOLIDATE_LLM_END (44633ms) + MEMORY.md consolidated
18:37:20.816 FLUSH_LLM_START (ALWAYS)
18:37:40.441 FLUSH_LLM_END (19625ms)
18:37:40.462 CALL_COMPLETE
```

期间父侧 `task_output` 空等约 **60s**(18:36:17 → 18:37:17),因为 Task 要等 `CALL_COMPLETE` 才变终态。

---

## product-consult-skill

- Maintenance:**SKIP**(`minGap=30min` 节流)
- Flush:**仍 ALWAYS**,约 **25.7s / 27.3s**
- 同会话还被 spawn **两次**(两套 sub-session),各跑一遍 Flush → 又叠约 **50s+**

---

## 因果链(最终版)

```
业务工具很快
→ AGENT_RESULT(结果已出)
→ MemoryMaintenance.concatWith(consolidate LLM block) ← P0
→ MemoryFlush.concatWith(flush LLM ALWAYS) ← P0
→ CALL_COMPLETE 才到
→ wait_async / task_output 才结束
```

**不是「父没检测到」**,是 **官方把记忆维护串在 call 完成路径上**,且子 Agent(Harness 叶子)默认开启了这些 hooks。

---

## 修复建议(优先级)

| 优先级 | 改法 | 预期收益 |
|--------|------|----------|
| **P0** | 子 Agent / 编排叶子:`disableMemoryHooks()` | 直接砍掉 AGENT_END 后 40–70s |
| **P0** | 或把 Flush/Maintenance 改成 **fire-and-forget**(不 `concatWith`) | call 可立即 complete,记忆后台做 |
| **P1** | Flush 从 `ALWAYS` 改为 `NEVER` / `THROTTLED` | 至少去掉每次 20s+ Flush LLM |
| **P2** | 编排内静默 DirectOutput | 再省工具后二次 LLM ~20s |
| **P2** | 避免同波重复 spawn consult | 少一轮 Flush |

单跑快,是因为 BaseAgent 路径通常**没有**这套 Harness MemoryFlush/Maintenance `concatWith`;编排 spawn 出的是完整 Harness 叶子,所以才会慢。

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.