server/docs/features/prompt_lab.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

4.7 KiB
Raw Permalink Blame History

Feature: Prompt-Laboratorium

Filsti: docs/features/prompt_lab.md

1. Konsept

Et internt kvalitetssikringsverktøy der redaksjonen kan teste, sammenligne og godkjenne LLM-prompts mot faktiske data fra eget workspace — før de ruller ut i produksjon. Integrert med AI Gateway (LiteLLM) og Promptfoo-testsettene.

2. Problemet det løser

  • Modellkvalitet på norsk varierer kraftig mellom leverandører og versjoner.
  • Leverandører oppdaterer modeller uten varsel — kvaliteten kan degraderes over natten.
  • Redaksjonen må kunne verifisere at en prompt fungerer med deres data (transkripsjoner, artikler, aktørnavn) før den settes i produksjon.
  • I dag krever prompt-testing kommandolinje og Promptfoo — det bør være tilgjengelig i nettleseren.

3. Brukeropplevelse

3.1 Playground (Ad-hoc testing)

  1. Bruker velger en jobbtype (research_clip, whisper_postprocess, metadata_extract, dictation_cleanup, etc.).
  2. Systemet laster inn gjeldende system-prompt fra workspaces.settings.
  3. Bruker kan redigere prompten i et tekstfelt.
  4. Velger testdata: enten paste inn tekst manuelt, eller velg fra faktiske transkripsjoner/artikler i workspace-et.
  5. Velger modeller å teste mot (f.eks. sidelinja/rutine + sidelinja/resonering).
  6. Kjører testen — ser resultatene side-om-side.
  7. Kan iterere: endre prompten, kjør igjen, sammenlign.

3.2 Batch-evaluering (Promptfoo-integrasjon)

  1. Bruker velger et lagret testsett (fra tests/prompts/ i Git).
  2. Kjører testsettene mot valgte modeller via AI Gateway.
  3. Ser en matrise: testcase × modell × resultat, med pass/fail-markering.
  4. Kan sammenligne mot tidligere kjøringer for å oppdage regresjoner.

3.3 Deploy

Når en prompt er verifisert:

  1. Bruker klikker "Deploy til workspace".
  2. Prompten skrives til workspaces.settings.llm_prompts[jobbtype].
  3. Alle fremtidige jobber av den typen bruker den nye prompten.
  4. Tidligere prompt lagres i en prompt_history-logg for rollback.

4. Teknisk arkitektur

4.1 Datamodell

prompt_test_runs (
    id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    workspace_id  UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
    job_type      TEXT NOT NULL,
    system_prompt TEXT NOT NULL,
    model_alias   TEXT NOT NULL,
    input_text    TEXT NOT NULL,
    output_text   TEXT,
    tokens_used   INTEGER,
    latency_ms    INTEGER,
    created_by    TEXT NOT NULL REFERENCES users(authentik_id),
    created_at    TIMESTAMPTZ NOT NULL DEFAULT now()
);

CREATE INDEX idx_prompt_runs_workspace ON prompt_test_runs(workspace_id, job_type, created_at DESC);

prompt_test_runs er ikke en node i grafen — det er en intern verktøytabell for utviklere/redaktører.

4.2 Prompt-historikk

prompt_history (
    id            UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    workspace_id  UUID NOT NULL REFERENCES workspaces(id) ON DELETE CASCADE,
    job_type      TEXT NOT NULL,
    system_prompt TEXT NOT NULL,
    deployed_by   TEXT NOT NULL REFERENCES users(authentik_id),
    deployed_at   TIMESTAMPTZ NOT NULL DEFAULT now()
);

Muliggjør rollback: "forrige prompt for research_clip fungerte bedre, rull tilbake."

4.3 Kjøring

  • Ad-hoc tester: SvelteKit server-side sender request direkte til AI Gateway (http://ai-gateway:4000/v1) med brukerens prompt og testdata. Resultatet returneres synkront.
  • Batch-evaluering: Oppretter en prompt_eval-jobb i jobbkøen. Rust-worker kjører testsettene mot AI Gateway og lagrer resultatene.

5. Dataklassifisering

Data Kategori Detaljer
Test-kjøringer Flyktig (TTL 90 dager) For analyse, ryddes automatisk
Prompt-historikk Kritisk (PG) Muliggjør rollback
Testsett (Promptfoo) Gjenskapbar (Git) tests/prompts/ — versjonskontrollert

6. Jobbtyper

Jobbtype Modellalias Beskrivelse
prompt_eval (varierer) Batch-evaluering av testsett mot valgte modeller

7. Instruks for Claude Code

  • Prompt Lab er et admin-verktøy — krev admin eller owner-rolle i workspace.
  • Ad-hoc tester kjøres synkront (SvelteKit → AI Gateway → respons). Ikke bruk jobbkø for enkelt-tester.
  • Batch-evaluering kjøres via jobbkø for å unngå timeouts.
  • Vis alltid token-bruk og latens — dette er et kostnadsbevisst verktøy.
  • Testdata fra workspace-et (transkripsjoner, artikler) lastes via SvelteKit server-side fra PG. Gjesten-UX vises aldri her.
  • prompt_test_runs og prompt_history er workspace-scopet men trenger ikke RLS — de er kun tilgjengelige for admins via applikasjonslogikk.
  • Alt er workspace-scopet.