AI代理本地长期记忆服务

Mind是一个为AI代理提供的本地共享长期记忆服务,运行在Docker中,使用SQLite数据库和sqlite-vec进行向量搜索,支持OpenRouter嵌入和可选的LLM辅助功能。

  • by siddhantparadox
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 siddhantparadox/mind-mcp

使用说明

心智🧠

心智 是为您的AI代理提供的本地共享长期内存服务。

  • 完全在本地运行 码头工人
  • 将所有内容存储在一个单一的 SQLite 数据库与 sqlite-vec 用于矢量搜索
  • 用途 开放路由 用于嵌入+可选的LLM辅助(分类和总结)
  • 暴露a Gradio v6用户界面 对于人类
  • 暴露一个 MCP服务器 代理(Claude、Cursor等)在同一端口上

一切都在你的机器上。


建筑

  • 数据库: SQLite与 sqlite-vec 作为 vec0 用于嵌入的虚拟表:contentReference[oacite:3]{index=3}
    • 主要表格: memories, vec_memories, clusters, memory_relations
  • 嵌入: 开放路由 /embeddings
    • 型号: MIND_EMBEDDING_MODEL (默认值 qwen/qwen3-embedding-8b):content参考[oacite:4]{索引=4}
  • LLM辅助(可选): 开放路由 /chat/completions
    • 型号: MIND_LLM_MODEL (默认值 qwen/qwen-2.5-7b-instruct,在 .env):content参考[oacite:5]{索引=5}
    • 用于推断 type, tags, importance和a summary 对于每个内存
  • UI和MCP: Gradio v6 Blocks,与 mcp_server=True 自定义主题/CSS /gradio_api/mcp/ :content参考[oacite:6]{索引=6}

先决条件

你可以完全通过Docker运行Mind(推荐)。

必需

  • OpenRouter帐户+API密钥
    • 创建OpenRouter帐户
    • 获取API密钥并设置 OPENROUTER_API_KEY 在 .env
  • 码头工人 & Docker Compose
    • Docker 24+推荐
    • Compose v2+(通常与Docker桌面捆绑在一起)

可选(适用于许多MCP客户端)

如果您的MCP客户端仅支持 本地stdio服务器 (Claude Desktop、许多Cursor版本等),您还需要:

  • Node.js (20+推荐)
  • mcp-remote 全局安装:
npm install -g mcp-remote

mcp-remote 是一个小型CLI,允许仅支持stdio的MCP客户端与Mind的HTTP MCP端点进行通信。


配置(.env)

创建一个 .env repo根目录中的文件:

# Required: OpenRouter key
OPENROUTER_API_KEY=YOUR_OPENROUTER_API_KEY_HERE

# Optional overrides (all have defaults in code)
MIND_EMBEDDING_MODEL=qwen/qwen3-embedding-8b
MIND_LLM_MODEL=google/gemini-2.5-flash-lite-preview-09-2025
MIND_EMBEDDING_DIM=4096

SQLITE_VEC_PATH=/usr/local/lib/vec0

MIND_DATA_DIR=./data
MIND_DB_PATH=./data/mind.db

MIND_SERVER_NAME=0.0.0.0
MIND_SERVER_PORT=7860

# AI assist: if true, Mind uses an LLM to infer type/tags/importance/summary
MIND_AI_ASSIST=true

# Reserved for future automatic clustering
MIND_AUTO_CLUSTER=true

笔记:

  • OPENROUTER_API_KEY 必须 设置。
  • MIND_AI_ASSIST 默认为 true in代码和in docker-compose.yml,因此除非您明确关闭AI辅助,否则它将处于打开状态。

奔跑的头脑

Docker(推荐)

构建并运行:

docker compose up --build

这个:

  • 安装Python deps+ sqlite-vec 进入图像
  • 确保 /app/data 数据库存在
  • 启动Mind服务器 http://localhost:7860
  • 创建/使用 mind_data 持久存储卷

访问权限:

数据:

  • SQLite数据库位于 /app/data/mind.db 集装箱内
  • 坚持在 mind_data Docker卷

本地(非Docker)开发

如果你想直接运行Brain:

pip install -r requirements.txt
export OPENROUTER_API_KEY=sk-or-...
python -m mind.main

相同端点:


AI辅助:它做什么

当 AI辅助已启用 (MIND_AI_ASSIST=true 和/或每次通话 use_ai 标志为真):

  • memory_engine.create_memory() 将呼叫 classify_memory() 通过OpenRouter。

  • LLM返回JSON,其中包含:

    • type:其中之一 fact, preference, task, journal, note
    • tags:小写标签列表
    • importance: 0.0–1.0
    • summary:单行描述
  • 当你添加内存时,Mind会使用这些来填充缺失的元数据。

您可以通过以下方式禁用AI辅助:

  • 设置 MIND_AI_ASSIST=false 在 .env,以及
  • (如果UI仍然显示“使用AI”复选框)取消选中它,则调用pass use_ai=False.

即使关闭了人工智能辅助,Mind仍然:

  • 存储文本
  • 通过OpenRouter进行计算机嵌入
  • 支持语义搜索

UI使用

用户界面位于 http://localhost:7860 并且在 mind/ui.py.

1.添加内存

  1. 转到 “添加内存” 选项卡。

  2. 填写:

    • 内存文本 -你想让Mind记住的。
    • 可选的 标签 –逗号分隔的列表,如 work, cursor, project-x.
    • 可选的 重要性 –滑块从0.0到1.0。
  3. 点击 保存到脑海中.

