Personlig lydbriefing
Et workflow der samler dagens vigtigste indhold, oversætter det til almindeligt dansk og sender det som en kort lydfil.
Status: proof of concept virkerGoogle Cloud tale testetSQLite-base oprettetNanoGPT blog-kilde testet
Målet
Målet er at gøre en stor strøm af mails, artikler, videoer og nyheder til en lille personlig morgenbriefing. Den skal være kort nok til at lytte til, men præcis nok til at Lisa kan vælge, hvad der skal foldes ud bagefter.
Vigtig stilregel: Briefingen skal forklare funktionalitet og betydning. Den skal ikke bare nævne ukendte navne, protokoller eller produktnavne.
Hellere: “Det betyder, at en agent kan betale små beløb uden konto” end “L402 understøtter x402-style payments”.
Kort lydvenlig forklaring
Systemet gør seks enkle ting.
- Det henter nye ting, for eksempel blogindlæg, nyhedsbreve eller videoer.
- Det gemmer originalteksten, så vi altid kan gå tilbage til kilden.
- Det vælger få punkter, som virker mest relevante for Lisa.
- Det omskriver punkterne til almindeligt dansk, så de forklarer hvad det betyder, ikke bare hvad det hedder.
- Det laver teksten om til en lydfil.
- Det gemmer feedback, så systemet lærer hvad Lisa vil høre mere eller mindre af.
Kort fortalt: sådan virker det
De tre spor vi fortsætter med nu
- Bedre udvælgelse. Hvert punkt skal have en grund til at være med: nyhed, praktisk værdi, personlig interesse eller tidligere feedback.
- Bedre omskrivning. En billig model omskriver rå tekniske titler til dansk, der forklarer funktionalitet og betydning.
- Bedre feedback. Svar som “mere som nummer 1” og “mindre teknisk” bliver gemt som tags og vægte, ikke bare som løse beskeder.
Workflowets faser
Indsamling
Hver kildetype har sin egen lille indsamler. Blogindlæg hentes via scrape eller sitemap. YouTube skal bruge transcript. Nyhedsbreve skal renses fra mail. Det gør systemet modulært: hvis én kilde ændrer sig, skal kun den indsamler rettes.
Fælles database
Rå tekst, titel, link, dato, tags og kilde gemmes lokalt. Det betyder, at indsamlingen kan ske løbende uden at forstyrre Lisa, og at vi senere kan spørge tilbage ind i det samme materiale.
Udvælgelse og omskrivning
Systemet vælger få punkter, fjerner dubletter og omskriver tekniske nyheder til korte danske forklaringer. Her bruger vi en billig omskrivnings-agent som førstevalg og OpenRouter som fallback.
Lyd og levering
Den færdige tekst bliver til en lydfil. Først bruges Google Cloud tale, fordi den virker nu. Senere kan vi skifte motor uden at ændre hele workflowet.
Feedback
Feedback gemmes ikke som “god/dårlig” alene. Den kobles på tags og indholdstyper, så systemet lærer, at Lisa fx vil høre mere om konkrete produktændringer og mindre om lavpraktisk teknik.
Nuværende arkitektur
Det vi bruger nu
- Hermes Agent styrer workflow, filer, test og senere cron.
- Python henter, parser og bygger briefingteksten.
- SQLite gemmer kilder, indhold, tags, briefinger og feedback.
- Google Cloud Text-to-Speech laver dansk lyd.
- Telegram bruges til levering og feedback.
Det vi venter med
- LangGraph giver mening senere, når der er flere kildetyper og mere forgrenet logik.
- PostgreSQL giver mening senere, hvis datamængden eller relationerne vokser ud af SQLite.
- Flere special-agenter giver mening, når mail, YouTube, RSS og web har hver sin stabile pipeline.
Database og dataform
Den nuværende proof of concept bruger:
/opt/data/podcast-workflow/briefing.db
Vigtige tabeller:
sources— hvor indholdet kom fra.content_items— titel, link, dato, tekst og hash.content_tags— emner som AI-agenter, privatliv, betalinger eller apps.briefings— den færdige tekst for en dags briefing.briefing_items— kobler nummer 1, 2, 3 osv. til de konkrete kilder.feedback— gemmer “mere af dette”, “mindre teknisk” og lignende signaler.
Kilder og endpoints
NanoGPT-bloggen havde ikke et rigtigt RSS-feed i testen. Derfor bruger vi alternative kilder:
POST https://nano-gpt.com/api/v1/data/url/scrapePOST https://nano-gpt.com/api/v1/data/web/searchSkills, agenter og notater
personal-audio-briefing-workflow— stilregler, arkitektur, tale, feedback og aktuelle stier.static-site-dashboard-maintenance— hvordan denne offentlige side bygges og verificeres sikkert.pgp-file-transfer-vps— sikker overførsel af følsomme filer til VPS med PGP.llm-web-search-model-testing— erfaringer fra test af web-search modeller og NanoGPT web endpoints.
Der blev også brugt separat agent-review til at kritisere arkitekturen. Den vigtigste anbefaling var at starte simpelt med Hermes, Python, SQLite og tale, og først tilføje LangGraph når systemet faktisk har brug for det.
LLM, prompt og omskrivning
Rå nyheder skal omskrives, før de bliver til lyd. Den valgte stil er: kort dansk, praktisk betydning, ingen uforklarede navne.
Billig omskrivnings-agent
- Førstevalg:
Xiaomi MiMo APImedmimo-v2.5-pro. - Fallback:
OpenRoutermedqwen/qwen3.6-plus. - Alternativer testet: Nous Portal og OpenCode Go.
Promptmønster
Omskriv denne briefing til kort, mundtligt dansk.
Forklar hvad hvert punkt gør muligt eller hvorfor det er relevant.
Undgå uforklarede tekniske navne.
Behold nummereringen.
Gør teksten egnet til oplæsning.
Kvalitetscheck før tale
- Kan en ikke-teknisk lytter forstå pointen?
- Forklarer punktet hvorfor det er relevant?
- Er der for mange navne uden forklaring?
- Kan punktet læses op uden at lyde som en teknisk changelog?
Seneste test-briefing
Den seneste lydbriefing blev genereret med Google Cloud tale og gemt her:
/opt/data/voice-memos/nanogpt-blog-briefing-2026-06-14-google-tts.ogg
Eksempel på den ønskede stil:
“NanoGPT tester betaling for AI-kald uden konto. Det er relevant, fordi agenter kan betale små beløb direkte, uden login og uden forudbetalt saldo.”
Hvordan kan vi gøre det endnu bedre?
- Byg feedback ind fra start. Gem “mere som nummer 1”, “mindre teknisk” og “spring crypto over” som vægte på tags.
- Lav en fast relevansscore. Hvert punkt får score for nyhedsværdi, praktisk betydning, personlig interesse og teknisk støj.
- Adskil rå data og oplæst tekst. Gem original artikel separat fra den danske lydtekst, så vi altid kan gå tilbage.
- Lav on-demand uddybning. Når Lisa siger “fortæl mere om nummer 3”, hentes den fulde kilde og der laves en ny kort lydfil.
- Tilføj kilde-køer én ad gangen. Først NanoGPT-blog, derefter RSS/web, derefter YouTube, til sidst e-mail.
- Lav to briefing-typer. Morgenbriefing skal være kort. Researchbriefing kan være længere og mere detaljeret.
- Test stemmer og tempo. Find den danske stemme, der lyder mindst robotagtig ved 1-3 minutters briefing.
- Lav et “forklar uden navne”-filter. Hvis et punkt indeholder et ukendt navn, skal systemet automatisk tilføje “det betyder…” før oplæsning.
- Gem hvorfor et punkt blev valgt. Hvert punkt bør have en forklaring som “nyt produkt”, “praktisk for agenter” eller “matcher tidligere feedback”.
Næste anbefalede trin
- Gør NanoGPT-bloggen til en stabil daglig kilde.
- Tilføj feedbacktabeller og simple feedback-kommandoer.
- Lav én manuel briefing mere og vurder stil, tempo og stemme.
- Opret cron først, når formatet er godkendt.
- Tilføj “fortæl mere om nummer X” som første interaktive funktion.
Sikkerhed og drift
- Ingen nøgler eller private credentials vises på denne side.
- Følsomme credentials overføres med PGP og ligger kun på VPS’en.
- Lydfiler kan sendes via Telegram, men rå secrets må aldrig sendes i chat.
- OpenRouter er fallback, ikke afhængighed for hele workflowet.
- Indsamling, omskrivning og tale er adskilt, så én del kan skiftes uden at alt bygges om.