ID.nl logo
Programmeren in Python met ChatGPT - Deel 5
© Limitless Visions - stock.adobe.com
Huis

Programmeren in Python met ChatGPT - Deel 5

In de vorige delen van de workshopreeks over de OpenAI-API hebben we teksten samengevat, vertaald en er informatie uit gehaald. Dat bleef telkens beperkt tot één vraag en één antwoord. In dit laatste deel gaan we een stap verder: je gaat in je eigen Python-programma’s volwaardige conversaties voeren met het taalmodel van ChatGPT.

In dit laatste deel laten we zien dat je in Python een conversatie met ChatGPT kunt voeren.

  • We breiden de basiscode uit met 'messages'
  • We creëren een spelpersonage

Lees ook: Babbelen met bijdehante bots: er is meer dan ChatGPT

Code downloaden In dit deel worden wat voorbeelden van stukken code gegeven. Omdat overtikken van code erg foutgevoelig is, kun je die code beter downloaden en daarna bekijken of kopiëren. Het bestand, gptcode-dl5.txt is beschikbaar via deze webpagina.

Je weet ondertussen hoe je in je Python-programma’s een vraag aan ChatGPT stelt via de OpenAI-API. We hebben dit in de vorige vier delen van deze workshopreeks geïllustreerd met talloze toepassingen. Maar onze programma’s hadden daarbij telkens dezelfde structuur: je stelt een vraag (de prompt), je krijgt een antwoord (de completion) en dan stopt de interactie.

Als je al eens van ChatGPT gebruikgemaakt hebt op de OpenAI-website, weet je dat je er ook volledige conversaties mee kunt voeren. Die mogelijkheid gaan we nu ook in onze eigen Python-programma’s inbouwen. In plaats van een klassieke, beperkte interface met invoer in een vast patroon, creëer je zo een conversationele interface. 

Basiscode

In de vorige delen van deze reeks maakten we altijd gebruik van een basisfunctie get_completion waaraan we een gebruikersprompt en eventueel een systeemprompt gaven, met optioneel ook een model. Die functie stuurde de prompt(s) door aan de OpenAI-API en gaf het antwoord terug.

Om een conversatie te voeren, moet het taalmodel toegang tot de hele context hebben, met de vorige boodschappen die het taalmodel en jij hebben uitgewisseld. Daarom maken we in dit deel een nieuwe hulpfunctie: get_completion_from_messages. Daaraan geef je de hele geschiedenis van boodschappen door. Onze basiscode ziet er dan als volgt uit:

Klik daarom in Visual Studio Code op File / New File en kies Python File. Plaats daarin de voorgaande Python-code. De API-sleutel moet je zelf aanmaken in je account bij OpenAI, net zoals in de vorige delen van deze workshopreeks.

Google Nest Mini

Een apparaat dat ook luistert naar wat jij te zeggen hebt

Rollen

Waaruit bestaan die boodschappen nu? Het argument messages dat we aan de functie get_completion_from_messages moeten doorgeven, is een lijst van Python-dictionary’s, een datastructuur die sleutels en waardes heeft. Elke dictionary in de lijst messages heeft twee sleutels: "role" en "content". De eerste beschrijft de rol van de boodschap in de conversatie en de tweede de inhoud (de tekst).

De OpenAI-API kent drie rollen: system, user en assistant. Een boodschap met de rol system beschrijft een systeemprompt. Zoals we in de vorige delen uitlegden, geeft een systeemprompt algemene instructies aan het taalmodel. Een boodschap met de rol user beschrijft een vraag van de gebruiker. En een boodschap met de rol assistant beschrijft een antwoord van het taalmodel.

Een conversatie met de OpenAI-API kan er dan in Python als volgt uitzien in de vorm van boodschappen met een rol en inhoud:

Voeg deze lijst aan je code toe. Daarna kun je aan de OpenAI-API vragen om de conversatie in deze boodschappen voort te zetten:

Sla dit bestand in Visual Studio Code op met Ctrl+S en geef het een naam. Klik dan op Terminal / New Terminal, waarna er onder je code een nieuw deelvenster opent met een opdrachtprompt. Klik rechts bovenaan op het afspeelknopje (het driehoekje met de tooltip Run Python File als je erboven blijft hangen). Als alles goed gaat, krijg je nu in de terminal een antwoord als “Voor het geval dat de cloud gaat regenen!”.

