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
Consumenten testen: de Philips compacte keramische verwarming CX3120/01
© Philips
Energie

Consumenten testen: de Philips compacte keramische verwarming CX3120/01

De Philips CX3120/01 compacte keramische verwarming is ontworpen om kleinere ruimtes snel en effectief te verwarmen. Dankzij slimme technologie, zoals bediening via een app en een draaifunctie voor gelijkmatige warmteverspreiding, belooft deze verwarming comfort en gemak. Hoe presteert hij in de praktijk? Lees hier wat het Review.nl Testpanel van deze draagbare bijverwarming vond.

Partnerbijdrage - in samenwerking met Philips

De Philips CX3120/01 compacte keramische verwarming is ideaal om snel kleine ruimtes tot 20 m² te verwarmen. Dankzij een vermogen van 2000 watt en een draaifunctie voor gelijkmatige warmteverspreiding is de temperatuur in no-time aangenaam. Dankzij de energiebesparende EcoAI-modus en de keuze tussen app-bediening of de knoppen op het apparaat, biedt deze verwarming flexibiliteit en gemak. Het lichte en compacte ontwerp maakt hem eenvoudig te verplaatsen, terwijl kantelbeveiliging en automatische uitschakeling zorgen voor veilig gebruik. Bovendien ziet hij er ook nog eens strak uit.

De Philips compacte keramische verwarming CX3120/01 krijgt van testers een hoge gemiddelde score van een 8,3 en wordt geprezen vanwege zijn snelle opwarming, stille werking en gebruiksvriendelijke app-bediening. Hier volgen de belangrijkste bevindingen van het testpanel.

Snelle warmte en eenvoudig gebruik

De CX3120/01 valt bij testers vooral in de smaak vanwege de snelheid waarmee ruimtes op temperatuur komen. "In seconden is de kamer merkbaar warmer," zegt DOME85. Luuk Smeyers voegt daaraan toe: "Ondanks zijn compacte formaat levert het verrassend veel warmte, ideaal voor de koude dagen." Ook het gebruiksgemak valt goed in de smaak. "Het apparaat is lekker licht en klein, hierdoor makkelijk te verplaatsen van kamer naar kamer," meldt EviDaems. "Ook de bediening is eenvoudig met duidelijke knoppen die geen uitgebreide handleiding nodig hebben." De draaifunctie blijkt vooral handig voor een gelijkmatige warmteverspreiding in grotere ruimtes. MichaelG merkt op: "De warmte wordt goed verspreid, wat ideaal is voor mijn werkkamer van 13,5 m²." Michel voegt nog toe: "Door de drie standen laag, gemiddeld en hoog is hij voor meerdere ruimtes geschikt."

©Philips

Slimme technologie voor extra comfort

De bijbehorende app wordt door testers geprezen om het gemak. Hiermee kun je de verwarming op afstand inschakelen, een schema instellen of de temperatuur aanpassen. "Het is erg fijn dat je op afstand alvast een ruimte kunt verwarmen," zegt Marjan01. Ook Noashirley vindt de app een handige toevoeging: "Je kunt hem aanzetten voordat je thuiskomt, wat het gebruik heel flexibel maakt."

Hoewel de app handig is, noemen sommige testers verbeterpunten. BryanTest merkt op dat er soms vertraging zit in de reactie van de app: "Voor een smart device had dit wat sneller mogen zijn." S. vindt het op zich erg handig dat je het apparaat via de app kunt instellen, maar: "Wat we tijdens het testen van het product wel een nadeel vonden is dat je de temperatuur alleen via de app kunt instellen en niet op het apparaat zelf."

Stil en veilig

Veel testers benadrukken hoe stil de verwarming werkt, vooral op lagere standen. Dit maakt hem ideaal voor slaapkamers en werkkamers. S. zegt hierover: "Wij hebben het apparaat in de babykamer staan, en ons kindje wordt niet wakker van het geluid." De ingebouwde veiligheidsfuncties, zoals kantelbeveiliging en automatische uitschakeling, worden ook gewaardeerd. "Het is een geruststellend idee dat het apparaat uitgaat als het omvalt," aldus T.

