内容
# 服务端内存服务器
**AI 记忆服务器(MCP 兼容)** 持久内存和知识图谱,用于 AI 代理。
一个单独的 Go 二进制文件,使任何 MCP 兼容的 AI 工具(Claude Code、Cursor、Continue 等)都能够在持久知识中记住、搜索和推理。无需模型下载。无需外部服务。完全离线工作。
## 为什么选择服务端内存服务器?
| 问题 | 解决方案 |
|---------|----------|
| AI 代理在会话之间会忘记所有内容 | 持久 SQLite 内存存储,软删除 |
| 关键词搜索会错过语义匹配 | 混合搜索:FTS5 关键词 + TF-IDF 向量 + RRF 融合 |
| 没有办法对知识建立模型关系 | 内置知识图谱(实体、关系、观察) |
| 现有的内存服务器需要 Python/Node/外部依赖 | 单个 Go 二进制文件,无运行时依赖 |
## 功能
- **12 个 MCP 工具** — 内存 CRUD(创建、搜索、获取、更新、删除、列表)+ 知识图谱(实体、关系、图读取/导出)+ 统计信息
- **混合搜索** — FTS5 BM25 关键词 + 256 维 TF-IDF 向量 + 互惠排名融合(RRF)。三种搜索模式:`hybrid`、`keyword`、`semantic`
- **知识图谱** — 具有观察的实体、有向关系。以 JSON 或 Markdown 导出
- **SQLite 后端** — WAL 模式、外键、ACID 事务、单文件数据库
- **无模型下载** — 纯 Go TF-IDF 特征哈希(256 维向量),无 API 密钥,无网络调用
- **双重传输** — MCP stdio(Claude Code/Cursor)+ HTTP + SSE(网页应用)
- **单个二进制文件** — `go build` → 约 15MB 静态二进制文件,无运行时依赖
## 快速入门
### 构建
```bash
# 要求:Go 1.20+,GCC(用于 CGO/SQLite)
make build
```
### 运行(stdio 模式,用于 Claude Code / Cursor)
```bash
./servex --stdio
```
### 运行(HTTP + SSE 模式,用于网页应用)
```bash
./servex --http :8080
```
### 自定义数据库路径
```bash
./servex --stdio --db ~/.servex/memory.db
```
## MCP 配置
### Claude Code
```bash
claude mcp add servex /path/to/servex -- --stdio
```
或添加到 `.claude/settings.json`:
```json
{
"mcpServers": {
"servex": {
"command": "/path/to/servex",
"args": ["--stdio"]
}
}
}
```
### Cursor / Continue / 其他 MCP 客户端
使用_stdio_传输,使用相同的命令模式。参见客户端的 MCP 文档。
## 工具
### 内存(7 个工具)
| 工具 | 描述 |
|------|-------------|
| `memory_create` | 存储新的内存,可选标签、类型、类别、重要性 |
| `memory_search` | 混合搜索:FTS5 关键词 + TF-IDF 向量 + RRF 融合。模式:`hybrid`、`keyword`、`semantic` |
| `memory_get` | 通过 ID 获取特定的内存 |
| `memory_update` | 修补内存的内容和/或标签(重新计算嵌入) |
| `memory_delete` | 软删除内存 |
| `memory_list` | 列出内存,分页和过滤(类型、标签) |
| `memory_stats` | 存储统计信息:计数、热门标签、类型、数据库大小 |
### 知识图谱(5 个工具)
| 工具 | 描述 |
|------|-------------|
| `entity_create` | 创建具有观察(原子事实)的实体 |
| `entity_search` | 按名称搜索实体 |
| `relation_create` | 实体之间的有向边(例如 `depends_on`、`uses`、`part_of`) |
| `graph_read` | 完整的图谱转储(实体 + 关系) |
| `graph_export` | 以 JSON 或 Markdown 导出图谱 |
## 架构
```
servex/
├── main.go # 入口点:stdio 或 HTTP 模式
├── Makefile # 使用 CGO 标志构建 FTS5
├── internal/
│ ├── server/
│ │ └── mcp.go # MCP 工具注册 + 处理程序(12 个工具)
│ ├── memory/
│ │ ├── store.go # SQLite CRUD、FTS5 迁移、内存生命周期
│ │ ├── search.go # 混合搜索:FTS5 + 向量 + RRF 融合
│ │ └── graph.go # 知识图谱:实体/关系/观察 CRUD
│ ├── embed/
│ │ └── embed.go # TF-IDF 特征哈希(256 维),余弦相似度
│ └── types/
│ └── types.go # 共享类型:Memory、Entity、Relation、Graph、Stats
├── migrations/
│ └── 001_init.sql # 架构:memories、FTS5、entities、observations、relations
└── web/
└── index.html # (TODO)仪表盘 UI
```
### 搜索流程
```
查询 → 分词 → FTS5 BM25 搜索 ─┐
├─ 互惠排名融合 → 前 N 个结果
分词 → TF-IDF 256 维 ─┘ (k=60,组合分数)
→ 与存储的向量进行余弦相似度计算
```
## 路线图
- [x] 第一阶段:内存 CRUD + FTS5 搜索 + MCP 服务器
- [x] 第二阶段:知识图谱(实体、关系、观察)
- [x] 第三阶段:混合搜索(FTS5 + TF-IDF 向量 + RRF 融合)
- [ ] 第四阶段:仪表盘 UI(web/index.html)
## 许可证
MIT