# Strategia di tagging della memoria I tag sono il segreto per il recupero di memoria scalabile. Questa guida mostra come taggare le memorie così quelle giuste tornano al momento giusto. ## Perché i tag contano Senza tag, ha ricerca full-text piatta. Con i tag, ha navigazione strutturata: ```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 ``` I tag abilitano: - **Filtraggio veloce** — `GET /memory/by-tag?tag=production` - **Ricerca con scope** — `?q=auth&tag=project-x` - **Raggruppamento** — trova tutte le memorie "mistake" per un progetto - **Cross-referencing** — memorie con tag condivisi sono correlate ## Schema di tagging ### Tag di progetto Usi nomi di progetto come tag: ``` synapse, synapse-mcp, synapse-chat, synapse-sdk ``` ### Tag di tecnologia Usi nomi di tecnologia: ``` docker, kubernetes, postgres, fastify, react, typescript ``` ### Tag di argomento Usi categorie di argomento: ``` deployment, ci-cd, auth, database, frontend, backend, security ``` ### Tag di stato Usi indicatori di stato: ``` active, completed, blocked, deprecated ``` ### Tag di tipo Usi indicatori di tipo: ``` decision, mistake, pattern, reference, todo ``` ## Regole di tagging ### Regola 1: 2-5 tag per memoria Troppo pochi tag = scarsa scopribilità. Troppi = rumore. ```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"] } ``` ### Regola 2: minuscolo, con trattini ``` ✅ ci-cd, api-key, mind-key ❌ CI-CD, APIKey, MindKey ``` ### Regola 3: usi un vocabolario consistente Stabilisca un vocabolario di tagging e lo mantenga: ``` # Project vocabulary synapse, synapse-mcp, synapse-chat # NOT: synapse_project, synapseProject, SYNAPSE ``` ### Regola 4: tagghi con intento di ricerca Chieda: "Come cercherò questa memoria?" ```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 ``` ## Modelli ### Modello 1: progetto + argomento ```json { "tags": ["synapse", "deployment"] } { "tags": ["synapse", "auth"] } { "tags": ["synapse-mcp", "tools"] } ``` Ricerca: `?tag=synapse` (tutte le memorie del progetto Synapse) Ricerca: `?tag=synapse&q=deployment` (memorie di deployment in Synapse) ### Modello 2: tipo + dominio ```json { "tags": ["mistake", "deployment"] } { "tags": ["decision", "database"] } { "tags": ["pattern", "auth"] } ``` Ricerca: `?tag=mistake` (tutti gli errori) Ricerca: `?tag=mistake&q=deployment` (errori di deployment) ### Modello 3: gerarchico Per sottoprogetti all'interno di un progetto: ```json { "tags": ["synapse", "synapse-docs", "markdown"] } { "tags": ["synapse", "synapse-mcp", "mcp"] } { "tags": ["synapse", "synapse-admin", "ui"] } ``` Ricerca: `?tag=synapse` (tutto Synapse) Ricerca: `?tag=synapse-docs` (solo sottoprogetto docs) ### Modello 4: tracciamento dello stato ```json // Active project { "tags": ["synapse", "active"], "priority": "high" } // Completed project { "tags": ["synapse-v1", "completed"], "priority": "low" } // Blocked { "tags": ["synapse-v2", "blocked"], "priority": "high" } ``` ## Casi d'uso comuni ### Trovi tutte le decisioni su un progetto ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=decision&tag=synapse" ``` ### Trova tutti gli errori in un dominio ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=mistake&tag=deployment" ``` ### Trova lavoro attivo ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/by-tag?tag=active" ``` ### Trova memorie su una tecnologia ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=postgres+performance&tag=database" ``` ## Manutenzione dei tag ### Revisione periodica ```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)") ``` ### Unione di tag Se ha tag inconsistenti (`docker` e `Docker`), li unisca: ```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))) ``` ## Best practice > [!TIP] > - **Stabilisca il vocabolario presto** — tag consistenti dal giorno 1 > - **Tagghi con intento di ricerca** — come troverà questo dopo? > - **2-5 tag è il punto ottimale** — troppo pochi o troppi è male > - **Minuscolo + trattini** — `ci-cd` non `CI/CD` > - **Revisioni periodicamente** — unisca i duplicati, rimuova gli inutilizzati ## Prossimi passi - [Best practice per la memoria](/docs/guides/memory-best-practices) - [Ricerca FTS5](/docs/concepts/fts5-search) - [Workflow guidato da attività](/docs/llm-cookbook/task-driven-workflow)