ID.nl logo
Programmeren in Python met ChatGPT - Deel 1
© Generative ART - stock.adobe.com
Huis

Programmeren in Python met ChatGPT - Deel 1

ChatGPT is een handige tool van OpenAI waaraan je allerlei vragen kunt stellen. Maar het is ook mogelijk om de slimme chatbot in je eigen programma’s in te zetten. In deze nieuwe reeks leren we je hoe je ChatGPT in Python gebruikt en zo teksten samenvat, informatie uit teksten haalt, teksten vertaalt of een eigen chatbot creëert.

In dit eerste deel zetten we alles op om ChatGPT in Python te kunnen gebruiken en zetten we de eerste stappen:

  • Eerst installeren we Python en Visual Studio Code
  • Dan regelen we de API-toegang
  • En dan gaan we aan de slag met onze eerste prompts

Lees ook: Haal betere resultaten uit ChatGPT met slimme prompts

ChatGPT is een chatbot met uitgebreide mogelijkheden. Je geeft instructies in een tekstvenster en krijgt een antwoord terug. Je kunt zelfs een hele conversatie voeren en extra vragen stellen. De tool is ontwikkeld door OpenAI en getraind op een grote dataset van teksten.

De dienst is gratis uit te proberen, maar je moet er wel voor aanmelden. Bezoek hiervoor de OpenAI-website en klik op Sign up. Voer een e-mailadres en een wachtwoord in, of meld je aan met een bestaand account bij Google, Microsoft of Apple. OpenAI stuurt een e-mail naar je opgegeven adres; klik op de link om je e-mailadres te bevestigen. Daarna vul je je naam en een mobiel telefoonnummer in. OpenAI stuurt een zescijferige code via sms naar je telefoon, die je op de website invoert om je account aan te maken.

Je bent nu aangemeld op de website, die vanaf nu ook te openen is via de pagina https://chat.openai.com. Je krijgt enkele voorbeelden te zien van vragen die je kunt stellen en een overzicht van de mogelijkheden en beperkingen. In het tekstveld onderaan begin je een conversatie met ChatGPT. Maar daarover gaat deze workshop niet, want we gaan die conversaties in onze eigen software integreren. Dat kan met hetzelfde account die je voor de website hebt aangemaakt.

Op de website van ChatGPT voer je eenvoudig conversaties met de chatbot.

Python installeren

In deze reeks van vijf workshops gaan we de mogelijkheden van ChatGPT gebruiken in onze eigen programma’s, die we schrijven in de programmeertaal Python. In macOS en Linux is Python al standaard geïnstalleerd. In Windows ga je naar de downloadpagina van Python en installeer je de nieuwste Python-versie.

Start het gedownloade installatieprogramma. In het installatievenster vink je Add python.exe to PATH aan. De optie Use admin privileges when installing py.exe staat standaard ook aangevinkt. Als dat niet hoeft, omdat je alleen met je huidige gebruikersaccount Python wilt gebruiken, zet dit dan gerust uit. Klik daarna bovenaan op Install Now. Klik in de laatste stap op Close. Na de installatie open je de Opdrachtprompt en typ je het volgende in om te testen of Windows de Python-opdracht herkent:

python --version

Je zou nu het versienummer van de geïnstalleerde Python te zien moeten krijgen.

Installeer Python en voeg python.exe aan je pad toe.

Visual Studio Code

Om je programma’s te schrijven heb je een code-editor nodig. In deze workshop gebruiken we Visual Studio Code, een gratis en uitbreidbare code-editor van Microsoft die zowel op Windows, macOS als Linux draait. Klik links op de website op de blauwe knop Download for Windows - Stable Build. Wanneer de download is voltooid, voer je het installatieprogramma uit. Je kunt in de eerste stap een taal kiezen, maar helaas geen Nederlands. Accepteer de licentieovereenkomst en vink eventueel optionele acties aan.

Nadat je Visual Studio Code geopend hebt, klik je in de linkerzijbalk op het icoontje met de blokjes of je drukt op Ctrl+Shift+X om de Extensions Marketplace te openen. Installeer daar de uitbreiding Python van Microsoft. Deze zal je helpen met het schrijven van Python-code en maakt gebruik van de Python-installatie uit de vorige stap om je code uit te voeren.

