内容
# deja
[](https://github.com/CynepMyx/deja/actions)
[](https://pypi.org/project/dejasearch/)
[](https://pypi.org/project/dejasearch/)
[](LICENSE)
[](https://modelcontextprotocol.io/)
> 在您的 Claude Code 会话历史中进行语义搜索。通过含义而不是关键词来提问过去的对话。
**deja** 是一个 [MCP 服务器](https://modelcontextprotocol.io/),它索引 Claude Code JSONL 会话并直接从 Claude Code 提供混合搜索(向量 + 全文)。
## 工作原理
```
~/.claude/projects/*/ deja index index.db
*.jsonl ──────────────► (SQLite + vec + FTS5)
embeddings
│
│ deja serve (MCP stdio)
▼
Claude Code
"search past sessions"
```
1. **索引** — 解析 JSONL 会话文件,提取对话片段,使用 `multilingual-e5-small` 嵌入,存储在 SQLite 中
2. **服务** — MCP 服务器打开索引,通过 stdio 传输回答搜索查询
搜索结合向量 KNN(语义相似性)和 FTS5(关键词匹配)通过 Reciprocal Rank Fusion。
## 安装
```bash
pip install dejasearch
```
或从源代码:
```bash
git clone https://github.com/CynepMyx/deja.git
cd deja
pip install -e .
```
首次运行下载嵌入模型(~117 MB)。
## 用法
### 构建索引
```bash
deja index # 增量 — 仅新的/更改的文件
deja index --reindex # 完全重建
```
扫描所有 `~/.claude/projects/*/*.jsonl` 文件。
### 添加到 Claude Code
在 `~/.claude.json` 的 `mcpServers` 下添加:
```json
"deja": {
"type": "stdio",
"command": "/path/to/deja/.venv/Scripts/deja.exe",
"args": ["serve"],
"env": {
"PYTHONUNBUFFERED": "1"
}
}
```
重启 Claude Code — deja 将作为连接的 MCP 服务器出现。
### MCP 工具
| 工具 | 描述 |
|------|-------------|
| `search` | 跨所有会话的混合语义 + 关键词搜索 |
| `get_context` | 获取一个片段及其周围的对话(± 窗口) |
| `get_session_chunks` | 获取会话的索引片段(不是原始消息) |
**search** 参数:
- `query`(字符串)— 搜索内容
- `limit`(整数,默认 10)— 最大结果数
- `project`(字符串,可选)— 按项目过滤
- `date_from` / `date_to`(字符串,可选)— ISO 日期范围
### 自动索引(可选)
在 Claude Code 会话结束时自动索引。在 `~/.claude/settings.json` 中添加一个 Stop 钩子:
```json
"hooks": {
"Stop": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "/path/to/deja/.venv/bin/deja index"
}
]
}
]
}
```
在 Windows 上使用 Git Bash,包装在一个 shell 脚本中:
```bash
#!/bin/bash
DEJA="/path/to/deja/.venv/Scripts/deja.exe"
[ -f "$DEJA" ] && "$DEJA" index >/dev/null 2>&1 &
```
```json
"command": "bash /path/to/deja-index.sh"
```
PID 锁防止并发索引器 — 多个会话安全。
## 技术栈
- **[fastembed](https://github.com/qdrant/fastembed)** — ONNX 嵌入(`intfloat/multilingual-e5-small`,384 维)
- **[sqlite-vec](https://github.com/asg017/sqlite-vec)** — SQLite 中的向量 KNN 搜索
- **SQLite FTS5** — 全文关键词搜索
- **[FastMCP](https://github.com/jlowin/fastmcp)** — MCP 服务器框架
## 性能
| 指标 | 值 |
|--------|-------|
| 增量索引 | < 30 秒 |
| 搜索延迟(热启动) | < 500 毫秒 |
| 首次搜索(冷启动) | < 5 秒 |
| RAM(搜索) | ~150 MB |
| RAM(索引) | ~300 MB |
## 开发
```bash
pip install -e ".[dev]"
pytest
```
## 许可证
[MIT](LICENSE)