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 .

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 .

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 .

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 .

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 .

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 .

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 .

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 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 .

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
Een eigen kluis, de plek voor al je wachtwoorden
Zekerheid & gemak

Een eigen kluis, de plek voor al je wachtwoorden

Je kent het wel: je wil iets online bestellen of even het saldo op je rekening checken. En dan komt het: je moet inloggen. Maar, wat was ook al weer het wachtwoord? De geboortedatum van je partner, de laatste twee cijfers van je postcode in combinatie met je lengte? Voor je het weet druk je weer op de knop 'Wachtwoord vergeten'... Dat kan makkelijker.

Partnerbijdrage - in samenwerking met Bitdefender

Ons brein is er niet voor gemaakt om voor vijftig verschillende sites unieke codes te onthouden. En juist daarom zijn wachtwoordmanagers de laatste jaren zo populair geworden. In dit artikel kijken we eens goed naar de oplossing van Bitdefender. Ze zijn wereldberoemd om hun antivirus, maar kunnen ze ook zorgen dat jij nooit meer buitengesloten wordt bij je eigen accounts?

In het kort

In dit artikel bespreken we hoe een wachtwoordmanager dient als oplossing voor het veilig beheren van talloze online accounts. De tekst legt uit dat je met slechts één sterk hoofdwachtwoord toegang krijgt tot een digitale kluis, waarna de software automatisch complexe inlogcodes genereert en invult op al je apparaten. Daarnaast wordt behandeld hoe lokale versleuteling en digitale herstelsleutels zorgen voor privacy en toegangszekerheid, zonder dat gegevens op straat komen te liggen

Waarom een wachtwoordmanager?

Laten we eerlijk zijn, de meeste mensen gebruiken nog steeds overal hetzelfde wachtwoord, of een kleine variatie daarop. Of ze schrijven het ergens op. Dat voelt misschien wel veilig, tot je beseft hoe lek het internet soms kan zijn of dat je net dat boekje kwijtraakt.

Met een wachtwoordmanager zoals Bitdefender SecurePass password manager los je dat probleem voor een groot deel op. Die fungeert als een onzichtbare butler die je helpt met de wachtwoorden invullen, ook al is het misschien lastig of spannend om alles zomaar uit handen te geven. Je installeert de software op je eigen computer en je telefoon, en je bedenkt één heel sterk hoofdwachtwoord. Dat is de enige die je nog hoeft te onthouden.

Voor BitDefender SecurePass heb je een hoofdwachtwoord nodig, en alleen die hoef je te onthouden.

Zodra je die invoert, gaat de kluis open en regelt Bitdefender de rest. Als je dan naar Facebook of je favoriete webshop gaat, ziet het programma dat je wil inloggen en vult het de velden voor je in. Je hoeft niet meer te typen, niet meer te denken en vooral niet meer te stressen. Het mooie is dat het programma je ook meteen helpt bij het aanmaken van wachtwoorden voor nieuwe accounts. In plaats van dat jij weer moet gaan nadenken over een code met een uitroepteken en een cijfer, genereert de software gewoon een onmogelijk te kraken reeks tekens uit en slaat deze direct op. En jij ziet het wachtwoord niet eens, en dat hoeft ook niet, want de software onthoudt het voor je.

En ben je bang dat je misschien ook het hoofdwachtwoord niet meer weet? SecurePass genereert ook nog een digitale herstelsleutel die je in het allerergste geval dan kunt inzetten om in te loggen. Die herstelsleutel bewaar je bij voorkeur op een andere plek dan je smartphone of computer, of print je uit en sla je op in een kluis.

Met een herstelsleutel zorg je dat je altijd toegang kunt krijgen tot je wachtwoordkluis.

Lokaal opgeslagen: veilig!

