语义记忆存储服务

Dali是一个为Claude Code提供持久化长期记忆的MCP服务器,支持语义搜索和工具调用审计追踪。

  • by linnaxis
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 linnaxis/dali-public

使用说明

大理

一 主控程序 服务器,为Claude Code提供跨会话的持久长期内存。存储带有自动向量嵌入的内存,用于语义搜索,以及工具调用的完整审计跟踪。

特性

  • 语义搜索 --通过Ollama实现768维向量嵌入(nomic-embed-text)基于余弦相似度排序和项目上下文提升
  • 内存类型 --对话、决策、文件更改、工具使用——每个都有可选的元数据、标签和项目范围
  • 审核日志记录 --每次工具调用都会记录时间戳、输入和截断的输出,以供以后查询
  • 优雅降级 --如果Ollama不可用,记忆仍然会被存储,基于文本的搜索仍然有效;当Ollama重新上线时,嵌入物会自动回填
  • 软删除 --通过级联清理嵌入和向量映射来存档或永久删除内存

建筑

src/
  index.ts           -- Entry point, stdio MCP transport
  server.ts          -- MCP tool and resource definitions (7 tools, 2 resources)
  types.ts           -- Zod schemas and TypeScript types
  db/
    client.ts        -- SQLite wrapper (WAL mode, sqlite-vec extension)
    schema.ts        -- DDL, migrations, 6 tables + 10 indexes
  embeddings/
    ollama.ts        -- Ollama HTTP client, batch embedding (chunks of 32)
  memory/
    store.ts         -- CRUD operations, embedding backfill on startup
    search.ts        -- Vector KNN search with CTE, text fallback
  audit/
    logger.ts        -- Audit log recording (10KB output truncation)
    query.ts         -- Paginated audit queries with date/filter support

MCP工具

工具 说明
store_memory 使用自动向量嵌入存储内存
search_memory 语义向量搜索(余弦相似度,可配置最小相关性)
search_by_type 使用可选的文本查询按类型筛选内存
get_audit_log 带有日期范围和过滤器的分页审计跟踪查询
get_session_summary 会话详细信息及所有相关记忆
list_recent_memories 按时间顺序列出类型/项目筛选器
forget_memory 软删除(存档)或级联永久删除

MCP资源

资源 描述
dali://memories/recent 10个最近的回忆
dali://sessions/{sessionId}/memories 一次会议的所有回忆

安装

1.先决条件

  • Node.js 18+
  • 奥拉玛 在本地运行 nomic-embed-text 模型(可选,但建议用于矢量搜索)

2.安装Ollama(可选,用于矢量搜索)

# macOS
brew install ollama

# Pull the embedding model
ollama pull nomic-embed-text

# Start Ollama (if not already running)
ollama serve

没有Ollama,Dali仍然可以工作——记忆被存储,基于文本的搜索是可用的。当Ollama可用时,矢量嵌入会自动回填。

3.克隆、安装和构建

git clone https://github.com/linnaxis/dali-memory.git
cd dali-memory
npm install
npm run build

4.配置克劳德代码

在Claude Code配置中添加Dali作为MCP服务器。编辑 ~/.claude/mcp.json (或你的项目 .mcp.json):

{
  "mcpServers": {
    "dali": {
      "command": "node",
      "args": ["/absolute/path/to/dali-memory/dist/index.js"],
      "env": {
        "OLLAMA_BASE_URL": "http://localhost:11434",
        "OLLAMA_MODEL": "nomic-embed-text",
        "DALI_DB_PATH": "~/.claude/dali/dali.db"
      }
    }
  }
}

替换 /absolute/path/to/dali-memory 使用克隆仓库的实际路径。

5.验证

重新启动克劳德代码。您应该在MCP工具列表中看到Dali的7个可用工具。试着让克劳德“存储记忆”或“搜索记忆”,以确认它是否有效。

环境变量

变量 默认值 描述
DALI_DB_PATH ~/.claude/dali/dali.db SQLite数据库文件的路径
DALI_PROJECT 当前目录名 内存作用域的默认项目名
OLLAMA_BASE_URL http://localhost:11434 API终点
OLLAMA_MODEL nomic-embed-text 用于生成嵌入的Ollama模型

跑

# Production
npm start

# Development (auto-rebuild on changes)
npm run dev

服务器通过stdio(MCP标准)进行通信——它意味着由Claude Code启动,而不是在终端中独立运行。

数据库

Dali使用SQLite和WAL模式 sqlite-vc 矢量搜索的扩展。数据库在首次运行时自动创建,路径由指定 DALI_DB_PATH.

模式

  • memories --核心存储(类型、内容、摘要、标签、项目、会话)
  • memory_vec_map --将sqlite-vec的UUID映射到整数行ID的桥表
  • memory_embeddings --具有768维浮点向量的vec0虚拟表
  • audit_log --工具调用审计跟踪
  • sessions --会话元数据
  • file_changes --链接到内存的文件更改详细信息

技术栈

许可证

麻省理工学院