Installeer de Python-uitbreiding in Visual Studio Code.

API-toegang

Om nu vanuit onze eigen Python-code toegang tot ChatGPT te krijgen, moeten we eerst een API-sleutel aanvragen. API staat voor Application Programming Interface en is een set afspraken waarmee ons programma de diensten van OpenAI kan gebruiken. Elke keer dat we ChatGPT willen gebruiken in ons programma, moeten we die sleutel meegeven.

Meld je met je OpenAI-account aan op https://platform.openai.com en klik rechts bovenaan op je profiel. In het menu dat verschijnt, klik je op View API keys. Klik dan op Create new secret key, vul een naam in voor je sleutel en klik op Create secret key. Je krijgt dan je sleutel te zien, een lange reeks tekens.

Kopieer de sleutel en gebruik hem in de volgende paragraaf van deze workshop. Let op: nadat je op Done hebt geklikt, krijg je de sleutel nooit meer te zien; ben je de sleutel kwijt, dan moet je een nieuwe aanmaken.

Nieuwe accounts krijgen een klein bedrag gratis voor gebruik van de OpenAI-API. Nadien moet je in Billing betaalgegevens invullen.

Maak een API-sleutel aan bij OpenAI.

Python-code

Klik nu in Visual Studio Code op File / New File… / Python File. Plaats hierin de volgende Python-code:

Klik op de afbeelding voor een grotere weergave.

Met import openai importeren we de Python-module die OpenAI aanbiedt om de API te gebruiken. Tussen de aanhalingstekens na API_KEY plak je je eigen API-sleutel. DEFAULT_MODEL verwijst naar het taalmodel dat we willen gebruiken. Zie het kader ‘GPT-4’ als je het nieuwere taalmodel van ChatGPT wilt gebruiken.

Daarna maken we een hulpfunctie om gemakkelijker met de OpenAI-API te werken. Aan die functie geven we een prompt door (dat is de vraag die je stelt) en een optioneel model. De functie creëert dan een completion en haalt hieruit het resultaat. Op die manier kunnen we eenvoudig een prompt aan de functie doorgeven en het resultaat met print op de opdrachtregel tonen, zoals je in de laatste drie regels van dit Python-script ziet.

GPT-4 In deze workshopreeks maken we gebruik van GPT-3.5, het taalmodel dat ChatGPT standaard aanbiedt. Er is nog een betere versie, GPT-4. Op de website van ChatGPT krijg je hier toegang tot wanneer je een ChatGPT Plus-abonnement hebt (dat kost ca. 23 euro per maand), zij het met een beperking op het aantal boodschappen per uur.

Maar dat account staat los van de toegang tot GPT-4 via de OpenAI-API. Hiervoor moet je je inschrijven op een wachtlijst. Wanneer je toegelaten bent, kun je in de OpenAI-API GPT-4 gebruiken door in je Python-code het model gpt-3.5-turbo te vervangen door gpt-4.

Let op: het gebruik van GPT-4 kost je een factor tien meer dan dat van GPT-3.5. Bekijk zeker de pagina met prijzen van OpenAI en bezoek regelmatig de pagina Usage in je OpenAI-profiel. Voor de zekerheid kun je ook een gebruikslimiet instellen.

Stel in voor hoeveel geld per maand je de API kunt gebruiken.

Eerste API-gebruik

Sla het codebestand uit de vorige paragraaf 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. Typ hierin de volgende opdracht om de OpenAI-module voor Python te installeren:

pip install openai

Klik na de installatie rechts bovenaan op het afspeelknopje (het driehoekje met als je er met je muis boven blijft hangen de tooltip Run Python File). Als alles goed gaat, krijg je nu in de terminal een antwoord op de vraag die je in de variabele prompt in je code hebt gezet.

Onze eerste Python-code die van ChatGPT gebruikmaakt.

Tokens

Een belangrijk concept bij gebruik van de OpenAI-API zijn tokens. Een token is een vaak voorkomende opeenvolging van tekens, zoals letters, cijfers of leestekens. Hier kun je zelf zien uit welke tokens een ingevoerde tekst bestaat.