Met deze kennis over de rollen weet je nu ook waarom er in de laatste regel van de functie get_completion_from_messages (en de functie get_completion die we in de eerdere workshops gebruikten) response.choices[0].message["content"] staat. Het stukje message["content"] geeft de tekst van het antwoord van het taalmodel terug. Als je message["role"] in die functie zou tonen, zou je "assistant" te zien krijgen.

Wat onthoudt de chatbot?

Je hebt gezien dat elke conversatie die je met het taalmodel voert, bestaat uit een lijst van boodschappen. Het taalmodel houdt rekening met alle informatie die in deze boodschappen te vinden is. Vertel je bijvoorbeeld in één boodschap je naam, dan kun je daar in een van de boodschappen erna naar vragen en kan het taalmodel daar perfect op antwoorden. Vervang de lijst messages uit het vorige voorbeeld maar eens door deze lijst en voer het programma uit:

De conversatie is eenvoudig. Het taalmodel krijgt de instructie dat het een vriendelijke chatbot is. Daarna stelt de gebruiker zich voor en vraagt het taalmodel wat het kan doen. De gebruiker vraagt dan wat zijn naam is.

Als je dit programma uitvoert, zul je zien dat het taalmodel de naam heeft onthouden. Je krijgt dan immers een antwoord als: “Je naam is Koen. Dat heb je net verteld! Is er nog iets specifieks waar je meer over wilt weten?”

In een andere conversatie waarin je je naam niet vertelt, zal de chatmodel niet op de vraag kunnen antwoorden wat je naam is. Deze conversatie bijvoorbeeld:

Dan krijg je als antwoord iets als: “Sorry, maar ik ben een chatbot en heb geen toegang tot persoonlijke informatie. Ik ken je naam niet.”

Het is belangrijk om te weten dat elke conversatie die je met het taalmodel voert volledig losstaat van de andere. Dat je eerder je naam verteld hebt in de andere conversatie, is geen informatie die in de nieuwe conversatie beschikbaar is. Het taalmodel kent alleen de algemene informatie waarop het is getraind en de lijst met boodschappen die je eraan doorgeeft. 

Conversaties voeren

Hierboven hebben we de boodschappen in de programmacode gezet. Maar we willen de gebruiker zelf invoer laten geven. Hoe doen we dat? Met nog een extra hulpfunctie, die de lijst met boodschappen opbouwt en telkens nieuwe invoer vraagt en de uitvoer toont. Dat doen we door de basiscode uit te breiden met:

Als je dit programma uitvoert, kun je een vraag intypen en met een druk op Enter doorsturen. De functie converse voegt je vraag als prompt toe aan de lijst met boodschappen in de variabele context. Ook het antwoord van het taalmodel voegt de functie aan de lijst toe en dat antwoord wordt getoond. We blijven in een oneindige lus (met while True) de functie oproepen, waarbij de context telkens wordt uitgebreid met je vraag en het antwoord. Daardoor onthoudt het taalmodel de voorgaande boodschappen en kunnen we een echte conversatie voeren.

Conversationele interface

We hebben nu in wezen een eenvoudige interface voor ChatGPT gebouwd in een terminalvenster. Maar we willen hier een conversationele interface van maken om op een gebruiksvriendelijke manier invoer voor een groter programma te verkrijgen. Als voorbeeld nemen we een computerspel, waarbij je in het begin je spelpersonage moet ontwerpen.

Pak een momentje van ontspanning

Met je favoriete spelpersonage

Een spelpersonage bestaat uit enkele eigenschappen, zoals naam, vaardigheid, uitrusting en ras. Het spel zou je dat allemaal in een formulier kunnen laten invullen, maar waarom niet in een conversatie? Dat gaan we in de rest van dit artikel programmeren. Als eerste stap moeten we dus een uitgebreide systeemprompt creëren die de conversatie kadert:

Ja, de systeemprompt moet echt zo lang zijn. Als we niet expliciet zeggen wat de chatbot wel en niet mag doen, krijgen we uiteindelijk niet wat we willen: een JSON-string met de eigenschappen van het personage. 

Doet je programma niet wat het moet doen? Zodra je een taalmodel in je programma integreert, ben je afhankelijk van de grillen van het taalmodel. Het is een zwarte doos, waarvan je niet weet hoe het exact werkt en wat het doet. Dat contrasteert heel sterk met de ijzeren logica van een programmeertaal als Python. Het is dus goed mogelijk dat het programma van dit artikel niet doet wat je wilt, omdat je een net iets andere invoer geeft dan verwacht of omdat OpenAI ondertussen zijn taalmodel een update heeft gegeven die zich anders gedraagt. Je zult dus waarschijnlijk continu je programma moeten testen en de systeemprompt moeten finetunen, zodat het gewenste gedrag behouden blijft. Dat is het nadeel van de flexibiliteit van een taalmodel in je programma’s te integreren.

JSON

Een groot deel van onze systeemprompt bestaat uit instructies om de uiteindelijke keuzes van de gebruiker in de vorm van JSON (JavaScript Object Notation) te geven. Waarom is dat zo belangrijk? Omdat we de rest van ons programma alleen met gestructureerde gegevens kunnen laten omgaan, niet met tekst.

Dus als de gebruiker in een conversatie met onze assistent een speler met de naam Born heeft gekozen, die een orkenschurk is met een boog, dan moet ons programma dit uiteindelijk in de volgende vorm kunnen inlezen:

Converseren naar een doel

Het doel van onze conversatie is dus dat we uiteindelijk een JSON-string als hierboven krijgen, zodat het programma verder kan en we het spel kunnen spelen. We kunnen onze conversatie dus laten stoppen wanneer de uitvoer van de assistent een geldige JSON-string is.

Om JSON in Python te gebruiken, importeer je eerst de gelijknamige bibliotheek helemaal in het begin van het programma:

import json

Daarna komt onze basiscode en de systeemprompt met de uitgebreide instructies van hierboven, en daarna creëren we de volgende functie converse:

Deze functie vraagt dus invoer van de gebruiker, voegt die aan de context toe en stelt de vraag aan de OpenAI-API. Het antwoord van de assistent voegen we aan de context toe.

Daarna probeert de functie om het antwoord van de assistent als een JSON-object in te laden. Lukt dat, dan geeft de functie dit JSON-object terug. Lukt dat niet, dan geeft Python de foutmelding json.decoder.JSONDecodeError terug en reageren we daarop door gewoon het antwoord van de assistent te tonen. Het is dan immers niet het laatste antwoord met de gestructureerde data in JSON-vorm, maar een vraag. In dat geval geeft de functie None terug, omdat de data nog niet volledig zijn.

Gestructureerde data

Hoe maken we nu van die functie converse gebruik? Dat doen we met de volgende code:

We initialiseren eerst de variabele properties door ze de waarde None te geven. Dan tonen we de eerste boodschap van de assistent, waarin we de gebruiker naar de naam van het spelpersonage vragen.

Daarna roepen we de hele tijd de functie converse met de context aan, zolang de waarde die deze functie teruggeeft None is. Zoals we in die functie gezien hebben, geeft ze een JSON-string terug als de assistent JSON-data teruggeeft en anders None. Als de assistent de instructies correct volgt (zie het kader “Doet je programma niet wat het moet doen?”), stopt de conversatie dus wanneer de data volledig zijn.

Op dat moment wordt de code na het while-blok uitgevoerd. We kunnen nu de eigenschappen van het spelpersonage op een gestructureerde manier uit het JSON-object properties halen. We tonen ze hier één voor één. Uiteraard zou je nog wat controles moeten uitvoeren, zodat er geen ongeldige waardes in staan wanneer het taalmodel niet goed werkt. Maar dat is een oefening voor de lezer!

Lees ook:

▼ Volgende artikel
Waar voor je geld: 5 populaire koelkasten met een hoge reviewscore
© Odua Images
Huis

Waar voor je geld: 5 populaire koelkasten met een hoge reviewscore

Bij ID.nl zijn we dol op kwaliteitsproducten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we binnen een bepaald thema naar zulke deals. Ben je op zoek naar een koelkast die hoge ogen gooit bij andere gebruikers? Vandaag hebben we vijf interessante modellen voor je gespot.

Hisense RB329N4AWE

De Hisense RB329N4AWE is een goede betaalbare koelkast. Ruim twintig reviewers komen tot een gemiddelde score van een 8,7. Naast de lage prijs waarderen diverse consumenten onder meer de stille werking (38 decibel) en ruime inhoud. Daarnaast valt de no frost-functie in de smaak, want hierdoor is er in het vriesgedeelte nooit sprake van ijsvorming. Dat scheelt weer ontdooien. Is de draairichting ongunstig? Geen probleem, want je kunt de deur omkeren. De bediening is eenvoudig, want bovenaan het koelvak bevinden diverse knopjes. Daarmee selecteer je onder meer de gewenste temperatuur.

Deze koelkast bevat meerdere ventilators die de koude lucht gelijkmatig verdelen. Dat komt de houdbaarheid van de producten ten goede. Voor het snel invriezen van voedsel activeer je desgewenst de Fast Freeze-optie. Zo bewaar je beter de smaak van producten. Het koelgedeelte heeft een inhoud van 188 liter, terwijl het vriesvak goed is voor 67 liter. Deze vrijstaande koelkast is 180 centimeter hoog. Tot slot is de diepte van 56 centimeter een pluspunt. Hierdoor plaats je de RB329N4AWE netjes in een standaard keuken.

Samsung RS65DG5403S9EF

Met een totale inhoud van 635 liter is de Samsung RS65DG5403S9EF een perfecte koelkast voor gezinnen. Het betreft een Amerikaans model met twee deuren. Achter de linkerdeur bevindt zich een vrieskast van 218 liter. Met vier legplanken en twee transparante lades kun je heel wat etenswaren invriezen. Er is in de deur ook nog een ijsblokjesmaker verwerkt. Het koelgedeelte heeft dezelfde indeling als het vriesvak, maar is een stuk breder. Daardoor bedraagt de inhoud van dit compartiment maar liefst 417 liter.

Zoals je van een moderne koelkast in deze prijsklasse mag verwachten, ondersteunt de RS65DG5403S9EF diverse nuttige functies. Verbind het apparaat bijvoorbeeld met wifi en houd in een app op je smartphone het actuele stroomverbruik in de gaten. Verder ondersteunt dit model no frost, zodat je de vrieskast niet hoeft te ontdooien. Een ander pluspunt is het lage geluidsniveau van slechts 37 decibel. Vijf Kieskeurig.nl-testers voelden deze Amerikaanse koelkast al eens aan de tand. Zij deelden alleen maar achten en negens uit. Lees hier hun testverslagen. Het product is in een zilverkleurige en zwarte uitvoering te koop.

Liebherr CNC 5703 Pure

Het Duitse merk Liebherr staat bekend om zijn kwalitatieve witgoedproducten. De CNC 5703 Pure is daarvan een goed voorbeeld. Niet voor niets beoordelen een kleine twintig Kieskeurig.nl-bezoekers het product met een gemiddeld cijfer van een 9. Je hoeft deze koelkast niet ergens in de bijkeuken of schuur neer te zetten, want het apparaat maakt nauwelijks geluid. Het opgegeven volumeniveau bedraagt slechts 35 decibel. Zet hem dus gerust naast een bank of keukentafel. Dankzij de geïntegreerde deurgrepen is de buitenzijde helemaal vlak. Handig voor het afnemen van vuil en stof!

De koelkast is ruim twee meter hoog. Dit resulteert in flink wat ruimte. Het koelvak heeft dan ook een riante inhoud van 268 liter. Met 103 liter is het vriesgedeelte eveneens erg ruim. Van ijsvorming is geen sprake, want de CNC 5703 Pure ondersteunt no frost. Voor het bewaren van groente en fruit komt de zogenoemde EasyFresh-lade goed van pas. Dankzij een hoge luchtvochtigheid blijven de producten hierin langer goed. Wie dit product binnen een half jaar kosteloos registreert, ontvangt acht jaar garantie op alle onderdelen en het arbeidsloon. Naast de hier besproken witte uitvoering is deze koelkast ook in een RVS-variant verkrijgbaar.

Lees ook: 🧊 Houd je eten langer vers: zo deel je je koelkast optimaal in

Inventum KV550B

Zoek je een tafelmodel met een goede reputatie? Kijk dan eens naar de Inventum KV550B. Op Kieskeurig.nl heeft deze compacte koelkast een gemiddelde score van een 9,1. De reviewers prijzen onder andere de stille werking (39 decibel), geïntegreerde verlichting en ruime groentelade. Verder heeft de koelkast ook nog twee legplanken en drie deurvakken. Dankzij de superkoelen-functie breng je vers bewaarde etenswaren snel op temperatuur.

