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:

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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:

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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.

Aan ChatGPT is geen originele komiek verloren gegaan.

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 code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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:

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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:

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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.

Het taalmodel onthoudt zaken die je in eerdere boodschappen hebt verteld.

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:

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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:

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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:

De code kun je bekijken in het bestand gptcode-dl5.txt, te downloaden via deze pagina.

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!

Onze spelassistent weet dat we met ‘human’ een mens bedoelen en met ‘staf’ een toverstaf, maar negeert in dit geval ons verbod om begeleidende tekst bij de JSON-string te geven.

Lees ook:

▼ Volgende artikel
Dit is wat One UI 7 op de Samsung Galaxy S25 te bieden heeft
© Wesley Akkerman
Huis

Dit is wat One UI 7 op de Samsung Galaxy S25 te bieden heeft

De Samsung Galaxy S25-lijn is de eerste smartphonereeks die beschikt over versie 7 van One UI, de Samsung-softwareschil die je aantreft op de Android-apparaten van het bedrijf. In dit artikel lees je wat je allemaal verwachten kunt van One UI 7.

One UI 7 heeft verschillende softwaremogelijkheden die niet altijd aan bod komen in een recensie, maar die wel heel handig kunnen zijn. We nemen je mee langs de belangrijkste wijzigingen aan het systeem en kijken onder meer naar: • Systeemaanpassingen • Now Bar en Now Brief • Het aanpasbare snelmenu • De overige AI-mogelijkheden

Lees ook: Review Samsung Galaxy S25 Ultra – Slimme AI of slimme marketing?

De rek is inmiddels wel uit de smartphoneontwikkeling. Fabrikanten kunnen nauwelijks nog innovatieve onderdelen toevoegen, omdat de slimme telefoon inmiddels zo goed als alles kan. Vooral op hardwaregebied valt er weinig nieuws meer te verwachten. Natuurlijk zullen we nog verbeteringen zien in camera's, processors en accu's, maar in grote lijnen is de smartphone uitontwikkeld. Daardoor zijn ze tegenwoordig net zo spannend als wasmachines: ze doen wat ze moeten doen.

Dat betekent echter niet dat er geen nieuwe functies worden ontwikkeld. Die zitten vooral in software. De Google Pixel 9-reeks zette die trend medio 2024 in met een verrassend snelle opvolger van de Pixel 8-serie. OnePlus, Asus en Samsung volgen die lijn en leggen de nadruk op software. One UI 7 is daar het beste voorbeeld van. Zonder die softwareschil had Samsung net zo goed een jaar aan smartphonelanceringen kunnen overslaan.

Systeemaanpassingen

Maar wat maakt One UI 7 dan zo bijzonder? We hebben de afgelopen weken de drie verschillende Samsung Galaxy S25-toestellen getest en zijn tot de onderstaande observaties gekomen. Zo is het onder meer mogelijk om een verticale applade in te stellen. Daarmee bedoelen we dat je al je apps in de applade kunt bekijken door omhoog en omlaag te vegen (in plaats van naar links en rechts). Dat regel je door de lade te openen, onderin op de drie puntjes te tikken en dan Sorteren > Alfabetische volgorde te selecteren.

Daarnaast valt op dat de animaties in One UI 7 veel soepeler zijn dan voorheen. Ze ogen en voelen gestroomlijnd, wat het hele systeem een verfijnde en samenhangende uitstraling geeft. In eerste instantie merk je dit misschien niet direct, maar na een paar uur gebruik valt de soepelheid steeds meer op. Ook de vernieuwde systeemiconen dragen bij aan de prettige bediening op de S25-modellen. One UI 7 voelt daardoor even modern als afgewerkt aan – en dat is een groot compliment.

©Wesley Akkerman

Hier zie je de menu-opties staan voor het opnieuw rangschrikken van de applade.

Now Bar en Now Brief

Ook biedt One UI 7 ruimte aan twee nieuwe onderdelen, de Now Bar en Now Brief. Hoewel ze enkele overeenkomsten hebben, gebruik je ze allebei op andere momenten. De Now Bar is een soort zwevend eiland (waar hebben we dat eerder gehoord) onderaan het vergrendelde scherm van je Galaxy, waar je basale interface-elementen in aantreft – denk aan een opnameknop voor een geluidsopname of bijvoorbeeld wegwijzers van Google Maps. Zo kun je snel iets regelen zonder je smartphone te hoeven ontgrendelen..

Now Brief daarentegen is veel uitgebreider. Dit is een apart onderdeel binnen One UI 7 waar veel AI-opties moeten samenkomen. Now Brief biedt op drie momenten van de dag een overzicht aan van onder meer het weer, het verkeer, je agenda-afspraken en bijvoorbeeld een Spotify-afspeellijst. Het moet je helpen de dag voor te bereiden, door te komen en erop terug te kijken. Zie dit als een soort persoonlijke dag-overzicht dus. Daarmee kan de Samsung Galaxy S25 Ultra, en later ook andere Galaxy's, dienen als een persoonlijke assistent.

©Wesley Akkerman

Dit is het thuisscherm van de Galaxy S25. Rechts van het weerbericht zie je twee widgets staan: de bovenste is een snelkoppeling naar Now Brief.

Aanpasbaar snelmenu

Een ander onderdeel dat het vermelden waard is, is het snelmenu. Daarmee doelen we op het menu dat je van boven naar beneden trek. Daarin staan allerlei opties, bijvoorbeeld voor wifi, bluetooth en andere kernonderdelen. Daar kon je al langer allerlei dingen in wijzigen, zoals bijvoorbeeld de knoppenindeling. Maar in ONe UI 7 ziet het er wel anders uit. Als je de Samsung Galaxy S25 Ultra opstart, dan heeft Samsung dit snelmenu voor je in twee delen opgedeeld. In het kader van overzicht – maar dat beteken ook dat je moet weten aan welke kant je de boel naar beneden moet trekken. Links geeft meldingen, terwijl je vanaf rechts de instellingen bekijkt.

Vind je deze tweedeling niet prettig? Je kunt gelukkig ook alles weer heel makkelijk in één overzicht bij elkaar zetten (zonder dat je daar bijvoorbeeld een aparte app als Good Lock voor hoeft te downloaden). Wanneer je dit doet, dan krijg je met een enkele swipe toegang tot zowel de notificaties als de opties. Je stelt dit met een paar simpele stappen in. Trek je snelmenu vanaf rechts naar beneden en tik op het potloodicoon aan de rechterkant. Tik nu op Vensterinstellingen (links) en tik op het volgende scherm op Samen. Tik nu op Gereed om de keuze te bevestigen. Vanaf dat moment heb je (weer) één snelmenu.

©Wesley Akkerman

Dit is het aangepaste snelmenu, dat notificaties en instellingen samenvoegt.

Overige AI-mogelijkheden

Tot slot kijken we naar de overige AI-mogelijkheden van de Samsung Galaxy S25-serie. Zo is het onder meer mogelijk Google Gemini te gebruiken. Dat doe je door de powerknop kort in te drukken: de assistent komt dan vanzelf vanaf beneden omhoog. Op moderne Galaxy's biedt Gemini ondersteuning aan voor verschillende Samsung- en Google-apps, waardoor het mogelijk is die apps aan te spreken en dingen uit te laten voeren met een stemcommando. Soms kun je zodoende twee of drie apps in één keer iets voor je laten doen, met één commando.

Op moment van schrijven lijken de mogelijkheden al redelijk uitgebreid te zijn, maar eerlijk is eerlijk: schijn bedriegt. Momenteel werken alleen de genoemde apps met deze AI-functie. Datzelfde geldt overigens voor Now Brief, als we daar nog even kort op terugkomen. Alleen de echt grote namen binnen de Google Play Store zullen direct werken met dit soort diensten. In de toekomst wordt dat aanbod uitgebreid. Nederlandse apps, zoals die van de NS bijvoorbeeld, werken hier nog niet mee. Daardoor is de waarde van dit soort AI-opties nu nog twijfelachtig.

©Wesley Akkerman

Als je op de powerknop drukt, komt Google Gemini naar boven. Zo ziet dat eruit.

▼ Volgende artikel
Wintersport voorbij? Zo houd je je skikleding fris en waterdicht
© Gorilla
Huis

Wintersport voorbij? Zo houd je je skikleding fris en waterdicht

Na een week vol sneeuwpret, frisse berglucht en indrukwekkende pistes is je skikleding niet meer zo fris. Eenmaal thuis gekomen blijft de tas met vuile was liggen voor de wasmachine. Want hoe was je eigenlijk skikleding? Als je je kleding niet goed wast en opbergt, is de kans groot dat je volgend jaar niet zo warm en droog blijft tijdens de afdaling. Onze tips helpen je om je skikleding te wassen, drogen en veilig op te bergen voor volgend jaar.