Het taalmodel produceert token na token, gebaseerd op de kans dat ze na de vorige tokens komen. Een token kan een volledig woord of een deel van een woord zijn. Voor Engelse tekst komen 100 tokens ruwweg met 75 woorden overeen. Standaard genereert ChatGPT en dus ook ons Python-script een antwoord met zoveel tokens als er nodig zijn, maar je kunt dit inperken door de parameter max_tokens toe te voegen. De aanroep van openai.ChatCompletion.create ziet er dan als volgt uit:

Dat aantal tokens is belangrijk, omdat je voor het gebruik van OpenAI-API betaalt per token. Voor veelvuldig geautomatiseerd gebruik van de API kan het dus de moeite zijn om een maximum aantal tokens in te stellen. Overigens levert dit wel vaak een antwoord op dat bruusk afgebroken is.

Heel wat woorden worden gecodeerd als één token. Andere bestaan uit meerdere tokens.

Parameters

Als je het Python-script uitvoert, zul je merken dat het altijd hetzelfde antwoord geeft. Dat is omdat we de parameter temperature de waarde 0 gegeven hebben. Je kunt deze parameter een waarde van 0 tot 2 geven, waarbij 0 betekent dat het antwoord elke keer hetzelfde is en hogere waardes een willekeuriger antwoord opleveren. Als je de waarde niet instelt, staat ze op 1, wat redelijk wat variatie tot gevolg geeft. Probeer het effect van de parameter maar eens uit door de parameter temperature in je code enkele andere waarden te geven en je script meerdere keren uit te voeren.

Twee andere parameters (die we hier niet hebben gebruikt) zijn presence_penalty en frequency_penalty. Beide hebben een standaardwaarde 0 en kunnen variëren van -2 tot 2. Met een positieve presence_penalty verlaag je de kans dat al gebruikte tokens nog eens in de tekst voorkomen. Dat verhoogt de kans dat het model over nieuwe onderwerpen begint. Met een positieve frequency_penalty wordt de kans dat een token gebruikt wordt verlaagd naarmate hij al vaker is gebruikt. Dat verlaagt dus concreet de kans dat het model een zin letterlijk herhaalt.

In de praktijk pas je deze twee parameters niet zo vaak aan. Ze zijn wel nuttig als je merkt dat het model voor specifieke vragen wat repetitieve antwoorden geeft. Probeer dan beide parameters eens op een waarde tussen 0,1 en 1 te zetten om die herhaling wat te verminderen.

Met temperatuur 1 geeft ons Python-script altijd een iets verschillend antwoord op dezelfde vraag.

Maak je prompts specifieker

Net zoals bij het gebruik van ChatGPT op de website zijn de resultaten bij het gebruik van de API bruikbaarder wanneer je je prompts zo specifiek mogelijk maakt. Een eerste tip is dat je gewoon aangeeft hoe lang de tekst moet zijn. Bijvoorbeeld met de volgende prompt:

prompt = "Beschrijf het magazine Computer Idee in maximum 50 woorden"

Dat geeft doorgaans een beter resultaat dan de parameter max_tokens, omdat de tekst dan tenminste niet bruusk wordt afgekapt. Maar omdat het taalmodel geen woorden kan tellen en intern met tokens werkt, kan de opgegeven limiet weleens overschreden worden. Je moet dit dus altijd nog zelf testen als de opgegeven limiet belangrijk is. Toon bijvoorbeeld het aantal woorden in de uitvoer met de volgende regel op het einde van het Python-bestand:

print("Aantal woorden:", len(response.split(" ")))

Vraag om een specifiek format

Een andere manier om je prompts specifieker te maken, is dat je het taalmodel vraagt om zijn antwoord in een specifiek format te geven. Bijvoorbeeld met:

Klik op de afbeelding voor een grotere weergave.

Met de drie aanhalingstekens maken we een multi-line-string in Python aan, waardoor we eenvoudig een prompt over meerdere regels kunnen spreiden voor wat meer overzicht. En het antwoord van ons script is nu ook kernachtiger en duidelijker.

Vraag het taalmodel om zijn antwoord in een specifiek format te formuleren.

Vermijd hallucinaties

Taalmodellen hebben de neiging om antwoorden te verzinnen als ze kennis missen over je vraag. Stel je bijvoorbeeld de vraag om het magazine Computer Power te beschrijven (dat niet bestaat!), dan verzint ons script een Belgisch tijdschrift met die naam. Deze neiging noemen we ‘hallucinaties’ en je moet hier altijd beducht op zijn, ook bij het gebruik van ChatGPT op de website.

