资讯动态

openJiuwen Agent 记忆配置入口 AgentMemoryConfig 详解:字段默认值、Builder 用法与运行期生效链路

发布时间:2026/10/14 15:10:07 来源:尧图企业网站定制
人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载导读AgentMemoryConfig是 openJiuwen agent-core-javaagent-core-java应用层暴露给开发者的 memory 配置类型统一控制 Agent 的长期记忆、用户画像、语义记忆、情景记忆与摘要记忆开关。本文从应用层兼容别名类入手结合共享 memory 模块的真实实现逐项说明配置字段与默认值、Builder 构造方式、在LlmAgentConfig中的 JSON 序列化形态并沿着LlmEventHandler、MemoryRail、Generator与LongTermMemory的调用链剖析这些开关在运行期如何真正生效最后给出测试验证依据。一、类定位应用层的兼容别名关联文档 AgentMemoryConfig.md 描述的类位于com.openjiuwen.core.application.schema包其核心声明如下public class AgentMemoryConfig extends com.openjiuwen.core.memory.config.AgentMemoryConfig { public AgentMemoryConfig() { super(); } }对应源码见 core/src/main/java/com/openjiuwen/core/application/schema/AgentMemoryConfig.java。从源码结构可以确认该类型没有新增任何字段或方法所有配置项与访问器均继承自共享 memory 模块中的com.openjiuwen.core.memory.config.AgentMemoryConfig它存在的意义是为应用层application包提供一个本地类型名避免应用层 API 直接依赖底层 memory 包的类名同时与运行时真实模型保持完全一致其无参构造方法仅透传调用父类无参构造用于创建携带默认值的配置实例。这种“兼容别名”的设计保证了应用层配置对象如LlmAgentConfig与共享 memory 运行时LongTermMemory、MemoryRail等可以引用同一套真实模型序列化与反序列化不会产生类型漂移。二、真实配置模型字段与默认值实际承载配置的是 core/src/main/java/com/openjiuwen/core/memory/config/AgentMemoryConfig.java它通过JsonInclude(JsonInclude.Include.NON_NULL)控制 JSON 序列化字段使用 snake_case 的JsonProperty注解。完整字段与默认值如下字段类型JSON 键默认值含义memVariablesListParammem_variables空列表[]记忆变量定义列表声明 Agent 需要抽取并保存的用户记忆变量enableLongTermMembooleanenable_long_term_memtrue是否启用长期记忆长期记忆主开关enableUserProfilebooleanenable_user_profiletrue是否启用用户画像记忆片段记忆之一enableSemanticMemorybooleanenable_semantic_memorytrue是否启用语义记忆与时间无关的事实性内容片段记忆之一enableEpisodicMemorybooleanenable_episodic_memorytrue是否启用情景记忆与时间相关的事实性内容片段记忆之一enableSummaryMemorybooleanenable_summary_memorytrue是否启用单轮对话摘要记忆其中setMemVariables(...)对入参做了防御性拷贝null时退化为空列表避免外部列表被意外修改类还提供了便捷判定方法isEnableFragmentMemory()其实现为enableUserProfile || enableSemanticMemory || enableEpisodicMemory见 AgentMemoryConfig.java即“任一片段记忆开关开启即视为启用了片段记忆”供上层快速判断。记忆变量的类型体系ParammemVariables的元素类型Param定义于 core/src/main/java/com/openjiuwen/core/common/schema/Param.java包含name、description、type、required、default、items、properties等字段并在构造时做强校验类型为ARRAY时必须携带items且不允许携带properties类型为OBJECT时必须携带properties且不允许携带items其他基础类型不允许携带items或properties。支持的类型由 ParamType.java 枚举定义STRING、BOOLEAN、INTEGER、NUMBER、ARRAY、OBJECT。类内提供Param.string(...)、Param.booleanParam(...)、Param.integer(...)、Param.number(...)、Param.array(...)、Param.object(...)等静态工厂方法可快速构造带默认值的变量定义。三、构造方式无参构造与 Builder1. 无参构造AgentMemoryConfig config new AgentMemoryConfig();创建全部使用默认值的配置实例等价于所有开关均为true、memVariables为空列表。2. Builder 构造AgentMemoryConfig config AgentMemoryConfig.builder() .memVariables(List.of(Param.string(profile, 用户画像, false))) .enableLongTermMem(true) .enableUserProfile(true) .enableSemanticMemory(false) // 关闭语义记忆 .enableEpisodicMemory(false) // 关闭情景记忆 .enableSummaryMemory(true) .build();Builder 的完整实现见 AgentMemoryConfig.java所有字段的初始值均与无参构造保持一致五个开关true、memVariables为空列表build()通过全参构造最终生成不可变语义的配置快照。测试 MemoryConfigModelsTest.java 明确验证了默认行为无参构造下getMemVariables()为空、五个开关全部为true、isEnableFragmentMemory()为true而当通过 Builder 将三个片段记忆开关全部置为false后isEnableFragmentMemory()正确返回false。四、在应用层配置中的暴露方式AgentMemoryConfig通过LlmAgentConfig暴露给应用层 Agent。在 core/src/main/java/com/openjiuwen/core/application/schema/LlmAgentConfig.java 中Builder.Default JsonProperty(agent_memory_config) JsonAlias(agentMemoryConfig) private AgentMemoryConfig agentMemoryConfig new AgentMemoryConfig();关键点默认值agentMemoryConfig字段默认即new AgentMemoryConfig()也就是说即使不显式配置Agent 也默认启用全部记忆能力JSON 双别名同时支持下划线风格agent_memory_config和 Java 风格agentMemoryConfig两种键名方便 YAML/JSON 配置与 Java 代码两种写法切换对应的配置说明也记录在 LlmAgentConfig.md 的字段表中。五、运行期生效链路开关如何真正起作用1. 事件处理器LlmEventHandler 预解析开关在 LlmEventHandler.java 的构造阶段Agent 的 memory 配置会被一次性解析为运行标志this.enableLongTermMem agentConfig.getAgentMemoryConfig().isEnableLongTermMem(); this.enableFragmentMemory agentConfig.getAgentMemoryConfig().isEnableFragmentMemory(); this.enableSummaryMemory agentConfig.getAgentMemoryConfig().isEnableSummaryMemory(); this.enableMemVariables !agentConfig.getAgentMemoryConfig().getMemVariables().isEmpty(); ... this.enableMemory memoryScopeId ! null !memoryScopeId.isEmpty() (enableLongTermMem || enableMemVariables); this.memoryRuntime enableMemory ? MemoryRuntimeResolver.require() : null;从源码可以推断长期记忆是否真正启用取决于三个条件同时满足——配置了memoryScopeId记忆作用域、开启了enableLongTermMem或配置了memVariables、且能解析到 memory 运行时实现。其中enableMemVariables由memVariables列表是否为空决定。2. 记忆 RailMemoryRail 的加载与写回对于 ReAct Agent 的 Rail 模式MemoryRail.java 在构造时同样预解析配置this.agentMemoryConfig agentMemoryConfig null ? new AgentMemoryConfig() : agentMemoryConfig; this.enableLongTermMem this.agentMemoryConfig.isEnableLongTermMem(); this.enableFragmentMemory this.agentMemoryConfig.isEnableFragmentMemory(); this.enableSummaryMemory this.agentMemoryConfig.isEnableSummaryMemory(); this.memVariablesConfig this.agentMemoryConfig.getMemVariables(); this.enableMemVariables !this.memVariablesConfig.isEmpty();beforeInvoke调用loadVariables(userId, result)加载记忆变量、loadLongTermMemory(userId, query, result)检索长期记忆注入memory_variables与_original_queryafterInvoke对话结束后调用memory.addMessages(...)写回记忆。测试 MemoryRailTest.java 展示了带记忆变量的构造用法AgentMemoryConfig config AgentMemoryConfig.builder() .memVariables(List.of(Param.string(profile, profile, false))) .build(); return new MemoryRail(scope-a, config, memory);3. 记忆生成器Generator 按开关分流真正的记忆抽取与生成发生在 Generator.java其逻辑严格遵循配置开关无论开关如何记忆变量memVariables始终抽取因为变量抽取不依赖任何开关若!config.isEnableLongTermMem()直接返回——此时不生成摘要记忆和片段记忆仅保留变量若config.isEnableSummaryMemory()生成摘要记忆SummaryUnit当分析结果存在关键信息hasKeyInformation时按MemoryType逐一对照enableUserProfile、enableSemanticMemory、enableEpisodicMemory三个开关仅将开启类型的片段记忆写入结果。这与AgentMemoryConfig.isEnableFragmentMemory()的语义相互印证片段记忆是“用户画像 语义记忆 情景记忆”的集合任一关闭则对应类型的记忆不会被落库。4. 写入入口LongTermMemory.addMessages记忆最终通过 LongTermMemory.java 的addMessages(...)写入public CompletableFutureAddMemResult addMessages(ListBaseMessage messages, AgentMemoryConfig agentConfig, String userId, String scopeId, String sessionId, ZonedDateTime timestamp, boolean genMem, int genMemWithHistoryMsgNum)流程要点对应 LongTermMemory.java先做scopeId合法性校验非法格式直接抛出MEMORY_ADD_MEMORY_EXECUTION_ERROR按userId加用户级锁后先落消息messageManager.add(...)再依据genMem标志决定是否触发记忆生成若genMemfalse或 LLM 未初始化则跳过生成阶段仅保留原始消息。六、配置实践建议结合源码与测试给出几条可落地的配置建议默认全开new AgentMemoryConfig()即启用全部记忆能力。若你的 Agent 不需要语义记忆例如仅做身份画像记忆显式将enableSemanticMemory置为false可减少记忆生成时的 LLM 调用开销。记忆变量与开关配合memVariables的抽取不依赖任何开关即使enableLongTermMemfalse声明在memVariables中的变量仍会被抽取返回——但只有开启长期记忆后摘要与片段记忆才会进入生成流程。作用域是前提运行期记忆真正生效还要求LlmAgentConfig.memoryScopeId非空且 memory 运行时可用参考LlmEventHandler的enableMemory判定配置开关与作用域需同时设置。JSON 配置写法在 YAML/JSON 中既可使用agent_memory_config也可使用agentMemoryConfig两种键名等价JsonAlias支持。七、测试与文档索引本文涉及的实现均有测试与文档佐证可继续深入阅读应用层别名类 core/src/main/java/com/openjiuwen/core/application/schema/AgentMemoryConfig.java共享配置模型 core/src/main/java/com/openjiuwen/core/memory/config/AgentMemoryConfig.java默认值与 JSON 序列化测试 MemoryConfigModelsTest.java记忆 Rail 行为测试 MemoryRailTest.java共享配置类文档 AgentMemoryConfig.md应用层聚合配置文档 LlmAgentConfig.md小结AgentMemoryConfig虽然只是一个“继承共享实现、不新增成员”的应用层别名类但它承载了 Agent 全部记忆能力的开关语义六个核心配置项mem_variables与五个enable_*开关、Builder 构造、JSON 双别名序列化以及贯穿LlmEventHandler → MemoryRail → Generator → LongTermMemory的完整生效链路。理解它的字段含义与运行期判定逻辑是精细化控制 openJiuwen Agent 记忆行为的第一步。赞分享人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载相关推荐agent-core-java 记忆引擎全局配置详解MemoryEngineConfig 字段、默认值与源码级落地机制agent core java 记忆引擎全局配置详解MemoryEngineConfig 字段、默认值与源码级落地机制 在 openJiuwen agent人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习openJiuwen Agent 记忆引擎配置完全指南MemoryEngineConfig / MemoryScopeConfig / AgentMemoryConfig 深度解析openJiuwen Agent 记忆引擎配置完全指南MemoryEngineConfig / MemoryScopeConfig / AgentMemory人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习openJiuwen agent-core 记忆配置模块完全指南MemoryEngineConfig / MemoryScopeConfig / AgentMemoryConfig 深度解析openJiuwen agent core 记忆配置模块完全指南MemoryEngineConfig / MemoryScopeConfig / AgentM人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