🚀 背景描述
现状
| 组件 |
包 |
面向 |
问题 |
LongTermMemory |
core.memory |
引擎 |
✅ 已有 |
MemoryProvider / OpenJiuwenMemoryProvider |
core.memory.external |
抽象 + 默认实现 |
✅ 已有 |
ReActAgent.configureMemScope() |
core.singleagent |
scope 配置 |
✅ 仅 setScopeConfig,无 prefetch/sync |
ExternalMemoryRail |
harness.rails |
DeepAgent |
⚠️ init() 硬绑 DeepAgent,挂到 ReActAgent 时 静默 no-op |
ExternalMemoryRail.init() 当前逻辑:
public void init(Object agent) {
if (!(agent instanceof DeepAgent deepAgent)) {
return; // ReActAgent 注册后 owner=null,prefetch/sync/tools 全部失效
}
...
}
影响
- 裸
ReActAgent 无法使用 harness 记忆 Rail。
- 集成测试 / 业务示例应用层必须自写
TravelUserMemoryRail,重复 prefetch/sync/工具注册。
- core 内 DeepAgent 与 ReActAgent 的长期记忆接入路径不一致,
MemoryProvider 语义难以在裸 ReActAgent 上复用。
设计思路
推荐方案:在 core 新增 ReActExternalMemoryRail(保留 harness 类不变)
新增类(建议包名):
com.openjiuwen.core.memory.external.rail.ReActExternalMemoryRail
extends com.openjiuwen.core.singleagent.rail.AgentRail
设计原则:
- 复用
ExternalMemoryRail 的 语义(prefetch 块格式、syncTurn、provider 工具 schema),但 init/工具注册 面向 BaseAgent / ReActAgent。
ExternalMemoryRail 保持 DeepAgent 专用,避免破坏 harness 现有测试与 HarnessConfigBuilder 行为;后续可选择性委托到共享 helper。
- Rail 不依赖 Spring;scope 参数通过构造函数或
MemoryScope 值对象注入。
涉及到的对外API
与其他模块的相关性描述
测试设计与测试计划
验证 ReActExternalMemoryRail 在裸 ReActAgent 上具备与现有 ExternalMemoryRail 对齐的长期记忆能力,并确保 DeepAgent 现有路径无回归:
- Rail 生命周期正确:注册时初始化 owner / prompt / tools,注销时清理 prompt / tools / provider。
- 记忆读写闭环正确:
beforeInvoke 初始化 provider,beforeModelCall prefetch 并注入 prompt,afterInvoke syncTurn 写回。
- 工具可见且可执行:
ltm_search / ltm_search_summary 不仅出现在 ReActAgent tool schema 中,也能通过 AbilityManager 找到 LocalFunction 并调用 provider。
- 异常与边界场景可降级:空输入、provider 抛错、连续 sync 失败、provider 无工具、空 recall 不影响主流程。
- 与现有 harness memory 行为兼容:
ExternalMemoryRail + DeepAgent 测试保持 green。
其他信息
感谢您的贡献 🎉!
🚀 背景描述
现状
LongTermMemorycore.memoryMemoryProvider/OpenJiuwenMemoryProvidercore.memory.externalReActAgent.configureMemScope()core.singleagentsetScopeConfig,无 prefetch/syncExternalMemoryRailharness.railsinit()硬绑DeepAgent,挂到 ReActAgent 时 静默 no-opExternalMemoryRail.init()当前逻辑:影响
ReActAgent无法使用 harness 记忆 Rail。TravelUserMemoryRail,重复 prefetch/sync/工具注册。MemoryProvider语义难以在裸ReActAgent上复用。设计思路
推荐方案:在 core 新增
ReActExternalMemoryRail(保留 harness 类不变)新增类(建议包名):
设计原则:
ExternalMemoryRail的 语义(prefetch 块格式、syncTurn、provider 工具 schema),但 init/工具注册 面向BaseAgent/ReActAgent。ExternalMemoryRail保持 DeepAgent 专用,避免破坏 harness 现有测试与HarnessConfigBuilder行为;后续可选择性委托到共享 helper。MemoryScope值对象注入。涉及到的对外API
与其他模块的相关性描述
测试设计与测试计划
验证
ReActExternalMemoryRail在裸ReActAgent上具备与现有ExternalMemoryRail对齐的长期记忆能力,并确保 DeepAgent 现有路径无回归:beforeInvoke初始化 provider,beforeModelCallprefetch 并注入 prompt,afterInvokesyncTurn 写回。ltm_search/ltm_search_summary不仅出现在 ReActAgent tool schema 中,也能通过AbilityManager找到LocalFunction并调用 provider。ExternalMemoryRail+ DeepAgent 测试保持 green。其他信息
感谢您的贡献 🎉!