Skip to content

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

Description

@rogerlmj123

结论(已坐实)

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

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

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

总耗时 244 秒


product-recommend-agent 耗时拆解

阶段 耗时 日志
工具 searchProducts ~0.6s TOOL_DONE
二次 LLM 出文案 ~19.8s TOOL_DONEAGENT_RESULT
核心结束 AGENT_END(与 RESULT 同 ms)
CONSOLIDATE_LLM 44.6s CONSOLIDATE_LLM_STARTEND
FLUSH_LLM(ALWAYS) 19.6s FLUSH_LLM_STARTEND
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:SKIPminGap=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 叶子,所以才会慢。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/core/memoryMemory, session, statebugSomething isn't working

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions