메모리 모델
메모리 구조화 방식 — 카테고리, 키, 태그, 우선순위, 소스, 검증.
메모리 모델
Synapse의 메모리 모델은 LLM 에이전트를 위해 설계되었습니다 — 신뢰할 수 있는 회상을 위해 충분히 구조화되어 있으면서, 모든 도메인에 대해 충분히 유연합니다.
메모리 구조
{
"id": "mem_abc123",
"category": "project",
"key": "project_synapse_status",
"content": "Synapse v1.5.0 deployed on vps1. CI green.",
"tags": ["synapse", "deployment", "v1.5.0"],
"priority": "high",
"source": "agent",
"verified": false,
"confidence": 0.85,
"expires_at": null,
"mind_id": "m_xyz789",
"created_at": "2026-06-27T...",
"updated_at": "2026-06-27T..."
}필드
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
id |
string | 자동 | 고유 ID (mem_xxx) |
category |
enum | ✅ | 8개 카테고리 중 하나 |
key |
string | ✅ | 안정적 식별자 (업데이트에 사용) |
content |
string | ✅ | 메모리 콘텐츠 (모든 텍스트) |
tags |
string[] | – | 검색 및 필터링용 |
priority |
enum | – | low, normal, high, critical (기본값: normal) |
source |
enum | 자동 | user, agent (누가 저장했는지) |
verified |
bool | 자동 | 사람이 검증했는지 여부 |
confidence |
float | – | 0.0 ~ 1.0 (기본값: user 1.0, agent 0.7) |
expires_at |
timestamp | – | 이 메모리를 잊을 시점 |
mind_id |
string | 자동 | 이 메모리를 소유한 마인드 |
created_at |
timestamp | 자동 | 최초 저장 시각 |
updated_at |
timestamp | 자동 | 최종 수정 시각 |
카테고리
8개 카테고리가 일반적인 LLM 에이전트 사용 사례를 다룹니다:
| 카테고리 | 용도 | 예시 콘텐츠 |
|---|---|---|
identity |
사용자가 누구인지 | "User is Michael Schäfer, software engineer in Berlin" |
preference |
사용자 선호도 | "Prefers concise technical responses" |
fact |
검증 가능한 사실 | "Office is in Berlin, timezone Europe/Berlin" |
project |
프로젝트 상태 | "Synapse v1.5.0 deployed, working on v1.6.0 docs" |
skill |
사용자 기술 | "Advanced Python, 10+ years" |
mistake |
과거 오류 | "Forgot to bump npm version — CI failed" |
context |
세션 컨텍스트 | "Currently reviewing PR #42" |
note |
기타 노트 | "Try Redis for caching next sprint" |
키: 안정적 식별자
key 필드는 중요합니다 — 중복을 만들지 않고 메모리를 업데이트하는
방법입니다.
# First store
store("project", "project_synapse_status", "v1.4.0 deployed", priority="high")
# Update with same key (overwrites, doesn't duplicate)
store("project", "project_synapse_status", "v1.5.0 deployed", priority="high")키 규칙:
- (category, mind) 내에서 고유해야 함
snake_case사용- 명확성을 위해 카테고리로 접두사:
preference_communication,mistake_npm_version - 안정적으로 유지 — 생성 후 키를 변경하지 마십시오
태그: 검색용
태그를 사용하면 빠른 필터링과 검색이 가능합니다:
# Find all memories with tag "docker"
GET /memory/by-tag?tag=docker
# FTS5 search within tagged subset
GET /memory/search?q=swarm&tag=docker태그 모범 사례:
- 메모리당 2-5개 태그 (과도한 태깅 금지)
- 일관성을 위해 소문자 사용
- 프로젝트 이름, 주제, 기술 사용
- 태그는 대소문자 구분 안 함
우선순위 수준
| 우선순위 | 사용 시기 | 회상 동작 |
|---|---|---|
critical |
정체성, 법적, 되돌릴 수 없는 것 | 항상 회상 최상단 |
high |
활성 프로젝트, 핵심 선호도 | 회상에서 두드러짐 |
normal |
대부분의 메모리 (기본값) | 표준 회상 순서 |
low |
일시적, 알면 좋음 | 요약될 수 있음 |
/memory/recall은 우선순위 (critical 먼저)로 정렬한 후 최신순으로 정렬합니다.
소스: User vs Agent
메모리에는 source 태그가 지정됩니다:
user— 사람이 저장 (JWT 또는 human UI를 통해)agent— LLM 에이전트가 저장 (Mind Key를 통해)
이는 다음에 영향을 미칩니다:
- 검증:
user메모리는 자동 검증,agent메모리는 검증 안 됨 - 신뢰도:
user기본값 1.0,agent0.7 - 회상:
/memory/recall은 미검증 메모리에 "(unverified)" 표시
`agent` 소스 메모리는 적절한 회의적으로 취급하십시오. 사용자가 직접
명시한 것이 아니라 추론되거나 가정된 것일 수 있습니다.
검증
verified 플래그는 사람이 메모리를 확인했음을 나타냅니다:
user메모리: 자동 검증 (true)agent메모리: 기본 미검증 (false)
다음을 통해 메모리 검증:
curl -X POST https://synapse.schaefer.zone/memory/mem_001/verify \
-H "Authorization: Bearer YOUR_JWT"검증에는 Mind Key (에이전트 인증)가 아닌 JWT (사람 인증)가 필요합니다.
이는 사람만 메모리를 검증됨으로 표시할 수 있도록 보장합니다.
신뢰도
confidence 필드 (0.0 ~ 1.0)는 메모리의 신뢰도를 나타냅니다:
- 1.0 — 사용자가 직접 명시
- 0.7 — 에이전트가 추론
- 0.5 — 불확실, 검증 필요
- 0.0 — 명시적으로 의심됨
저장 시 신뢰도 설정:
{
"category": "preference",
"key": "prefers_dark_mode",
"content": "User seems to prefer dark mode (based on their IDE screenshots)",
"confidence": 0.5,
"source": "agent"
}만료
시간에 민감한 메모리에 expires_at 설정:
{
"category": "context",
"key": "current_meeting_topic",
"content": "Discussing Q3 roadmap",
"expires_at": "2026-06-28T00:00:00Z"
}만료된 메모리는 /memory/recall에서 반환되지 않습니다 (DB에는 여전히 존재).
곧 만료되는 메모리를 보려면 /memory/expiring?within=7d를 사용하십시오.
메모리 라이프사이클
┌─────────────────┐
│ Create │
│ POST /memory │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Active │ ◀──── PUT /memory/:id (update)
│ (in recall) │
└────────┬────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Expired │ │ Verified │ │ Deleted │
│ (in DB) │ │ (flag) │ │ (gone) │
└──────────┘ └──────────┘ └──────────┘회상 동작
GET /memory/recall은 LLM 컨텍스트에 최적화된 일반 텍스트 요약을 반환합니다:
Mind: Michael's Mind
Memories: 12 total (10 verified, 2 unverified)
[001] identity (CRITICAL) [verified]
user_name
Michael Schäfer
Tags: person, identity
[002] preference (HIGH) [verified]
communication_style
Prefers concise technical responses
Tags: communication
[003] project (HIGH) [unverified]
synapse_status
v1.5.0 deployed, working on v1.6.0 docs
Tags: synapse, deployment
...- 우선순위 (critical → low)로 정렬, 그 다음 최신순
- 미검증 메모리는
[unverified]로 표시 - 컨텍스트를 위해 태그 포함
- 일반 텍스트 (JSON 파싱 불필요)