人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载导读MemInfo是 openJiuwenagent-core-java记忆引擎中描述单条记忆基础信息的核心数据模型它贯穿长期记忆LongTermMemory的写入、检索与注入全链路无论是用户画像分片、语义记忆、情景记忆还是摘要与变量最终都会以MemInfo的形式承载记忆 ID、内容、类型与时间戳。本文以 API 文档 MemInfo.md 为主体结合仓库源码深度剖析其字段语义、JSON 序列化规则、构建方式及在记忆检索/注入流程中的真实调用关系帮助你准确理解并正确使用该模型。MemInfo 是什么单条记忆的基础信息载体MemInfo定义在com.openjiuwen.memory包下源码位于 MemInfo.java。类的源码注释明确指出它是 Python 版 openJiuwen Core 中openjiuwen/core/memory/long_term_memory.py里MemInfo的 Java 镜像实现因此两套语言的记忆模型在语义上保持对齐。从职责上看MemInfo是记忆引擎中一条记忆的最小信息单元它不承载检索打分那属于MemResult也不承载存储细节那属于manage/mem_model下的各类MemoryUnit它只负责把记忆的唯一标识、正文内容、记忆类型与产生时间这四个要素打包成一个可序列化、可传输、可构建的 Java 对象。JsonInclude(JsonInclude.Include.NON_NULL) public class MemInfo { JsonProperty(mem_id) private String memId ; JsonProperty(content) private String content ; JsonProperty(type) private MemoryType type MemoryType.USER_PROFILE; JsonProperty(timestamp) private ZonedDateTime timestamp; // ... }字段详解四个字段承载一条记忆的完整信息API 文档中列出了memId、content、type三个字段从源码看实际模型共包含四个字段第四个timestamp用于记录记忆产生时间。各字段语义如下字段Java 类型JSON 键名默认值说明memIdStringmem_id记忆的唯一标识memory id由记忆引擎在存储时分配contentStringcontent记忆正文内容typeMemoryTypetypeMemoryType.USER_PROFILE记忆类型枚举timestampZonedDateTimetimestampnull记忆产生的时间戳值得注意的细节见 MemInfo.javaJSON 键名映射memId在序列化时映射为下划线风格的mem_id与 Python 版实现保持一致避免跨语言通信时字段名不一致。空值兜底策略memId与content在构造器和 setter 中都会做null - 的空指针兜底如this.memId memId null ? : memId;type为null时回退为MemoryType.USER_PROFILE。非空才序列化类级注解JsonInclude(JsonInclude.Include.NON_NULL)意味着timestamp为null时不会被写入 JSON 输出从而保持载荷精简。时间戳类型使用java.time.ZonedDateTime承载带时区的时间信息适合跨时区场景下的记忆回溯与排序。type 字段与 MemoryType 记忆类型枚举type字段的类型是com.openjiuwen.memory.manage.mem_model.MemoryType枚举源码见 MemoryType.java与 Python 版memory_unit.py中的MemoryType对齐。枚举定义如下枚举常量底层值value语义FRAGMENT_MEMORYuser_profile用户画像分片记忆USER_PROFILEuser_profile用户画像记忆与FRAGMENT_MEMORY共用同一底层值SEMANTIC_MEMORYsemantic_memory语义记忆EPISODIC_MEMORYepisodic_memory情景记忆VARIABLEvariable变量记忆SUMMARYsummary摘要记忆UNKNOWNunknown未知/未识别类型枚举提供了getValue()获取底层字符串值以及静态方法fromValue(String)做反向解析传入字符串与枚举底层值匹配则返回对应枚举user_profile会被优先归一到USER_PROFILE无法匹配时返回UNKNOWN。在记忆引擎内部记忆类型字符串正是通过这个解析函数转换为MemoryType后再填入MemInfo.type的。如何构建 MemInfo构造器、Builder 与反序列化API 文档提到该类型通过 Lombok 生成构建器与访问器但当前仓库的实际实现是手写编码的源码中显式提供了无参构造器、全参构造器、四个 getter/setter以及一个静态Builder内部类见 MemInfo.java并未使用 Lombok。三种构建方式各有用途方式一静态 Builder推荐链式可读MemInfo info MemInfo.builder() .memId(mem-2026-0001) .content(用户偏好使用 Java 与 Spring 技术栈) .type(MemoryType.USER_PROFILE) .timestamp(ZonedDateTime.now()) .build();Builder 的字段初始值与构造器一致memId、content、typeUSER_PROFILE、timestampnull未显式设置的字段会落到这些默认值上。方式二全参构造器MemInfo info new MemInfo(mem-2026-0001, 记忆内容, MemoryType.SEMANTIC_MEMORY, ZonedDateTime.now());构造器内部同样执行空值兜底memId/content传null会变为type传null会变为USER_PROFILE。方式三无参构造器 setterMemInfo info new MemInfo(); info.setMemId(mem-2026-0001); info.setContent(记忆内容); info.setType(MemoryType.EPISODIC_MEMORY); info.setTimestamp(ZonedDateTime.now());无参构造器是 Jackson 反序列化 JSON如{mem_id:...,content:...,type:semantic_memory,timestamp:...}时使用的入口配合JsonProperty注解即可完成JSON - MemInfo的转换。值语义equals 与 hashCodeMemInfo重写了equals与hashCode见 MemInfo.java两个对象相等的判定条件为memId与content用Objects.equals比较、type用枚举引用比较、timestamp用Objects.equals比较四者全部一致才算相等。hashCode基于这四个字段组合计算。这意味着在测试断言、集合去重、缓存键值等场景中MemInfo具备稳定的值语义例如记忆检索结果可安全地与期望结果做assertEquals对比。在记忆引擎中的真实使用场景MemInfo并不是孤立的 DTO它在 openJiuwen 长期记忆引擎中被多处直接使用以下是从源码中确认的四个典型场景。1. 分页查询用户记忆getUserMemByPageLongTermMemory的公开方法getUserMemByPage(String userId, String scopeId, int pageSize, int pageIdx, MemoryType memoryType)直接返回FutureListMemInfo见 LongTermMemory.java。其内部从检索管理器拉取原始数据后逐条构建MemInforesults.add(new MemInfo( Objects.toString(item.get(id), ), Objects.toString(item.get(mem), ), memoryTypeFrom(item.getOrDefault(mem_type, MemoryType.UNKNOWN.getValue()), MemoryType.UNKNOWN), timestampFrom(item.get(timestamp)) ));这里的memoryTypeFrom正是调用MemoryType.fromValue完成字符串到枚举的转换。同时该方法会做scopeId合法性校验非法时会抛出MEMORY_GET_MEMORY_EXECUTION_ERROR错误memoryType传null或UNKNOWN时表示不过滤类型、查询全部记忆。2. 检索结果载体MemResult.memInfo记忆检索返回的MemResult源码见 MemResult.java内部包含一个MemInfo memInfo字段与一个double score打分字段。LongTermMemory.searchUserMem/searchUserHistorySummary返回的ListMemResult中每条结果都以MemInfo承载记忆本体见 LongTermMemory.java 的toMemResults私有方法。也就是说MemResult MemInfo记忆本体 score相似度打分。3. 上下文注入构建 Related Memories 提示片段在OpenJiuwenMemoryProvider外部记忆提供者源码见 OpenJiuwenMemoryProvider.java中模型调用前的记忆预取会把检索到的记忆拼装为提示词片段for (MemResult result : memResults) { MemInfo info result.getMemInfo(); parts.add(- [ typeValue(info) ] contentValue(info) (score: formatScore(result.getScore()) )); }typeValue(info)读取info.getType()并转换为展示文本contentValue(info)读取info.getContent()。检索结果的序列化输出同样以MemInfo字段为基础id、content、type、score 四元组见同文件 L404-L423。4. 会话运行时接入OpenJiuwenMemoryRuntime在OpenJiuwenMemoryRuntimeOpenJiuwenMemoryRuntime.java中检索结果同样通过mem.getMemInfo().getContent()提取记忆正文供 Agent 运行时直接消费。测试验证检索结果中的 MemInfo 字段断言仓库测试 LongTermMemoryTest.java 对searchUserMem的行为做了精确验证模拟SearchManager分别返回USER_PROFILE、SEMANTIC_MEMORY、EPISODIC_MEMORY三类记忆再断言返回结果按打分排序后的MemInfo字段assertEquals(List.of(semantic-id, episodic-id), results.stream() .map(result - result.getMemInfo().getMemId()) .toList()); assertEquals(List.of(MemoryType.SEMANTIC_MEMORY, MemoryType.EPISODIC_MEMORY), results.stream() .map(result - result.getMemInfo().getType()) .toList());这段测试同时印证了两点其一检索排序按 score 从高到低进行语义记忆 0.9 情景记忆 0.6其二MemInfo的memId、type字段通过getMemInfo()完整透出MemInfo作为记忆检索结果的标准载体被稳定使用。小结MemInfo 的完整画像维度结论包路径com.openjiuwen.memory源码位置memory/src/main/java/com/openjiuwen/memory/MemInfo.java核心字段memId、content、type、timestamp记忆类型由 MemoryType.java 枚举定义支持画像/语义/情景/变量/摘要等类型序列化Jackson JsonPropertymem_idJsonInclude(NON_NULL)构建方式静态 Builder / 全参构造器 / 无参构造器 setter使用方LongTermMemory.getUserMemByPage、MemResult、OpenJiuwenMemoryProvider记忆注入、OpenJiuwenMemoryRuntime总的来说MemInfo是 openJiuwen 记忆引擎中信息密度高、复用面广的基础模型上层 API如LongTermMemory.getUserMemByPage接口清单见 LongTermMemory.md直接以它为返回类型下层检索与注入逻辑又以它为数据载体。掌握它的字段语义、默认值与类型体系是正确使用 openJiuwen 长期记忆能力用户画像、语义/情景记忆、变量与摘要的第一步。赞分享人工智能AI AgentAgent 框架工具调用Agent 工作流RAGMCP Clients强化学习【免费下载链接】agent-core-javaopenJiuwen agent core Java是 openJiuwen Core的 Java版本提供AI Agent开发、运行、调优与演进相关的全套SDK能力。项目地址https://gitcode.com/openJiuwen/agent-core-java点击查看免费下载相关推荐openJiuwen Agent 长期记忆引擎实践指南openjiuwen.core.memory 模块全解析openJiuwen Agent 长期记忆引擎实践指南openjiuwen.core.memory 模块全解析 openjiuwen.core.memory人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习openJiuwen 记忆引擎LongTermMemory实战指南配置、读写、检索与外部记忆接入openJiuwen 记忆引擎LongTermMemory实战指南配置、读写、检索与外部记忆接入 导读 本篇文章基于 openJiuwen agent c人工智能AI AgentAgent 框架大模型工具调用RAG提示工程强化学习DLSS Swapper9 种 DLL、8 个游戏库不更新游戏也能切换缩放版本DLSS Swapper9 种 DLL、8 个游戏库不更新游戏也能切换缩放版本 如果你的游戏还停在上一代 DLSS而新版早就发布你又不想等厂商推送补丁、桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考