De afmetingen zijn 85 × 55 × 58 centimeter, waardoor je deze koelkast makkelijk in een hoekje van een garage, schuur, tuinhuis of (bij)keuken kwijt kunt. Ondanks het compacte formaat heeft de koelkast een inhoud van 113 liter. Daarnaast is er ook nog een apart vriesvak van 16 liter. Plaats hierin bijvoorbeeld ijsjes of een heel brood. Nuttig om te weten is dat je de draairichting van de deur zo nodig kunt omkeren. Deze koelkast is in een zwarte en witte behuizing te koop.

ETNA AKV678RVS

Met een prijskaartje van minder dan duizend euro is deze Amerikaanse koelkast van ETNA momenteel goedkoper dan ooit. Bovendien heeft de AKV678RVS ook nog eens een hoge gemiddelde beoordeling van een 8,6. Buiten deze zilverkleurige uitvoering kun je als alternatief de zwarte versie overwegen. Achter de linkerdeur heb je toegang tot een vrieskast van 185 liter. De twee beschikbare lades vriezen wegens no frost-ondersteuning niet aan. Verder heeft de vriezer vijf legplanken en vier deurvakken.

Aan de rechterkant bevindt zich het koelgedeelte met een inhoud van 334 liter. Dankzij vijf draagplateaus, twee lades en drie deurvakken kun je een heleboel producten koel bewaren. Houd vanwege de hoge capaciteit wel rekening met een behoorlijke omvang van 178,6 × 91 × 64,3 centimeter. Een voordeel is het fluisterstille geluidsniveau van 35 decibel. Hierdoor ervaar je tijdens het televisiekijken en muziek luisteren geen hinder. Je stelt via het bedieningspaneel aan de buitenzijde de gewenste temperatuur in.

▼ Volgende artikel
❄️ Koud hè? Zo vind je jouw perfecte elektrische deken
© Tatyana Gladskih
Huis

❄️ Koud hè? Zo vind je jouw perfecte elektrische deken

In de koude wintermaanden is wat extra warmte in huis geen overbodige luxe. Steeds meer mensen kiezen daarom voor een elektrische deken: zo blijf je niet alleen heerlijk warm, maar bespaar je ook op stookkosten. Hoe je een elektrische deken kiest die bij je past, lees je hier.

⏱ In het kort:

Elektrische dekens zijn tegenwoordig mateloos populair, en met het ruime aanbod kan het lastig zijn om de juiste keuze te maken. Daarnaast heb je misschien speciale wensen voor je elektrische deken, afhankelijk van wáár je hem gebruikt, met wie je hem eventueel gebruikt en hoeveel warmte je nodig hebt. In dit artikel helpen we je aan de beste elektrische deken voor jou, rekening houdend met:

  • • De soort deken (onderdeken of bovendeken)
  • • Het formaat dat bij je bed of lichaam past
  • • Het aantal warmtestanden
  • • De veiligheid van de deken
  • • Hoe makkelijk je de deken wast

Lees ook: 10 tips om warm te blijven zonder te stoken

Soort deken

Er zijn twee soorten elektrische dekens: onderdekens en bovendekens. Een onderdeken verwarmt je bed, een bovendeken is ideaal voor op de bank. Lig je dus elke avond te klappertanden in bed, dan is een onderdeken voor jou waarschijnlijk de beste keuze. Vind je het lekker om 's avonds onder een (warm!) kleedje op de bank te kruipen én wil je misschien je stookkosten wat omlaag brengen, dan kies je voor een bovendeken.

Een onderdeken plaats je tussen je matras (of topper) en hoeslaken, zodat de deken het bed van onderaf verwarmt. Je kunt een onderdeken aanzetten op het moment dat je in bed stapt, maar vaker worden onderdekens met behulp van een timer ingeschakeld vóór het liggen, zodat het bed al heerlijk warm is. Vaak regelt een timer ook dat de deken zichzelf na een uur (of twee) vanzelf uitschakelt, zodat er tijdens het slapen geen veiligheidsrisico's ontstaan.

©Leonid Iastremskyi

In tegenstelling tot een elektrische onderdeken leg je een elektrische bovendeken (zoals de naam al zegt) bovenop je, bijvoorbeeld als je op de bank of je favoriete stoel zit. Je herkent deze dekens aan hun extra zachte materiaal, zoals fleece of microvezel. Een bovendeken zet je pas aan op het moment dat je eronder gaat zitten of liggen. Net als onderdekens schakelen de meeste bovendekens zichzelf na verloop van tijd vanzelf uit. Je kunt een bovendeken natuurlijk ook mee naar bed nemen voor wat extra warmte, dus eigenlijk zijn deze dekens multifunctioneel!