引擎盖下:

  • mind_add_memory (UI处理程序+MCP工具)调用 memory_engine.create_memory().

  • 如果启用了AI辅助,LLM会建议类型/标签/重要性/摘要。

  • Mind通过OpenRouter计算嵌入并插入到:

    • memories (元数据+原始文本)
    • vec_memories (嵌入)

UI中显示了存储内存的JSON表示,包括 id, uuid, type, tags, importance、时间戳等。

2.搜索记忆

  1. 转到 “搜索” 选项卡。

  2. 输入自然语言 搜索查询例如:

    • “我昨天做了什么?”
    • “我的Node.js偏好设置”
  3. 可选择调整 最大结果.

  4. 点击 搜索思维.

引擎盖下:

  • mind_search_memory 电话 memory_engine.search_memories() 与您的查询。

  • Mind通过OpenRouter嵌入查询,然后运行sqlite-vec搜索:

    WITH matches AS (
      SELECT rowid, distance
      FROM vec_memories
      WHERE embedding MATCH ?
      ORDER BY distance
      LIMIT ?
    )
    SELECT m.*, matches.distance
    FROM matches
    JOIN memories m ON m.id = matches.rowid
    WHERE m.deleted_at IS NULL
    ORDER BY matches.distance;
    
  • 结果以JSON格式返回,每个结果都有一个 distance 分数(越小越接近)。

3.删除内存

最底层 搜索:

  1. 注意数字 id 您要删除的内存。
  2. 请输入 内存id.
  3. 点击 删除.

引擎盖下:

  • mind_delete_memory 电话 memory_engine.delete_memory(id).
  • 心软删除记忆(deleted_at set)并从中删除其嵌入 vec_memories.

MCP服务器

Mind通过Gradio v6在以下平台上公开MCP工具:

http://localhost:7860/gradio_api/mcp/

此端点通过MCP说话 HTTP流 运输,而不是stdio。

可用工具(简化)

核心工具(包括UI和MCP)是:

1️⃣ mind_add_memory

async def mind_add_memory(
    text: str,
    tags_text: str | None = None,
    importance: float = 0.5,
)

当用户说出以下内容时使用:

  • “请记住,我正在与Bun.Use Mind一起进行极光项目。”
  • “使用Mind记住我明天需要复习入职培训。”

行为:

  • 将文本存储为内存。
  • 可选地使用AI辅助对类型/标签/重要性/摘要进行分类。
  • 返回存储的内存对象,包括其 id.

2️⃣ mind_search_memory

async def mind_search_memory(
    query: str,
    max_results: int = 20,
)

当用户说:

  • “用Mind告诉我昨天做了什么。”
  • “Mind还记得奥罗拉项目吗?”
  • “在Mind上搜索我的编辑偏好。”

行为:

  • 嵌入 query,搜索 vec_memories,并返回到 max_results 最接近的比赛。

3️⃣ mind_delete_memory

async def mind_delete_memory(memory_id: int)

当用户说:

  • “从脑海中抹去这段记忆。”
  • “从脑海中删除内存42。”

行为:

  • Soft删除内存,删除其嵌入,然后返回 { "deleted_id": 42 }.

使用MCP客户端的Mind

为什么 mcp-remote 通常是必需的

Mind(通过Gradio)与MCP对话 HTTP流.

大多数当前的MCP客户端(Claude Desktop,许多Cursor版本)仅支持 进程/stdio MCP服务器。 mcp-remote 弥合这一差距:

MCP客户端⇄ 标准输入输出⇄ mcp-remote ⇄ HTTP流⇄ Mind

安装 mcp-remote

npm install -g mcp-remote

示例配置(克劳德桌面/光标样式)

{
  "mcpServers": {
    "mind": {
      "command": "mcp-remote",
      "args": ["http://localhost:7860/gradio_api/mcp/"]
    }
  }
}

现在你可以说:

  • “使用Mind记住,我最喜欢的编辑器主题是Nord。”
  • “用头脑告诉我昨天做了什么。”
  • “使用Mind删除关于旧仓库的记忆。”

mcp-remote 将:

  1. 从本地进程开始,通过stdio与MCP对话。
  2. 将这些调用转发到Mind的HTTP MCP端点。
  3. 将结果返回给客户端。

直接 url (如果您的客户端本机支持HTTP MCP)

未来的一些客户端将直接支持HTTP MCP。在这些配置中:

{
  "mcpServers": {
    "mind": {
      "url": "http://localhost:7860/gradio_api/mcp/"
    }
  }
}

但今天,大多数IDE客户端仍然需要 mcp-remote 桥。


环境变量(参考)

全部处理完毕 mind/config.py:

  • OPENROUTER_API_KEY (必需的)
  • OPENROUTER_BASE (默认值 https://openrouter.ai/api/v1)
  • MIND_EMBEDDING_MODEL (默认值 qwen/qwen3-embedding-8b)
  • MIND_LLM_MODEL (默认值 qwen/qwen-2.5-7b-instruct)
  • MIND_EMBEDDING_DIM (默认值 4096)
  • SQLITE_VEC_PATH (默认值 /usr/local/lib/vec0)
  • MIND_DATA_DIR (默认值 <repo>/data)
  • MIND_DB_PATH (默认值 ${MIND_DATA_DIR}/mind.db)
  • MIND_SERVER_NAME (默认值 0.0.0.0)
  • MIND_SERVER_PORT (默认值 7860)
  • MIND_AI_ASSIST (默认值 "true")
  • MIND_AUTO_CLUSTER (默认值 "true",保留供将来使用)