Dit artikel in het kort: ⛷️ Wacht niet te lang met je skikleding wassen. ⛷️ Bereid de kleding voor op de wasbeurt. ⛷️ Was op lage temperaturen met weinig wasmiddel en geen wasverzachter. ⛷️ Impregneer de kleding. ⛷️ Droog de kleding in een geventileerde ruimte.

Lees ook: Dit wil je weten over de wasprogramma's van je wasmachine

Was snel na je weekje wintersport

Het op de juiste wijze je skikleding wassen is belangrijk: daardoor blijft de kwaliteit van de kleding goed. Ook blijft de kleding warm en waterdicht. Veel skikleding is gemaakt van kunststoffen, zoals polyamide en polyester. Deze stoffen zijn waterafstotend, sterk en licht. De kleding is van tevoren extra behandeld om ze waterdicht te maken, waardoor sneeuw of regen niet door de kleding komt. Was je de kleding verkeerd? Dan kan de beschermende functie verloren gaan. Je zweet en vuiligheid tasten de kleding namelijk aan. Laat je skikleding na wintersport dus niet te lang voor de wasmachine liggen.

Check voordat je gaat wassen altijd het wasetiket van de kleding. Dan weet je precies hoe het kledingstuk gewassen mag worden. Lees ook: Betekenis wassymbolen: wat zijn die wasvoorschriften?

©Lyudmila

Wasmiddel en voorbereiding

Gebruik weinig wasmiddel om je skikleding te wassen. En koop een speciaal wasmiddel voor sport- en outdoorkleding om zeker te weten dat het goed is of gebruik een fijnwasmiddel. Giet er geen wasverzachter bij, want dat is niet goed voor de kleding. Laat de kleding ook niet stomen en gebruik geen bleekmiddelen.

Bereid de kleding altijd eerst voor op de wasbeurt. Leeg alle zakken, sluit alle ritsen, knopen en klittenband om schade aan de stoffen te voorkomen. Zitten er vlekken op de kleding? Behandel deze eerst. Zorg dat de kleding binnenstebuiten de wasmachine in gaat. Ook belangrijk: doe de trommel niet te vol. Er moet voldoende ruimte zijn wil de kleding schoon worden.

Wassen met de wasmachine

Nu de kleding op de juiste wijze in de wasmachine zit, is het tijd om het juiste programma aan te zetten. Kies een programma met lage temperaturen, maximaal 30 °C. Hogere temperaturen kunnen ervoor zorgen dat de waterdichte coating beschadigd raakt. Zit er een speciaal programma op je wasmachine voor outdoor kleding? Kies dan dit programma. Het programma heeft een laag toerental bij het centrifugeren. Doe naast je skikleding geen andere kleding in de wasmachine.

©Oriol Roca

Waterdicht maken van de skikleding

Heb je voor deze wintersportvakantie net nieuwe kleding gekocht? Dan is de kans groot dat deze gewoon waterdicht is gebleven na de wasbeurt. Als je kleding wat ouder is, kan het zijn dat deze niet meer zo waterdicht is als voorheen. Misschien heb je tijdens het skiën of snowboarden wel gemerkt dat er wat vocht doorheen kwam. Was dan de kleding nog een keer, maar nu met een impregneermiddel. Of spuit de kleding in met een speciale waterdicht-spray.

Drogen en opbergen

Als er op het waslabel staat dat de skikleding in de droger mag, dan kun je de kleding zo laten drogen. Anders hang je de kleding op, of leg je die ergens plat neer. Dit doe je in een ruimte waar er genoeg ventilatie is. Hang de kleding niet op in de zon. Drogen op een verwarming kun je beter ook niet doen.

Het wasetiket geeft ook aan of je de kleding mag strijken, mocht je de behoefte hebben om je skibroek te strijken. Je mag de kleding dan op een lage temperatuur strijken. Omdat je de skikleding een lange tijd waarschijnlijk niet meer gebruikt, is het verstandig om de kleding goed op te bergen. Hang de kleding op aan een haakje in de kast of vouw de kleding losjes op, zodat het op een plank kan liggen. Daardoor haal je je kleding volgend jaar weer fris uit de kast, direct klaar om van de pistes te zoeven.