章节 01
导读 / 主楼:Minerva:一款真正"懂你"的本地隐私优先型AI助手
本文介绍Minerva——一个实验性的Python本地AI助手项目,它采用独特的工具化记忆架构,通过实体知识图谱和向量索引实现长期记忆,让用户数据完全保留在本地设备上。
正文
本文介绍Minerva——一个实验性的Python本地AI助手项目,它采用独特的工具化记忆架构,通过实体知识图谱和向量索引实现长期记忆,让用户数据完全保留在本地设备上。
章节 01
本文介绍Minerva——一个实验性的Python本地AI助手项目,它采用独特的工具化记忆架构,通过实体知识图谱和向量索引实现长期记忆,让用户数据完全保留在本地设备上。
章节 02
Minerva从设计之初就将隐私保护作为核心原则。与依赖云端API的助手不同,Minerva使用本地部署的大语言模型(通过llama-cpp-python运行GGUF格式模型),所有数据处理都在用户自己的设备上完成。这意味着用户的对话内容、个人习惯、偏好设置等敏感信息永远不会离开本地机器,从根本上杜绝了数据泄露的风险。
这种设计对于注重隐私的用户、需要在离线环境下工作的场景,以及处理敏感信息的专业人士来说,具有独特的吸引力。用户无需担心对话记录被用于模型训练,也无需信任第三方服务商的数据保护承诺。
章节 03
Minerva最引人注目的创新在于其记忆系统的设计。与大多数AI助手采用的被动式对话摘要不同,Minerva实现了一种"工具化记忆架构"(Tool-Based Memory Architecture)。在这个架构中,大语言模型被赋予了两个核心工具:retrieve(检索)和manage_memory(管理记忆)。
章节 04
当用户在对话中提及过往的信息或个人生活时,Minerva会暂停文本生成,主动调用retrieve工具。该工具通过XML标签发起调用,从本地SQLite数据库和向量索引中检索语义匹配的内容,同时利用实体知识图谱(Entity Knowledge Graph)查找相关的拓扑邻居节点。检索完成后,相关信息被无缝注入到对话上下文中,使AI能够基于完整的背景知识生成准确的回应。
这种主动检索机制确保了Minerva不会"遗忘"重要的用户信息,无论是几个月前提到的生日、偏好设置,还是曾经讨论过的项目细节,都能在需要时被准确召回。
章节 05
manage_memory工具负责在对话过程中动态更新知识库。当Minerva从对话中学习到关于用户的新信息(或发现旧信息需要更新)时,它会主动发出包含多个元素的JSON数组载荷,用于存储、更新或删除记忆条目。
特别值得注意的是,活跃的大语言模型会直接格式化拓扑关系三元组(FactEdge triplets),将这些预映射的关系链嵌入到工具调用中。在生成流结束时,后台的MemoryOrchestrator线程会捕获这些调用,自动处理模糊字符串解析并即时计算向量嵌入,整个过程无需依赖繁重的离线提取管道。
章节 06
Minerva的代码库采用模块化设计,主要组件包括:
配置管理(src.config):集中管理所有模型超参数(上下文窗口、批大小、内存映射设置)和模型仓库配置。用户可以通过修改config.toml文件,轻松在默认的Qwen3-8B-GGUF模型和其他模型之间切换,无需修改任何Python代码。
记忆数据库(src.memory.db):基于SQLAlchemy ORM的统一数据层,处理EntityNode、GraphEdge、EmbeddingIndex等数据模型的持久化存储。
记忆编排器(src.memory.orchestrator):后台队列管理器,负责在主线程之外处理密集的图构建和扩展工作,确保对话响应的流畅性。
RAG对话引擎(src.models.rag_chat):智能对话拦截器,作为应用的入口点,协调LLM推理与记忆工具的调用。
章节 07
Minerva记忆系统的核心是一个实体知识图谱。与传统的键值对存储或简单的向量检索不同,知识图谱以结构化的方式存储信息,实体作为节点,关系作为边,形成一个可以遍历的语义网络。
例如,当用户提到"我下周要去北京出差",系统可能创建"用户"、"北京"、"出差"等实体节点,以及"计划前往"、"目的"等关系边。当后续对话中提到"那里的天气怎么样",系统可以通过图谱关系理解"那里"指的是"北京",从而提供准确的回应。
这种图结构不仅支持精确的事实检索,还能通过拓扑遍历发现隐含的关联,为对话提供更丰富的上下文。
章节 08
Minerva提供了灵活的集成方式。基础使用只需运行python -m src.chat即可启动交互式对话。对于开发者,项目提供了Chat类,可以轻松嵌入到其他应用中:
from src.chat import Chat
assistant = Chat()
for token in assistant.send_message("你好,Minerva!", stream=True):
print(token, end="", flush=True)
这种设计使得Minerva可以被包装成Discord机器人、FastAPI服务,或集成到任何Python应用中。