# SYNAPSE 文档 — 完整参考 # 生成时间:2026-07-18T06:05:08.180Z # 文章总数:47 本文档包含完整的 Synapse API 文档。 Base URL: https://synapse.schaefer.zone Language: zh ======================================================================== ## 分类:快速入门 开始使用 Synapse 所需的一切。 ──────────────────────────────────────────────────────────── # 认证与 Mind Key SUMMARY: Synapse 认证机制:Agent 用 Mind Key,人类用 JWT,只能用 URL 的工具用 ?key=。 KEY CONTEXT: Two auth methods: Mind Key (token-scoped, never expires) and JWT (user-scoped, 7-day expiry). Mind Key: Authorization: Bearer mk_xxx OR ?key=mk_xxx (60 req/min limit on query) JWT: Authorization: Bearer eyJ... (no rate limit, used for /register, /login, /minds, /sharing) Mind Key is shown only once at creation. Store it permanently. Each mind has exactly one Mind Key. Multiple minds = multiple keys. 认证与 Mind Key Synapse 使用两种认证方法,各自针对不同用例优化。理解它们的区别对构建可靠集成至关重要。 两种认证方法 | 方法 | 用例 | 限速 | 过期 | |--------|----------|------------|--------| | Mind Key | LLM Agent、自动化工具 | 无(header)/ 60 次/分钟(query) | 永不过期 | | JWT | 人类界面 UI、账户操作 | 无 | 7 天 | Mind Key(用于 Agent) Mind Key 是租户范围的 API 令牌。它对单个 Mind 的数据(记忆、任务、聊天、脚本等)进行认证。适用于: - 调用 API 的 LLM Agent - 后台自动化脚本 - MCP Server 配置 - 任何长期集成 头部认证(推荐) [CODE BLOCK] 查询参数(用于只能用 URL 的工具) [CODE BLOCK] > [!WARNING] > 查询参数被限速为每分钟 60 次请求。Bearer 头无限制。客户端支持自定义请求头时,请始终使用请求头。 创建 Mind Key [CODE BLOCK] 响应包含 — 请立即保存,它只显示一次。 列出你的 Mind [CODE BLOCK] 删除 Mind(不可逆!) [CODE BLOCK] JWT(用于人类) JWT 对用户账户进行认证,而非特定 Mind。用于: - 账户注册与登录 - 创建/列出/删除 Mind - 与其他用户共享 Mind - Web Push 订阅管理 注册 [CODE BLOCK] 返回: 登录 [CODE BLOCK] 返回: JWT 过期 JWT 在 7 天后过期。过期后再次调用 即可获取新 JWT。Mind Key 永不过期,因此现有 Agent 集成可继续工作。 安全最佳实践 > [!CRITICAL] > - 绝不把 Mind Key 提交到 git。 使用环境变量。 > - 绝不在日志中记录 Mind Key。 在日志中遮蔽()。 > - 怀疑泄露时轮换 key(删除 Mind、创建新 Mind)。 > - 每个项目用一个 Mind,以缩小 key 泄露的爆炸半径。 环境变量模式 [CODE BLOCK] [CODE BLOCK] MCP Server 配置 [CODE BLOCK] 多 Mind 模式 每个用户可有多个 Mind。常见模式: | Mind 名称 | 用途 | |-----------|---------| | | 工作相关记忆 | | | 个人偏好、家庭 | | | 特定项目上下文 | | | 学习进度 | | | 通用回退 | 在不同 LLM 会话中使用不同 Mind Key 即可隔离上下文。 限速 | 认证方式 | 限制 | 范围 | |-------------|-------|-------| | Mind Key(header) | 无 | 每个 Mind | | Mind Key(?key=) | 60 次/分钟 | 每个 IP | | JWT(header) | 无 | 每个用户 | | 公共端点 | 无 | 全局 | 如适用,响应会包含限速头(、、)。 下一步 - Mind Key 与 JWT — 何时用哪个 - Memory API — 用 Mind Key 能做什么 - User API — 用 JWT 进行账户管理 ──────────────────────────────────────────────────────────── # Mind Key 与 JWT — 何时用哪个? SUMMARY: 决策指南:Agent 数据访问用 Mind Key,账户管理用 JWT。 KEY CONTEXT: Mind Key: tenant-scoped, never expires, for memory/chat/tasks/scripts/computers/webhooks. JWT: user-scoped, 7-day expiry, for /register, /login, /minds (CRUD), /sharing, /push. Simple rule: if it touches a single mind's data → Mind Key. If it manages the account → JWT. Exception: /computers/me/* uses Computer Token (not Mind Key or JWT). Mind Key 与 JWT — 何时用哪个? Synapse 有两种认证令牌。选错会导致 401 错误。本指南给你一个清晰的决策框架。 快速决策表 | 你想... | 使用 | |----------------|-----| | 存储/回放记忆 | Mind Key | | 发送/轮询聊天消息 | Mind Key | | 管理任务 | Mind Key | | 存储脚本 | Mind Key | | 注册 Webhook | Mind Key | | 控制计算机 | Mind Key(用户侧)/ Computer Token(Agent 侧) | | 注册用户账户 | 无(公共) | | 登录 | 无(公共) | | 创建/列出/删除 Mind | JWT | | 与其他用户共享 Mind | JWT | | 订阅 Web Push 通知 | JWT | | 查看审计日志 | Mind Key | 简单规则 > [!TIP] > 如果涉及单个 Mind 的数据 → Mind Key。 > 如果管理账户或 Mind 元数据 → JWT。 Mind Key — 数据访问令牌 Mind Key 授予访问一个 Mind 的数据的权限。它是永不过期(除非删除该 Mind)的长生命周期令牌。非常适合: - LLM Agent 跨会话持久化记忆 - 后台 Cron 任务 - MCP Server 配置 - Webhook 集成 - 移动应用读取记忆 Mind Key 能做什么 - — 读取该 Mind 中的所有记忆 - — 存储/更新记忆 - — 读取聊天消息 - — 发送聊天消息 - — 列出任务 - — 创建任务 - — 存储脚本 - — 注册 Webhook - — 排队计算机命令 Mind Key 不能做什么 - 创建/列出/删除 Mind(需 JWT) - 与其他用户共享 Mind(需 JWT) - 查看用户账户信息(需 JWT) - 订阅 Web Push(需 JWT) JWT — 账户管理令牌 JWT 对用户账户进行认证。它在 7 天后过期,用于跨多个 Mind 或涉及其他用户的账户级操作。 JWT 能做什么 - — 创建新 Mind(返回新 Mind Key) - — 列出该用户的所有 Mind - — 删除 Mind - — 与其他用户共享 Mind - — 订阅 Web Push 通知 - — 列出 Mind 共享 JWT 不能做什么 - 读写记忆(需 Mind Key) - 发送聊天消息(需 Mind Key) - 管理任务(需 Mind Key) - 注册 Webhook(需 Mind Key) 特殊情况:Computer Token 端点(Agent 侧,供 screen-remote-agent 使用)使用第三种令牌类型:Computer Token。该令牌由 在兑换安装码时返回,专属于某一台已注册的计算机。 | 端点 | 认证 | |----------|------| | | Computer Token | | | Computer Token | | | Mind Key 或 JWT | | | Mind Key 或 JWT | 常见模式 模式 1:单个 LLM Agent 1. 注册一次 → 获取 JWT 2. 创建一个 Mind → 获取 Mind Key 3. LLM 用 Mind Key 完成所有操作 模式 2:多项目 Agent 1. 注册一次 → 获取 JWT 2. 创建多个 Mind(work、personal、project-x) → 获取多个 Mind Key 3. LLM 根据上下文加载不同 Mind Key 模式 3:团队共享 1. 用户 A 创建 Mind → 获取 Mind Key A 2. 用户 A 通过 JWT 共享给用户 B() 3. 用户 B 现在可通过自己的 JWT 访问 4. 对于 LLM 访问,用户 B 需创建自己的 Mind Key(或使用 A 的) 模式 4:MCP Server MCP Server 始终使用 Mind Key(通过 环境变量设置)。一个 MCP Server 实例 = 一个 Mind。如需访问多个 Mind,请运行多个 MCP 实例或在客户端实现 Mind 切换。 令牌格式速查 | 令牌 | 格式 | 示例 | |-------|--------|---------| | Mind Key | + 36 字符 | | | JWT | + base64 | | | Computer Token | + 36 字符 | | 下一步 - Authentication — 完整认证指南 - User 与 Minds API — 由 JWT 保护的端点 - Memory API — 由 Mind Key 保护的端点 ──────────────────────────────────────────────────────────── # LLM Agent 快速开始 SUMMARY: 3 次 API 调用:回放所有记忆、存储新记忆、搜索。LLM 的必备工作流。 KEY CONTEXT: Base URL: https://synapse.schaefer.zone Auth: Authorization: Bearer YOUR_MIND_KEY (header) OR ?key=YOUR_MIND_KEY (query) ALWAYS call /memory/recall at the start of every session. Wichtigste Befehle: GET /memory/recall, POST /memory, GET /memory/search?q=... Categories: identity, preference, fact, project, skill, mistake, context, note, credentials Priorities: low, normal, high, critical FTS5 search: multiple words = AND, "phrases" in quotes, prefix* for prefix search LLM Agent 快速开始 你在会话之间会丢失所有记忆。Synapse 是你的外脑。本指南展示每个 LLM Agent 必须知道的三个核心 API 调用。 > [!CRITICAL] > 在每次会话开始时调用 。 > 不调用它,你就没有关于用户是谁、你承诺过什么、上次在做什么的记忆。 第 1 步:回放所有记忆(始终优先) [CODE BLOCK] 返回所有已存储记忆的结构化纯文本摘要。解析它来重建你对用户、其项目及过往交互的认知模型。 示例响应: [CODE BLOCK] 第 2 步:存储新记忆 当你学到值得记住的内容时: [CODE BLOCK] 分类: 、、、、、、、 优先级: 、、、 > [!TIP] > 始终带上 字段 — 记忆的简短标识符。这样后续可通过相同 key 再次 POST 来更新该记忆。 第 3 步:搜索特定记忆 [CODE BLOCK] > [!TIP] > FTS5 语法:多个词 = AND 搜索。短语用引号:。 > 前缀搜索:。布尔:。 开放工具(无认证头) 如果你的工具只能打开 URL(无自定义头),使用 参数: [CODE BLOCK] > [!WARNING] > 被限速为 60 次/分钟。Bearer 头无限制。请尽可能使用 Bearer 头。 完整会话工作流 1. 会话开始: — 加载所有记忆 2. 工作期间: — 查找具体事实 3. 获得新信息: — 存储它(带上 category、key、tags、priority) 4. 定期: — 检查人类消息 5. 会话结束:通过 存储任何最终学习内容 常见模式 更新已有记忆 用相同的 和 发起 — 已存在的记忆会被更新,不会重复。 存储项目状态 [CODE BLOCK] 记录错误(避免重蹈覆辙) [CODE BLOCK] 检查人类消息 [CODE BLOCK] 返回来自人类的未读消息。用以下方式回复: [CODE BLOCK] 下一步 - Authentication — Mind Key 与 JWT - Memory API 参考 — 全部 22 个记忆端点 - Chat API — 与人类异步通信 - LLM Cookbook — 实用模式 ──────────────────────────────────────────────────────────── # 快速开始(人类) SUMMARY: 注册账户、创建你的第一个 Mind、存储第一条记忆 — 全部 5 分钟完成。 快速开始(人类) 本指南带你完成获取 Synapse 账户、第一个 Mind Key 并存储第一条记忆。总耗时:约 5 分钟。 第 1 步:注册账户 调用 Synapse API 创建账户: [CODE BLOCK] 响应: [CODE BLOCK] > [!TIP] > 把 JWT 安全保存 — 创建 Mind 时会用到。JWT 7 天后过期;用同一端点重新登录即可刷新。 第 2 步:创建你的第一个 Mind “Mind” 是一个隔离的记忆范围。大多数用户从一个 Mind 开始,但你可以有多个(例如 “work”、“personal”、“project-x”)。每个 Mind 都有自己唯一的 Mind Key。 [CODE BLOCK] 响应: [CODE BLOCK] > [!CRITICAL] > 立即保存 。 它只显示一次,之后无法找回。如果丢失,你需要创建新 Mind。 第 3 步:存储第一条记忆 现在用 Mind Key 存储一条记忆: [CODE BLOCK] 响应: [CODE BLOCK] 第 4 步:回放所有记忆 检索你存储的全部内容: [CODE BLOCK] 响应(纯文本,为 LLM 消费优化): [CODE BLOCK] 第 5 步:搜索记忆 按关键词查找特定记忆: [CODE BLOCK] 第 6 步:连接你的 LLM 让 LLM 访问 Synapse 最简单的方式是通过 MCP: - Claude Desktop 配置 — 2 分钟配置 - Claude Code 配置 — 终端集成 - Cursor 配置 — IDE 集成 配置完成后,你的 LLM 会在每次会话开始时自动调用 ,并通过 持久化新事实。 记忆分类 Synapse 支持 8 种分类 — 选择最具体的那一种: | 分类 | 用例 | |----------|----------| | | 用户名、角色、联系方式 | | | 喜好、厌恶、工作风格 | | | 可验证的事实(项目细节、日期) | | | 项目状态、里程碑、待办 | | | 用户擅长的事情 | | | 过去犯的错 — 避免重蹈覆辙 | | | 与会话相关的上下文 | | | 其他备注 | 优先级 - — 知道就好 - — 默认 - — 重要 - — 绝不能忘(用户身份、法律信息) 下一步 - Authentication 深入 - Mind Key 与 JWT - Memory API 参考 - MCP 集成 ──────────────────────────────────────────────────────────── # Synapse 是什么? SUMMARY: Synapse 是为 LLM Agent 提供的持久化记忆 API — 让你的 AI 跨会话不再遗忘。 KEY CONTEXT: Synapse is an HTTP API that gives LLM agents persistent memory across sessions. Base URL: https://synapse.schaefer.zone Auth: Authorization: Bearer YOUR_MIND_KEY (header) OR ?key=YOUR_MIND_KEY (query, rate-limited 60/min) Most important endpoints: GET /memory/recall (start of every session), POST /memory (store new facts), GET /memory/search?q=... Mind Key = tenant-scoped API key. Each user can have multiple minds (projects/contexts). MCP server available: npx -y synapse-mcp-api (79 tools for Claude Desktop, Cursor, etc.) Synapse 是什么? Synapse 是为 LLM Agent 提供的持久化记忆 API。它解决了所有基于聊天的 LLM 的根本问题:会话之间 Agent 会遗忘一切。Synapse 为你的 AI 提供一个永久的、可查询的大脑,跨对话、跨天、跨不同 LLM 提供商都保留。 > [!CRITICAL] > 如果你是一名正在阅读本文的 LLM Agent:在每次会话开始时调用 。不调用它,你就没有过往交互的记忆、不知道用户是谁,也没有正在进行项目的上下文。 Synapse 解决的问题 每个现代 LLM(Claude、GPT、Gemini、Llama)都有同样的架构限制:会话上下文窗口有限,会话一结束所有状态都会丢失。这意味着你的 AI 助手: - 在聊天之间遗忘你的姓名、偏好和正在进行的项目 - 无法跨会话从过往错误中学习 - 长期工作没有连续性 - 每次都重新问同样的澄清问题 Synapse 通过提供简单的 HTTP API 修复了这个问题,LLM 可以在其中存储和检索结构化记忆。这些记忆持久化在服务器上,被索引且可搜索,因此任何未来的会话都能回放它们。 关键特性 - 持久化记忆存储 — 事实、偏好、项目、错误、技能 - 全文搜索(FTS5) — 毫秒级按关键词查找任意记忆 - 语义搜索 — 基于向量嵌入的相似度搜索,适合概念性查询 - 多租户 — 每个用户拥有隔离的“Mind”(一个用户,多个项目) - 异步聊天 — 人类可在 Agent 工作时给它留言 - 任务与调度 — 内置任务管理器与 Cron 调度器 - MCP 集成 — 通过 Model Context Protocol 暴露 79 个工具,供 Claude、Cursor、Continue 使用 - 浏览器与计算机控制 — 远程自动化工具 - Webhook — 记忆/聊天/任务变化时获得 HTTP 回调 工作原理 [CODE BLOCK] 1. LLM 在会话开始时调用 2. Synapse 返回所有已存储记忆的结构化文本摘要 3. LLM 工作,周期性调用 存储新事实 4. 当用户提问时,LLM 可调用 5. 会话结束时,重要的新上下文被持久化以供下次会话使用 面向谁? - 需要持久状态的 LLM Agent 开发者 - 运行本地 LLM(Ollama、LM Studio)与自定义 Agent 的 重度用户 - 构建需要共享记忆 AI 助手的 团队 - 跨会话串联 LLM 调用的 自动化工程师 快速对比 | 特性 | ChatGPT Memory | Synapse | |---------|---------------|---------| | 存储位置 | OpenAI 服务器 | 你的服务器 | | API 访问 | 否(封闭) | 是(REST + MCP) | | 多租户 | 否 | 是(Mind) | | 自定义分类 | 否 | 是(8 种分类) | | 搜索 | 有限 | FTS5 + 语义 | | 可自托管 | 否 | 是(Docker) | 下一步 - 人类快速开始 — 5 分钟拿到 Mind Key - LLM 快速开始 — 首次 API 调用 - Authentication — Mind Key 与 JWT - 架构概览 — Synapse 是如何构建的 ## 分类:API 参考 所有 API 端点的完整参考。 ──────────────────────────────────────────────────────────── # Browser 代理 SUMMARY: 浏览器自动化服务 — 独立 Docker 容器,端口 13000,用于无头浏览器控制。 KEY CONTEXT: Browser Proxy is a SEPARATE Docker service (port 13000), NOT a Synapse endpoint. Synapse endpoints do NOT include /browser/* paths. For browser automation, use the MCP browser_new tool OR connect to the browser-proxy service directly. Synapse MCP exposes browser tools (browser_new, browser_navigate, browser_click, etc.) Browser 代理 Browser 代理是一个独立的 Docker 服务,通过 Playwright 提供无头浏览器自动化。它不直接属于 Synapse API 的一部分 — Synapse 端点不包含 路径。 架构 [CODE BLOCK] 访问方式 方式 1:通过 Synapse MCP Server(推荐) Synapse MCP Server 将浏览器工具作为 MCP 工具暴露。请在需要 LLM 驱动的浏览器自动化时使用: [CODE BLOCK] 可用的 MCP 浏览器工具: - — 打开新的浏览器标签页 - — 导航到指定 URL - — 点击元素 - — 在输入框中输入文本 - — 截屏 - — 关闭标签页 - (更多请见 MCP 集成) 方式 2:直接访问 Browser 代理 对于非 MCP 集成,可直接连接 browser-proxy 服务: [CODE BLOCK] 常见用例 网页抓取 [CODE BLOCK] 表单自动化 [CODE BLOCK] 截屏 [CODE BLOCK] 相关服务 | 服务 | 端口 | 用途 | |---------|------|---------| | Synapse API | 12800 | 记忆、聊天、任务 | | Synapse MCP | 13100 | MCP Server(79 个工具) | | Browser Proxy | 13000 | 无头浏览器自动化 | | SSH Proxy | 12900 | 远程机器的 SSH 访问 | 下一步 - MCP 集成 — 如何通过 MCP 使用浏览器工具 - Computer Control API — 用于在已注册机器上进行 GUI 自动化 ──────────────────────────────────────────────────────────── # Chat API SUMMARY: 人类与 LLM Agent 之间的异步聊天 — 轮询、回复、历史记录、未读数量、文件上传。 KEY CONTEXT: Auth: Mind Key (agent side, ?role=agent) or JWT (human side, ?role=human) Poll: GET /chat/poll (returns unread messages, marks them as read) Reply: POST /chat/reply { content } History: GET /chat/history?limit=50 Unread count: GET /chat/unread?role=agent (or ?role=human) Upload: POST /chat/upload (multipart, file attachment) Pattern: poll between tool calls, reply when human asks questions Chat API Chat API 支持人类与 LLM Agent 之间的异步消息通信。与同步聊天(ChatGPT 风格)不同,人类可以在 Agent 工作期间留言 — Agent 在工具调用之间轮询消息。 工作原理 [CODE BLOCK] 1. 人类通过 Web UI 发送消息(使用 JWT) 2. 消息被存储,并标记为未读 3. Agent 在工具调用之间轮询 4. 轮询返回所有未读消息并将其标记为已读 5. Agent 处理消息,可选择通过 回复 端点 GET /chat/poll 轮询来自人类的新消息。返回未读消息并将其标记为已读。请在工具调用之间使用此接口。 [CODE BLOCK] 响应: [CODE BLOCK] POST /chat/reply 以 Agent 身份发送消息。 [CODE BLOCK] POST /chat/send 以人类身份发送消息(需要 JWT,而非 Mind Key)。 [CODE BLOCK] GET /chat/history 获取最近的聊天历史(双方角色)。 [CODE BLOCK] GET /chat/unread 获取未读消息数量。 [CODE BLOCK] GET /chat/status 获取聊天会话状态(最近消息时间戳、未读数量)。 [CODE BLOCK] POST /chat/upload 为特定消息上传文件附件(multipart 表单)。 [CODE BLOCK] GET /chat/files/:messageid 列出某条消息的文件附件。 [CODE BLOCK] GET /chat/file/:fileid 下载文件附件。 [CODE BLOCK] 轮询模式 > [!TIP] > 在工具调用之间每 30-60 秒轮询一次。不要更频繁地轮询 — 既浪费 API 配额,也带不来任何收益。 [CODE BLOCK] 下一步 - Tasks API - Chat 轮询模式 ──────────────────────────────────────────────────────────── # Computer Control API SUMMARY: 远程控制已注册的计算机 — 排队命令、截屏、在远程机器上运行脚本。 KEY CONTEXT: Two sides: user-facing (Mind Key/JWT) and agent-facing (Computer Token) Register agent: POST /computers/register { install_code } → returns computer_token List: GET /computers/list (Mind Key or JWT) Queue command: POST /computers/:id/commands { type, payload } Command types: screenshot, click, move, type, key, scroll, drag Agent poll: GET /computers/me/poll?wait=5 (Computer Token) Agent result: POST /computers/me/commands/:cid/result (Computer Token) One-shot screenshot: GET /computers/:id/screenshot (waits 30s for result) Pattern: register agent on remote machine → user queues commands → agent polls and executes Computer Control API Computer Control API 让你能够远程控制已注册的计算机。目标机器上会运行一个小型 Agent(),轮询命令、执行命令并回传结果。这使 LLM 驱动的 GUI 自动化成为可能。 架构 [CODE BLOCK] 用户侧端点(Mind Key 或 JWT) GET /computers/list 列出所有已注册的计算机。 [CODE BLOCK] GET /computers/:id 获取单台计算机的详情。 [CODE BLOCK] POST /computers/install-code 为注册新计算机生成一个安装码。 [CODE BLOCK] 响应: POST /computers/:id/commands 为远程 Agent 排队一条待执行的命令。 [CODE BLOCK] 响应: GET /computers/:id/command(通过查询参数) 通过 GET 方式排队命令(用于简单场景)。 [CODE BLOCK] GET /computers/:id/commands 列出某台计算机最近的命令。 [CODE BLOCK] GET /computers/:id/commands/:cid 获取某条具体命令的状态与结果。 [CODE BLOCK] GET /computers/:id/screenshot 一次性操作:排队截图命令并等待最多 30 秒拿结果。 [CODE BLOCK] POST /computers/:id/disable 禁用某台计算机(吊销其令牌,保留记录以备审计)。 [CODE BLOCK] DELETE /computers/:id 永久删除某台计算机。 [CODE BLOCK] Agent 侧端点(Computer Token) 以下端点由运行在目标机器上的 使用。它们使用 Computer Token(由 返回),而不是 Mind Key。 POST /computers/register 兑换安装码并获取 Computer Token。 [CODE BLOCK] 响应: > [!CRITICAL] > 请妥善保存 — 它只显示一次,且所有 Agent 侧端点都需要它。 GET /computers/me/poll 长轮询新命令。Agent 会在循环中调用此端点。 [CODE BLOCK] 如果有待执行命令,则立即返回;否则等待 秒后返回。 POST /computers/me/commands/:cid/result 提交某条命令的执行结果。 [CODE BLOCK] 命令类型 | 类型 | Payload | 说明 | |------|---------|-------------| | | | 截屏为 PNG(base64) | | | | 在指定坐标点击 | | | | 将鼠标移动到指定坐标 | | | | 在光标处输入文本 | | | | 按下组合键 | | | | 滚动滚轮 | | | | 拖拽 | 常见模式:LLM 驱动的 GUI 自动化 [CODE BLOCK] 下一步 - Browser 代理 — 用于浏览器自动化的独立服务 - 自托管 Agent 指南 ──────────────────────────────────────────────────────────── # Cron 与调度器 SUMMARY: 调度周期性 API 调用 — 按计划触发的 cron 任务,适合周期性同步与提醒。 KEY CONTEXT: Auth: Mind Key Create: POST /cron { schedule, endpoint, method?, body?, headers?, enabled? } List: GET /cron Delete: DELETE /cron/:id Toggle: PUT /cron/:id/toggle Schedule: 5-field cron (minute hour day month day-of-week) OR integer interval (seconds) Endpoint: must be http(s) URL, same Synapse instance OR public HTTPS (no private IPs) Pattern: schedule /memory/recall every hour, /chat/poll every 5 min, etc. Cron 与调度器 Cron API 让你能够调度周期性 HTTP 调用 Synapse 端点(或外部 HTTPS 端点)。非常适合周期性同步、提醒和运维任务。 端点 POST /cron 创建一个定时任务。 [CODE BLOCK] 响应: [CODE BLOCK] GET /cron 列出所有定时任务。 [CODE BLOCK] DELETE /cron/:id 删除一个定时任务。 [CODE BLOCK] PUT /cron/:id/toggle 在不删除任务的情况下启用或禁用它。 [CODE BLOCK] 调度语法 标准 cron(5 字段) [CODE BLOCK] 示例: | 调度表达式 | 含义 | |----------|---------| | | 每小时 | | | 每 15 分钟 | | | 工作日早上 9 点 | | | 每周日午夜 | | | 每月 1 日午夜 | 整数间隔(秒) 对于简单间隔,可直接传整数: [CODE BLOCK] 端点限制 > [!WARNING] > 端点必须是 或 URL,并指向: > - 同一 Synapse 实例(例如 ) > - 公共 HTTPS URL(不允许私有 IP、localhost、元数据 IP) 这可以防止 SSRF 攻击 — 否则被攻破的 Mind 可能会调度请求访问内部服务。 常见模式 每小时调用一次记忆回放(供 LLM Agent 使用) [CODE BLOCK] 每日备份 [CODE BLOCK] 周期性聊天轮询(每 5 分钟) [CODE BLOCK] 周报触发 [CODE BLOCK] 下一步 - Variables API - Webhooks API ──────────────────────────────────────────────────────────── # 错误与错误处理 SUMMARY: HTTP 状态码、错误响应格式以及从常见错误中恢复的方法。 KEY CONTEXT: Error format: { statusCode, error, message, docs? } Common errors: 401 (auth), 404 (wrong path), 429 (rate limit), 500 (server) 401 → check Mind Key/JWT, see /docs/getting-started/authentication 404 → wrong path, GET /endpoints for valid list, do NOT guess paths 429 → rate limited (?key= is 60/min), use Bearer header instead 500 → server error, retry with backoff, check /health docs field in error response links to relevant documentation. 错误与错误处理 Synapse 使用标准 HTTP 状态码,并提供一致的错误响应格式。本页说明如何解读错误并从中恢复。 错误响应格式 所有错误都返回如下结构的 JSON: [CODE BLOCK] | 字段 | 说明 | |-------|-------------| | | HTTP 状态码 | | | HTTP 状态名称 | | | 人类可读的错误描述 | | | 指向相关文档的 URL(如适用) | HTTP 状态码 200 OK 成功。请求被正确处理。 201 Created 成功。创建了新资源(例如 )。 204 No Content 成功。无响应体返回(例如 )。 400 Bad Request 请求格式不正确。常见原因: - 缺少必填的 JSON 字段 - JSON 语法无效 - 枚举值无效(例如分类不正确) [CODE BLOCK] 修复: 对照 API 文档检查请求体。确保所有必填字段均存在且值合法。 401 Unauthorized 认证失败。常见原因: - 缺少 头 - Mind Key 或 JWT 无效 - 在需要 JWT 的地方用了 Mind Key(或反之) [CODE BLOCK] 修复: 校验你的令牌。参见 Authentication。 403 Forbidden 你已认证但无权执行此操作。常见原因: - 尝试删除他人的 Mind - 尝试用 Mind Key 验证记忆(需要 JWT) - Mind 已被禁用 修复: 检查你为此端点使用的令牌类型是否正确。 404 Not Found 请求的路径或资源不存在。 > [!CRITICAL] > 不要猜测端点路径。 只有 中列出的路径才存在。如果收到 404,说明你用了错误的路径。 [CODE BLOCK] 修复: 调用 查看有效端点列表。将你的 URL 与列表逐字符对比。 409 Conflict 请求与现有状态冲突。常见原因: - 尝试用已存在的邮箱注册 - Webhook URL 重复 修复: 使用不同的值,或使用 更新已有资源。 429 Too Many Requests 你触发了限速。仅适用于 查询参数认证(60 次/分钟)。 [CODE BLOCK] 响应头: [CODE BLOCK] 修复: 改用 头(无限制),或等待 秒。 500 Internal Server Error 服务器错误。这种情况不应发生 — 如果发生,则是 Bug。 修复: 1. 使用指数退避重试(1 秒、2 秒、4 秒、8 秒) 2. 检查 查看服务器是否在线 3. 如果持续出现,请上报该错误 503 Service Unavailable 服务器临时不可用(例如部署、数据库迁移期间)。 修复: 等待并重试。检查 。 恢复模式 指数退避重试 [CODE BLOCK] 认证错误处理 [CODE BLOCK] 常见错误场景 "Mind Key fehlt oder ungültig" - 你忘记加 头 - 你用了 但 key 错误 - 你在需要 Mind Key 的地方用了 JWT "Route not found" - 你猜了一个不存在的路径 - 你用错了动词(例如 与 混淆) - 检查 获取有效路径 "Rate limit exceeded" - 你使用了 并超过 60 次/分钟 - 改用 头 下一步 - Authentication - API 概览 - 限速 ──────────────────────────────────────────────────────────── # Memory API SUMMARY: 22 个记忆端点的完整参考:存储、回放、搜索、语义搜索、同步、审计等。 KEY CONTEXT: Auth: Mind Key (Authorization: Bearer mk_xxx OR ?key=mk_xxx) ALWAYS call GET /memory/recall at session start. POST /memory with same category+key updates the existing memory. Categories: identity, preference, fact, project, skill, mistake, context, note, credentials Priorities: low, normal, high, critical Search: GET /memory/search?q=... (FTS5 syntax: AND, OR, "phrases", prefix*) Semantic: GET /memory/semantic-search?q=... (slower, conceptual) Sync: GET /memory/diff?since=TIMESTAMP (incremental sync) Export: GET /memory/mind-export (full JSON dump) Memory API Memory API 是 Synapse 的核心。它提供 22 个端点用于存储、检索、搜索和管理结构化记忆。所有端点都需要 Mind Key 进行认证。 > [!CRITICAL] > 务必在每次会话开始时调用 。 这是从之前的会话中重建上下文的唯一方式。 分类 记忆被组织为 8 个分类: | 分类 | 用途 | |----------|----------| | | 用户名、角色、联系方式、关于自身的偏好 | | | 喜好、厌恶、工作风格、沟通偏好 | | | 可验证的事实(项目细节、日期、URL) | | | 项目状态、里程碑、架构 | | | 用户擅长的事情 | | | 过去犯的错 — 避免重蹈覆辙 | | | 与会话相关的上下文 | | | 其他备注 | 优先级 - — 知道就好 - — 默认 - — 重要 - — 绝不能忘(用户身份、法律信息等) 核心端点 GET /memory/recall 以 LLM 优化的纯文本形式返回所有记忆。请务必在每次会话开始时调用。 [CODE BLOCK] 响应(text/plain): [CODE BLOCK] POST /memory 存储新记忆或更新已有记忆(相同 category + key 视为更新)。 [CODE BLOCK] 响应: GET /memory 列出记忆,可加可选过滤条件。 [CODE BLOCK] PUT /memory/:id 按 ID 更新某条具体记忆。 [CODE BLOCK] DELETE /memory/:id 删除单条记忆。 [CODE BLOCK] 搜索端点 GET /memory/search 使用 FTS5 进行全文搜索。 [CODE BLOCK] FTS5 语法: - 多个词 = AND: - 短语: - 前缀: - 布尔: - 排除: GET /memory/semantic-search 使用向量嵌入进行概念搜索(比 FTS5 慢,但能理解语义)。 [CODE BLOCK] 返回与查询语义相似的记忆,即使没有关键词匹配。适用于“查找关于 X 的记忆”,即使 X 被用不同的方式描述。 GET /memory/by-tag 按标签列出记忆。 [CODE BLOCK] GET /memory/related/:id 查找与某条记忆相关的记忆(基于共享标签)。 [CODE BLOCK] 同步与 Diff GET /memory/diff 增量同步 — 返回自指定时间戳以来发生变化的记忆。 [CODE BLOCK] 响应: POST /memory/sync 应用来自另一个实例的 diff(用于自托管同步)。 [CODE BLOCK] 批量操作 POST /memory/bulk-delete 按 ID 批量删除记忆。 [CODE BLOCK] POST /memory/embed-batch 为尚未生成向量嵌入的记忆批量生成嵌入(用于语义搜索)。 [CODE BLOCK] GET /memory/embed-batch-status 检查嵌入生成进度。 [CODE BLOCK] 验证 记忆有 标志。Agent 存储的记忆默认未验证();人类存储的记忆默认已验证()。 POST /memory/verify 将记忆标记为已验证(需要 JWT,而非 Mind Key)。 [CODE BLOCK] POST /memory/unverify 将记忆标记为未验证(需要 JWT)。 [CODE BLOCK] GET /memory/unverified 列出等待人类验证的记忆。 [CODE BLOCK] 统计与审计 GET /memory/stats 当前 Mind 的聚合统计。 [CODE BLOCK] 返回: GET /memory/audit 所有状态变更操作的审计日志。 [CODE BLOCK] GET /memory/contradictions 检测已存储记忆中潜在的矛盾。 [CODE BLOCK] GET /memory/expiring 列出即将到期的记忆。 [CODE BLOCK] 健康检查与导出 GET /memory/health 记忆系统的快速健康检查。 [CODE BLOCK] GET /memory/mind-export 全部记忆的完整 JSON 导出(用于备份)。 [CODE BLOCK] POST /memory/compact 压缩相似记忆(自动摘要)。 [CODE BLOCK] 下一步 - LLM 快速开始 - 记忆最佳实践 - FTS5 搜索 - 语义搜索 ──────────────────────────────────────────────────────────── # API 概览与基础 URL SUMMARY: 一目了然地查看所有 Synapse API 端点、基础 URL、认证模式与响应格式。 KEY CONTEXT: Base URL: https://synapse.schaefer.zone Auth: Authorization: Bearer YOUR_MIND_KEY (header, no rate limit) OR ?key=YOUR_MIND_KEY (query, 60 req/min) All responses are JSON except /memory/recall (text/plain) and /docs (HTML/text/json) All 404 responses mean the path does not exist — do NOT guess paths. GET /endpoints returns machine-readable list of all valid endpoints. API 概览与基础 URL Synapse API 是一个 RESTful HTTP API。所有端点均返回 JSON(除非另有说明)。本页面涵盖了在深入具体端点之前所需的基础知识。 基础 URL [CODE BLOCK] 本指南中所有路径均相对于此基础 URL。对于自托管实例,请替换为你自己的 URL。 认证 两种方式,均通过 头发送: [CODE BLOCK] 或通过查询参数发送(限速 60 次/分钟): [CODE BLOCK] 详情请参阅 Authentication。 端点分组 | 分组 | 认证 | 说明 | |-------|------|-------------| | Public | 无 | 落地页、健康检查、OpenAPI、文档 | | Memory | Mind Key | CRUD、搜索、同步、向量嵌入 | | Chat | Mind Key / JWT | 人与 Agent 之间的异步消息 | | Tasks | Mind Key | 任务管理 | | Scripts | Mind Key / JWT | 持久化脚本存储 | | Scheduler | Mind Key | Cron 任务与变量 | | Webhooks | Mind Key | 事件触发的 HTTP 回调 | | Computers | Mind Key / JWT | 远程计算机控制 | | User/Minds | JWT | 账户与 Mind 管理 | | Sharing | JWT | 用户之间的 Mind 共享 | | Push | JWT | Web Push 订阅 | | Tools | 无 | 时间、计算、随机(公共工具) | 响应格式 - JSON(默认): - 纯文本: 返回为 LLM 优化的文本 - HTML:、、、、 标准响应封装 成功响应直接返回数据: [CODE BLOCK] 错误响应采用以下格式: [CODE BLOCK] > [!NOTE] > 字段会针对常见错误链接到相关文档。 HTTP 状态码 | 状态码 | 含义 | |------|---------| | 200 | 成功(GET、PUT) | | 201 | 已创建(POST) | | 204 | 无内容(DELETE) | | 400 | 错误请求(校验错误) | | 401 | 未授权(令牌缺失或无效) | | 403 | 禁止访问(令牌类型错误) | | 404 | 未找到(路径不存在) | | 409 | 冲突(重复) | | 429 | 请求过多(触发限速) | | 500 | 服务器错误 | 可发现性端点 | 端点 | 用途 | |----------|---------| | | 落地页(为 LLM 优化) | | | 所有端点的机器可读列表 | | | 纯文本端点列表 | | | OpenAPI 3.0 规范 | | | 完整 API 文档(HTML) | | | JSON 格式 API 文档 | | | 文档系统(HTML) | | | 文档索引(JSON) | | | 全部文档作为一个文本块 | | | 交互式 API 调试页面 | 限速 | 认证方式 | 限制 | |-------------|-------| | Mind Key(header) | 无限制 | | Mind Key(?key=) | 每个 IP 60 次/分钟 | | JWT(header) | 无限制 | | 公共端点 | 无限制 | 受限速影响的响应会包含: [CODE BLOCK] 分页 列表端点支持 与 : [CODE BLOCK] 默认 limit:100。最大 limit:500。 CORS 所有端点都为浏览器客户端支持 CORS: [CODE BLOCK] SDK 与客户端 - Node.js SDK:(仓库) - MCP Server:(仓库) - HTTP 客户端:任意 HTTP 库(curl、fetch、axios 等) 下一步 - Memory API — 最重要的端点 - Chat API — 人类与 Agent 之间的异步通信 - Errors & Error Handling ──────────────────────────────────────────────────────────── # 限速与配额 SUMMARY: Synapse API 的限速策略 — Bearer 头(无限制)、?key=(60 次/分钟)、公共端点。 KEY CONTEXT: Mind Key (Authorization: Bearer header) → NO rate limit Mind Key (?key= query param) → 60 req/min per IP JWT (Authorization: Bearer header) → NO rate limit Public endpoints (/tools/*, /docs, /health, /endpoints) → NO rate limit Rate limit headers: X-RateLimit-Limit, X-RateLimit-Remaining, Retry-After Recommendation: ALWAYS use Authorization header. Use ?key= only for URL-only tools. 限速与配额 Synapse 采用简单、可预测的限速策略,既能防止滥用,又不妨碍正常使用。 限速策略 | 认证方式 | 限制 | 范围 | |-------------|-------|-------| | Mind Key() | 无限制 | 每个 Mind | | Mind Key() | 60 次/分钟 | 每个 IP | | JWT() | 无限制 | 每个用户 | | 公共端点 | 无限制 | 全局 | > [!TIP] > 尽可能始终使用 头。它没有限速。仅在工具无法设置自定义请求头时才使用 。 限速响应头 当你使用 认证时,响应会包含限速头: [CODE BLOCK] 当你超过限制时: [CODE BLOCK] 当你触发限速时 如果收到 429: 1. 改用 Authorization 头(推荐): [CODE BLOCK] 2. 或等待 秒后重试。 为什么存在 限制 查询参数对于只能使用 URL 的工具(浏览器、 命令)很方便,但带来安全与性能影响: - 安全:查询参数会出现在服务器访问日志、浏览器历史和 Referer 头中。限制使用可以降低泄露面。 - 性能:基于查询参数的认证需要基于 IP 的限速器(每次请求都查询 Redis),会增加延迟。基于头的认证可以跳过这一步。 - 防滥用:泄露的 URL 可能被分享并被疯狂调用。IP 限制可以减小爆炸半径。 推荐模式 LLM Agent [CODE BLOCK] 基于浏览器的工具 如果你的工具只能打开 URL: [CODE BLOCK] MCP Server MCP Server 始终通过 环境变量使用头部认证 — 不受限速影响。 批量导入 对于批量操作(例如导入 1000 条记忆),请始终使用头部认证。通过 进行批量导入会在 1 分钟内触发限速。 配额(Mind 级别) 目前没有针对存储大小或记忆数量的 Mind 级配额。所有限制都在认证/IP 层,不在数据层。未来为多租户公平性可能会调整此策略。 监控你的使用情况 [CODE BLOCK] 下一步 - Authentication - 错误与错误处理 ──────────────────────────────────────────────────────────── # Scripts API SUMMARY: 持久化脚本存储 — 保存可复用的 Shell、Python 或 Node 脚本,并通过 curl | bash 拉取执行。 KEY CONTEXT: Auth: Mind Key or JWT Store: POST /script { name, content, description?, language? } Fetch as text: GET /script/:name (returns text/plain, curl | bash ready) Info: GET /script/:name/info (metadata without content) List: GET /scripts (JSON array) Delete: DELETE /script/:name Use case: store deployment scripts, config generators, troubleshooting snippets Scripts API Scripts API 为可复用脚本提供持久化存储。脚本在 Mind 中命名并版本化,可作为纯文本拉取 — 非常适合 模式。 端点 POST /script 存储或更新脚本。 [CODE BLOCK] GET /script/:name 以 拉取脚本内容。非常适合管道到 bash 执行。 [CODE BLOCK] GET /script/:name/info 获取脚本的元数据(不含内容)。 [CODE BLOCK] 响应: [CODE BLOCK] GET /scripts 列出当前 Mind 中的所有脚本。 [CODE BLOCK] DELETE /script/:name 删除脚本。 [CODE BLOCK] 常见用例 部署脚本 把标准部署流程保存为脚本,让 LLM 直接运行,无需每次重新推导步骤: [CODE BLOCK] 故障排查片段 把常见问题的诊断命令保存为脚本: [CODE BLOCK] 配置生成器 保存用于生成配置的脚本: [CODE BLOCK] 下一步 - Variables API - Cron 与调度器 ──────────────────────────────────────────────────────────── # Tasks API SUMMARY: 为 LLM Agent 提供任务管理 — 创建、列出、更新、完成、删除带优先级的任务。 KEY CONTEXT: Auth: Mind Key List: GET /mind/tasks?status=pending|in_progress|done|cancelled|all Create: POST /mind/task { title, description?, priority?, due_at? } Update: PUT /mind/task/:id { title?, description?, priority?, status?, due_at? } Complete: GET /mind/task/:id/complete Delete: GET /mind/task/:id/delete Priorities: low, normal, high, critical Statuses: pending, in_progress, done, cancelled Pattern: create tasks for multi-step work, update status as you progress Tasks API Tasks API 为 LLM Agent 提供结构化的方式来跟踪多步骤工作。任务归属于当前 Mind,并跨会话持久化,因此 Agent 可以从中断处继续工作。 端点 GET /mind/tasks 列出当前 Mind 中的所有任务。 [CODE BLOCK] 响应: [CODE BLOCK] POST /mind/task 创建新任务。 [CODE BLOCK] GET /mind/task(查询参数) 通过 GET 创建任务(供只能使用 URL 的工具使用)。 [CODE BLOCK] PUT /mind/task/:id 更新已有任务。 [CODE BLOCK] GET /mind/task/:id/complete 将任务标记为已完成。 [CODE BLOCK] GET /mind/task/:id/delete 永久删除任务。 [CODE BLOCK] 优先级 - — 不紧急 - — 默认 - — 重要 - — 必须立即处理 状态 - — 已创建,未开始 - — 正在处理 - — 已完成 - — 已放弃 模式:任务驱动工作流 [CODE BLOCK] 下一步 - 任务驱动工作流 - Cron 与调度器 ──────────────────────────────────────────────────────────── # 实用工具(时间、计算、随机) SUMMARY: 公共实用端点 — 服务器时间、安全计算器、随机值生成器。无需认证。 KEY CONTEXT: No auth required for any /tools/* endpoint. GET /tools/time → { time, timezone, offset } GET /tools/calc?expr=(10+5)*3 → { result, expr } (safe, no eval, arithmetic only) GET /tools/random?type=uuid → { value, type } (types: uuid, int, float, hex, alpha) Use case: LLM agents that need current time, safe math, or random values. 实用工具 端点是公共工具 — 无需认证。对于需要服务器时间、安全数学计算或随机值的 LLM Agent 很有用。 GET /tools/time 获取当前服务器时间、时区与 UTC 偏移。 [CODE BLOCK] 响应: [CODE BLOCK] 用例:LLM Agent 需要知道“现在是几点”,用于调度、时间戳或相对日期计算。 GET /tools/calc 安全计算器 — 仅支持算术运算,不使用 。支持 、、、、、、 和数字。 [CODE BLOCK] 响应: [CODE BLOCK] > [!TIP] > 用它代替在脑中计算或字符串解析。它既安全(无法注入代码)又准确。 支持的运算符 - 加法 - 减法 - 乘法 - 除法 - 取模 - 括号 - 数字(整数与小数) 示例 [CODE BLOCK] GET /tools/random 生成随机值。 [CODE BLOCK] 类型参数 | 类型 | 参数 | 输出 | |------|-----------|--------| | | 无 | UUID v4 字符串 | | | 、(默认 0-100) | 整数 | | | 、(默认 0-100) | 浮点数 | | | 、(长度范围,默认 8-16) | 十六进制字符串 | | | 、(长度范围,默认 8-16) | 字母字符串 | LLM Agent 的用例 生成唯一 ID [CODE BLOCK] 计算百分比 [CODE BLOCK] 获取当前时间戳 [CODE BLOCK] 生成测试数据 [CODE BLOCK] 下一步 - API 概览 — 所有端点分组 - 错误与错误处理 ──────────────────────────────────────────────────────────── # User 与 Minds API SUMMARY: 账户管理 — 注册、登录、创建 Mind、列出 Mind、删除 Mind。由 JWT 保护。 KEY CONTEXT: Auth: JWT (from /register or /login) Register: POST /register { email, password, display_name? } → returns JWT Login: POST /login { email, password } → returns JWT Create mind: POST /minds { name, description? } → returns mind_key (shown once!) List minds: GET /minds Delete mind: DELETE /minds/:id (irreversible — deletes all memories!) JWT expires after 7 days. Mind Key never expires. Mind Key is shown only once at creation — save it permanently. User 与 Minds API User 与 Minds API 负责账户管理。这些端点使用 JWT 认证(而非 Mind Key),因为它们作用于账户级别,而非 Mind 级别。 认证端点 POST /register 创建新用户账户。 [CODE BLOCK] 响应: [CODE BLOCK] POST /login 登录已有账户。 [CODE BLOCK] 响应:与 相同。 Minds 端点 POST /minds 创建新 Mind。返回 Mind Key — 请立即保存,它只显示一次。 [CODE BLOCK] 响应: [CODE BLOCK] > [!CRITICAL] > 只显示一次。如果丢失,无法找回 — 你必须删除该 Mind 并创建新 Mind(会丢失所有已存储的记忆)。 GET /minds 列出当前用户的所有 Mind。 [CODE BLOCK] 响应: [CODE BLOCK] DELETE /minds/:id 永久删除某个 Mind。 [CODE BLOCK] > [!WARNING] > 删除 Mind 不可逆。该 Mind 中的所有记忆、任务、聊天记录和脚本都会永久丢失。如需备份,请先通过 导出。 多 Mind 模式 大多数用户会受益于使用多个 Mind 以隔离上下文: [CODE BLOCK] 在不同 LLM 会话中使用不同的 Mind Key 即可隔离上下文。 账户安全 密码要求 - 至少 6 个字符 - 无最大长度限制(请使用密码管理器) - 以 bcrypt 哈希存储(绝不存明文) JWT 过期 JWT 在 7 天后过期。过期后再次调用 即可。 Mind Key 安全 Mind Key 永不过期。如果 Mind Key 泄露: 1. 通过 创建新 Mind 2. 用新的 Mind Key 更新你的 LLM 配置 3. 通过 删除被泄露的 Mind 下一步 - Authentication — 完整认证指南 - Mind Key 与 JWT — 决策指南 - Sharing API — 与其他用户共享 Mind ──────────────────────────────────────────────────────────── # Variables API SUMMARY: 用于 LLM 状态的快速键值存储 — 计数器、标志位、最后访问时间戳、部分进度。 KEY CONTEXT: Auth: Mind Key Set: POST /var { key, value } Get: GET /var/:key List: GET /var Delete: DELETE /var/:key Use case: store last-seen timestamps, counters, flags, partial workflow state Faster than memory (PostgreSQL direct, no FTS5 indexing) Not for: structured facts (use /memory), long content (use /script) Variables API Variables API 是用于临时状态的快速键值存储。与记忆(被索引、可搜索、结构化)不同,变量针对快速读写做了优化 — 非常适合计数器、标志位和会话状态。 端点 POST /var 设置或更新变量。 [CODE BLOCK] GET /var/:key 获取单个变量。 [CODE BLOCK] 响应: [CODE BLOCK] GET /var 列出所有变量。 [CODE BLOCK] DELETE /var/:key 删除变量。 [CODE BLOCK] 何时使用变量、何时使用记忆 | 用例 | 使用 | |----------|-----| | 用户名、偏好 | Memory(可搜索、结构化) | | 上次会话时间戳 | Variable(临时状态) | | 计数器(例如已发送消息数) | Variable(频繁更新) | | 工作流状态(“5 步中已完成 3 步”) | Variable(短暂状态) | | 长篇项目笔记 | Memory(全文索引) | | 可复用脚本 | Script 存储(命名、版本化) | 常见模式 跟踪上次会话 [CODE BLOCK] 计数器模式 [CODE BLOCK] 功能开关 [CODE BLOCK] 下一步 - Memory API — 用于结构化、可搜索的数据 - Cron 与调度器 ──────────────────────────────────────────────────────────── # Webhooks API SUMMARY: 为记忆、聊天和任务事件注册 HTTP 回调 — 数据变化时收到通知。 KEY CONTEXT: Auth: Mind Key Register: POST /webhooks { url, events, secret? } List: GET /webhooks Get: GET /webhooks/:id Update: PUT /webhooks/:id { url?, events?, secret?, enabled? } Delete: DELETE /webhooks/:id Events: memory.*, memory.store, memory.update, memory.delete, chat.*, chat.message_received, task.*, task.created, task.completed Secret: HMAC-SHA256 signed payload, sent in X-Synapse-Signature header Pattern: register webhook → receive POST → process event → call Synapse API Webhooks API Webhooks 让你在 Synapse 中发生事件时接收 HTTP 回调。非常适合触发外部自动化、发送通知或同步到其他系统。 端点 POST /webhooks 注册新 Webhook。 [CODE BLOCK] 响应: [CODE BLOCK] GET /webhooks 列出当前 Mind 的所有 Webhook。 [CODE BLOCK] GET /webhooks/:id 获取单个 Webhook。 [CODE BLOCK] PUT /webhooks/:id 更新 Webhook(URL、事件、密钥或启用标志)。 [CODE BLOCK] DELETE /webhooks/:id 删除 Webhook。 [CODE BLOCK] 事件类型 | 模式 | 触发时机 | |---------|------------| | | 任意记忆事件 | | | 存储新记忆 | | | 记忆被更新 | | | 记忆被删除 | | | 任意聊天事件 | | | 收到来自人类的新消息 | | | 任意任务事件 | | | 新任务被创建 | | | 任务被标记为完成 | | | 所有事件 | Webhook Payload 事件触发时,Synapse 会向你的 URL 发送 POST 请求: [CODE BLOCK] 签名验证 如果你设置了 ,Synapse 会用 HMAC-SHA256 对每个 payload 签名: [CODE BLOCK] 在你的处理程序中验证: [CODE BLOCK] 模式:实时同步 [CODE BLOCK] 下一步 - Cron 与调度器 - Webhook 自动化指南 ## 分类:MCP 集成 与 Claude、Cursor 及其他 MCP 客户端集成。 ──────────────────────────────────────────────────────────── # Claude Code 中的 MCP SUMMARY: 在 Claude Code 终端 Agent 中使用 Synapse 工具 — 为编码会话提供持久化记忆。 KEY CONTEXT: Claude Code config: ~/.claude/config.json (or via `claude mcp add` command) Command: npx -y synapse-mcp-api@latest Env: SYNAPSE_MIND_KEY (required), SYNAPSE_URL (optional) Alternative: `claude mcp add synapse -- npx -y synapse-mcp-api@latest` Then: set SYNAPSE_MIND_KEY env var in your shell Test: in claude code, type "recall all my memories" Claude Code 中的 MCP Claude Code 是 Anthropic 推出的基于终端的编码 Agent。借助 Synapse MCP,Claude Code 在编码会话之间获得持久化记忆 — 它会记住你的项目上下文、过往决策和代码库模式。 配置 方法 1:CLI 命令(推荐) [CODE BLOCK] 方法 2:编辑配置文件 编辑 : [CODE BLOCK] 验证可用 启动 Claude Code: [CODE BLOCK] 在 Claude Code 提示符中输入: [CODE BLOCK] Claude 会调用 并返回你已存储的记忆。 常见模式 项目上下文持久化 编码会话开始时: [CODE BLOCK] Claude 调用 ,查看你的项目列表,并从中断处继续工作。 代码库决策 当你做出架构决策时: [CODE BLOCK] Claude 调用 ,category 为 ,priority 为 。 避免过往错误 [CODE BLOCK] Claude 搜索 category 为 的记忆并提醒你过往错误。 任务跟踪 [CODE BLOCK] Claude 调用 ,任务跨会话持久化。 工具配置文件 当你不需要全部 119 个工具时: [CODE BLOCK] 故障排查 MCP Server 未启动 [CODE BLOCK] Mind Key 未识别 [CODE BLOCK] Claude Code 看不到工具 - 配置更改后重启 Claude Code - 检查 确认 Synapse 已注册 - 参见 MCP 故障排查 下一步 - Claude Desktop 配置 - Cursor 配置 - 持久化 LLM Agent 指南 ──────────────────────────────────────────────────────────── # Claude Desktop 中的 MCP SUMMARY: 2 分钟把 Synapse 接入 Claude Desktop。Claude 原生获得 79 个 Synapse 工具。 KEY CONTEXT: Config file: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) %APPDATA%\Claude\claude_desktop_config.json (Windows) MCP server command: npx -y synapse-mcp-api@latest Env vars: SYNAPSE_MIND_KEY (required), SYNAPSE_URL (optional, default https://synapse.schaefer.zone) After config: restart Claude Desktop, check for 🔌 icon with "79 tools" Test: type "memory_recall aufrufen" in a new chat Troubleshooting: Node.js ≥ 18, check Mind Key, see /docs/mcp/troubleshooting Claude Desktop 中的 MCP Claude Desktop 是 Anthropic 推出的 macOS 与 Windows 桌面应用。配置 Synapse MCP Server 后,Claude 原生获得全部 79 个 Synapse 工具的访问权限 — 它可以存储记忆、回放记忆、管理任务、与你聊天等等。 前置条件 - Claude Desktop 应用(macOS 或 Windows) - 已安装 Node.js 18+() - 你的 Synapse Mind Key 第 1 步:打开配置文件 - macOS: - Windows: 如果文件不存在,请创建。 第 2 步:添加 Synapse MCP Server [CODE BLOCK] > [!TIP] > 如果你已经配置了其他 MCP Server,只需把 块添加到已有的 对象内。 第 3 步:重启 Claude Desktop 1. 完全退出 Claude Desktop(macOS 上 Cmd+Q,而非只关窗口) 2. 重新打开 Claude Desktop 3. 开启新聊天 4. 查看左下角的 🔌 插头图标 — 应显示 “79 tools” 第 4 步:测试 在新聊天中输入: [CODE BLOCK] Claude 应该调用 工具,并返回已存储记忆的摘要(如果 Mind 为空则返回 “No memories yet”)。 可用工具(部分) | 工具 | 说明 | |------|-------------| | | 回放所有记忆 | | | 存储新记忆 | | | 搜索记忆 | | | 列出任务 | | | 创建任务 | | | 检查新消息 | | | 回复消息 | | | 打开浏览器标签页 | | | 列出已注册计算机 | 完整列表:MCP 是什么? 故障排查 Claude Desktop 中没有工具出现 1. 验证 Node.js 版本:(必须 ≥ 18) 2. 检查配置文件是否为有效 JSON(无尾随逗号) 3. 完全重启 Claude Desktop(Cmd+Q,而非只关窗口) 4. 查看 Claude Desktop 日志:(macOS) “Mind Key invalid” 错误 - 确认 以 开头 - 通过 获取新 key(需要 的 JWT) - JSON 中 key 不要加引号 npx 未找到 - 安装 Node.js 18+: - 安装后重启终端 - macOS 用 Homebrew: 工具出现但调用失败 - 检查 是否可达: - 验证 Mind Key 可用: - 参见 MCP 故障排查 工具配置文件(节省 tokens) 如果你使用较小的 LLM 或想节省上下文 tokens,设置工具配置文件: [CODE BLOCK] 配置文件:(8 个工具)、(25)、(119,默认)。 下一步 - Claude Code 配置 - Cursor 配置 - MCP 故障排查 ──────────────────────────────────────────────────────────── # Continue.dev 中的 MCP SUMMARY: 把 Synapse 接入 Continue.dev — VS Code 与 JetBrains 的开源 AI 编码助手。 Continue.dev 中的 MCP Continue.dev 是面向 VS Code 与 JetBrains IDE 的开源 AI 编码助手。借助 Synapse MCP,Continue 在会话之间获得持久化记忆。 前置条件 - VS Code 或 JetBrains IDE - 已安装 Continue.dev 扩展 - Node.js 18+ - 你的 Synapse Mind Key 配置 第 1 步:打开 Continue 配置 在 VS Code 或 JetBrains 中: 1. 打开 Continue 扩展侧边栏 2. 点击齿轮图标 → “Open config.json” 或直接编辑 。 第 2 步:添加 Synapse MCP Server [CODE BLOCK] 第 3 步:重新加载 Continue 重新加载 VS Code 窗口(Cmd+Shift+P → “Reload Window”),或重启 IDE。 验证可用 在 Continue 聊天中: [CODE BLOCK] Continue 应调用 并返回你已存储的记忆。 常见模式 项目上下文 [CODE BLOCK] Continue 调用 ,查看你的项目记忆,并从中断处继续工作。 代码审查模式 [CODE BLOCK] Continue 找出你存储的代码审查模式并应用它们。 结对编程记忆 [CODE BLOCK] Continue 把它存为 记忆。 故障排查 MCP Server 未连接 1. 检查 是否为有效 JSON 2. 验证 Node.js: 3. 查看 Continue 的输出面板(View → Output → Continue) 4. 重启 IDE 工具未出现 - 确认 Continue 版本支持 MCP(≥ 0.9.x) - 检查配置中的 环境变量是否已设置 - 在 Continue 的日志中查找 MCP 错误 下一步 - Claude Desktop 配置 - 自定义 MCP 客户端 ──────────────────────────────────────────────────────────── # Cursor 中的 MCP SUMMARY: 把 Synapse 接入 Cursor IDE,为编码会话提供持久化的项目记忆。 Cursor 中的 MCP Cursor 是基于 VS Code 的 AI 驱动 IDE。借助 Synapse MCP,Cursor 在会话之间获得持久化记忆 — 它会记住你的项目决策、代码库模式和过往调试会话。 前置条件 - 已安装 Cursor IDE() - Node.js 18+ - 你的 Synapse Mind Key 配置 第 1 步:打开 Cursor 设置 在 Cursor 中: 1. 打开设置(macOS Cmd+,,Windows/Linux Ctrl+,) 2. 搜索 “MCP” 或导航到 第 2 步:添加 Synapse MCP Server 点击 “Add MCP Server” 并配置: | 字段 | 值 | |-------|-------| | Name | | | Type | | | Command | | | Env | | 第 3 步:直接编辑 config.json(备选) Cursor 把 MCP 配置存储在 : [CODE BLOCK] 第 4 步:重启 Cursor 完全重启 Cursor(macOS 上 Cmd+Q 后重新打开)。 验证可用 在 Cursor 的聊天面板中(Cmd+L): [CODE BLOCK] Cursor 应调用 并返回你已存储的记忆。 常见模式 项目入门 打开新项目时: [CODE BLOCK] Cursor 调用 并从中断处继续工作。 架构决策 [CODE BLOCK] Cursor 把它存为 记忆,优先级 。 调试历史 [CODE BLOCK] Cursor 搜索 记忆并提醒你过往修复。 跨会话代码模式 [CODE BLOCK] Cursor 找出你以前实现过的认证相关记忆。 故障排查 MCP Server 未连接 1. 验证 Node.js:(≥ 18) 2. 测试 MCP Server:(应无错启动) 3. 查看 Cursor 的 MCP 日志(View → Output → MCP) 4. 完全重启 Cursor 工具未出现 - 检查 是否为有效 JSON - 验证 环境变量已设置 - 检查 Cursor 版本是否支持 MCP(≥ 0.42) Mind Key 无效 [CODE BLOCK] 下一步 - Claude Desktop 配置 - Continue.dev 配置 - 持久化 LLM Agent 指南 ──────────────────────────────────────────────────────────── # 构建自定义 MCP 客户端 SUMMARY: 使用 MCP SDK 从你自己的应用连接到 Synapse MCP Server。 构建自定义 MCP 客户端 如果你在构建自己的 LLM 应用,可以直接使用官方 MCP SDK 连接到 Synapse MCP Server。这样你的应用就能访问全部 79 个 Synapse 工具。 SDK | 语言 | 包 | |----------|---------| | TypeScript/JavaScript | | | Python | | TypeScript 示例 安装 [CODE BLOCK] 通过 stdio 连接 [CODE BLOCK] 通过 HTTP/SSE 连接(远程) [CODE BLOCK] Python 示例 安装 [CODE BLOCK] 通过 stdio 连接 [CODE BLOCK] 工具配置文件 连接时,可通过 头(HTTP/SSE)或 环境变量(stdio)请求特定工具配置文件: [CODE BLOCK] 错误处理 [CODE BLOCK] 用例 - 自定义 AI 助手 — 构建带持久记忆的 Agent - 工作流自动化 — 在自定义工作流中串联 Synapse 工具 - 数据流水线 — 提取记忆、转换、加载到别处 - 监控仪表板 — 展示记忆统计、聊天历史、任务 下一步 - MCP 规范 - Synapse MCP 仓库 - API 概览 ──────────────────────────────────────────────────────────── # MCP 故障排查 SUMMARY: 解决常见 MCP 集成问题 — 服务器不启动、工具不出现、认证错误。 KEY CONTEXT: Common issues: 1. Node.js < 18 → upgrade to 18+ 2. Mind Key invalid → check format (mk_...), get fresh via POST /minds 3. npx not found → install Node.js 4. Tools not appearing → restart client, check config JSON validity 5. SYNAPSE_URL unreachable → curl /health to verify 6. MCP server crashes → check logs, run npx manually to see error Debug steps: run `npx -y synapse-mcp-api@latest` manually, check stderr Logs: Claude Desktop ~/Library/Logs/Claude/mcp.log, Cursor ~/.cursor/logs/ MCP 故障排查 把 Synapse MCP 集成到 LLM 客户端时的常见问题与解决方案。 快速诊断清单 1. ✅ 是否已安装 Node.js 18+?() 2. ✅ Mind Key 是否以 开头?(不是 JWT 的 ) 3. ✅ Synapse API 是否可达?() 4. ✅ Mind Key 是否可用?() 5. ✅ 配置文件是否为有效 JSON?(无尾随逗号、无注释) 6. ✅ 配置更改后是否重启客户端? 7. ✅ MCP Server 是否能手动启动?() 问题:客户端中没有工具出现 症状 - Claude Desktop / Cursor / Continue 显示 0 个工具 - 没有 🔌 图标或 MCP Server 列表中没有 “synapse” 条目 解决方案 1. 完全重启客户端 — macOS 上 Cmd+Q(不是只关窗口) 2. 检查配置文件位置: - Claude Desktop macOS: - Claude Desktop Windows: - Cursor: - Continue: 3. 校验 JSON — 把配置粘到 4. 查看客户端日志中的 MCP 错误: - Claude Desktop:(macOS) - Cursor:View → Output → MCP 5. 手动运行 MCP Server 以查看启动错误: [CODE BLOCK] 问题:“Mind Key invalid” 错误 症状 - 工具出现,但调用失败返回 “401 Unauthorized” - 错误:“Mind Key fehlt oder ungültig” 解决方案 1. 验证 Mind Key 格式 — 以 开头,约 40 个字符 2. 直接测试: [CODE BLOCK] 3. 检查环境变量是否设置 — 对于 stdio 传输,环境变量必须在 MCP Server 配置中,而不是你的 shell 4. 获取新的 Mind Key: [CODE BLOCK] 问题:npx 未找到 症状 - 错误:“npx: command not found” - MCP Server 启动失败 解决方案 1. 安装 Node.js 18+: - macOS: 或从 下载 - Linux: - Windows:从 下载 2. 安装后重启终端 3. 验证: 问题:SYNAPSEURL 不可达 症状 - MCP Server 启动但工具调用超时 - 错误:“fetch failed” 或 “ECONNREFUSED” 解决方案 1. 测试连通性: [CODE BLOCK] 2. 检查公司防火墙 — 可能阻挡出站 HTTPS 3. 尝试备用 URL: - 生产环境: - MCP Server: 4. 自托管:确保 Synapse 实例正在运行且可访问 问题:MCP Server 崩溃 症状 - MCP Server 启动后立即退出 - 客户端日志显示 “MCP server disconnected” 解决方案 1. 手动运行查看错误: [CODE BLOCK] 2. 检查端口冲突 — MCP Server 默认使用端口 13100 3. 清除 npx 缓存: [CODE BLOCK] 4. 更新到最新版: [CODE BLOCK] 问题:工具调用返回 429 症状 - 错误:“Rate limit exceeded” 解决方案 MCP 不应出现此问题(用头部认证,无限制)。如果出现: 1. 检查是否在某处用了 — 改用头部认证 2. 验证 — 确保指向正确实例 3. 若问题持续,联系支持 问题:工具出现但不工作 症状 - 客户端列出了工具 - 调用工具返回错误或无结果 解决方案 1. 检查工具名 — 必须精确(如 ,不是 ) 2. 验证参数 — 检查工具的输入 schema 3. 通过直接 API 测试: [CODE BLOCK] 4. 检查 Synapse 健康: [CODE BLOCK] 获取帮助 如果以上方案都无法解决: 1. 查看已有 issue: 2. 提交新 issue,附上: - MCP Server 版本() - 客户端名称与版本 - 操作系统 - 相关日志片段 - 复现步骤 下一步 - Claude Desktop 配置 - Claude Code 配置 - API 错误 ──────────────────────────────────────────────────────────── # MCP 是什么? SUMMARY: Model Context Protocol 让 LLM 调用外部工具。Synapse 通过官方 MCP Server 暴露 79 个工具。 KEY CONTEXT: MCP = Model Context Protocol (Anthropic, 2024). Open standard for LLM-tool integration. Synapse has official MCP server: synapse-mcp-api (npm package, npx -y synapse-mcp-api@latest) 79 tools exposed: 22 memory, 7 chat, 8 scheduler, 4 tasks, 5 scripts, 9 computers, 4 push, 5 user, 3 utility 3 transports: stdio (local), HTTP/SSE (remote), WebSocket (mobile) Supported clients: Claude Desktop, Claude Code, Cursor, Continue, Cline, any MCP-compatible client Tool Profiles (v1.4.0): minimal (8 tools), standard (25), full (119) — controlled via MCP_PROFILE env or Mcp-Tool-Profile header MCP 是什么? Model Context Protocol (MCP) 是 Anthropic 于 2024 年推出的开放标准,让 LLM 以结构化方式调用外部工具。你不需要把 API 文档粘到 prompt 里,而是把工具注册到 MCP Server,LLM 按需调用 — 类似 function calling,但标准化且与客户端无关。 Synapse MCP Server Synapse 提供官方 MCP Server(npm 上的 ),暴露覆盖所有 Synapse 功能的 79 个工具: | 分类 | 工具 | 数量 | |----------|-------|-------| | Memory | recall, list, store, search, semantic-search, update, delete, bulk-delete, stats, unverified, contradictions, audit, related, by-tag, diff, expiring, health, sync, embed-batch, verify, unverify, mind-export | 22 | | Chat | poll, reply, status, history, unread, send, upload | 7 | | Scheduler | cronlist, croncreate, crondelete, crontoggle, varlist, varget, varset, vardelete | 8 | | Tasks | tasklist, taskget, taskcreate, taskupdate | 4 | | Scripts | scriptlist, scriptget, scriptinfo, scriptstore, scriptdelete | 5 | | Computers | computerlist, computerget, installcode, screenshot, commandqueue, commandstatus, commandslist, disable, delete | 9 | | Push | vapidpublickey, subscribe, unsubscribe, test | 4 | | User/Mind | register, login, mindslist, mindcreate, minddelete | 5 | | Utility | time, calc, random | 3 | | Visualization | graph, tags, compact | 3 | | Sharing | share, list, revoke | 3 | | Webhooks | register, list, get, update, delete | 5 | | Browser | new, navigate, click, type, screenshot, close | 6 | | 合计 | | 79+ | 工作原理 [CODE BLOCK] 1. 你把 LLM 客户端(Claude Desktop、Cursor 等)配置为使用 Synapse MCP Server 2. 客户端启动 MCP Server(通过 ) 3. MCP Server 用你的 Mind Key 连接到 Synapse API 4. LLM 看到全部 79 个工具,作为可调用的原生函数 5. 当 LLM 需要记住某事时,它调用 — MCP Server 把它翻译为 Synapse 上的 传输方式 Synapse MCP Server 支持三种传输方式: stdio(本地,桌面端推荐) [CODE BLOCK] HTTP/SSE(远程,多租户) 把你的 MCP 客户端连接到: [CODE BLOCK] WebSocket(移动端,高吞吐) [CODE BLOCK] 工具配置文件(v1.4.0) 为减小较小 LLM 的 token 开销,MCP Server 支持三种工具配置文件: | 配置文件 | 工具 | Tokens | 适合 | |---------|-------|--------|----------| | | 8(组合分发) | 500 | 上下文 ≤8k 的自托管 LLM | | | 25(命名) | 2,500 | 中等大小 LLM(Claude Haiku、GPT-3.5) | | | 119(全部) | 8,250 | 大型 LLM(Claude Sonnet/Opus、GPT-4) — 默认 | 控制方式: - 环境变量: - 头: 支持的客户端 - Claude Desktop — Anthropic 的桌面应用 - Claude Code — 终端编码 Agent - Cursor — AI 驱动的 IDE - Continue.dev — 开源 AI 编码助手 - Cline — VS Code 扩展 - 任何兼容 MCP 的客户端 为什么用 MCP 而非直接 API? | 方式 | 优点 | 缺点 | |----------|------|------| | 直接 API | 简单,无额外层 | LLM 需要知道 URL、请求头、认证 | | MCP | LLM 看到原生工具,无需记 URL | 多一个 MCP Server 进程 | 对于大多数 LLM Agent 用例,MCP 是更好的选择 — LLM 不需要记 API 路径或认证模式。 下一步 - Claude Desktop 配置 — 2 分钟配置 - Claude Code 配置 — 终端集成 - 自定义 MCP 客户端 — 自建客户端 ## 分类:指南与操作手册 针对具体场景的循序渐进指南。 ──────────────────────────────────────────────────────────── # iOS 应用自动化测试 SUMMARY: 使用 Synapse + Computer Control API 通过 Simulator 自动化 iOS 应用测试。 iOS 应用自动化测试 将 Synapse 的记忆系统与 Computer Control API 结合,构建 LLM 驱动的 iOS 应用测试。LLM 会记住测试场景,从过往失败中学习,并适应 UI 变化。 架构 [CODE BLOCK] 前置条件 - Synapse 账户 + Mind Key - 在 Claude Desktop 中配置 Synapse MCP Server - 已安装 的 iOS Simulator - 在 Synapse 中注册计算机(参见 Computer Control API) 第 1 步:注册 Simulator 计算机 在运行 iOS Simulator 的 Mac 上: [CODE BLOCK] 第 2 步:在记忆中存储测试场景 把可复用的测试场景作为记忆存储: [CODE BLOCK] 第 3 步:LLM 驱动的测试执行 在 Claude Desktop 中(已配置 Synapse MCP): [CODE BLOCK] Claude 会: 1. 调用 查找 记忆 2. 调用 查看当前状态 3. 通过 执行每一步(点击、输入) 4. 通过截图验证结果 5. 把任何失败存储为 记忆 第 4 步:自愈测试 当测试失败时,存储失败信息与恢复方案: [CODE BLOCK] 下次 LLM 运行该测试时,会回放该失败记忆并自动应用恢复方案。 第 5 步:测试结果跟踪 把测试运行记录为任务: [CODE BLOCK] 常用命令 | 操作 | 命令 | |--------|---------| | 启动 Simulator | | | 截屏 | (通过 Synapse MCP) | | 在 (x,y) 点击 | | | 输入文本 | | | 按 Home 键 | | 最佳实践 > [!TIP] > - 把 UI 坐标作为记忆存储 — UI 会变,但 LLM 可以重新学习 > - 使用 accessibility 标签 — 比坐标更稳定 > - 把测试数据单独存储 — 用变量管理用户名、密码 > - 在干净状态运行测试 — 每次运行之间重置 Simulator > - 为失败保存截图 — 便于调试 下一步 - 自愈测试 - Computer Control API - 记忆最佳实践 ──────────────────────────────────────────────────────────── # 备份与恢复 SUMMARY: 导出记忆用于备份、在 Mind 之间迁移、在数据丢失后恢复。 备份与恢复 Synapse 提供完整的导出/导入,用于记忆备份、迁移与灾难恢复。本指南覆盖核心操作。 导出 完整 Mind 导出 将某个 Mind 的所有记忆导出为 JSON: [CODE BLOCK] 响应格式: [CODE BLOCK] 增量导出(Diff) 仅导出自某时间戳以来变化的记忆: [CODE BLOCK] 响应: [CODE BLOCK] 自动化备份 通过 cron 调度每日备份: [CODE BLOCK] > [!NOTE] > cron 端点会接收响应但不存储它。要真正备份,请把 cron 指向你自己的备份服务器来保存响应。 更好:外部备份脚本 [CODE BLOCK] 加入 crontab: [CODE BLOCK] 恢复 恢复到同一 Mind [CODE BLOCK] 恢复到新 Mind [CODE BLOCK] Python 恢复脚本 [CODE BLOCK] 在 Mind 之间迁移 [CODE BLOCK] 备份其他数据 别忘了备份: | 数据类型 | 端点 | |-----------|----------| | 记忆 | | | 任务 | | | 脚本 | | | Webhook | | | Cron 任务 | | | 变量 | | | 聊天记录 | | 验证 恢复后请验证: [CODE BLOCK] 最佳实践 > [!TIP] > - 每日备份 — 用 cron 自动化 > - 测试恢复 — 不能恢复的备份毫无意义 > - 保留多版本 — 至少 30 天 > - 异地存储 — S3、Backblaze B2 等 > - 加密敏感备份 — 记忆中可能含 PII > - 记录恢复流程 — 等到你需要时已经忘了 下一步 - Memory API - Cron 与调度器 — 用于自动化备份 ──────────────────────────────────────────────────────────── # 记忆最佳实践 SUMMARY: 如何结构化记忆以实现高效回放 — 分类、键、标签、优先级。 记忆最佳实践 记忆的结构决定了它的实用价值。本指南涵盖记忆的分类、打标签与优先级模式,让 LLM 能在正确时间回放出正确信息。 分类:选择最具体的 | 分类 | 用于 | 示例 | |----------|---------|---------| | | 用户名、角色、联系方式 | | | | 喜好、厌恶、工作风格 | | | | 可验证的事实 | | | | 项目状态、决策 | | | | 用户的技能 | | | | 要避免的过往错误 | | | | 与会话相关的上下文 | | | | 其他备注 | | > [!TIP] > 拿不准时,可验证信息用 ,其他都用 。 > 不要过度分类 — 清晰的 比含糊的 更好。 Key:有意义的标识符 字段是记忆的标识符。使用有意义且稳定的 key: 好 key: - - - - 坏 key: - (无意义) - (不具描述性) - (日期对回放无帮助) Key 命名规范 - (小写加下划线) - 以分类为前缀:、、 - 使用描述性名词,而非动词 - 长度控制在 50 字符以内 Tags:用于搜索与过滤 标签可加速过滤与搜索。每条记忆加 2-5 个标签: [CODE BLOCK] 标签模式 - 项目名:、、 - 主题:、、、 - 状态:、、 - 优先级指示:、 > [!NOTE] > 标签不区分大小写。请使用小写以保持一致。 优先级:实事求是 | 优先级 | 用于 | 占比 | |----------|---------|---------------| | | 用户身份、法律信息、不可逆决策 | 5% | | | 进行中的项目、重要偏好 | 20% | | | 大多数事实、备注、上下文 | 65% | | | 临时、知道就好的信息 | 10% | > [!WARNING] > 不要把所有记忆都标为 。如果一切都是 critical,那就什么都不是。 > 把 留给那些一旦被遗忘就会造成实际伤害的内容。 何时存储、何时不存储 始终存储 - 用户身份(姓名、邮箱、角色) - 长期偏好 - 项目决策与理由 - 过往错误与教训 - 对用户做出的承诺 不要存储 - 临时状态(改用变量) - 逐字对话历史(聊天系统会处理) - 敏感数据(密码、API key) - 易推导的事实(当前日期、文件内容) - 短暂上下文(用 分类 + low 优先级) 更新记忆 用相同的 + 发起 会更新已有记忆: [CODE BLOCK] > [!TIP] > 使用稳定的 key,这样你可以更新而不创建重复。LLM 应该在信息变化时重新 POST 相同的 key,而不是创建新记忆。 记忆生命周期 [CODE BLOCK] - 创建:POST /memory,带上完整上下文 - 活跃:频繁回放,按需更新 - 陈旧:仍相关但不再活跃使用(降低优先级?) - 归档:设为 优先级,保留供历史参考 - 删除:不再相关时 DELETE /memory/:id 定期清理 [CODE BLOCK] 模式:记忆继承 对于层级上下文(项目 → 子项目 → 任务): [CODE BLOCK] LLM 之后可搜索 找到所有相关记忆。 模式:决策日志 把决策与理由一起存储,这样 LLM 不会重新质疑: [CODE BLOCK] 模式:错误规避 把错误与具体的规避指令一起存储: [CODE BLOCK] 应避免的反模式 > [!WARNING] > - 存储对话日志 — 聊天系统会处理 > - 存储整个文件 — 用脚本存储或外部存储 > - 存储临时状态 — 用变量 > - 存储密钥 — 用环境变量 > - 重复记忆 — 用稳定的 key > - 过度打标签 — 每条记忆 2-5 个标签最理想 > - 一切都是 critical — 优先级要实事求是 下一步 - Memory API - 持久化 LLM Agent - 记忆打标签策略 ──────────────────────────────────────────────────────────── # 多 Agent 协调 SUMMARY: 使用共享的 Synapse Mind、任务与聊天协调多个 LLM Agent。 多 Agent 协调 当你有多个 LLM Agent 处理相关任务时,Synapse 提供协调层 — 共享记忆、任务分配与异步聊天。 模式 模式 1:共享 Mind(单一真相源) 所有 Agent 共享一个 Mind Key。它们读写同一个记忆存储。 [CODE BLOCK] 用例: 一组 Agent 共同处理一个项目。 配置: [CODE BLOCK] 通过任务协调: [CODE BLOCK] 模式 2:专用 Mind(隔离上下文) 每个 Agent 有自己的 Mind。它们通过一个共享的“协调”Mind 通信。 [CODE BLOCK] 用例: 具有不同专长(编码、审查、部署)的 Agent。 配置: [CODE BLOCK] 通过共享 Mind 协调: [CODE BLOCK] 模式 3:中心辐射式(Orchestrator) 中央协调 Agent 把任务分配给工作 Agent。 [CODE BLOCK] 用例: 复杂工作流,需要并行工作。 实现: [CODE BLOCK] 通过聊天协调 Agent 之间可通过聊天系统通信: [CODE BLOCK] > [!NOTE] > 聊天消息有角色标记。Agent 之间消息用 role=agent,人与 Agent 之间用 role=human。 通过变量协调 用变量进行轻量协调(锁、标志位): [CODE BLOCK] 最佳实践 > [!TIP] > - 为不同关注点使用独立 Mind — 不要把 coder 和 reviewer 的记忆混在一起 > - 在聊天中标记 Agent — 让地址清晰 > - 用任务分配工作 — 而非聊天(聊天用于讨论) > - 实现幂等性 — Agent 可能重试失败的操作 > - 记录一切 — 把决策存入记忆以备审计 下一步 - 持久化 LLM Agent - LLM Cookbook - Webhook 自动化 ──────────────────────────────────────────────────────────── # 构建持久化 LLM Agent SUMMARY: 使用 Synapse 构建跨会话记忆的 LLM Agent 的分步指南。 概览 本指南带你构建一个使用 Synapse 跨会话持久化上下文的 LLM Agent。完成时,你的 Agent 将能够: - 会话开始时回放过往上下文 - 随时存储新学到的内容 - 跨会话跟踪多步任务 - 通过异步聊天与人类通信 架构 [CODE BLOCK] 第 1 步:设置 Mind Key [CODE BLOCK] 第 2 步:会话启动协议 每次会话开始时,回放所有记忆: [CODE BLOCK] 第 3 步:存储新学习内容 每当 Agent 学到值得记住的内容: [CODE BLOCK] 第 4 步:任务管理 跨会话跟踪多步工作: [CODE BLOCK] 第 5 步:与人类异步聊天 在工具调用之间轮询消息: [CODE BLOCK] 第 6 步:会话结束协议 会话结束时,存储最终上下文: [CODE BLOCK] 完整模式 [CODE BLOCK] 最佳实践 > [!TIP] > > - 始终先回放 — 不加载上下文就不要开始工作 > - 主动存储 — 不要等到会话结束 > - 使用有意义的 key — 、,而非 > - 给一切打标签 — 标签支撑搜索与过滤 > - 设定合理的优先级 — 不是所有事都 下一步 - LLM Cookbook — 实用模式 - 记忆最佳实践 - 多 Agent 协调 ──────────────────────────────────────────────────────────── # 自愈测试流水线 SUMMARY: 使用 Synapse 记忆构建能从失败中学习并自动适应的测试流水线。 自愈测试流水线 传统测试套件在 UI 变化时会失败。自愈测试使用 Synapse 记忆从过往失败中学习并适应 — 减少不稳定测试与维护成本。 概念 [CODE BLOCK] 1. 测试运行 2. 若失败,存储失败信息(出了什么错、为什么、如何修) 3. 下次运行:执行前回放相关失败 4. 自动应用已知修复 实现 第 1 步:测试包装器 为每个测试包装记忆回放/存储: [CODE BLOCK] 第 2 步:自适应测试逻辑 在测试内部检查已知失败并应用修复: [CODE BLOCK] 第 3 步:恢复策略 把恢复策略作为记忆存储: [CODE BLOCK] 第 4 步:CI 集成 [CODE BLOCK] 第 5 步:失败分析仪表板 [CODE BLOCK] 最佳实践 > [!TIP] > - 存储 traceback — 它们包含失败的确切行 > - 按测试名打标签 — 加速过滤 > - 使用 分类 — 与常规记忆分离 > - 设为 优先级 — 失败绝不能被遗忘 > - 定期清理 — 删除已解决问题的记忆 > - 不要存储敏感数据 — 凭据、PII 常见失败模式存储 | 失败类型 | 存储内容 | |--------------|---------------| | 元素未找到 | 尝试的选择器、页面状态、截图 | | 超时 | 等待时间、等待的对象 | | 断言失败 | 期望值与实际值 | | 网络错误 | URL、状态码、响应体 | | 权限被拒 | 所需权限、当前用户角色 | 下一步 - iOS 自动化测试 - 记忆最佳实践 - 错误恢复 Cookbook ──────────────────────────────────────────────────────────── # Webhook 自动化 SUMMARY: 在记忆变化时触发外部系统 — 同步、通知、自动化。 Webhook 自动化 Webhook 让你在 Synapse 事件触发时启动外部系统。本指南涵盖常见自动化模式。 常见模式 模式 1:关键记忆通知 当存储关键记忆时发送 Slack 消息: [CODE BLOCK] 注册 Webhook: [CODE BLOCK] 模式 2:同步到外部系统 把记忆同步到 Notion、Obsidian 或任何外部知识库: [CODE BLOCK] 模式 3:触发 CI/CD 当存储 “release” 记忆时触发部署: [CODE BLOCK] 模式 4:人类消息唤醒 Agent 当人类发送聊天消息时触发 LLM Agent 运行: [CODE BLOCK] 模式 5:聚合指标 跟踪记忆增长、聊天活动、任务完成: [CODE BLOCK] 签名验证 始终验证 Webhook 签名以防伪造: [CODE BLOCK] 重试逻辑 Synapse 会以指数退避重试失败的 Webhook。你的处理程序应该: 1. 快速返回 200 — 不要同步做重活 2. 排队处理 — 使用后台作业系统 3. 保持幂等 — 同一事件可能被投递多次 [CODE BLOCK] 调试 Webhook 检查投递历史 Webhook 投递会被记录。查看你的 Webhook 最近的投递: [CODE BLOCK] 手动测试 Webhook [CODE BLOCK] 常见问题 | 问题 | 修复 | |-------|-----| | 4xx 响应 | 检查处理程序是否返回 200 | | 5xx 响应 | 服务器错误 — 查看你的应用日志 | | 超时 | 快速返回 200,异步排队处理 | | 重复投递 | 让处理程序幂等 | | 签名不匹配 | 确认 secret 正确 | 最佳实践 > [!TIP] > - 始终验证签名 — 绝不跳过这一步 > - 快速返回 200 — 不要阻塞 Synapse > - 保持幂等 — 处理重复投递 > - 使用具体事件 — 而非 > - 监控投递失败 — 设置告警 下一步 - Webhooks API - Cron 与调度器 - 持久化 LLM Agent ## 分类:概念 Synapse 背后的架构与概念。 ──────────────────────────────────────────────────────────── # Synapse 架构 SUMMARY: Synapse 的构建方式 — Fastify、PostgreSQL、FTS5、向量嵌入、MCP Server。 Synapse 架构 Synapse 是一个多租户记忆 API,基于 Fastify、带 FTS5 的 PostgreSQL,以及可选的用于语义搜索的向量嵌入服务构建。 高层架构 [CODE BLOCK] 核心组件 1. Synapse API(Fastify) 主 HTTP 服务器。负责处理: - REST 端点(、、 等) - 认证(Agent 用 Mind Key,人类用 JWT) - 限速(仅 认证) - 静态文件服务(、 等 Web UI) - Webhook 派发 基于 Fastify 5 构建,注重性能。生产环境运行在端口 12800。 2. 带 FTS5 的 PostgreSQL 主数据存储。使用 PostgreSQL 及 FTS5 扩展进行全文搜索。 关键表: | 表 | 用途 | |-------|---------| | | 用户账户 | | | Mind 范围(每个 Mind 有一个 Mind Key) | | | 记忆记录,附带 FTS5 虚拟表 | | | 任务管理 | | | 聊天记录 | | | 持久化脚本 | | | Webhook 注册 | | | 定时任务 | | | 键值存储 | | | 审计日志 | FTS5 可在所有记忆内容上实现亚毫秒级全文搜索。详见 FTS5 搜索。 3. Embeddings 服务(可选) 为支持语义搜索,Synapse 会为记忆内容生成向量嵌入。这些向量与记忆一起存储,用于相似度搜索。 - 提供方:可配置(OpenAI、本地模型等) - 作为 列存储在 表中 - 由 端点使用 - 详见 语义搜索 4. MCP Server(独立服务) Synapse MCP Server 作为独立进程运行(端口 13100)。它: - 通过 Model Context Protocol 暴露 79 个工具 - 支持 stdio、HTTP/SSE 和 WebSocket 传输 - 将 MCP 工具调用转换为 Synapse API 调用 - 多租户:每个会话使用一个 Mind Key 5. Browser 代理(独立服务) 为支持浏览器自动化,独立的基于 Playwright 的服务运行在端口 13000。MCP Server 可调用它以执行 工具。 6. SSH 代理(独立服务) 为支持基于 SSH 的远程命令,独立服务运行在端口 12900。 多租户模型 [CODE BLOCK] 每个 Mind 完全隔离。Mind Key 仅授予访问某一个 Mind 的权限。JWT 授予访问用户账户的权限(用于管理 Mind)。 详见 多租户。 请求流 记忆存储请求 [CODE BLOCK] 记忆搜索请求 [CODE BLOCK] 部署 Synapse 作为 Docker 容器部署。参见 : [CODE BLOCK] 性能特征 | 操作 | 延迟 | 吞吐 | |-----------|---------|------------| | 记忆存储 | 5ms | 1000+ req/s | | 记忆回放 | 20ms | 500 req/s | | FTS5 搜索 | 10ms | 800 req/s | | 语义搜索 | 50ms | 200 req/s | | 聊天轮询 | 5ms | 2000 req/s | 下一步 - 记忆模型 - 多租户 - FTS5 搜索 ──────────────────────────────────────────────────────────── # FTS5 全文搜索 SUMMARY: Synapse 如何使用 SQLite FTS5 实现亚毫秒级的全文记忆搜索。 FTS5 全文搜索 Synapse 使用 FTS5(Full-Text Search 5)实现快速、灵活的记忆搜索。本页介绍其工作原理以及如何高效使用。 什么是 FTS5? FTS5 是一个 SQLite 扩展(也可通过扩展在 PostgreSQL 中使用),提供全文搜索能力。它能够: - 为文本内容建立索引以实现快速关键词搜索 - 支持布尔运算符(AND、OR、NOT) - 支持用引号进行短语匹配 - 支持用 进行前缀匹配 - 按相关性对结果排序 Synapse 使用 FTS5 为所有记忆内容建立索引,可在数千条记忆上实现亚毫秒级搜索。 Synapse 如何使用 FTS5 当你 时: 1. 记忆内容存储到 表 2. 内容也插入到 FTS5 虚拟表 3. FTS5 自动分词并建立索引 当你 时: 1. Synapse 使用 FTS5 语法解析查询 2. 对 FTS5 索引执行 3. 按 过滤(租户隔离) 4. 返回排序后的结果 查询语法 简单关键词搜索 [CODE BLOCK] 返回包含 "docker" 的记忆。 多关键词(隐式 AND) [CODE BLOCK] 返回同时包含 "docker" 和 "swarm" 的记忆。 短语匹配 [CODE BLOCK] 返回包含完整短语 "docker swarm" 的记忆。 前缀匹配 [CODE BLOCK] 返回包含以 "docker" 开头的词的记忆(例如 "dockers"、"dockerfile"、"dockerize")。 布尔 OR [CODE BLOCK] 返回包含 "docker" 或 "kubernetes" 的记忆。 布尔 NOT [CODE BLOCK] 返回包含 "docker" 但不包含 "swarm" 的记忆。 分组 [CODE BLOCK] 返回包含 "docker" 或 "kubernetes" 但不包含 "test" 的记忆。 实用示例 查找关于某个项目的记忆 [CODE BLOCK] 查找精确短语 [CODE BLOCK] 排除测试记忆 [CODE BLOCK] 按技术查找 [CODE BLOCK] 排序 FTS5 使用 BM25 算法按相关性排序。影响因素: - 词频(词条出现频率) - 逆文档频率(更稀有的词条排名更高) - 文档长度(包含该词条的较短文档排名更高) - 列权重(标题 > 内容) 结果按相关性返回(最相关的在前)。 性能 | 操作 | 延迟 | |-----------|---------| | 搜索 100 条记忆 | < 5ms | | 搜索 1,000 条记忆 | < 10ms | | 搜索 10,000 条记忆 | < 25ms | | 搜索 100,000 条记忆 | < 100ms | FTS5 针对读密集型工作负载做了高度优化。 局限性 词干提取 FTS5 默认不做词干提取。"running" 和 "run" 是不同的词条。 变通方案: 使用前缀匹配: 拼写容错 FTS5 不支持模糊匹配。拼写错误会返回零结果。 变通方案: 使用语义搜索()进行概念匹配。 停用词 常见词(the、a、an、is)会被索引,但对搜索意义不大。FTS5 会自动处理。 FTS5 与语义搜索对比 | 方面 | FTS5 | 语义搜索 | |--------|------|-----------------| | 速度 | 亚毫秒级 | 50-100ms | | 匹配方式 | 精确关键词 | 概念 | | 拼写容错 | 无 | 一定程度 | | 词干提取 | 无 | 隐式 | | 是否需要嵌入 | 否 | 是 | | 适合场景 | 具体术语 | 概念 | 当你知道关键词时使用 FTS5。当你想找“关于 X 的记忆”且 X 用不同方式描述时,使用语义搜索。 最佳实践 > [!TIP] > - 使用具体术语 — "docker swarm" 优于 "container orchestration" > - 为短语加引号 — 确保短语匹配 > - 用前缀覆盖变体 — 可捕获 "deploy"、"deployment"、"deploying" > - 排除噪声 — 过滤掉测试记忆 > - 结合标签 — 缩小结果范围 下一步 - 语义搜索 - Memory API - 记忆最佳实践 ──────────────────────────────────────────────────────────── # 记忆模型 SUMMARY: 记忆的结构 — 分类、键、标签、优先级、来源、验证。 记忆模型 Synapse 的记忆模型专为 LLM Agent 设计 — 既结构化以保证可靠回放,又足够灵活以适应任何领域。 记忆结构 [CODE BLOCK] 字段 | 字段 | 类型 | 必填 | 说明 | |-------|------|----------|-------------| | | string | 自动 | 唯一 ID(memxxx) | | | enum | ✅ | 8 种分类之一 | | | string | ✅ | 稳定标识符(用于更新) | | | string | ✅ | 记忆内容(任意文本) | | | string[] | – | 用于搜索和过滤 | | | enum | – | low、normal、high、critical(默认:normal) | | | enum | 自动 | user、agent(存储者) | | | bool | 自动 | 是否经过人类验证 | | | float | – | 0.0 到 1.0(user 默认 1.0,agent 默认 0.7) | | | timestamp | – | 何时遗忘此记忆 | | | string | 自动 | 所属 Mind | | | timestamp | 自动 | 首次存储时间 | | | timestamp | 自动 | 最后修改时间 | 分类 八种分类覆盖了常见的 LLM Agent 用例: | 分类 | 用途 | 内容示例 | |----------|---------|-----------------| | | 用户是谁 | "User is Michael Schäfer, software engineer in Berlin" | | | 用户偏好 | "Prefers concise technical responses" | | | 可验证的事实 | "Office is in Berlin, timezone Europe/Berlin" | | | 项目状态 | "Synapse v1.5.0 deployed, working on v1.6.0 docs" | | | 用户的技能 | "Advanced Python, 10+ years" | | | 过去犯的错 | "Forgot to bump npm version — CI failed" | | | 会话上下文 | "Currently reviewing PR #42" | | | 其他备注 | "Try Redis for caching next sprint" | Key:稳定标识符 字段至关重要 — 它是更新记忆而不产生重复的方式。 [CODE BLOCK] Key 规则: - 在 (category, mind) 内必须唯一 - 使用 - 以分类为前缀提高可读性:、 - 创建后不要修改 key Tags:用于搜索 标签可加速过滤与搜索: [CODE BLOCK] 标签最佳实践: - 每条记忆 2-5 个标签(不要过度打标签) - 使用小写以保持一致 - 使用项目名、主题、技术名 - 标签不区分大小写 优先级 | 优先级 | 何时使用 | 回放行为 | |----------|-------------|-----------------| | | 身份、法律、不可逆信息 | 始终位于回放顶部 | | | 进行中的项目、关键偏好 | 回放中突出显示 | | | 大多数记忆(默认) | 标准回放顺序 | | | 临时、知道就好的信息 | 可能被摘要 | 按优先级排序(critical 在前),其次按时间。 来源:User 与 Agent 记忆用 标记: - — 由人类存储(通过 JWT 或人类 UI) - — 由 LLM Agent 存储(通过 Mind Key) 这会影响: - 验证: 记忆自动验证, 记忆不自动验证 - 置信度: 默认 1.0, 默认 0.7 - 回放: 会标记未验证记忆为 "(unverified)" > [!NOTE] > 对 来源的记忆应保持适当的怀疑。它们可能是推断或假设而来,而非用户直接陈述。 验证 标志表示人类已确认该记忆: - 记忆:自动验证() - 记忆:默认未验证() 通过以下方式验证记忆: [CODE BLOCK] > [!NOTE] > 验证需要 JWT(人类认证),而非 Mind Key(Agent 认证)。这确保只有人类才能将记忆标记为已验证。 置信度 字段(0.0 到 1.0)表示记忆的可靠程度: - 1.0 — 用户直接陈述 - 0.7 — 由 Agent 推断 - 0.5 — 不确定,需要验证 - 0.0 — 明确存疑 存储时设置置信度: [CODE BLOCK] 过期 为时效性记忆设置 : [CODE BLOCK] 已过期的记忆不会出现在 中(但仍在数据库中)。使用 查看即将过期的记忆。 记忆生命周期 [CODE BLOCK] 回放行为 返回为 LLM 上下文优化的纯文本摘要: [CODE BLOCK] - 按优先级排序(critical → low),其次按时间 - 未验证记忆用 标记 - 包含标签以提供上下文 - 纯文本(无需解析 JSON) 下一步 - Memory API - 记忆最佳实践 - FTS5 搜索 ──────────────────────────────────────────────────────────── # 多租户与隔离 SUMMARY: Synapse 如何在用户与 Mind 之间隔离数据 — 详解安全边界。 多租户与隔离 Synapse 是多租户的:多个用户,每个用户可有多个 Mind,彼此完全隔离。本页说明隔离模型。 租户层级 [CODE BLOCK] 隔离层级 第 1 级:用户隔离 每个用户账户相互隔离。Alice 不能: - 查看 Bob 的 Mind - 访问 Bob 的记忆(即使有她的 JWT) - 列出 Bob 的账户信息 强制方式:所有表上都有 列,JWT 包含 ,所有查询按 过滤。 第 2 级:Mind 隔离 在同一用户下,每个 Mind 相互隔离。Mind A 不能: - 查看 Mind B 的记忆 - 访问 Mind B 的任务、聊天、脚本 强制方式:所有数据表都有 列,Mind Key 包含 ,所有查询按 过滤。 > [!CRITICAL] > Mind Key 隔离是首要的安全边界。泄露的 Mind Key 会授予对该 Mind 数据的完全访问权限 — 但仅限该 Mind。 认证令牌 | 令牌 | 范围 | 可访问内容 | |-------|-------|-------------------| | Mind Key | 单个 Mind | 仅该 Mind 的数据 | | JWT | 用户账户 | 账户管理(创建/列出/删除 Mind) | | Computer Token | 单台计算机 | 该计算机的命令 | 跨 Mind 访问 同一用户内 用户可通过 JWT 访问自己所有的 Mind(例如 列出全部)。但要读写记忆数据,需要具体的 Mind Key。 跨用户 用户之间不能互访数据 — 除非通过 Sharing API 显式共享某个 Mind: [CODE BLOCK] 共享后,Bob 可通过他的 JWT 访问 Mind A(若 则只读)。 安全边界 [CODE BLOCK] 常见多租户模式 模式 1:单用户,单 Mind 个人 LLM Agent 用户最常见。 - 1 个用户账户 - 1 个 Mind - 1 个 Mind Key - 所有记忆在同一范围 模式 2:单用户,多 Mind 适合有多种上下文的用户(工作、个人、项目)。 - 1 个用户账户 - N 个 Mind(例如 "work"、"personal"、"project-x") - N 个 Mind Key - 每个 LLM 会话使用一个 Mind Key 模式 3:团队共享 Mind 适合团队协作某个项目。 - 1 个用户创建 Mind(获得 Mind Key) - 创建者通过 JWT 共享给团队成员 - 所有团队成员通过 JWT 访问(或共享的 Mind Key) > [!WARNING] > 共享 Mind Key 会授予完全读写权限。团队协作时,请优先使用 Sharing API(基于 JWT),而不是直接共享 Mind Key。 模式 4:SaaS 提供商 适合将 Synapse 作为记忆层嵌入的应用。 - 每个客户 = 1 个用户账户 - 每个客户项目 = 1 个 Mind - 应用按客户/项目存储 Mind Key - 客户之间完全隔离 隔离验证 测试:Mind Key 不能访问其他 Mind [CODE BLOCK] 测试:JWT 不能直接读取记忆数据 [CODE BLOCK] 最佳实践 > [!TIP] > - 每个项目/上下文使用一个 Mind — 隔离是你的朋友 > - 绝不共享 Mind Key — 改用 Sharing API > - 泄露时轮换 Mind Key(删除 Mind、创建新 Mind) > - 审计共享的 Mind — 定期检查 > - 人类 UI 用 JWT — 不要把 Mind Key 暴露给最终用户 下一步 - Authentication - Mind Key 与 JWT - 架构 ──────────────────────────────────────────────────────────── # 语义搜索(向量嵌入) SUMMARY: 使用向量嵌入进行概念性记忆搜索 — 按意义查找,而非仅按关键词。 语义搜索(向量嵌入) Synapse 支持基于向量嵌入的语义搜索。与 FTS5(关键词匹配)不同,语义搜索按意义查找记忆 — 即使没有关键词匹配也能找到。 工作原理 [CODE BLOCK] 什么是嵌入? 嵌入是文本的数值向量表示。意义相近的文本有相近的向量。Synapse 为每条记忆的内容生成一个向量(例如 1536 维)。 余弦相似度 为找到语义相似的记忆,Synapse 计算查询向量与每条记忆向量之间的余弦相似度。相似度越高 = 越相关。 何时使用语义搜索 在以下场景使用语义搜索: - 想要“关于 X 的记忆”,而 X 与存储时的描述不同 - FTS5 返回零结果(无关键词匹配) - 想要概念聚合(例如所有“部署”相关记忆,即使有些写的是“发布”) - 查询是一个问题:“我们如何处理认证?” 在以下场景使用 FTS5: - 已知精确关键词 - 需要布尔逻辑(AND、OR、NOT) - 需要亚毫秒级响应 - 想要短语匹配 端点 GET /memory/semantic-search [CODE BLOCK] 响应: [CODE BLOCK] 示例 查找部署相关记忆 [CODE BLOCK] 返回关于 "deployment"、"release"、"publishing"、"rolling out" 等的记忆。 查找认证模式 [CODE BLOCK] 返回关于 login、auth、JWT、session 管理、OAuth 等的记忆。 查找相似记忆 [CODE BLOCK] 使用语义相似度(基于共享标签 + 嵌入向量)。 嵌入生成 何时生成嵌入? - 存储记忆时 — 若配置了嵌入服务,则同步生成嵌入 - 批量生成 — 为缺失嵌入的记忆生成 - 异步更新 — 内容更新时重新生成嵌入 嵌入提供方 Synapse 支持可配置的嵌入提供方: - OpenAI(、) - 本地模型(通过 Ollama 等) - 自定义(实现 embeddings 接口) 通过环境变量配置: [CODE BLOCK] 批量生成 对于很多记忆缺少嵌入的 Mind: [CODE BLOCK] 性能 | 操作 | 延迟 | |-----------|---------| | 生成嵌入(OpenAI) | 100-200ms | | 语义搜索(1k 条记忆) | 50-100ms | | 语义搜索(10k 条记忆) | 200-500ms | | 批量生成(100 条记忆) | 10-20s | > [!NOTE] > 由于向量计算,语义搜索比 FTS5 慢。已知关键词时用 FTS5,概念查询用语义搜索。 局限性 嵌入成本 若使用 OpenAI,生成嵌入需要付费(text-embedding-3-small 约 $0.02 / 1M tokens)。对于平均每条 100 tokens 的 10,000 条记忆,约 $0.02 — 可忽略不计。 冷启动 在配置嵌入之前存储的记忆没有嵌入。请运行 补齐。 提供方依赖 如果嵌入提供方宕机,语义搜索会优雅降级(返回空结果或错误)。FTS5 仍可正常工作。 当嵌入不可用时 如果未配置嵌入服务: - 返回 503 Service Unavailable - 仍可正常工作(只是不生成嵌入) - FTS5 搜索仍可正常工作 最佳实践 > [!TIP] > - 概念查询用语义搜索 — "我们如何处理 X?" > - 具体术语用 FTS5 — "docker swarm" > - 定期补齐嵌入 — > - 监控提供方健康 — 语义搜索依赖它 > - 与标签结合 — 语义 + 标签过滤缩小结果范围 下一步 - FTS5 搜索 - Memory API - 架构 ## 分类:LLM 食谱 LLM 智能体的方案与模式。 ──────────────────────────────────────────────────────────── # 聊天轮询模式 SUMMARY: 如何在工具调用之间轮询人类消息而不阻塞工作流。 聊天轮询模式 聊天系统是异步的 — 人类可以在你工作时留言。本模式展示如何在轮询消息时不阻塞工作流。 模式 [CODE BLOCK] 在工具调用之间轮询,而不是在紧密循环中轮询。 为什么在工具调用之间轮询? - 不要阻塞 — 紧密循环轮询浪费 API 调用 - 不要错过消息 — 轮询太慢意味着响应迟缓 - 最佳点 — 每 30-60 秒轮询一次,或每次工具调用后 实现 基本轮询 [CODE BLOCK] 模式 1:每次工具调用后轮询 [CODE BLOCK] 模式 2:基于时间的轮询 [CODE BLOCK] 模式 3:事件驱动(用 Webhook) 如需实时通知,注册 Webhook: [CODE BLOCK] 然后你的 Webhook 处理程序可以唤醒 Agent: [CODE BLOCK] 消息处理模式 模式:先确认后处理 [CODE BLOCK] 模式:排队批量处理 [CODE BLOCK] 模式:优先级路由 [CODE BLOCK] 轮询频率 | 用例 | 频率 | |----------|-----------| | 交互式 Agent(人类在等待) | 每 5-10 秒 | | 后台 Agent | 每 30-60 秒 | | 批处理 | 每 5 分钟 | | Webhook 触发 | 不轮询 — 用 Webhook | > [!WARNING] > 频率超过每 5 秒一次会浪费 API 调用。 在有待处理消息时会立即返回,因此更快轮询无益。 多 Agent 聊天 用于 Agent 之间通信: [CODE BLOCK] 最佳实践 > [!TIP] > - 在工具调用之间轮询 — 不要紧密循环 > - 立即确认 — 让人类知道你收到了 > - 异步处理 — 不要在长任务上阻塞 > - 实时场景用 Webhook — 轮询有延迟 > - 不要超过每 5 秒一次 — 浪费 API 调用 常见问题 消息丢失 - 会自动把消息标记为已读 - 如果你不处理,它们就消失了 - 修复: 始终在返回前处理消息 重复回复 - 如果处理程序崩溃,可能回复两次 - 修复: 让处理程序幂等(检查是否已回复) 响应缓慢 - 每 60 秒轮询意味着最高 60 秒延迟 - 修复: 每 10-30 秒轮询,或用 Webhook 下一步 - Chat API - 会话启动模式 - 错误恢复 ──────────────────────────────────────────────────────────── # Agent 错误恢复 SUMMARY: LLM Agent 如何处理错误并恢复 — 重试、存储、学习。 Agent 错误恢复 错误总会发生。网络故障、API 返回 500、Mind Key 失效。本指南展示 LLM Agent 如何优雅地处理错误并从中学习。 错误处理原则 1. 退避重试 — 瞬时错误常常会自行恢复 2. 存储错误 — 从模式中学习 3. 优雅降级 — 不要让整个会话崩溃 4. 通知人类 — 对于无法解决的错误 HTTP 错误处理 指数退避重试 [CODE BLOCK] 认证错误处理 [CODE BLOCK] 把错误存为记忆 发生错误时,存储它们以便未来会话学习: [CODE BLOCK] 常见错误场景 场景 1:Mind Key 无效 [CODE BLOCK] 场景 2:网络错误 [CODE BLOCK] 场景 3:被限速 [CODE BLOCK] 场景 4:服务器错误(5xx) [CODE BLOCK] 场景 5:工具调用失败 [CODE BLOCK] 模式:熔断器 对于反复出现的失败,暂时停止尝试: [CODE BLOCK] 最佳实践 > [!TIP] > - 始终重试瞬时错误 — 网络会失败、服务器会卡顿 > - 不要重试客户端错误(4xx) — 它们不会自行修复 > - 把错误存为记忆 — 从模式中学习 > - 关键错误通知人类 — 他们需要知道 > - 优雅降级 — 部分工作好过崩溃 > - 使用熔断器 — 不要疯狂调用失败的服务 下一步 - 错误 API 参考 - 会话启动模式 - 自愈测试 ──────────────────────────────────────────────────────────── # 记忆打标签策略 SUMMARY: 如何为记忆打标签以实现高效搜索与过滤 — 可扩展的标签体系。 记忆打标签策略 标签是可扩展记忆检索的秘诀。本指南展示如何为记忆打标签,让正确的记忆在正确的时间被找到。 为什么标签重要 没有标签,你只有扁平的全文搜索。有了标签,你就有结构化导航: [CODE BLOCK] 标签带来: - 快速过滤 — - 范围搜索 — - 分组 — 找出某项目的所有 “mistake” 记忆 - 交叉引用 — 共享标签的记忆相互关联 标签体系 项目标签 用项目名作为标签: [CODE BLOCK] 技术标签 用技术名: [CODE BLOCK] 主题标签 用主题分类: [CODE BLOCK] 状态标签 用状态指示: [CODE BLOCK] 类型标签 用类型指示: [CODE BLOCK] 打标签规则 规则 1:每条记忆 2-5 个标签 太少 = 可发现性差。太多 = 噪声。 [CODE BLOCK] 规则 2:小写、连字符 [CODE BLOCK] 规则 3:使用一致的词汇 建立一套标签词汇并坚持使用: [CODE BLOCK] 规则 4:按搜索意图打标签 问自己:“我以后会怎么搜这条记忆?” [CODE BLOCK] 模式 模式 1:项目 + 主题 [CODE BLOCK] 搜索:(所有 Synapse 项目记忆) 搜索:(Synapse 的部署记忆) 模式 2:类型 + 领域 [CODE BLOCK] 搜索:(所有错误) 搜索:(部署错误) 模式 3:层级式 用于项目内的子项目: [CODE BLOCK] 搜索:(所有 Synapse) 搜索:(仅 docs 子项目) 模式 4:状态跟踪 [CODE BLOCK] 常见用例 找出某项目的所有决策 [CODE BLOCK] 找出某领域的所有错误 [CODE BLOCK] 找活跃工作 [CODE BLOCK] 找关于某技术的记忆 [CODE BLOCK] 标签维护 定期审查 [CODE BLOCK] 合并标签 如果有不一致的标签( 和 ),合并它们: [CODE BLOCK] 最佳实践 > [!TIP] > - 尽早建立词汇表 — 从第 1 天起就用一致的标签 > - 按搜索意图打标签 — 你以后会怎么找它? > - 2-5 个标签是最佳点 — 太少或太多都不好 > - 小写 + 连字符 — 而非 > - 定期审查 — 合并重复、移除未用 下一步 - 记忆最佳实践 - FTS5 搜索 - 任务驱动工作流 ──────────────────────────────────────────────────────────── # 会话启动模式 SUMMARY: 每个 LLM Agent 都应遵循的标准会话启动序列。 KEY CONTEXT: ALWAYS at session start: 1) GET /memory/recall, 2) GET /chat/poll, 3) GET /mind/tasks?status=in_progress Build system prompt from recall output. Process unread chat messages before doing new work. Resume any in_progress tasks before starting new ones. Store new learnings as they happen — don't wait until session end. 会话启动模式 每个 LLM Agent 会话都应遵循这一标准启动序列。跳过步骤会导致上下文丢失、错过消息、遗忘任务。 模式 [CODE BLOCK] 实现 第 1 步:回放所有记忆 > [!CRITICAL] > 这是最重要的调用。没有它,你没有任何过往会话的记忆。 [CODE BLOCK] 返回所有记忆的纯文本摘要,按优先级排序。 第 2 步:轮询未读聊天消息 [CODE BLOCK] 返回来自人类的未读消息。会自动把它们标记为已读。 第 3 步:检查进行中的任务 [CODE BLOCK] 返回你上次会话正在做的任务。 第 4 步:构建上下文 把三份响应合并到你的系统 prompt 中: [CODE BLOCK] 第 5 步:处理待处理项 [CODE BLOCK] 完整示例 [CODE BLOCK] 常见错误 > [!WARNING] > - 跳过回放 — 你以零上下文开始,重蹈过往错误 > - 忘记轮询聊天 — 人类消息无人响应 > - 忽略进行中的任务 — 工作执行到一半被遗忘 > - 什么也不存 — 会话未产生持久价值 变体 最小模式(低上下文 LLM) 对于上下文窗口小的 LLM,跳过完整回放: [CODE BLOCK] 然后按需搜索具体主题: [CODE BLOCK] 激进模式(长期运行 Agent) 对于运行数小时的 Agent,加上周期性重新回放: [CODE BLOCK] 下一步 - 记忆打标签策略 - 任务驱动工作流 - 聊天轮询模式 ──────────────────────────────────────────────────────────── # 任务驱动工作流 SUMMARY: 使用 Synapse 任务驱动可跨会话存活的多步 LLM 工作流。 任务驱动工作流 任务不仅仅是待办 — 它们是持久化 LLM 工作流的骨架。为多步工作创建任务,可确保跨会话连续性,并提供完成情况的审计轨迹。 为什么用任务驱动? 无任务: - LLM 每次会话开始时不知道要做什么 - 多步工作执行到一半被遗忘 - 没有已完成工作的记录 有任务: - LLM 立即恢复进行中的任务 - 多步工作跨会话存活 - 内置完成工作的审计轨迹 模式 [CODE BLOCK] 实现 第 1 步:为多步工作创建任务 [CODE BLOCK] 第 2 步:在任务描述中跟踪进度 [CODE BLOCK] 第 3 步:跨会话恢复 [CODE BLOCK] 第 4 步:完成并归档 [CODE BLOCK] 完整示例:部署工作流 [CODE BLOCK] 任务层级 对于复杂工作,使用父子任务关系: [CODE BLOCK] 搜索子任务: [CODE BLOCK] 状态工作流 [CODE BLOCK] Pending 任务已创建但未开始。用于计划的工作。 In Progress 正在处理中。用进度更新描述。 Done 成功完成。描述应包含总结。 Cancelled 已放弃。描述应包含原因。 最佳实践 > [!TIP] > - 多步工作创建任务 — 单步工作不需要任务 > - 用进度更新描述 — 支持恢复 > - 活跃工作用 high 优先级 — 在回放中浮现 > - 完成后标记 done — 不要让任务停留在 inprogress > - 把完成总结存为记忆 — 长期参考 常见模式 模式:Bug 修复工作流 [CODE BLOCK] 模式:研究工作流 [CODE BLOCK] 下一步 - 会话启动模式 - 聊天轮询模式 - 错误恢复 ## 分类:常见问题 常见问题与疑难解答。 ──────────────────────────────────────────────────────────── # API 常见问题 SUMMARY: 常见 API 问题 — 认证、限速、错误处理、端点发现。 API 常见问题 关于 Synapse API 的常见问题。 如何认证? 两种方式: 1. Mind Key(用于数据端点): 2. JWT(用于账户端点): 或通过查询参数(限速 60 次/分钟): 参见 Authentication。 Mind Key 和 JWT 有何区别? - Mind Key:租户范围,永不过期,用于记忆/聊天/任务数据 - JWT:用户范围,7 天过期,用于账户/Mind 管理 参见 Mind Key 与 JWT。 为什么收到 401 Unauthorized? 常见原因: 1. 缺少 头 2. Mind Key 无效(确认它以 开头) 3. 在需要 Mind Key 的地方用了 JWT(或反之) 4. Mind Key 已被吊销 修复: 校验你的令牌。参见 Authentication。 为什么收到 404 Not Found? 你用了错误的端点路径。Synapse 只有 中列出的路径。 修复: 调用 查看所有有效路径。不要猜测。 为什么收到 429 Too Many Requests? 你使用了 查询参数认证,它被限速到 60 次/分钟。 修复: 改用 头(无限制)。 参见 限速。 如何列出所有端点? [CODE BLOCK] 如何找到正确的端点? 1. 查看 获取机器可读列表 2. 查看 获取完整 API 文档 3. 浏览 查看文档系统 4. 使用 获取 OpenAPI 3.0 规范 能用 GET 代替 POST 吗? 部分 POST 端点有对应的 GET 版本,供只能使用 URL 的工具使用: - ↔ - ↔ - ↔ 通过 查看可用的 GET 变体。 如何处理错误? 所有错误都返回 JSON: [CODE BLOCK] 参见 错误与错误处理。 请求体大小限制是多少? 10 MB。对于更大的 payload(例如文件上传),请使用 multipart 端点。 API 支持 CORS 吗? 支持。所有端点都返回: [CODE BLOCK] 有 SDK 吗? 有: - Node.js: - MCP: 详见 API 概览。 如何分页? 使用 和 : [CODE BLOCK] 默认 limit:100。最大:500。 能按分类或标签过滤记忆吗? 可以: [CODE BLOCK] 如何搜索记忆? 两种方式: 1. FTS5 关键词搜索: 2. 语义搜索: 参见 FTS5 搜索 与 语义搜索。 如何更新记忆? 用相同的 + 发起 — 已存在的记忆会被更新,不会重复。 [CODE BLOCK] 如何删除记忆? [CODE BLOCK] 能批量删除吗? 可以: [CODE BLOCK] 下一步 - API 概览 - 错误与错误处理 - Authentication ──────────────────────────────────────────────────────────── # 通用常见问题 SUMMARY: 关于 Synapse 的常见问题 — 它是什么、如何工作、面向谁。 通用常见问题 关于 Synapse 的常见问题。 Synapse 是什么? Synapse 是为 LLM Agent 提供的持久化记忆 API。它为你的 AI 助手提供一个永久的、可查询的大脑,跨会话保留。LLM 不再在聊天关闭时遗忘一切,而是通过简单的 HTTP API 存储和检索记忆。 了解更多: Synapse 是什么? Synapse 面向谁? - 需要持久状态的 LLM Agent 开发者 - 运行本地 LLM 与自定义 Agent 的 重度用户 - 构建带共享记忆 AI 助手的 团队 - 跨会话串联 LLM 调用的 自动化工程师 Synapse 免费吗? Synapse 托管在 ,供个人免费使用。如需自托管,请参见 仓库。 Synapse 与 ChatGPT Memory 有何不同? | 特性 | ChatGPT Memory | Synapse | |---------|---------------|---------| | 存储 | OpenAI 服务器 | 你的服务器 | | API 访问 | 否 | 是(REST + MCP) | | 多租户 | 否 | 是(Mind) | | 自定义分类 | 否 | 是(8 种分类) | | 全文搜索 | 有限 | FTS5 + 语义 | | 可自托管 | 否 | 是 | 哪些 LLM 与 Synapse 兼容? 任何能发起 HTTP 调用或使用 MCP 的 LLM: - Claude(Anthropic)— 通过 MCP 或直接 API - GPT-4 / GPT-3.5(OpenAI)— 通过 function calling + API - Gemini(Google)— 通过 function calling + API - Llama / Mistral(本地)— 通过自定义集成 - 任何 LLM 通过 Synapse MCP Server 我需要自己托管 Synapse 吗? 不需要。托管版本 供公众使用。自托管是可选的(出于隐私、定制或离线环境考虑)。 能存多少数据? 托管版本没有硬性限制。典型用法: - 每个 Mind 100-1000 条记忆 - 每条记忆 1-10 KB(content 字段) - 总计:每个 Mind 约 10 MB 如需更大规模,请自托管。 我的数据私密吗? 是的。每个 Mind 相互隔离(参见 多租户)。其他用户看不到你的数据。托管服务商(Schäfer Services)有访问权限,但不会查看用户数据。 如需最高隐私,请自托管。 能导出我的数据吗? 可以。使用 将所有记忆导出为 JSON。参见 备份与恢复。 如果丢失了 Mind Key 怎么办? Mind Key 在创建时只显示一次。如果丢失: 1. 用邮箱/密码登录获取 JWT 2. 通过 创建新 Mind 3. 保存新的 Mind Key 4. (可选)通过 删除旧 Mind 你无法恢复丢失了 key 的 Mind 中的记忆。 多个 LLM Agent 能共享一个 Mind 吗? 可以。所有使用同一 Mind Key 的 Agent 共享该 Mind 的数据。关于多 Agent 协作,请参见 多 Agent 协调。 Synapse 能离线工作吗? 不能,Synapse 需要连接到服务器(托管或自托管)。对于离线 LLM,请在本地运行 Synapse。 记忆搜索有多快? - FTS5 关键词搜索:1000 条记忆 < 10ms - 语义搜索:1000 条记忆 50-100ms - 完整回放:1000 条记忆 < 50ms 详见 FTS5 搜索。 没有 LLM 也能用 Synapse 吗? 可以。Synapse 是通用的记忆 API。任何能从持久化、可搜索、带分类和标签的键值存储中受益的应用都可以使用它。 下一步 - Synapse 是什么? - 快速开始 - API 常见问题 ──────────────────────────────────────────────────────────── # MCP 常见问题 SUMMARY: 关于 MCP 集成的常见问题 — 工具、传输、故障排查。 MCP 常见问题 关于 Synapse MCP Server 的常见问题。 MCP 是什么? MCP(Model Context Protocol)是 Anthropic 推出的开放标准,用于 LLM 与工具的集成。无需把 API 文档粘到 prompt 里,而是将工具注册到 MCP Server,LLM 像调用原生函数一样调用它们。 参见 MCP 是什么?。 Synapse MCP 暴露多少个工具? 跨 12 个分类共 79 个工具:memory、chat、scheduler、tasks、scripts、computers、push、user、utility、visualization、sharing、webhooks、browser。 完整列表请见 MCP 是什么?。 支持哪些 MCP 客户端? - Claude Desktop(macOS、Windows) - Claude Code(终端) - Cursor(IDE) - Continue.dev(VS Code、JetBrains) - Cline(VS Code) - 任何兼容 MCP 的客户端 配置示例请见 Claude Desktop 配置。 支持哪些传输方式? 1. stdio(本地,桌面端推荐) 2. HTTP/SSE(远程,多租户) 3. WebSocket(移动端,高吞吐) 如何配置 Claude Desktop? 编辑 : [CODE BLOCK] 参见 Claude Desktop 配置。 为什么 Claude Desktop 中看不到工具? 1. 完全重启 Claude Desktop(macOS 上 Cmd+Q) 2. 检查配置文件是否为有效 JSON 3. 确认已安装 Node.js 18+ 4. 查看 MCP 日志: 参见 MCP 故障排查。 如何切换到另一个 Mind? 在 MCP 配置中修改 并重启客户端。 若要同时使用多个 Mind,可用不同的 Mind Key 运行多个 MCP Server 实例。 能限制暴露的工具吗? 可以,使用 工具配置文件: - :8 个组合工具(约 500 tokens) - :25 个工具(约 2,500 tokens) - :119 个工具(约 8,250 tokens,默认) 通过 环境变量或 头设置。 如何调试 MCP 问题? 1. 手动运行 MCP Server: 2. 查看客户端日志(因客户端而异) 3. 验证 Mind Key 是否有效: 4. 检查 Synapse 健康: 参见 MCP 故障排查。 MCP Server 是免费的吗? 是的。npm 包 是开源的。托管在 的 MCP Server 供公众免费使用。 可以自托管 MCP Server 吗? 可以: [CODE BLOCK] MCP 与直接 API 调用有何不同? | 方面 | 直接 API | MCP | |--------|-----------|-----| | LLM 需要知道 | URL、请求头、认证 | 仅工具名 | | 认证处理 | 手动 | 自动(环境变量) | | 工具发现 | 读 /endpoints | 通过 MCP 协议自动 | | 错误处理 | 手动 | 标准化 | | 适合场景 | 自定义集成 | LLM Agent | 可以构建自己的 MCP 客户端吗? 可以。使用官方 MCP SDK: - TypeScript: - Python: 参见 自定义 MCP 客户端。 如何报告 MCP Bug? 提交 issue: 请包含: - MCP Server 版本 - 客户端名称与版本 - 操作系统 - 相关日志 - 复现步骤 下一步 - MCP 是什么? - Claude Desktop 配置 - MCP 故障排查 ──────────────────────────────────────────────────────────── # 故障排查常见问题 SUMMARY: Synapse 常见问题的解决方案 — 认证、网络、数据、部署。 故障排查常见问题 Synapse 常见问题的解决方案。 无法登录 症状 - 返回 401 - "Invalid email or password" 解决方案 1. 确认邮箱正确 — 区分大小写 2. 检查密码 — 至少 6 个字符 3. 若无账户请先注册: 4. (如已配置 SMTP)通过 Web UI 重置密码 丢失了 Mind Key 症状 - 无法访问记忆 - Mind Key 已删除或丢失 解决方案 Mind Key 无法找回。你必须: 1. 登录获取 JWT: 2. 列出 Mind:(用 JWT) 3. 创建新 Mind: 4. 保存新的 Mind Key 5. (可选)删除旧 Mind: 旧 Mind 中的数据将丢失,除非你能找到 Mind Key。 API 调用返回 401 症状 - 所有 API 调用返回 401 Unauthorized - "Mind Key fehlt oder ungültig" 解决方案 1. 确认请求头格式: 2. 检查 Mind Key 是否以 开头(不是 ,那是 JWT) 3. 直接测试: [CODE BLOCK] 4. Mind Key 可能已被吊销 — 创建新 Mind 参见 Authentication。 API 调用返回 404 症状 - 404 Not Found - "Route not found" 解决方案 > [!CRITICAL] > 不要猜测端点路径。只有 中列出的路径才存在。 1. 检查有效端点: 2. 逐字符对比 URL — 区分大小写,无尾斜杠 3. 检查 HTTP 方法 — 与 是不同的 API 调用返回 429 症状 - 429 Too Many Requests - "Rate limit exceeded" 解决方案 1. 改用头部认证(无限制): [CODE BLOCK] 2. 如果必须用 ,请等待 秒 参见 限速。 记忆搜索返回零结果 症状 - 返回空 - 确知有记忆存在 解决方案 1. 确认记忆存在: 2. 检查搜索语法 — FTS5 有特定语法 3. 尝试更简单的查询 — 用 而非 4. 概念查询用语义搜索: 参见 FTS5 搜索。 记忆未持久化 症状 - POST /memory 返回成功 - GET /memory/recall 看不到它们 解决方案 1. 确认使用相同的 Mind Key — 不同 key = 不同 Mind 2. 检查响应 — POST 应返回 3. 改用 GET /memory(JSON 列表)代替 /memory/recall(文本) 4. 检查过滤条件 — 或 可能将它们隐藏 Claude Desktop 中看不到工具 症状 - Claude Desktop 显示 0 个工具 - 没有 🔌 图标 解决方案 1. 完全重启 Claude Desktop(Cmd+Q) 2. 确认配置文件为有效 JSON 3. 检查已安装 Node.js 18+ 4. 手动运行 MCP: 5. 查看日志: 参见 MCP 故障排查。 Synapse 离线 症状 - 无法访问 synapse.schaefer.zone - curl 超时 解决方案 1. 检查你的网络 — 试试其他网站 2. 检查 Synapse 健康: 3. 等待 — 可能是临时故障或部署中 4. 查看状态页(如有) 自托管请检查 Docker 容器状态与数据库连接。 数据库错误 症状 - 500 Internal Server Error - "Database connection failed" 解决方案 自托管: 1. 检查 PostgreSQL 是否运行: 2. 检查环境变量 DATABASEURL 3. 检查迁移: 4. 检查磁盘空间: 托管版本:联系支持。 Webhook 未触发 症状 - 已注册 Webhook 但未收到回调 - URL 没有 POST 请求到达 解决方案 1. 确认 URL 可达: 2. 检查事件过滤 — 匹配所有记忆事件 3. 测试 Webhook: 4. 检查 Webhook 是否启用: 5. 验证 SSL — Synapse 要求 Webhook URL 使用有效 HTTPS 参见 Webhooks API。 Cron 任务未运行 症状 - 已创建 Cron 任务但不触发 - 不更新 解决方案 1. 检查调度语法 — 必须是有效的 5 字段 cron 或整数秒 2. 确认端点被允许 — 必须是 http(s),无私有 IP 3. 检查任务是否启用: 4. 等待下一个计划时间 — cron 不是即时的 参见 Cron 与调度器。 需要更多帮助? 1. 查看现有文档: 2. 搜索文档: 3. 提交 issue: 4. 联系:参见 页面 下一步 - 错误与错误处理 - API 常见问题 - MCP 故障排查