server/docs/features/ai_research_klipper.md
vegard a5985ef3f8 Dokumentasjon, erfaringslogg, migrasjoner og infra-oppdateringer
- Omorganiser docs/: konsepter, features, infra og proposals i egne mapper
- Ny docs/erfaringer/ med lærdommer fra chat-implementering (Svelte 5, SpacetimeDB, adapter-mønster)
- Oppdater ARCHITECTURE.md: Lag 1 status, ny §10 Erfaringslogg, SpacetimeDB i lokal dev
- Oppdater synkronisering.md med implementeringsstatus og designvalg
- Oppdater lokal.md med SpacetimeDB og AI Gateway
- Utvid PG-skjema med channels, messages, media_files, message_revisions
- Legg til seed_dev.sql, migration_safety.md, .env.example
- Nye feature-specs: chat, kanban, whiteboard, live_ai, lydmeldinger m.fl.
- Nye konsept-specs: studioet, møterommet, redaksjonen, den asynkrone gjesten m.fl.
- SpacetimeDB og AI Gateway i docker-compose.dev.yml
- collect-docs.sh inkluderer erfaringer/

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

1.6 KiB

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/infra/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".