"Compact, licht en stil: precies wat je zoekt in een verwarming."

- Michel

Kritiekpunten

Hoewel de CX3120/01 veel lof krijgt, noemen testers enkele verbeterpunten. Het geluidsniveau op hogere standen kan storend zijn, vooral bij gebruik in stille omgevingen. Soepah: "In een lage stand is hij heel stil, maar als je even wilt bijverwarmen, maakt hij toch best wat geluid." Piet en T. vonden de gebruiksaanwijzing onduidelijk, vooral bij de installatie van de app. Piet: "Het dikke boekje bevat nauwelijks praktische instructies, wat veel uitproberen betekent."

Conclusie

De Philips CX3120/01 biedt snelle warmte, slimme technologie en een compact ontwerp, waardoor hij ideaal is voor wie kleine ruimtes efficiënt wil verwarmen. De stille werking en ingebouwde veiligheid maken hem geschikt voor slaapkamers, babykamers en werkkamers. Ondanks enkele verbeterpunten, zoals de afhankelijkheid van de app en het geluidsniveau op hoge standen, blijft het een favoriet bij ons testpanel.

✅ Pluspunten

  • Snelle opwarming.

  • Compact en licht.

  • Stil in gebruik (lage standen).

  • Handige app-bediening.

❌ Minpunten

  • Geluid op hoge standen.

  • App niet altijd responsief.

  • Beperkte bediening op het apparaat zelf.

Ontdek de Philips compacte keramische verwarming CX3120/01

Op Kieskeurig.nl

▼ Volgende artikel
Review Apple MacBook Pro 14 inch (M4, 2024) – Nog fijner werken
© Jeroen Boer - ID.nl
Huis

Review Apple MacBook Pro 14 inch (M4, 2024) – Nog fijner werken

Je kon de klok er bijna op gelijk zetten, ongeveer een jaar na de MacBook Pro met M3 brengt Apple de M4-variant op de markt. Grote veranderingen op het gebied van de vormgeving krijgen we dit jaar niet, toch heeft Apple genoeg verbeterd waardoor de MacBook Pro weer wat fijner is geworden.

Fantastisch
Conclusie

Apple heeft zijn al erg goede 14 inch MacBook Pro toch weer weten te verbeteren. De M4-processor is indrukwekkend snel, je krijgt nu altijd 16 GB RAM en de prijs is ook nog eens lager. De bouwkwaliteit is uitstekend en prettig is dat je maar liefst drie Thunderbolt-aansluitingen krijgt. Ook de lange accuduur zal goed van pas komen als je onderweg bent, net als de extra hoge schermhelderheid. Waar de variant met een M3 vorig jaar nog een beetje tussen consument en professional inhing omdat je niet alle (aansluit)mogelijkheden kreeg, zul je bij de variant met M4 vermoedelijk niks missen. Kortom een prima laptop, al blijven de upgradeprijzen wel onveranderd hoog.

Plus- en minpunten
  • Snelle hardware
  • Mat scherm mogelijk
  • Hoge schermhelderheid
  • Indrukwekkende accuduur
  • Heel goede camera
  • Prijzige upgrades
  • Hoorbare koeling bij zware werkzaamheden

De vormgeving van de MacBook Pro is ten opzichte van vorig jaar vrijwel niet veranderd. Wel heb je bij alle varianten nu de keuze tussen spacezwart of zilver, waar de M3-variant vorig jaar nog spacegrijs of zilver was. Ook krijg je nu altijd alle aansluitingen. Want waar de variant met de normale M3 vorig jaar nog twee Thunderbolt-poorten had, krijg je er ook bij de M4-variant dit jaar netjes drie. Het enige verschil ten opzichte van de de duurdere varianten met een M4 Pro of Max is dat je bij de M4-variant Thunderbolt 4 krijgt terwijl de Pro en Max voorzien zijn van Thunderbolt 5. Dat maakt in de praktijk niet heel veel uit: zowel versie 4 als 5 zijn razendsnelle universele aansluitingen voor dataoverdracht, beeldscherm en opladen.

