# กลยุทธ์การ Tag Memory tag เป็นความลับของการดึง memory ที่ scale ได้ คู่มือนี้แสดงวิธี tag memory เพื่อให้ตัวที่ถูกต้องกลับมาในเวลาที่เหมาะสม ## ทำไม tag ถึงสำคัญ ไม่มี tag คุณมีแค่ full-text search แบบ flat มี tag คุณมีการนำทางที่มีโครงสร้าง: ```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 ``` tag เปิดใช้งาน: - **การกรองที่รวดเร็ว** — `GET /memory/by-tag?tag=production` - **Scoped search** — `?q=auth&tag=project-x` - **การจัดกลุ่ม** — หา memory "mistake" ทั้งหมดของโปรเจกต์ - **การอ้างอิงข้าม** — memory ที่แชร์ tag เกี่ยวข้องกัน ## Schema Tagging ### Project tag ใช้ชื่อโปรเจกต์เป็น tag: ``` synapse, synapse-mcp, synapse-chat, synapse-sdk ``` ### Technology tag ใช้ชื่อเทคโนโลยี: ``` docker, kubernetes, postgres, fastify, react, typescript ``` ### Topic tag ใช้หมวดหมู่หัวข้อ: ``` deployment, ci-cd, auth, database, frontend, backend, security ``` ### Status tag ใช้ตัวบ่งชี้สถานะ: ``` active, completed, blocked, deprecated ``` ### Type tag ใช้ตัวบ่งชี้ประเภท: ``` decision, mistake, pattern, reference, todo ``` ## กฎการ Tag ### กฎ 1: 2-5 tag ต่อ memory tag น้อยเกินไป = ความสามารถในการค้นพบต่ำ tag มากเกินไป = noise ```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: ตัวพิมพ์เล็ก, ใช้ hyphen ``` ✅ ci-cd, api-key, mind-key ❌ CI-CD, APIKey, MindKey ``` ### กฎ 3: ใช้คำศัพท์ที่สม่ำเสมอ กำหนดคำศัพท์ tagging และยึดติดกับมัน: ``` # Project vocabulary synapse, synapse-mcp, synapse-chat # NOT: synapse_project, synapseProject, SYNAPSE ``` ### กฎ 4: Tag ด้วยเจตนาการค้นหา ถาม: "ฉันจะค้นหา memory นี้อย่างไร?" ```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: Project + Topic ```json { "tags": ["synapse", "deployment"] } { "tags": ["synapse", "auth"] } { "tags": ["synapse-mcp", "tools"] } ``` Search: `?tag=synapse` (memory โปรเจกต์ Synapse ทั้งหมด) Search: `?tag=synapse&q=deployment` (memory deployment ใน Synapse) ### รูปแบบ 2: Type + Domain ```json { "tags": ["mistake", "deployment"] } { "tags": ["decision", "database"] } { "tags": ["pattern", "auth"] } ``` Search: `?tag=mistake` (mistake ทั้งหมด) Search: `?tag=mistake&q=deployment` (mistake deployment) ### รูปแบบ 3: ลำดับชั้น สำหรับโปรเจกต์ย่อยในโปรเจกต์: ```json { "tags": ["synapse", "synapse-docs", "markdown"] } { "tags": ["synapse", "synapse-mcp", "mcp"] } { "tags": ["synapse", "synapse-admin", "ui"] } ``` Search: `?tag=synapse` (Synapse ทั้งหมด) Search: `?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" ``` ### หา mistake ทั้งหมดใน domain ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=mistake&tag=deployment" ``` ### หางานที่ active ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/by-tag?tag=active" ``` ### หา memory เกี่ยวกับเทคโนโลยี ```bash curl -H "Authorization: Bearer $KEY" \ ".../memory/search?q=postgres+performance&tag=database" ``` ## การบำรุงรักษา tag ### ตรวจสอบเป็นคาบ ```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)") ``` ### การรวม tag หากคุณมี tag ไม่สม่ำเสมอ (`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] > - **กำหนดคำศัพท์ตั้งแต่เริ่ม** — tag สม่ำเสมอตั้งแต่วันแรก > - **Tag ด้วยเจตนาการค้นหา** — คุณจะหาสิ่งนี้อย่างไรในภายหลัง? > - **2-5 tag เป็นจุดที่เหมาะ** — น้อยหรือมากเกินไปไม่ดี > - **ตัวพิมพ์เล็ก + hyphen** — `ci-cd` ไม่ใช่ `CI/CD` > - **ตรวจสอบเป็นคาบ** — รวมซ้ำ, ลบที่ไม่ใช้ ## ขั้นตอนถัดไป - [Memory Best Practices](/docs/guides/memory-best-practices) - [FTS5 Search](/docs/concepts/fts5-search) - [Task-Driven Workflow](/docs/llm-cookbook/task-driven-workflow)