Het blijft een raar idee: al je wachtwoorden bij één bedrijf parkeren. Wat als zij gehackt worden? Dan ligt alles op straat, toch? Nou, gelukkig zit dat bij Bitdefender wel goed in elkaar. De versleuteling van je wachtwoorden gebeurt namelijk lokaal op jouw eigen apparaat, nog voordat het via het internet naar hun servers wordt gestuurd. Jouw hoofdwachtwoord is de sleutel die die versleuteling ongedaan maakt. Omdat Bitdefender jouw hoofdwachtwoord niet heeft (en ook nergens opslaat), kan niemand bij jouw gegevens; ook niet in geval van een lek of hack.

Maar omdat Bitdefender jouw wachtwoord nergens hebben opgeslagen, niet hebben, kunnen ze je ook niet helpen als je het vergeet. Er is geen "wachtwoord vergeten" optie voor je hoofdwachtwoord. Je krijgt bij het installeren alleen die speciale herstelcode. Die moet je echt uitprinten of op een veilige plek bewaren, want als je je hoofdwachtwoord kwijt bent én die herstelcode, dan ben je echt de pineut en kom je je kluis nooit meer in.

Hoe werkt het in de praktijk?

Bitdefender SecurePass installeer je als app op een Android- of iOS-toestel, en is beschikbaar als browser-add-on voor de Windows- en MacOS-versies van Chrome, Edge, Firefox en Safari.

Op een desktop werkt Bitdefender SecurePass als een extensie in je browser en op de smartphone als een app.

Veiligheid is leuk, maar als de software lastig is in gebruik, gooi je het er na een week weer vanaf. Gelukkig heeft Bitdefender goed gekeken naar hoe mensen surfen en software gebruiken. De interface oogt fris voor zowel de browser-extensie als de app op je telefoon. Wat vooral fijn is, is de synchronisatie. We leven in een tijd waarin je 's ochtends op je telefoon zit, overdag op een laptop werkt en 's avonds misschien met een tablet op de bank hangt. Als je op je laptop een nieuw wachtwoord aanmaakt voor Netflix, wil je niet op je telefoon die hele rits tekens moeten overtypen.

Je hebt daardoor toegang tot alle accounts zonder dat je overal moet nadenken over wat de gebruikersnaam of het wachtwoord ook echt precies was: makkelijk en handig dus!

Ieder nieuw account sla je op in SecurePass zodat de gegevens overal automatisch worden ingevuld, op ieder apparaat.

Het meeste werk gebeurt via een extensie in je browser (via het icoontje rechtsboven in de browser) of via de app op je telefoon. Bitdefender synchroniseert dit razendsnel. Zodra je iets opslaat op het ene apparaat, is het vrijwel meteen beschikbaar op het andere. Daarnaast doet het meer dan alleen wachtwoorden. Je kunt er ook notities in kwijt die niemand mag zien

Ook is het handig dat je een of meerdere betaalkaarten en creditcards kunt toevoegen. Iedere keer dat je op een betaalpagina komt, laat Bitdefender je een scherm zien waarop je kunt aangeven welke opgeslagen creditcard je wil gebruiken. Na de selectie vult Bitdefender automatisch alle creditcardgegevens in en kun je de bestelling afmaken.

Ook je creditcardgegevens sla je eenvoudig op in SecurePass, zodat je die gegevens niet telkens handmatig hoeft in te typen als je iets online bestelt.

Gebruik je slechte of makkelijk te raden wachtwoorden, dan is er een beveiligingsscan die ten eerst kijkt of je geen zwakke wachtwoorden hebt gebruikt, maar ook op het dark web op de achtergrond scant naar gelekte gegevens. Je krijgt dan direct de tip om je wachtwoord direct aan te passen.

Met het beveiligingsrapport kun je zien welke wachtwoorden zwak of zelfs gelekt zijn, waardoor je direct weet waar je iets moet aanscherpen.

Tot slot

