# Стратегія тегування пам'яті Теги — це секрет масштабованого отримання спогадів. Цей посібник показує, як тегувати спогади, щоб потрібні поверталися у потрібний момент. ## Чому теги важливі Без тегів ви маєте плаский повнотекстовий пошук. Із тегами ви маєте структуровану навігацію: ```bash # Without tags: search everything GET /memory/search?q=docker # With tags: filter by project + technology GET /memory/search?q=deployment&tag=synapse&tag=docker ``` Теги дають змогу: - **Швидко фільтрувати** — `GET /memory/by-tag?tag=production` - **Обмежувати пошук** — `?q=auth&tag=project-x` - **Групувати** — знайти всі спогади типу «mistake» для проєкту - **Перехресно посилатися** — спогади зі спільними тегами пов'язані ## Схема тегування ### Теги проєктів Використовуйте назви проєктів як теги: ``` synapse, synapse-mcp, synapse-chat, synapse-sdk ``` ### Теги технологій Використовуйте назви технологій: ``` docker, kubernetes, postgres, fastify, react, typescript ``` ### Теги тем Використовуйте тематичні категорії: ``` deployment, ci-cd, auth, database, frontend, backend, security ``` ### Теги статусу Використовуйте індикатори стану: ``` active, completed, blocked, deprecated ``` ### Теги типу Використовуйте індикатори типу: ``` decision, mistake, pattern, reference, todo ``` ## Правила тегування ### Правило 1: 2–5 тегів на спогад Замало тегів = слабка виявляємість. Забагато = шум. ```json // Good: 3 relevant tags { "tags": ["synapse", "deployment", "docker"] } // Bad: 1 tag (too narrow) { "tags": ["synapse"] } // Bad: 10 tags (noise) { "tags": ["synapse", "deployment", "docker", "vps1", "2026", "june", "ssh", "git", "main", "production"] } ``` ### Правило 2: нижній регістр, через дефіс ``` ✅ ci-cd, api-key, mind-key ❌ CI-CD, APIKey, MindKey ``` ### Правило 3: використовуйте послідовний словник Установіть словник тегів і дотримуйтесь його: ``` # Project vocabulary synapse, synapse-mcp, synapse-chat # NOT: synapse_project, synapseProject, SYNAPSE ``` ### Правило 4: тегуйте з наміром пошуку Запитайте себе: «Як я шукатиму цей спогад?» ```json // Storing a deployment decision { "content": "Decided to use Docker Swarm for Synapse deployment", "tags": ["synapse", "deployment", "docker", "swarm", "decision"] } // You'll likely search: ?q=docker+swarm or ?tag=deployment ``` ## Шаблони ### Шаблон 1: проєкт + тема ```json { "tags": ["synapse", "deployment"] } { "tags": ["synapse", "auth"] } { "tags": ["synapse-mcp", "tools"] } ``` Пошук: `?tag=synapse` (усі спогади проєкту Synapse) Пошук: `?tag=synapse&q=deployment` (спогади про розгортання в Synapse) ### Шаблон 2: тип + домен ```json { "tags": ["mistake", "deployment"] } { "tags": ["decision", "database"] } { "tags": ["pattern", "auth"] } ``` Пошук: `?tag=mistake` (усі помилки) Пошук: `?tag=mistake&q=deployment` (помилки розгортання) ### Шаблон 3: ієрархічний Для підпроєктів у межах проєкту: ```json { "tags": ["synapse", "synapse-docs", "markdown"] } { "tags": ["synapse", "synapse-mcp", "mcp"] } { "tags": ["synapse", "synapse-admin", "ui"] } ``` Пошук: `?tag=synapse` (увесь Synapse) Пошук: `?tag=synapse-docs` (лише підпроєкт docs) ### Шаблон 4: відстеження статусу ```json // Active project { "tags": ["synapse", "active"], "priority": "high" } // Completed project { "tags": ["synapse-v1", "completed"], "priority": "low" } // Blocked { "tags": ["synapse-v2", "blocked"], "priority": "high" } ``` ## Типові випадки використання ### Знайти всі рішення щодо проєкту ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=decision&tag=synapse" ``` ### Знайти всі помилки в домені ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=mistake&tag=deployment" ``` ### Знайти активну роботу ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/by-tag?tag=active" ``` ### Знайти спогади про технологію ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=postgres+performance&tag=database" ``` ## Супровід тегів ### Періодичний перегляд ```python # Find rarely-used tags (candidates for cleanup) tags = requests.get(f"{URL}/memory/tags", headers={"Authorization": f"Bearer {KEY}"}).json() for tag, count in tags.items(): if count < 2: print(f"Rare tag: {tag} ({count} memories)") ``` ### Об'єднання тегів Якщо у вас непослідовні теги (`docker` і `Docker`), об'єднайте їх: ```python # Find all memories with "Docker" tag mems = requests.get(f"{URL}/memory/by-tag?tag=Docker", headers={"Authorization": f"Bearer {KEY}"}).json() # Update each to use "docker" instead for mem in mems["results"]: tags = [t.lower() for t in mem["tags"]] update_memory(mem["id"], tags=list(set(tags))) ``` ## Найкращі практики > [!TIP] > - **Установіть словник якомога раніше** — послідовні теги з першого дня > - **Тегуйте з наміром пошуку** — як ви знайдете це пізніше? > - **2–5 тегів — золота середина** — замало чи забагато — погано > - **Нижній регістр + дефіси** — `ci-cd`, а не `CI/CD` > - **Переглядайте періодично** — об'єднуйте дублікати, видаляйте невикористані ## Наступні кроки - [Найкращі практики для пам'яті](/docs/guides/memory-best-practices) - [Пошук FTS5](/docs/concepts/fts5-search) - [Робочий процес на основі завдань](/docs/llm-cookbook/task-driven-workflow)