Je kunt die neiging wel wat afzwakken door in je prompt expliciet te zeggen wat het taalmodel moet doen als het niet voldoende informatie heeft:

prompt = "Beschrijf het magazine Computer Power in maximum 50 woorden. Als je niets over het magazine weet, zeg dit dan."

Daarop antwoordt ons script dat het dit magazine niet kent, maar dat het waarschijnlijk over computers en technologie gaat.

Meer informatie

Wil je meer weten over het gebruik van de OpenAI-API, lees dan de ‘API reference’ op de website van OpenAI, en dan specifiek die van ChatCompletion. Hier vind je meer informatie over de verschillende parameters.

En wil je meer leren over hoe je het meeste uit de taalmodellen haalt met de juiste prompts, bekijk dan zeker het webinar ChatGPT Prompt Engineering for Developers van DeepLearning.AI, dat we hebben geraadpleegd bij het schrijven van deze workshopreeks.

De OpenAI-API is uitgebreid gedocumenteerd, inclusief voorbeelden van het gebruik in Python en Node.js.

Andere programmeertalen In deze workshopreeks gaan we aan de slag met de OpenAI-API in Python, maar OpenAI biedt naast zijn Python-module ook een officiële bibliotheek voor Node.js (JavaScript) aan op de pakketbeheerder npm. Die is vergelijkbaar met de Python-module die we in dit artikel introduceren. Dus als je liever in JavaScript programmeert, zou je deze workshopreeks met wat kleine aanpassingen ook moeten kunnen volgen.

Daarnaast zijn er ook allerlei bibliotheken voor andere talen ontwikkeld door derden. Dus als je graag in C# programmeert, in Java of in Swift, kun je zeker ook gebruikmaken van de OpenAI-API. In de documentatie van OpenAI staat een lijst van bibliotheken die de API gebruiken.

Volgende week maandag het tweede deel van deze reeks! We gaan hierin de kennis uit dit eerste deel toepassen om teksten te laten samenvatten door een taalmodel.

Vervolg: Deel 2: Programmeren in Python met ChatGPT

▼ Volgende artikel
Wat is local dimming en waarom is het belangrijk?
© ER | ID.nl
Huis

Wat is local dimming en waarom is het belangrijk?

Het gebrek aan een rijk contrast is een van de grootste ergernissen bij lcd- en ledtelevisies. Fabrikanten hebben daarom een slimme techniek bedacht die het contrast aanzienlijk verbetert: local dimming. In dit artikel leggen we uit hoe deze techniek van jouw grijze nachtlucht weer een inktzwarte sterrenhemel maakt.

Het contrast van je televisie is misschien wel de belangrijkste eigenschap voor mooi beeld. We willen dat wit verblindend wit is en zwart echt inktzwart. Bij oledtelevisies is dat makkelijk, want daar geeft elke pixel zelf licht. Maar de meeste televisies in de Nederlandse huiskamers zijn nog steeds lcd- of ledschermen (inclusief QLED). Die werken met een lamp achter het scherm, de zogeheten backlight. Local dimming is de techniek die probeert de nadelen van die achtergrondverlichting op te lossen.

Om te begrijpen waarom local dimming nodig is, moet je eerst weten hoe een standaard led-tv werkt. Simpel gezegd is het een groot paneel met pixels die zelf geen licht geven, maar alleen van kleur veranderen. Achter die pixels brandt een grote lichtbak. Als het beeld zwart moet zijn, sluiten de pixels zich om het licht tegen te houden. Helaas lukt dat nooit voor de volle honderd procent; er lekt altijd wat licht langs de randjes. Hierdoor zien donkere scènes er vaak wat flets en grijzig uit. De achtergrondverlichting staat immers vol aan, ook als het beeld donker moet zijn.

Nooit meer te veel betalen? Check Kieskeurig.nl/prijsdalers!

De lampen dimmen waar het donker is

