南京,中国
项目2026年5月29日

HiThinking CLI

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

相关项目

Ksmart

企业级 RAG 智能知识库平台,覆盖多格式文档解析、异步入库、混合检索、权限控制和 AI 流式问答。

MYDB

从零实现的轻量级关系型数据库,覆盖页式存储、缓存管理、B+ 树索引、WAL、事务隔离、SQL 解析和 C/S 通信。