server/docs/concepts/kunnskapsgrafen.md
vegard 74110e842c Dokumentasjon: oppdatert arkitektur, nye proposals og konsepter
Oppdatert basert på ekstern tilbakemelding. Nye proposals for
kildevern, podcasting 2.0, web clipper, waveforms, editor,
tekst-primitiv og avisvisning. Oppdatert meldingsboks med
slette-semantikk, entity resolution i kunnskapsgrafen, og
AI gateway med kildevern-modus.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:45:24 +01:00

52 lines
3.2 KiB
Markdown

# Konsept: Kunnskapsgrafen (Utforsking og redigering)
**Filsti:** `docs/concepts/kunnskapsgrafen.md`
## 1. Konsept
Kunnskapsgrafen er Sidelinjas kjerne — et levende nettverk av Temaer, Aktører, Faktoider, Episoder og Segmenter. Inspirert av Logseq og Obsidian bygger den seg opp organisk gjennom daglig bruk og skaper "serendipity" (lykketreff) i research-fasen ved å synliggjøre uventede forbindelser.
## 2. Brukeropplevelse
### 2.1 Organisk vekst
Grafen vokser gjennom daglig bruk av Sidelinja:
1. **Chat-meldinger** med `#`-tags oppretter automatisk `MENTIONS`-relasjoner i grafen.
2. **AI-behandling i editoren** trekker ut aktører og faktoider fra innlimt tekst (se `docs/proposals/editor.md`).
3. **Podcastfabrikken** kobler episode-segmenter til temaer og aktører.
4. **Møtereferater** trådes automatisk mot temaer og aktører av AI-referenten.
### 2.2 Visuell utforsking
En interaktiv graf-visning (se `docs/features/visuell_graf.md`) lar redaksjonen:
- Navigere nettverket rundt en Aktør eller et Tema (2-3 ledd ut)
- Dra streker mellom noder for å opprette nye relasjoner
- Filtrere etter nodetype, relasjonstype, tidsperiode eller fritekst
- Bruke `PART_OF`-hierarkier for fleksibel prosjektorganisering uten stive mappestrukturer
### 2.3 Søk
Full-text search på norsk (`to_tsvector('norwegian', ...)`) gjør det mulig å søke på tvers av alle episoder, segmenter og faktoider.
## 3. Komponenter
| Feature | Rolle i Kunnskapsgrafen |
|---|---|
| Kunnskapsgraf datamodell | Nodes/edges i PostgreSQL (se `docs/features/kunnskapsgraf_og_relasjoner.md`) |
| Visuell graf | Interaktiv D3.js/Vis.js-visning (se `docs/features/visuell_graf.md`) |
| Chat | Mentions (`#`/`@`) oppretter edges automatisk (se `docs/features/chat.md`) |
| Editor (AI-knapp) | Trekker ut aktører/faktoider til grafen (se `docs/proposals/editor.md`) |
## 4. Entity Resolution (Merge Entities)
Grafen vokser organisk via `#`-mentions, men dette skaper uunngåelig fragmentering: `#Jonas`, `#Støre` og `#Jonas Gahr Støre` ender som tre separate noder. Uten en strategi for sammenslåing dør serendipity-effekten — faktoidene spres over duplikater som AI-en tror er ulike konsepter.
**Løsning: Merge Entities admin-verktøy (Lag 2)**
1. Velg autoritativ node (Node A) og duplikat(er) (Node B, C, ...)
2. Flytt alle `graph_edges` som peker på Node B → Node A (`UPDATE graph_edges SET source_id/target_id = A WHERE ... = B`)
3. Flytt alle `messages`-mentions som refererer til Node B → Node A
4. Legg til `name` fra Node B som alias i `entities.aliases` på Node A
5. Slett Node B (`DELETE FROM nodes` → cascader)
`aliases`-arrayet i `entities`-tabellen finnes allerede og er indeksert med GIN — autocomplete søker i både `name` og `aliases`, noe som forebygger fremtidige duplikater.
**Forebygging:** Autocomplete bør vise eksisterende entiteter med matchende aliases *før* brukeren oppretter nye. "Mente du #Jonas Gahr Støre?" ved skriving av `#Støre`.
## 5. Datamodell
Den tekniske datamodellen (nodes-supertabell, graph_edges, detailtabeller, deterministiske UUIDs, workspace-isolasjon) er dokumentert i `docs/features/kunnskapsgraf_og_relasjoner.md`.