server/docs/features/ai_research_klipper.md

19 lines
No EOL
1.6 KiB
Markdown

# Feature Spec: AI Research-Klipper ("Ctrl+A Workflow")
**Filsti:** `docs/features/ai_research_klipper.md`
## 1. Konsept
Et internt redaksjonelt verktøy for å samle inn research fra nettet. Programlederne limer inn uformatert tekst (ofte med menyer, annonser og støy fra "Ctrl+A"-kopiering), og en AI renser teksten og trekker ut strukturert kunnskap.
## 2. Arkitektur & Dataflyt
1. **Input (SvelteKit):** En modal i grensesnittet der brukeren limer inn råtekst og valgfri kilde-URL, og knytter det til et *Tema* (f.eks. "Skolepolitikk").
2. **Prosessering (Jobbkø + OpenRouter):**
* Backend mottar teksten og oppretter en `research_clip`-jobb i jobbkøen (se `docs/features/jobbkø.md`). Rust-workeren plukker opp jobben og sender request til OpenRouter (Claude-modell).
* **System Prompt:** Skal instruere AI-en til å returnere JSON med følgende struktur:
`{ "title": "...", "summary": ["..."], "cleaned_text": "...", "actors": ["..."], "factoids": ["..."] }`
3. **Lagring (PostgreSQL):** Backend lagrer resultatet relasjonelt i Kunnskapsgrafen. *Aktører* som ikke finnes opprettes. *Faktoider* kobles til aktørene. Selve artikkelen knyttes til det valgte *Temaet*.
4. **Broadcast (SpacetimeDB):**
Når lagringen er ferdig, sendes et signal via SpacetimeDB slik at chatten/tema-visningen oppdateres hos alle innloggede brukere med et "Kort" som viser det nye sammendraget.
## 3. Instruks for Claude Code
* Sørg for at OpenRouter API-kallet forventer og validerer streng JSON-struktur.
* Lagringen i PostgreSQL må håndtere "upserts" for Aktører elegant, slik at vi ikke får duplikater av f.eks. "Arbeiderpartiet".