记忆存储与全文检索服务

一个基于SQLite和FTS5的持久化记忆存储服务,提供全文检索、分类管理和CRUD操作,适用于AI助手本地知识管理。

  • by baiXfeng
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 baiXfeng/agent-memory

使用说明

@百丰/代理商记忆

一个强大的MCP(模型上下文协议)服务器,提供具有全文搜索功能的持久内存存储。它使用SQLite和FTS5(全文搜索)构建,使AI助手能够通过高效的模糊搜索在本地存储、检索和管理知识。

特性

  • 持久化存储:基于SQLite的本地数据库,具有自动备份功能
  • 全文检索:FTS5,用于模糊匹配的三元组标记化
  • 内存管理:完成CRUD操作(创建、读取、更新、删除)
  • 分类:按自定义类别组织记忆
  • 关键词系统:用可搜索关键字标记记忆
  • 分页:可配置页面大小的高效搜索结果
  • 调试日志:用于故障排除的可选基于文件的日志记录
  • WAL模式:提前写入日志以实现更好的并发访问

安装

npm install @baixfeng/agent-memory

或者直接将其用作二进制文件:

npx @baixfeng/agent-memory [storage-dir] [enable-log]

配置

服务器接受两个可选的命令行参数:

1.存储目录

  • 默认: ~/.local-memory
  • 用法:指定用于存储数据库和日志的自定义目录
  • 示例: /custom/path/to/memory 或 ~/my-memory

2.启用日志文件

  • 默认: false
  • 用法:通行证 "true" 启用基于文件的日志记录
  • 备注:调试输出始终发送到stderr(在MCP检查器中可见)
  • 示例: true

示例用法

# Default configuration
agent-memory

# Custom storage directory
agent-memory /path/to/memory

# Custom storage with logging
agent-memory /path/to/memory true

MCP工具

服务器提供以下MCP工具:

1.save_memory

将新知识保存到内存数据库中。

参数:

  • title (string):记忆的简称
  • summary (string):内容简述
  • content (string):内存的完整内容/正文
  • keywords (字符串数组):可搜索关键字列表
  • category (string):用于组织内存的类别

退货:保存记录的内存ID

示例:

{
  "title": "JavaScript Closures",
  "summary": "Understanding how closures work in JavaScript",
  "content": "Closures allow functions to access variables from their outer scope...",
  "keywords": ["javascript", "closures", "scope"],
  "category": "Programming"
}

2.搜索_存储

使用全文搜索在存储的内存中搜索。

参数:

  • query (string):搜索关键字或短语
  • page (数字,可选):页码(默认值:1)
  • limit (数字,可选):每页结果(默认值:25,最大值:100)
  • category (字符串,可选):按类别筛选结果

退货:带有分页信息和内存元数据的JSON对象

示例:

{
  "query": "javascript closures",
  "page": 1,
  "limit": 10,
  "category": "Programming"
}

回应:

{
  "page": 1,
  "limit": 10,
  "results": [
    {
      "id": 1,
      "title": "JavaScript Closures",
      "summary": "Understanding how closures work in JavaScript",
      "keywords": ["javascript", "closures", "scope"],
      "category": "Programming",
      "date": "2024-01-15"
    }
  ]
}

3.read_memory

按ID读取特定内存的全部内容。

参数:

  • id (number):要检索的内存ID

退货:完整内容的完整内存记录

示例:

{
  "id": 1
}

4.update_memory

更新现有内存字段。

参数:

  • id (数字):要更新的内存ID
  • title (字符串,可选):新标题
  • summary (字符串,可选):新摘要
  • content (字符串,可选):新内容
  • keywords (字符串数组,可选):新关键字
  • category (字符串,可选):新类别

退货:成功消息

示例:

{
  "id": 1,
  "title": "Updated Title",
  "summary": "Updated summary",
  "keywords": ["javascript", "updated"]
}

5.删除记忆

按ID删除一个或多个内存。

参数:

  • ids (数字数组):要删除的内存ID列表

退货:带有已删除记录计数的确认消息

示例:

{
  "ids": [1, 2, 3]
}

6.列表_类别

列出存储记忆中的所有独特类别。

参数:无

退货:带有类别数组的JSON对象

回应:

{
  "categories": ["Programming", "Design", "Documentation"]
}

7.列表_内存

列出带有分页、类别过滤和排序的内存元数据。

参数:

  • page (数字,可选):页码(默认值:1)
  • limit (数字,可选):每页结果(默认值:25,最大值:100)
  • category (字符串,可选):按类别筛选内存
  • sort_by (字符串,可选):排序字段- created_at 或 updated_at (默认值: updated_at)
  • sort_order (字符串,可选):排序顺序- desc 或 asc (默认值: desc)

退货:带有分页信息和内存元数据的JSON对象

示例:

{
  "page": 1,
  "limit": 10,
  "category": "Programming",
  "sort_by": "updated_at",
  "sort_order": "desc"
}

回应:

{
  "page": 1,
  "limit": 10,
  "total_count": 847,
  "total_pages": 85,
  "results": [
    {
      "id": 1,
      "title": "JavaScript Closures",
      "summary": "Understanding how closures work in JavaScript",
      "keywords": ["javascript", "closures", "scope"],
      "category": "Programming",
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-01-20T15:45:00Z"
    }
  ]
}

发展

先决条件

  • Node.js>=18.0.0
  • npm或纱线

克隆存储库

git clone https://github.com/baiXfeng/agent-memory.git
cd agent-memory

安装依赖项

npm install

构建

npm run build

发展模式

npm run dev

启动服务器

npm start

数据库模式

主表: memories

CREATE TABLE memories (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  title TEXT NOT NULL,
  summary TEXT NOT NULL,
  content TEXT NOT NULL,
  keywords TEXT,
  category TEXT,
  created_at TEXT DEFAULT CURRENT_TIMESTAMP,
  updated_at TEXT DEFAULT CURRENT_TIMESTAMP
)

全文搜索表: memories_fts

使用带有三元组标记化的FTS5在所有文本字段中进行高效的模糊搜索。

文件结构

~/.local-memory/          # Default storage directory
├── memory.db            # Main SQLite database
├── memory.db.bak        # Automatic backup (created on startup)
└── debug.log            # Debug log (if enabled)

MCP配置

要将此服务器与MCP客户端(如Claude Desktop)一起使用,请将其添加到MCP配置文件中:

克劳德桌面(macOS)

编辑 ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "memory": {
      "command": "node",
      "args": ["/path/to/node_modules/@baixfeng/agent-memory/dist/index.js", "/custom/path", "true"]
    }
  }
}

故障排除

调试日志

通过传递启用基于文件的日志记录 "true" 作为第二个论点:

agent-memory /path/to/storage true

日志将写入 <storage-dir>/debug.log.

常见问题

  1. 数据库锁定错误:确保没有其他进程正在使用该数据库
  2. 权限不足:检查存储目录的写入权限
  3. 搜索未返回任何结果:尝试更广泛的查询词或检查FTS5索引状态

演出

  • FTS5搜索:通过三元组标记化进行了优化,以实现模糊匹配
  • WAL模式:支持并发读写
  • 分页:限制大型结果集的内存使用
  • 自动索引:触发器保持全文索引同步

许可证

MIT许可证-有关详细信息,请参阅许可证文件

贡献

欢迎投稿!请随时提交问题或拉取请求。

作者

凝乳酶

仓库

https://github.com/baiXfeng/agent-memory