# Semantisk sökning (inbäddningar) SUMMARY: Begreppslig minnessökning med vektorinbäddningar — hitta efter betydelse, inte bara nyckelord. Semantisk sökning (inbäddningar) Synapse stöder semantisk sökning med vektorinbäddningar. Till skillnad från FTS5 (nyckelordsmatchning) hittar semantisk sökning minnen efter betydelse — även om inga nyckelord matchar. Hur det fungerar [CODE BLOCK] Vad är inbäddningar? Inbäddningar är numeriska vektorrepresentationer av text. Text med liknande betydelse har liknande vektorer. Synapse genererar en vektor (t.ex. 1536 dimensioner) för varje minnes innehåll. Cosine similarity För att hitta semantiskt liknande minnen beräknar Synapse cosinuslikheten mellan frågevektorn och varje minnesvektor. Högre likhet = mer relevant. När semantisk sökning ska användas Använd semantisk sökning när: - Ni vill ha "minnen om X" där X beskrivs annorlunda än lagrat - FTS5 returnerar inga resultat (ingen nyckelordsmatchning) - Ni vill ha begreppslig gruppering (t.ex. alla "deployment"-minnen, även om vissa säger "release") - Frågan är en fråga: "hur hanterar vi autentisering?" Använd FTS5 när: - Ni känner till exakta nyckelord - Ni behöver boolesk logik (AND, OR, NOT) - Ni behöver svar under en millisekund - Ni vill ha frasmatchning Endpoint GET /memory/semantic-search [CODE BLOCK] Svar: [CODE BLOCK] Exempel Hitta driftsättningsminnen [CODE BLOCK] Returnerar minnen om "deployment", "release", "publishing", "rolling out" etc. Hitta autentiseringsmönster [CODE BLOCK] Returnerar minnen om inloggning, auth, JWT, sessionshantering, OAuth etc. Hitta liknande minnen [CODE BLOCK] Använder semantisk likhet (via gemensamma taggar OCH inbäddningsvektorer). Inbäddningsgenerering När genereras inbäddningar? - Vid minneslagring — om inbäddningstjänst är konfigurerad genereras inbäddning synkront - Batchgenerering — genererar inbäddningar för minnen som saknar dem - Asynkrona uppdateringar — när innehåll uppdateras regenereras inbäddningen Inbäddningsleverantörer Synapse stöder konfigurerbara inbäddningsleverantörer: - OpenAI (, ) - Lokala modeller (via Ollama eller liknande) - Anpassade (implementera inbäddningsgränssnittet) Konfigurera via miljövariabler: [CODE BLOCK] Batchgenerering För minds med många minnen som saknar inbäddningar: [CODE BLOCK] Prestanda | Åtgärd | Latens | |-----------|---------| | Generera inbäddning (OpenAI) | 100–200 ms | | Semantisk sökning (1k minnen) | 50–100 ms | | Semantisk sökning (10k minnen) | 200–500 ms | | Batchgenerering (100 minnen) | 10–20 s | > [!NOTE] > Semantisk sökning är långsammare än FTS5 på grund av vektorberäkning. > Använd FTS5 för kända nyckelord, semantisk för begreppsliga frågor. Begränsningar Kostnad för inbäddningar Om ni använder OpenAI kostar generering av inbäddningar pengar ($0,02 per 1M tokens för text-embedding-3-small). För 10 000 minnen med i snitt 100 tokens var blir det $0,02 — försumbart. Kallstart Minnen som lagrats innan inbäddningar konfigurerades kommer inte att ha inbäddningar. Kör för att fylla i. Leverantörsberoende Om inbäddningsleverantören är nere misslyckas semantisk sökning graciöst (returnerar tomma resultat eller fel). FTS5 fungerar fortfarande. När inbäddningar inte är tillgängliga Om inbäddningstjänst inte är konfigurerad: - returnerar 503 Service Unavailable - fungerar fortfarande (bara ingen inbäddning genererad) - FTS5-sökning fungerar fortfarande Bästa praxis > [!TIP] > - Använd semantisk för begreppsliga frågor — "hur hanterar vi X?" > - Använd FTS5 för specifika termer — "docker swarm" > - Fyll i inbäddningar regelbundet — > - Övervaka leverantörshälsa — semantisk sökning beror på den > - Kombinera med taggar — semantisk + taggfilter snävar in resultatet Nästa steg - FTS5-sökning - Memory API - Arkitektur