openJiuwen 记忆引擎基础模型:MemInfo 单条记忆信息结构全解
人工智能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),仅供参考

相关新闻

模拟退火求解二维装箱问题:原理、实现与工程调优

模拟退火求解二维装箱问题:原理、实现与工程调优

模拟退火算法求解装箱问题,我第一次真正上手,是在一个托盘排样项目里。需求方只说了一句话:把尺寸不一的纸箱尽量多地放进托盘,允许90度旋转,不许压坏。我当时觉得,这就是矩形排样,先求个面积下…

2026/10/14 20:49:14 阅读更多 →
51单片机DHT11温湿度采集实战:从仿真到实物的完整拆解

51单片机DHT11温湿度采集实战:从仿真到实物的完整拆解

简介:一套以51单片机为核心的温湿度采集监控完整工程,面向电子爱好者、嵌入式初学者及课程设计学生。资料基于Keil平台,由C语言编写,实现温湿度采集(SHT10传感器)、日历时钟(DS1302)…

2026/10/14 20:49:14 阅读更多 →
Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

Towards Automated Regulatory Compliance Verification in Financial Auditing with Large Language Mo...

文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现财务审计中监管合规性的自动验证,旨在解决传统审计中人工验证合规性的低效问题。研究对比了开源LLMs(如Llama-2系列)与专有LLMs(如OpenAI的GPT系列)在合规性检测中的性能,使用了普华永道(PwC)提供的两个自定义…

2026/10/14 20:48:13 阅读更多 →

最新新闻

AI辅助开发实战:用Python重做一个mini版Photoshop

AI辅助开发实战:用Python重做一个mini版Photoshop

最近技术社区和设计圈都在讨论一件事:Adobe 更新应用内许可条款后,不少开发者担心“用 AI 辅助开发软件”会撞上版权红线;随后 Adobe 官方人员在社区公开回应,表示不会对使用 AI 辅助开发的非商业开源替代品采取法律行动&#xff…

2026/10/14 21:38:32 阅读更多 →
ASO优化实力品牌怎么选:从关键词到转化闭环的筛选指南

ASO优化实力品牌怎么选:从关键词到转化闭环的筛选指南

做应用推广这些年,我接触最多的词就是ASO优化。不管你的产品是新上架还是已经跑了一年,应用商店的搜索结果、榜单位置、详情页转化,都直接决定自然量的大小。很多人一听说某个品牌擅长ASO优化,第一反应是“那家能帮我冲榜吗”&…

2026/10/14 21:38:32 阅读更多 →
无人自助拼豆系统核心逻辑实现与全流程部署实战操作指南

无人自助拼豆系统核心逻辑实现与全流程部署实战操作指南

无人自助拼豆系统概述 无人自助拼豆系统是一种基于物联网与软件开发技术的智能设备管理系统,旨在为用户提供便捷的拼豆服务。该系统通常包括用户端、管理后台及硬件设备之间的交互逻辑,实现从用户操作到数据处理的全流程自动化。通过结合Spring Boot、My…

2026/10/14 21:38:32 阅读更多 →
深入解析 CMake 缓存机制:删掉 CMakeCache.txt 与 CMakeFiles/ 的正确时机

深入解析 CMake 缓存机制:删掉 CMakeCache.txt 与 CMakeFiles/ 的正确时机

先说一个近乎人人遇过的场景:白天还好好的 CMake 工程,下午一改CMakeLists.txt,再一编译就开始闹脾气——头文件找不到、链接器报一堆 undefined reference、甚至改动完全没有生效。这时候老手多半会不动声色抛出千古名句:“把 CM…

2026/10/14 21:38:32 阅读更多 →
教务系统后端实战:MySQL 8.0 + Spring Boot 3.2 工程化搭建指南

教务系统后端实战:MySQL 8.0 + Spring Boot 3.2 工程化搭建指南

简介:本资源是一份面向高校计算机专业学生的数据库课程设计实践材料,聚焦教务管理系统的完整开发流程,以MySQL为数据存储核心、Java为应用实现语言,帮助初学者掌握需求分析、ER建模、SQL脚本编写、JDBC连接、前后端基础交互等关键…

2026/10/14 21:38:32 阅读更多 →
48V输入LDO稳压芯片方案:PW8600 80V耐压/70V宽压/1.8μA低功耗电路详解

48V输入LDO稳压芯片方案:PW8600 80V耐压/70V宽压/1.8μA低功耗电路详解

LDO 稳压芯片 选型助手 面向硬件工程师与电子研发人员,通过输入电压 / 输出电压快速匹配合适的 LDO 型号, 并提供完整参数查阅、外围器件建议与型号清单,让选型一步到位。 传统 LDO 耐压不足 5V/6V LDO 无法直连 24V/36V/48V 总线&#xff0c…

2026/10/14 21:37:29 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →