Skip to main content

메모리 모델

메모리 구조화 방식 — 카테고리, 키, 태그, 우선순위, 소스, 검증.


메모리 모델

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, agent 0.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 파싱 불필요)

다음 단계