©Jeroen Boer - ID.nl

Je kunt op zowel de M4 als M4 Pro maximaal twee extra beeldschermen aansluiten terwijl een variant met M4 Max maximaal vier extra beeldschermen ondersteunt. Daarnaast is de MacBook Pro voorzien van een HDMI-aansluiting, kaartlezer en 3,5mm-headsetaansluiting. Opladen kan via usb-c en is handig voor dockingstations, maar doe je normaal gesproken via de MagSafe 3-aansluiting waarvoor een laadkabel wordt meegeleverd. De oplader zelf is voorzien van een usb-c-aansluiting. 

©Jeroen Boer - ID.nl

De aansluitingen zijn kortom modern en zelfs vooruitstrevend. Het is daarom opvallend dat wifi 7 ontbreekt, al ondersteunt ook het wel aanwezige wifi 6E natuurlijk wel de 6GHz-band. Omdat de behuizing vrijwel identiek is, zijn het toetsenbord en touchpad onveranderd. Dat is alleen maar positief: het tikcomfort is hoog en de touchpad is nog altijd de beste op de markt. 

©Jeroen Boer - ID.nl

Iets goedkoper, prijzige upgrades

De MacBook Pro is nu voorzien van minimaal 16 GB geheugen in plaats van de karige 8 GB die je vorig jaar kreeg, maar is met een vanafprijs van 1929 euro nu 100 euro goedkoper. Je krijgt dit jaar dus beduidend meer Mac voor je geld. De prijzen van upgrades zijn nog wel hoog, al hoef je de hoeveelheid RAM nu waarschijnlijk niet te verhogen. Wil je dat wel, dan betaal je bijvoorbeeld 230 euro om het werkgeheugen uit te breiden naar 24 GB terwijl het verdubbelen van de opslagcapaciteit naar 1 TB je ook 230 euro kost. Met een paar klikken kost de MacBook Pro dus aanzienlijk meer dan 1929 euro, maar daar staat tegenover dat die instapper meer dan prima is als je genoeg hebt aan 512 GB opslag.

Wij ontvingen van Apple een configuratie met M4-processor voorzien van 16 GB RAM, 1 TB ssd en de optionele nanotextuur op het scherm waarmee de prijs op 2329 komt. 

©Jeroen Boer - ID.nl

Nog beter scherm

Het 14inch-scherm van de vorige MacBook Pro met M3-processor was al erg goed, maar Apple heeft toch nog wat verbeteringen aangebracht. De resolutie en technologie zijn hetzelfde gebleven. Het gaat om een ips-paneel in combinatie met in zones verdeelde mini-led-verlichting. Dat zorgt voor heldere en contrastrijke beelden die de eigenschappen van een oled-scherm vrijwel benaderen. Die helderheid is wat verbeterd, want in heel felle omstandigheden kan ook in de normale SDR-modus een helderheid van 1000 nits gebruikt worden. Hierdoor kun je de laptop ook buiten prima gebruiken. De belangrijkste wijziging aan het scherm is helaas optioneel, want je kunt nu voor een meerprijs van 170 euro kiezen voor een scherm met nanotextuur. Ons testexemplaar is voorzien van nanotextuur en in de praktijk betekent dit dat je een mat afgewerkt scherm krijgt waarbij je veel minder last van reflecties hebt. Werk je vaak buitenshuis of in ruimtes met minder optimale verlichting, dan is dit een optie die je zeker moet overwegen. 

©Jeroen Boer - ID.nl

Camera met trucjes