Formaat

Zowel onder- als bovendekens zijn verkrijgbaar in verschillende afmetingen. Bedenk dus van tevoren goed hoe groot je je elektrische deken wenst. Onderdekens komen qua breedte overeen met de standaardafmetingen van matrassen: een eenpersoons-onderdeken is meestal 80 centimeter breed, een tweepersoons-onderdeken 140 centimeter. In de lengte zijn ze doorgaans iets korter dan een matras, omdat ze alleen het lichaam hoeven te verwarmen. Handig: veel tweepersoons-onderdekens beschikken over twee schakelaars waarmee je de temperaturen van beide helften apart van elkaar kunt instellen. Scheelt weer geruzie met je partner.

Bovendekens zijn er in compacte, middelgrote en extra grote varianten. Compacte bovendekens hebben een afmeting van (rond de) 100 x 70 centimeter en zijn bedoeld om alleen je schoot of bovenlichaam mee te verwarmen. Middelgrote dekens gaan richting de 150 x 70 centimeter en zijn perfect om je hele lichaam in tewikkelen. Kruip je het liefst samen met je partner onder een kleed? Ga dan voor een extra grote variant van bijvoorbeeld 180 x 130 centimeter.

Warmtestanden

Aan een elektrische deken wil je geen honderden euro's uitgeven, en dat hoeft natuurlijk ook niet. Maar gris ook niet de eerste de beste deken uit de schappen. Sommige elektrische dekens (en dan met name de goedkopere) beschikken namelijk maar over één warmtestand, en de kans is groot dat jij die stand nét te warm of juist te koud vindt. Ook als je de deken op verschillende plekken in huis gaat gebruiken – misschien is je slaapkamer een stuk frisser dan je woonkamer – is het fijn als je de temperatuur van je elektrische deken naar wens kunt instellen. De meeste standaardmodellen hebben vier tot zes warmtestanden, maar er zijn ook dekens met meer dan zeven warmtestanden. Sommige elektrische onderdekens beschikken zelfs over verschillende warmtezones voor schouders, rug en voeten – extra fijn als je snel koude voeten hebt!

Veiligheid

Comfortabel onder (of op) een elektrische deken liggen gaat alleen als je weet dat de deken honderd procent veilig is. Kies voor je eigen gemoedsrust dus voor een deken van een betrouwbaar merk; daarmee weet je zeker dat je een veilig product in huis haalt. Let er ook op dat de deken een automatische uitschakelfunctie én een oververhittingsbeveiliging heeft, zodat-ie nooit te heet wordt. Vermijd het kopen van een tweedehandsdeken, omdat een versleten of beschadigd deken vatbaarder is voor brand en kortsluiting.

©Mariana Rusanovschi

Wasbaarheid

Ook het gemak waarmee een elektrische deken gewassen kan worden, is voor veel mensen belangrijk. Vooral als je kleine kinderen hebt die maar al te graag onder de warme deken kruipen, is de kans op morsen of andere ongelukjes groot. En als je een onderdeken op je bed hebt liggen, wil je die natuurlijk ook regelmatig kunnen opfrissen. Gelukkig kunnen de meeste elektrische dekens na het verwijderen van de elektrische bediening gewoon op 30 graden in de wasmachine worden gewassen. Check wel altijd goed de instructies, want dit geldt niet voor iedere elektrische deken. Elektrische dekens kunnen meestal niet in de droger.

Hoe zuinig is een elektrische deken?

Kun je nauwelijks meer onder je elektrische deken vandaan komen en begin je je zorgen te maken over je energierekening? Nergens voor nodig: een elektrische deken kost namelijk niet meer dan een paar cent per avond. Ja, je leest het goed! Gemiddeld verbruikt een elektrische deken zo'n 50 watt per uur (0,05 kWh), wat met een stroomprijs van € 0,40 neerkomt op twee cent. Lig je dus drie uur onder je heerlijke warme deken, dan ben zo'n zes cent kwijt. Ter vergelijking: een paar uur de verwarming aan kost je al snel twee euro. Als je daadwerkelijk wilt besparen met je elektrische deken is het natuurlijk wel slim om de verwarming lager of helemaal uit te zetten, anders schiet je er alsnog weinig mee op.

P.S. Elektrische kussens zijn er ook!

Op zoek naar een warmtekussen?