项目2026年5月29日HiThinking CLI
HiThinking CLI 是一个面向开发者工作流的 Java Agent CLI。记忆模块的目标不是简单保存聊天记录,而是让 Agent 在长对话、多轮工具调用和跨会话任务中保留真正稳定、可复用的信息。
在 CLI 场景里,记忆系统需要同时处理三类问题:当前会话的短期上下文不能无限增长,用户明确要求保存的事实要跨会话复用,不同项目之间的记忆又不能互相污染。
我负责记忆系统的核心设计与实现,覆盖 MemoryManager、ConversationMemory、LongTermMemory、MemoryRetriever、ContextCompressor、TokenBudget 和 save_memory 工具接入。
这部分和 Agent 主流程、工具注册、上下文组装、CLI 命令体系都有直接关系:用户输入、助手回复、工具结果会进入短期记忆;长期事实通过 /save 或模型在用户明确要求时调用 save_memory 写入;下一轮请求前再把相关记忆检索后注入模型上下文。
- MemoryManager 作为统一门面,管理短期记忆、长期记忆、检索器、上下文压缩器和 token 预算。
- ConversationMemory 保存当前会话的用户消息、助手回复和工具结果,并在接近上下文预算时触发摘要压缩。
- LongTermMemory 将稳定事实持久化到本地 JSON 文件,默认目录为 ~/.paicli/memory/long_term_memory.json,支持去重、删除、清空和按类型统计。
- MemoryRetriever 根据当前查询检索相关记忆,只把稳定、相关的信息注入给模型,避免把当前轮临时对话误当成历史事实。
- 作用域隔离 支持 project 和 global 两类长期记忆;项目级记忆只在当前项目可见,跨项目偏好才进入全局作用域。
- CLI 管理入口 提供 /memory、/memory list、/memory search、/memory delete、/memory clear 和 /save <事实> 等命令。
- 设计短期记忆与长期记忆分层:短期记忆负责当前任务连续性,长期记忆只保存用户明确要求保留的偏好或稳定事实。
- 为 save_memory 工具设置严格触发语义:只有用户明确说“记一下”“记住”“以后记得”或要求保存长期偏好时才写入,避免模型自作主张污染记忆库。
- 长期记忆写入时记录 scope、project、source 等元数据,并通过项目路径归一化实现项目级隔离。
- 工具结果进入短期记忆前做长度截断,避免大段日志或命令输出迅速撑爆上下文窗口。
- 引入 TokenBudget 与 ContextProfile,按模型上下文窗口动态控制短期记忆预算、压缩阈值和注入给模型的记忆 token 上限。
- 通过 MemoryQueryTokenizer 和元数据匹配实现轻量检索,在不引入复杂向量库的情况下满足 CLI 记忆召回需求。
Java、Jackson、JLine、Agent Loop、Tool Calling、MemoryManager、LongTermMemory、ConversationMemory、TokenBudget、ContextCompressor相关项目
Ksmart
企业级 RAG 智能知识库平台,覆盖多格式文档解析、异步入库、混合检索、权限控制和 AI 流式问答。 MYDB
从零实现的轻量级关系型数据库,覆盖页式存储、缓存管理、B+ 树索引、WAL、事务隔离、SQL 解析和 C/S 通信。