MacBooks hadden altijd al een bovengemiddeld goede webcam, maar dit jaar heeft Apple een echt indrukwekkend 12megapixel-exemplaar ingebouwd. Die levert dankzij de hoge resolutie en brede kijkhoeken niet alleen heel fraaie beelden, maar heeft ook extra mogelijkheden. Zo kan de camera je nu volgen en je in het midden van het beeld houden. Dat werkt prima en het lijkt net of je een camera hebt die met je mee beweegt. Je schakelt deze functie centraal in via de menubalk van macOS, dus het werkt in alle programma's. Ook achtergrondvervaging en het vervangen van je achtergrond kun je centraal instellen. Een ander trucje is Bureauweergave waarbij de camera een gedeelte op je bureau voor je laptop apart in beeld brengt terwijl je tegelijkertijd ook het gewone beeld kunt gebruiken. Zo kun je iets laten zien aan mensen waar je een gesprek mee hebt. Het is grappig en werkt boven verwachting goed, want twee beelden op hetzelfde moment is toch best speciaal. Tegelijkertijd zijn de beelden van je bureau wel heel korrelig. Het gaat immers om een uitsnede van de normale camera. Leuke functionaliteit, maar hopelijk zit hier in toekomstige generaties nog verbetering in. 

©Jeroen Boer - ID.nl

Uitstekende prestaties

Met de M4 zet Apple een flinke stap ten opzichte van de M3-variant die we vorig jaar getest hebben. Afhankelijk van de benchmark zien we de single-core-prestaties rond de 10 procent toenemen terwijl multicore-prestaties tussen de 22 en 31 procent verbeteren. Waar de M3 in Geekbench 5 een single-core-score van  2377 en een multi-core-score van 10796 punten neerzet, levert deze MacBook pro met M4-processor in dezelfde benchmark maar liefst 2609 en 13268 punten. En bij de belangrijke benchmark Cinebench R23 is er een nog groter verschil. Want waar de variant met een M3-processor respectievelijk 1943 en 10470 punten scoort, gaat de M4 daar met 2202 en 13733 punten duidelijk overheen. Daarmee kom je op het niveau van een M1 Max of M2 Pro. De M4 is dus echt een prima chip. Het verval is bovendien bijzonder laag, de koeling is duidelijk toereikend om de prestaties op orde te houden. Wel slaat de koeling hoorbaar aan als een zware taak langer dan twee minuten duurt. Daar heb je bij normaal gebruik geen last van, maar als je bijvoorbeeld meerdere foto's gaat exporteren of video gaat renderen maakt de MacBook Pro best wel wat geluid.

De ssd presteert met een lees- en schrijfsnelheid van 2893,5 en 3331,3 MB/s prima, maar het zou kunnen dat de 512GB-variant wat langzamer is.

De accutijd van een MacBook Pro was al goed, maar is dit jaar echt uitstekend. In dezelfde browsertest die we vorig jaar hebben uitgevoerd halen we nu een accuduur van 19 uur en 6 minuten waar dat bij de M3-variant nog 17 uur en 31 minuten was. 

©Jeroen Boer - ID.nl

Conclusie

Apple heeft zijn al erg goede 14 inch MacBook Pro toch weer weten te verbeteren. De M4-processor is indrukwekkend snel, je krijgt nu altijd 16 GB RAM en de prijs is ook nog eens lager. De bouwkwaliteit is uitstekend en prettig is dat je maar liefst drie Thunderbolt-aansluitingen krijgt. Ook de lange accuduur zal goed van pas komen als je onderweg bent, net als de extra hoge schermhelderheid. Waar de variant met een M3 vorig jaar nog een beetje tussen consument en professional inhing omdat je niet alle (aansluit)mogelijkheden kreeg, zul je bij de variant met M4 vermoedelijk niks missen. Kortom een prima laptop, al blijven de upgradeprijzen wel onveranderd hoog.