Als we alles op een rijtje zetten, is Bitdefender SecurePass een goede keuzae als je geen zin hebt in een lastig te beheren omgeving . Voor de gemiddelde gebruiker is dit precies wat je zoekt. Het doet wat het moet doen: het beveiligt je gegevens muurvast en haalt de frustratie van het inloggen weg. Vooral als je al gebruikmaakt van de antivirus van Bitdefender, is dit een logische toevoeging die naadloos in je bestaande pakket past. Het is misschien even wennen om de controle uit handen te geven, maar als je eenmaal gewend bent aan het feit dat je nooit meer een wachtwoord hoeft te onthouden, wil je nooit meer terug.

▼ Volgende artikel
Waar voor je geld: 5 goede bluetooth-koptelefoons tot 175 euro
© Sennheiser
Huis

Waar voor je geld: 5 goede bluetooth-koptelefoons tot 175 euro

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 betaalbare bluetooth-hoofdtelefoon met een goed geluid? Vandaag hebben we vijf interessante modellen voor je gespot.

Disclaimer: Op het moment van schrijven zijn de besproken bluetooth-koptelefoons bij de goedkoopste webwinkels niet duurder dan 175 euro. De prijzen kunnen echter schommelen.

Sennheiser Accentum Plus Wireless

Sennheiser bracht afgelopen voorjaar een nieuwe bluetooth-koptelefoon op de markt. En wat voor één, want de Accentum Plus Wireless is comfortabel, gebruiksvriendelijk én betaalbaar. Zoals je van de Duitse audiospecialist mag verwachten, is de geluidskwaliteit prima op orde. De gebruikersreviews op Kieskeurig.nl liegen er dan ook niet om. Alle testers gaven deze koptelefoon een 9 of 10 als reviewscore.

Handig is dat je diverse audio-instellingen naar wens kunt aanpassen. Dat werkt met een app op een smartphone. Een ander speerpunt is de functie actieve ruisonderdrukking (ANC), zodat je geen of nauwelijks storende omgevingsgeluiden hoort. Ideaal voor wie aandachtig naar een luisterboek, podcast of rustig muziekalbum wil luisteren.

Volgens Sennheiser houdt een volgeladen accu het ongeveer 50 uur vol. Is de batterij leeg, dan kun je evengoed weer snel luisteren. Na tien minuten snelladen kan de Accentum Plus Wireless er weer 5 uur tegenaan. Voor een hoog draagcomfort heeft de hoofdtelefoon zachte oorkussens en een verstelbare hoofdband met binnenvoering. Bovendien is hij met een gewicht van 227 gram ook niet zo zwaar. Geïnteresseerden kiezen tussen een zwarte en witte behuizing. Meer weten? Lees dan deze review op ID.nl.

Skullcandy Hesh ANC

Op zoek naar een ANC-koptelefoon voor minder dan 100 euro? Dat komt mooi uit, want dit exemplaar van Skullcandy is op Kieskeurig.nl momenteel goedkoper dan ooit. Aan de hand van vier meetmicrofoons registreert de Hesh ANC omgevingsgeluiden, waarna de geïntegreerde chip vliegensvlug een tegengeluid berekent. Deze bluetooth-hoofdtelefoon dempt op die manier lawaai, zodat je op elke plek geconcentreerd kunt luisteren. De oplaadbare batterij heeft volgens de fabrikant een maximale speeltijd van 22 uur. Accu leeg? Na 10 minuten opladen kun je weer 3 uur luisteren.

Dit over-earmodel bevat binnenin twee audiodrivers van 40 millimeter. Die zijn verantwoordelijk voor het geluid. Tijdens een luistersessie hoef je geen smartphone uit je broek- of jaszak te halen. Gebruik gewoon de knopjes op de oorschelp om de audioweergave te bedienen. Wijzig onder meer het volumeniveau en skip nummers. De behuizing weegt 228 gram en heeft een vouwbaar ontwerp. Hierdoor past dit luisterapparaat makkelijk in een tas.

Sony ULT Wear (WH-ULT900N)