Local dimming pakt dit probleem bij de bron aan. In plaats van één grote lichtbak die altijd aan staat, verdeelt deze techniek de achtergrondverlichting in honderden (en bij duurdere tv's soms duizenden) kleine zones. De televisie analyseert de beelden die je kijkt continu. Ziet de processor dat er linksboven in beeld een donkere schaduw is, terwijl rechtsonder een felle explosie te zien is? Dan worden de lampjes in de zone linksboven gedimd of zelfs helemaal uitgeschakeld, terwijl de lampjes rechtsonder juist fel gaan branden.

Het resultaat is direct zichtbaar. Zwart wordt weer echt zwart, simpelweg omdat er geen licht meer achter dat deel van het scherm brandt. Tegelijkertijd blijven de lichte delen van het scherm helder. Dat zorgt voor een veel groter contrast en geeft het beeld meer diepte. Vooral bij het kijken van HDR-films en -series is dat van belang. Zonder local dimming kan een led-tv eigenlijk geen goed HDR-beeld weergeven, omdat het verschil tussen licht en donker dan te klein blijft.

©ER | ID.nl

Niet alle local dimming is hetzelfde

Het klinkt als een wonderoplossing, maar de uitvoering verschilt enorm per televisie. Het grote toverwoord hierbij is het aantal zones. Hoe meer zones de tv onafhankelijk van elkaar kan aansturen, hoe preciezer het licht kan worden geregeld. Goedkopere televisies gebruiken vaak edge lit local dimming. Hierbij zitten de lampjes alleen in de rand van de tv. Dat werkt redelijk, maar is niet heel nauwkeurig. Je ziet dan soms dat een hele verticale strook van het beeld lichter wordt, terwijl er eigenlijk maar één klein object moest worden verlicht.

De betere variant heet full array local dimming. Hierbij zitten de lampjes over de hele achterkant van het scherm verspreid. De allernieuwste en beste vorm hiervan is miniLED. Daarbij zijn de lampjes zo klein geworden dat er duizenden in een scherm passen, wat de precisie van oled begint te benaderen. Als er te weinig zones zijn, kun je last krijgen van zogenaamde 'blooming'. Dat zie je bijvoorbeeld bij witte ondertiteling op een zwarte achtergrond: er ontstaat dan een soort wazige lichtwolk rondom de letters, omdat de zone groter is dan de tekst zelf.

Welke merken gebruiken local dimming?

Bijna elke grote televisiefabrikant past deze techniek inmiddels toe, maar ze doen dat voornamelijk in hun middenklasse en topmodellen. Samsung is een van de voorlopers, zeker met hun QLED- en Neo QLED-televisies, waarbij ze in de duurdere series gebruikmaken van geavanceerde miniLED-techniek voor zeer precieze dimming. Ook Sony staat bekend om een uitstekende implementatie van full array local dimming, die vaak geprezen wordt om de natuurlijke weergave zonder overdreven effecten. Philips past het eveneens toe in hun (mini)ledmodellen, vaak in combinatie met hun bekende Ambilight-systeem voor een extra contrastrijk effect.

Ga voor de full monty!

Local dimming is dus geen loze marketingkreet, maar een dankbare techniek voor iedereen die graag films of series kijkt op een led- of QLED-televisie. Het maakt het verschil tussen een flets, grijs plaatje en een beeld dat van het scherm spat met diepe zwartwaarden. Ben je in de markt voor een nieuwe tv? Vraag dan niet alleen óf er local dimming op zit, maar vooral of het gaat om full array dimming. Je ogen zullen je dankbaar zijn tijdens de volgende filmavond!

Vijf fijne televisies die full array local dimming ondersteunen

▼ Volgende artikel
Waar voor je geld: 5 robotstofzuigers voor een extra schone vloer
© ID.nl
Huis

Waar voor je geld: 5 robotstofzuigers voor een extra schone vloer

Bij ID.nl zijn we gek op producten waar je niet de hoofdprijs voor betaalt of die zijn voorzien van bijzondere eigenschappen. Met een robotstofzuiger wordt de vloer schoongehouden, terwijl je er niet bij hoeft te zijn. En stofzuigen is dan wel het minste dat ze kunnen, want ook dweilen is voor veel modellen geen proleem. We vonden vijf geavanceerde exemplaren.

Philips HomeRun 7000 Series XU7100/01

De Philips HomeRun 7000 Series XU7100/01 is ontworpen om grote ruimtes aan te kunnen. Het apparaat heeft een stofzak van 3 liter en een werktijd tot 180 minuten in de laagste stand. In tegenstelling tot veel kleinere robots is deze HomeRun uitgerust met een stille motor; de opgave van 66 dB maakt hem relatief stil.

Er zit een dweilfunctie in zodat je de robot na het stofzuigen ook direct kunt laten dweilen. Via de app kies je voor een van de modi of plan je een schoonmaakprogramma in. De robot kan zichzelf navigeren, obstakels omzeilen en keert na gebruik terug naar het laadstation. Omdat de opvangbak groot is hoef je niet vaak te legen en dankzij de Li‑ion‑accu is hij geschikt voor grotere woningen. Het apparaat is van recente datum en daarom nog volop verkrijgbaar.

Dreame L10s Pro Ultra Heat

Deze robot combineert een groot stofreservoir van 3,2 liter met een lange werktijd van ongeveer 220 minuten. Dankzij de geïntegreerde dweilfunctie verwijdert hij niet alleen stof maar kan hij ook nat reinigen. De L10s Pro Ultra Heat gebruikt een zak in het basisstation, waardoor je het reservoir minder vaak hoeft te legen.

De Dreame is voorzien van een Li‑ion‑batterij aanwezig en de robot keert automatisch terug naar het station voor opladen en legen. De sensortechnologie helpt bij het vermijden van obstakels en het nauwkeurig schoonmaken van zowel harde vloeren als tapijt. Dankzij de meegeleverde app stuur je de schoonmaak aan, stel je no‑go‑zones in of plan je een dweilrondje.

Philips HomeRun 3000 Series Aqua XU3100/01

Deze Philips‑robot is bedoeld voor wie minder vaak handmatig wil schoonmaken. Hij beschikt over een gecombineerde stofzuig‑ en dweilfunctie en kan zichzelf legen via het automatische station. Met een gebruiksduur tot 200 minuten in de laagste stand en een geluidsniveau van 66 dB kan hij urenlang zijn werk doen zonder al te veel herrie. De stofcontainer van 35 cl is kleiner dan bij de HomeRun 7000, maar door het automatische leegmechanisme is dat geen probleem.

Je bedient het apparaat via de app en kunt daar zowel een schema programmeren als zones instellen. De Aqua XU3100/01 is een model uit de recente 3000‑serie en doordat hij een mop‑pad heeft kan hij zowel droog als nat reinigen, wat handig is voor harde vloeren zoals tegels en laminaat.

iRobot Roomba Combo j9+

De Roomba Combo j9+ is een model dat je vloeren zowel kan stofzuigen als dweilen. De Combo j9 beschikt over een opvangbak van 31 cl en hij kan zelf zijn inhoud legen in het automatische basisstation dat bij de set hoort. De Li‑ion‑accu zorgt voor een lange gebruiksduur en de robot maakt een routeplanning zodat elke ruimte efficiënt wordt schoongemaakt.

Via de app kun je zones instellen waar de robot niet mag komen en het dweilelement in‑ of uitschakelen. In de basis maakt de Combo j9+ zelfstandig een kaart van je woning en keert terug naar het station wanneer de accu moet opladen of de stofcontainer vol is. De robot is bedoeld voor huishoudens die gemak belangrijk vinden en biedt naast stofzuigen ook een dweilfunctie voor hardere vloeren.

MOVA Tech P50 Ultra

De MOVA Tech P50 Ultra is een forse robotstofzuiger met een basisstation. Het apparaat heeft een stofreservoir van 30 cl en wordt geleverd met een basisstation waarin je het stof eenvoudig kunt verwijderen. De robot produceert een geluidsniveau van 74 dB, iets hoger dan de Philips‑modellen, en weegt inclusief station ruim 13 kg.

Hij kan uiteraard ook automatisch terugkeren naar het station om op te laden of te legen. In de specificaties staat dat de MOVA is voorzien van een Li‑ion‑batterij en dat hij zowel kan stofzuigen als dweilen. De meegeleverde app maakt het mogelijk om routes in te stellen en zones te blokkeren. Met een vermogen van 700 W is hij krachtig genoeg voor tapijten en harde vloeren. Het is geschikt voor mensen die een uitgebreid station met automatische functies willen.