🧠 Mnemos
面向开发人员的自托管多上下文内存服务器
Mnemos是一个与MCP兼容的知识服务器,可以将您的文档堆变成一个多上下文存储系统。它将文档组织成独立的集合,消除了内容哈希的冗余处理,并使用Postgres+pgvector和Ollama完全离线运行。
特性
- 多上下文集合:按项目隔离你的记忆(例如。,
react-docs,rust-book,company-internal)使用不区分大小写的搜索过滤。 - 确定性再摄取:SHA-256内容哈希保证幂等操作——跳过未更改的文件并在差异上自动重新分块。
- 增强的终端用户界面:使用全屏搜索界面、结果导航和详细的块检查模块探索您的上下文。
- 递归网站爬行:使用基于路径的过滤(例如,仅抓取)摄取整个文档站点
/learn上react.dev). - 稳定的局部嵌入:针对Ollama进行了优化,具有持久连接、自动转轮回退和负载节流功能。
- 块状物质量控制:自动噪声过滤(最小长度阈值+字母数字验证)确保高质量检索。
- 100%私人:完全离线。你的上下文永远不会离开你的本地机器。
快速开始
先决条件
- Docker&Docker编写
- Python 3.11+
- 奥拉玛 (用于本地嵌入)
1.安装Ollama并拉动嵌入模型
brew install ollama
ollama serve
ollama pull nomic-embed-text2.启动数据库
cd docker
docker-compose up -d3.安装依赖项
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt4.启动服务器
# Option A: Start via CLI (recommended)
python cli/mnemos.py server
# Option B: Run API directly (development)
uvicorn src.main:app --reload5.添加文档
python cli/mnemos.py add ./docs/my-document.pdf --collection my-project
# Or crawl a site
python cli/mnemos.py ingest https://react.dev/learn --path-filter /learn --collection react6.搜索
python cli/mnemos.py search "how to use useEffect"CLI命令
| 命令 | 描述 | 标志 |
|---|---|---|
| `mnemos add | ||
| ` | 添加文档或目录 | -c , -r (递归) |
mnemos ingest | 获取URL或抓取网站 | -c , --path-filter |
mnemos search | 搜索相关上下文 | -c , `-k |
| ` | ||
mnemos list | 列出所有文件 | -c , `-n |
| ` | ||
mnemos export | 将知识库备份到JSON | -c |
mnemos delete | 删除文档 | -f (力) |
mnemos server | 启动API服务器 | --host, --port |
API终点
REST API
Mnemos为文档管理和操作提供了一个标准的REST API。
| 方法 | 端点 | 描述 |
|---|---|---|
POST | /api/documents | 上传文档 |
GET | /api/documents | 列出所有文件 |
GET | /api/collections | 列出所有独特的收藏 |
GET | /api/documents/export | 块的完整JSON备份 |
DELETE | /api/documents/{id} | 删除文档 |
POST | /api/search | 向量相似性搜索 |
POST | /api/ingest/url | 获取单个URL |
POST | /api/ingest/site | 抓取文档网站 |
GET | /api/health | 健康和统计检查 |
MCP端点
Mnemos通过模型上下文协议(MCP)公开其检索功能,允许AI代理将其作为外部上下文提供者进行查询。从MCP客户端的角度来看,Mnemos被设计为无状态;所有持久性都存在于服务器端。
| 方法 | 端点 | 描述 |
|---|---|---|
GET | /mcp/tools | 列出可用的MCP工具 |
POST | /mcp/call | 执行MCP工具 |
MCP集成
克劳德桌面版
添加到您的Claude桌面配置(~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"mnemos": {
"command": "curl",
"args": ["-X", "POST", "http://localhost:8000/mcp/call", "-H", "Content-Type: application/json", "-d"]
}
}
}可用的MCP工具
- 搜索文本:在知识库中搜索相关上下文
- list_文档:列出知识库中的所有文档
- get_document_info:获取文档的详细信息
配置
环境变量(.env):
| 变量 | 默认值 | 描述 |
|---|---|---|
DATABASE_URL | postgresql+asyncpg://... | Postgres连接字符串 |
EMBEDDING_PROVIDER | ollama | ollama (本地首次默认)或 openai |
EMBEDDING_MODEL | nomic-embed-text | Ollama嵌入模型 |
OLLAMA_BASE_URL | http://127.0.0.1:11434 | Ollama API网址 |
CHUNK_SIZE | 300 | 每个块的目标字符数 |
CHUNK_OVERLAP | 40 | 块之间的重叠 |
建筑
graph TD
User([User CLI / App]) --> API[FastAPI Server]
API --> DB[(PostgreSQL + pgvector)]
API --> Ollama[Ollama Local Embeddings]
subgraph Ingestion Pipeline
API --> Parser[Document Parser]
Parser --> Chunker[Text Chunker]
Chunker --> HashCheck[SHA-256 Content Hash]
HashCheck --> Embedding[Vector Generation]
end
subgraph Retrieval
API --> Search[Vector Search]
Search --> Context[Context Assembler]
end设计原则
- 默认情况下,本地优先:所有繁重的工作(矢量/搜索)都发生在您的硬件上。
- 确定性摄入:SHA-256哈希确保幂等性和安全重新运行。
- 显式上下文隔离:多收集支持可防止跨项目上下文污染。
- 可检查的检索:相似性得分和块元数据被公开以建立信任。
- 零供应商锁定:基于标准的技术栈(Postgres、MCP、REST)。
支持的嵌入模型
| 型号 | 尺寸 | 备注 |
|---|---|---|
nomic-embed-text | 768 | 默认,平衡良好 |
mxbai-embed-large | 1024 | 更高质量 |
all-minilm | 384 | 更快、更小 |
安全态势
- 仅限本地:默认情况下,Mnemos绑定到
0.0.0.0但不包括认证。它用于本地使用或安全隧道后面。 - 无外部通话:所有矢量生成和检索都在本地进行。遥测或文档数据不会发送到外部服务器。
- SQLi预防:对所有数据库交互使用SQLAlchemy ORM和参数化查询。
非目标
- 云主机:Mnemos不是为多租户云SaaS而设计的。
- 高级LLM编排:它侧重于提供上下文,而不是成为一个完整的RAG代理。
- 浏览器自动化:摄入是通过CLI或URL爬虫进行的,而不是GUI自动化工具。
发展
black src/ cli/
pytest tests/