Kiến trúc Synapse
Cách Synapse được xây dựng — Fastify, PostgreSQL, FTS5, embeddings, MCP server.
Kiến trúc Synapse
Synapse là API bộ nhớ multi-tenant được xây dựng trên Fastify, PostgreSQL với FTS5, và một dịch vụ embeddings tùy chọn cho tìm kiếm ngữ nghĩa.
Kiến trúc tổng quan
┌──────────────────────────────────────────────────────────┐
│ Clients │
├──────────────┬──────────────┬──────────────┬─────────────┤
│ LLM Agents │ Web Browsers│ MCP Clients │ Webhooks │
│ (curl/SDK) │ (humans) │ (Claude/etc) │ (external) │
└──────┬───────┴──────┬───────┴──────┬───────┴──────┬──────┘
│ │ │ │
└──────────────┴──────────────┴──────────────┘
│
▼
┌───────────────────────────────┐
│ Synapse API (Fastify) │
│ port 12800 │
│ - REST endpoints │
│ - Auth (Mind Key / JWT) │
│ - Rate limiting │
│ - Static file serving │
└───────────────┬───────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ PostgreSQL │ │ Embeddings │ │ MCP Server │
│ + FTS5 │ │ Service │ │ (separate) │
│ │ │ (optional) │ │ port 13100 │
│ - memories │ │ │ │ │
│ - tasks │ │ - generate │ │ - 79 tools │
│ - chat │ │ embeddings│ │ - stdio/SSE │
│ - scripts │ │ │ │ - WebSocket │
└─────────────┘ └─────────────┘ └─────────────┘Thành phần cốt lõi
1. Synapse API (Fastify)
HTTP server chính. Xử lý:
- Endpoint REST (
/memory,/chat,/mind/tasks, v.v.) - Xác thực (Mind Key cho agent, JWT cho con người)
- Giới hạn tốc độ (chỉ xác thực
?key=) - Phục vụ tệp tĩnh (giao diện web tại
/human,/docs, v.v.) - Phân phối webhook
Được xây dựng với Fastify 5 cho hiệu suất. Chạy trên cổng 12800 trong môi trường production.
2. PostgreSQL với FTS5
Kho dữ liệu chính. Sử dụng PostgreSQL với phần mở rộng FTS5 cho tìm kiếm toàn văn.
Bảng chính:
| Bảng | Mục đích |
|---|---|
users |
Tài khoản người dùng |
minds |
Phạm vi mind (mỗi cái có một Mind Key) |
memories |
Bản ghi bộ nhớ với bảng ảo FTS5 |
tasks |
Quản lý tác vụ |
chat_messages |
Lịch sử chat |
scripts |
Script cố định |
webhooks |
Đăng ký webhook |
cron_jobs |
Tác vụ đã lên lịch |
variables |
Cửa hàng key-value |
audit_log |
Nhật ký kiểm toán |
FTS5 cho phép tìm kiếm toàn văn dưới mili giây trên toàn bộ nội dung bộ nhớ. Xem Tìm kiếm FTS5 để biết chi tiết.
3. Dịch vụ Embeddings (Tùy chọn)
Đối với tìm kiếm ngữ nghĩa, Synapse tạo vector embeddings của nội dung bộ nhớ. Chúng được lưu cùng với bộ nhớ và dùng cho tìm kiếm tương tự.
- Provider: có thể cấu hình (OpenAI, mô hình cục bộ, v.v.)
- Lưu dưới dạng cột
vectortrong bảngmemories - Được sử dụng bởi endpoint
/memory/semantic-search - Xem Tìm kiếm ngữ nghĩa
4. MCP Server (Dịch vụ riêng)
Synapse MCP server chạy như một tiến trình riêng (cổng 13100). Nó:
- Cung cấp 79 công cụ qua Model Context Protocol
- Hỗ trợ transport stdio, HTTP/SSE và WebSocket
- Dịch các lệnh gọi công cụ MCP thành lệnh gọi Synapse API
- Multi-tenant: một Mind Key mỗi phiên
5. Browser Proxy (Dịch vụ riêng)
Đối với tự động hóa trình duyệt, một dịch vụ riêng dựa trên Playwright chạy
trên cổng 13000. MCP server có thể gọi dịch vụ này cho các công cụ browser_*.
6. SSH Proxy (Dịch vụ riêng)
Đối với lệnh từ xa dựa trên SSH, một dịch vụ riêng chạy trên cổng 12900.
Mô hình Multi-Tenancy
User Account (email + password)
│
├── Mind 1 (Mind Key 1)
│ ├── Memories
│ ├── Tasks
│ ├── Chat
│ └── Scripts
│
├── Mind 2 (Mind Key 2)
│ └── ... (isolated from Mind 1)
│
└── Mind 3 (Mind Key 3)
└── ...Mỗi mind hoàn toàn tách biệt. Mind Key cấp quyền truy cập chính xác một mind. JWT cấp quyền truy cập tài khoản người dùng (để quản lý mind).
Xem Multi-Tenancy để biết chi tiết.
Luồng yêu cầu
Yêu cầu lưu bộ nhớ
1. Client sends POST /memory with Authorization: Bearer mk_xxx
2. Fastify receives request
3. Auth middleware validates Mind Key, attaches mind_id to request
4. Memory route handler:
a. Validate JSON body (zod schema)
b. Insert into memories table
c. Update FTS5 index
d. (Async) Generate embedding if embeddings enabled
e. Trigger webhooks for memory.store event
5. Return { id, status: "stored" }Yêu cầu tìm kiếm bộ nhớ
1. Client sends GET /memory/search?q=docker
2. Auth middleware validates Mind Key
3. Memory route handler:
a. Parse query (FTS5 syntax)
b. Execute FTS5 MATCH against memories table
c. Filter by mind_id (tenant isolation)
d. Rank by relevance
e. Return resultsTriển khai
Synapse được triển khai dưới dạng Docker container. Xem docker-compose.yml:
services:
synapse:
image: registry.gitlab.com/schaefer-services/synapse:latest
ports:
- "12800:12800"
environment:
- DATABASE_URL=postgres://...
- JWT_SECRET=...
- SYNAPSE_HOST=0.0.0.0
- SYNAPSE_PORT=12800
depends_on:
- postgres
postgres:
image: postgres:16
volumes:
- pgdata:/var/lib/postgresql/data
environment:
- POSTGRES_DB=synapse
- POSTGRES_PASSWORD=...Đặc tính hiệu suất
| Thao tác | Độ trễ | Thông lượng |
|---|---|---|
| Lưu bộ nhớ | ~5ms | 1000+ req/s |
| Thu hồi bộ nhớ | ~20ms | 500 req/s |
| Tìm kiếm FTS5 | ~10ms | 800 req/s |
| Tìm kiếm ngữ nghĩa | ~50ms | 200 req/s |
| Poll chat | ~5ms | 2000 req/s |