深入 Memcortex:用于 LLMs 的轻量级语义记忆层
Source: Dev.to
为什么上下文很重要
LLM 并不能真正存储过去的对话。它唯一的 记忆 是上下文窗口,一个固定长度的输入缓冲区(例如 GPT‑4.1 为 128 k token,Claude 3.5 Sonnet 为 200 k+,Gemini 1.5 Pro 可达 200 万 token)。当对话超出该限制时,调度器必须为下一个查询执行三个关键步骤:
- 决定哪些信息最重要。
- 压缩或摘要历史记录。
- 将相关历史重新注入提示中。
对于构建自定义代理的开发者来说,这一关键的编排层并不会在集成这些超大规模 AI 助手的 API 时自动提供。你必须自行构建,而正是这种需求催生了 MemCortex 的想法。
MemCortex 的不同之处
核心区别在于 MemCortex 是一个 语义记忆层,而不仅仅是所有先前对话的简单列表。它不把原始文本历史直接塞进每个请求,而是存储过去消息的向量嵌入,并通过向量搜索只检索相关的记忆。这种架构与业界常见的 检索增强生成 (RAG) 模式相吻合。
MemCortex 使用:
- Ollama 在本地运行开源的
nomic-embed-text嵌入模型,实现快速、隐私友好的向量生成。 - Weaviate 进行向量存储和索引。
所有组件打包进单个 Docker 容器,使 MemCortex 成为可移植、可定制的记忆层,可在本地、服务器或云端运行。通过唯一的 /chat 端点,MemCortex 充当为你的应用提供丰富上下文的中间件。
工作原理(高层概览)

摄取(Ingestion)
- 获取每条新消息或事件。
- 使用 Ollama 调用
nomic-embed-text模型生成嵌入向量。 - 将原始文本、向量以及关联的元数据(如时间戳)一起存储。
检索(Retrieval)
- 收到新的用户查询。
- 对查询进行嵌入。
- 在 Weaviate 中执行向量搜索。
- 取出相似度最高的前 k 条作为 “记忆”。
- 仅将这些相关记忆注入 LLM 的上下文。
该过程与企业级 AI 系统处理长期连贯性的方式相似,但 MemCortex 提供了轻量、开发者友好的实现。
为什么我会构建它:为代理解决记忆问题
构建一个复杂的 AI 代理时,你需要三件事:
- 长期回忆 – 在会话之间记住重要事实。
- 相关性 – 只检索与当前任务相关的上下文。
- 效率 – 避免在每个提示中塞入整段对话。
MemCortex 通过以下特性解决这些需求:
- 相关性评分 – 可配置的向量距离分数和相关性阈值。
- 最大记忆距离 – 可调环境变量,确保只返回高度相似的记忆。
- 持久化 – Weaviate 在进程重启后仍保留记忆,对真实世界的代理至关重要。
- 可插拔后端 – 可轻松替换嵌入模型、向量存储,或加入自定义排序逻辑。
MemCortex 当前的定位
MemCortex 是一个概念验证(POC)/可投入生产的脚手架。它是以下场景的强大基础:
- AI 代理
- 客服机器人
- 工作流助手
- 知识增强聊天系统
- Memory‑RAG 原型
它的设计目标是简洁、灵活,并且对外围应用逻辑保持刻意的无偏见。
限制
作为独立组件,MemCortex 仍有以下约束:
- 可扩展性和速度完全取决于你选择的存储/索引方案。
- 准确性和相关性依赖于嵌入质量及检索逻辑。
- 持久化、备份和安全由集成容器的开发者自行负责。
- 成本随存储、嵌入和检索频率而增长。
- 它本身不具备推理、摘要或优先级排序功能,需由你实现相应的检索逻辑。
未来改进方向
系统可能的下一步演进包括:
- 时间衰减评分(近期加权)
- 记忆摘要
- 主题聚类(提升检索效率)
- 每条记忆的多向量存储
- 事件驱动记忆(“仅保存有意义的消息”)
- 情感/上下文标签
已有的开源项目 LangMem 提供了从对话中提取重要信息、通过提示优化代理行为以及维护长期记忆的工具。
结论
MemCortex 是让你的 AI 应用拥有 持久、语义记忆 的小而关键的一步,使其从短期聊天伙伴转变为具备长期能力的代理。随着 AI 代理能力的提升,这类系统将弥合短期上下文与真正长期推理之间的鸿沟。感兴趣的朋友可以在 GitHub 上获取源码并进行扩展、优化或集成。