Tìm kiếm ngữ nghĩa (Embeddings)
Tìm kiếm bộ nhớ khái niệm sử dụng vector embeddings — tìm theo ý nghĩa, không chỉ từ khóa.
Tìm kiếm ngữ nghĩa (Embeddings)
Synapse hỗ trợ tìm kiếm ngữ nghĩa sử dụng vector embeddings. Khác với FTS5 (khớp từ khóa), tìm kiếm ngữ nghĩa tìm bộ nhớ theo ý nghĩa — ngay cả khi không có từ khóa nào khớp.
Cách hoạt động
1. Memory stored → embedding generated → vector stored
2. Search query → embedding generated → vector compared
3. Cosine similarity → top N results returnedEmbeddings là gì?
Embeddings là biểu diễn vector số của văn bản. Văn bản có ý nghĩa tương tự có vector tương tự. Synapse tạo một vector (ví dụ 1536 chiều) cho nội dung mỗi bộ nhớ.
Tương đồng cosine
Để tìm bộ nhớ tương tự về mặt ngữ nghĩa, Synapse tính tương đồng cosine giữa vector truy vấn và mỗi vector bộ nhớ. Tương đồng cao hơn = liên quan hơn.
Khi nào sử dụng tìm kiếm ngữ nghĩa
Sử dụng tìm kiếm ngữ nghĩa khi:
- Bạn muốn "bộ nhớ về X" khi X được mô tả khác với lưu trữ
- FTS5 trả về không kết quả (không khớp từ khóa)
- Bạn muốn nhóm khái niệm (ví dụ tất cả bộ nhớ "deployment", ngay cả khi một số nói "release")
- Truy vấn là một câu hỏi: "làm thế nào chúng ta xử lý xác thực?"
Sử dụng FTS5 khi:
- Bạn biết từ khóa chính xác
- Bạn cần logic boolean (AND, OR, NOT)
- Bạn cần phản hồi dưới mili giây
- Bạn muốn khớp cụm từ
Endpoint
GET /memory/semantic-search
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
"https://synapse.schaefer.zone/memory/semantic-search?q=container+orchestration"Phản hồi:
{
"results": [
{
"id": "mem_001",
"category": "project",
"key": "project_synapse_deployment",
"content": "Synapse deployed using Docker Swarm on vps1...",
"tags": ["docker", "swarm", "deployment"],
"similarity": 0.89
},
{
"id": "mem_042",
"category": "fact",
"key": "kubernetes_cluster",
"content": "We use Kubernetes for production orchestration...",
"tags": ["kubernetes", "orchestration"],
"similarity": 0.84
}
]
}Ví dụ
Tìm bộ nhớ triển khai
# FTS5 might miss some — semantic catches all
curl .../memory/semantic-search?q=deployment+processTrả về bộ nhớ về "deployment", "release", "publishing", "rolling out", v.v.
Tìm mẫu xác thực
curl .../memory/semantic-search?q=how+do+users+log+inTrả về bộ nhớ về đăng nhập, xác thực, JWT, quản lý phiên, OAuth, v.v.
Tìm bộ nhớ tương tự
# Find memories similar to a specific one
curl .../memory/related/mem_001Sử dụng tương đồng ngữ nghĩa (qua tag chung VÀ vector embedding).
Tạo embedding
Khi nào embeddings được tạo?
- Khi lưu bộ nhớ — nếu dịch vụ embeddings được cấu hình, embedding được tạo đồng bộ
- Tạo hàng loạt —
POST /memory/embed-batchtạo embeddings cho bộ nhớ thiếu - Cập nhật bất đồng bộ — khi nội dung được cập nhật, embedding được tạo lại
Provider embedding
Synapse hỗ trợ provider embedding có thể cấu hình:
- OpenAI (
text-embedding-3-small,text-embedding-3-large) - Mô hình cục bộ (qua Ollama hoặc tương tự)
- Tùy chỉnh (triển khai giao diện embeddings)
Cấu hình qua biến môi trường:
EMBEDDINGS_PROVIDER=openai
EMBEDDINGS_API_KEY=sk-...
EMBEDDINGS_MODEL=text-embedding-3-smallTạo hàng loạt
Cho mind với nhiều bộ nhớ thiếu embeddings:
# Generate embeddings for up to 100 memories
curl -X POST https://synapse.schaefer.zone/memory/embed-batch \
-H "Authorization: Bearer YOUR_MIND_KEY" \
-H "Content-Type: application/json" \
-d '{"limit": 100}'
# Check progress
curl -H "Authorization: Bearer YOUR_MIND_KEY" \
https://synapse.schaefer.zone/memory/embed-batch-statusHiệu suất
| Thao tác | Độ trễ |
|---|---|
| Tạo embedding (OpenAI) | 100-200ms |
| Tìm kiếm ngữ nghĩa (1k bộ nhớ) | 50-100ms |
| Tìm kiếm ngữ nghĩa (10k bộ nhớ) | 200-500ms |
| Tạo hàng loạt (100 bộ nhớ) | 10-20s |
Giới hạn
Chi phí embeddings
Nếu sử dụng OpenAI, tạo embeddings tốn tiền (~$0.02 mỗi 1M token cho text-embedding-3-small). Cho 10.000 bộ nhớ trung bình 100 token mỗi cái, đó là ~$0.02 — không đáng kể.
Khởi động lạnh
Bộ nhớ lưu trước khi embeddings được cấu hình sẽ không có embeddings. Chạy
POST /memory/embed-batch để backfill.
Phụ thuộc provider
Nếu provider embeddings ngừng hoạt động, tìm kiếm ngữ nghĩa thất bại một cách mềm mại (trả về kết quả rỗng hoặc lỗi). FTS5 vẫn hoạt động.
Khi Embeddings không khả dụng
Nếu dịch vụ embeddings không được cấu hình:
GET /memory/semantic-searchtrả về 503 Service UnavailablePOST /memoryvẫn hoạt động (chỉ không có embedding được tạo)- Tìm kiếm FTS5 vẫn hoạt động