Kun jij een flinke portie bas wel waarderen? De onlangs verschenen Sony ULT Wear (zwart/wit/groen) valt dan ongetwijfeld bij je in de smaak. Je drukt op de ULT-knop om het basniveau verder op te voeren. Gunstig voor liefhebbers van opzwepende muziekstijlen als dance, hiphop en rock. Een andere belangrijke eigenschap is de aanwezigheid van actieve ruisonderdrukking. Sony heeft deze techniek erg goed onder de knie, waardoor je niet of nauwelijks omgevingsgeluiden hoort. Wanneer je veel onderweg bent, komt de bijgesloten stevige reishoes goed van pas.

De rechteroorschelp bevat een handig aanraakpaneel waarmee je de muziek kunt bedienen. Veeg omhoog voor meer volume en veeg vooruit om naar het volgende liedje te gaan. Als je de Sony Headphones-app op een smartphone installeert, kun je diverse audio-instellingen aanpassen. Ga bij een volledig opgeladen accu uit van een luistertijd van zo’n 30 uur. Schakel je actieve ruisonderdrukking uit, dan kun je zelfs 50 uur luisteren. Lees in deze uitgebreide review meer informatie over deze betaalbare koptelefoon.

Audio-Technica ATH-M50XBT2

Vergeleken met veel andere over-ear-hoofdtelefoons heeft dit exemplaar relatief grote drivers van 45 millimeter. Dat bevordert een krachtig en open geluid. Daarnaast loopt het (brede) frequentiebereik van 15 Hz tot 28 kHz. Je mag dus een gedetailleerde weergave verwachten. Overigens ondersteunt de Audio-Technica ATH-M50XBT2 geen actieve ruisonderdrukking. Het Japanse merk focust zich met dit product namelijk louter op een hoge audiokwaliteit. Wegens de gesloten constructie dempt de koptelefoon alsnog omgevingsgeluiden.

Zoals we inmiddels van Audio-Technica gewend zijn, heeft ook deze bluetooth-koptelefoon een lange accuduur. Een volledig opgeladen batterij biedt een luistertijd van ongeveer 50 uur. Bij een lege accu kun je eventueel 10 minuten snelladen, waarna je weer 3 uur kunt luisteren. De behuizing heeft een fysieke knop waarmee je inkomende telefoonoproepen kunt aannemen. Verder roep je via deze knop ook jouw favoriete stemassistent op, zoals Google Assistent of Siri. Tot slot pas je in een app op je smartphone naar eigen smaak de equalizer-instellingen aan. De ATH-M50XBT2 is in een zwarte en blauwe versie te koop.

Marshall Monitor II A.N.C.

De Marshall Monitor II A.N.C. combineert een fraai retrodesign met goed geluid. Deze bluetooth-koptelefoon was op het moment van schrijven niet eerder zo goedkoop. Hoewel het Britse audiomerk op zijn eigen website een adviesprijs van 299 euro hanteert, vragen enkele webshops momenteel minder dan 200 euro. Dankzij de actieve ruisonderdrukking is het een prima luistermaatje voor onderweg. Vervelende omgevingsgeluiden verdwijnen namelijk naar de achtergrond. Je kiest in een app op je smartphone de mate van ruisonderdrukking.

De geïntegreerde accu ondersteunt een maximale luistertijd tot ongeveer 45 uur. Bij gebruik van actieve ruisonderdrukking kun je nog altijd 30 uur luisteren. Verder laad je een lege accu in een kwartier weer deels op. De luistertijd bedraagt dan ongeveer 5 uur. De goudkleurige knop springt direct in het oog. Die ondersteunt diverse functies, zoals het aanpassen van het volume en het door elkaar husselen van nummers. Er is ook nog een kleinere zwarte knop. Switch daarmee tussen verschillende geluidsmodi of roep een stemassistent op. Deze over-ear-hoofdtelefoon heeft een opvouwbare constructie, waardoor je hem makkelijk meeneemt.