ID.nl logo
Programmeren in Python met ChatGPT - Deel 2
© aniqpixel - stock.adobe.com
Huis

Programmeren in Python met ChatGPT - Deel 2

In deel 1 van deze artikelreeks leerde je hoe je ChatGPT in je zelfgeschreven programma’s inzet. Daarvoor gebruikten we de OpenAI-API in de programmeertaal Python. Laten we nu eens kijken hoe we dit toepassen om Word-documenten met verslagen van vergaderingen samen te vatten. Want daar is ChatGPT vrij goed in.

In dit tweede deel zetten we de OpenAI-API in om ChatGPT onze teksten geautomatiseerd samen te laten vatten:

  • Eerst lezen we de Word-bestanden in Python in die samengevat moeten worden
  • Daarna breiden we de code van deel 1 uit met een systeemprompt

Lees ook: Artikelen samenvatten met ChatGPT: (g)een goed idee?

Code downloaden In deze workshop 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. De bestanden, waaronder gptcode-dl2.txt maar ook drie complete Python-bestanden, zijn beschikbaar via deze webpagina.

ChatGPT is getraind voor conversaties, maar heeft ook allerlei andere vaardigheden. Eén daarvan is het samenvatten van teksten. Stel, je hebt een heleboel verslagen van vergaderingen in de vorm van Word-bestanden, dan zou je deze een voor een kunnen openen, de tekst kopiëren en in de webinterface van ChatGPT plakken met de vraag om ze samen te vatten. Maar dat is nogal repetitief werk. Dankzij de OpenAI-API kunnen we dat automatiseren.

Word-bestanden inlezen

We gaan ervan uit dat je verslagen in Word-bestanden staan. Die kunnen we in Python inlezen met de bibliotheek python-docx. Installeer die dus eerst met pip op de Opdrachtprompt van Windows, of gebruik Terminal op macOS of Linux:

pip install python-docx

We gebruiken net als in deel 1 het programma Visual Studio Code om de code in te schrijven. Open Visual Studio Code, klik op File / New File… en kies Python File. Plaats hierin de volgende Python-code die alle docx-bestanden in een gegeven directory inleest en de tekst daarvan toont:

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

Allereerst definiëren we een functie read_docx die van een Word-bestand in een bepaalde map alle paragrafen met tekst aan elkaar plakt en teruggeeft. Die functie roepen we aan in de functie process_docx_files, die van een gedefinieerd directorypad alle bestanden met de extensie docx opvraagt en daaruit de tekst haalt.

Tot slot kijkt de code op het einde of je een directorypad als argument doorgeeft. Zo ja, dan wordt dit aan de functie process_docx_files doorgegeven en wordt het resultaat getoond met zowel de bestandsnaam als de uit het document gehaalde tekst.

Veel teksten schrijven?

Een doorlopend Office-abonnement is gemakkelijk aangeschaft

Programma uitproberen

Sla dit Python-script onder de naam read_docx_files.py op in Visual Studio Code met Ctrl+S (of bekijk het voorbeelddocument dat je kunt downloaden zoals aangegeven in het kader ‘Code downloaden’) en open een opdrachtvenster met het menu Terminal / New Terminal. Voer het programma hierin als volgt uit:

python read_docx_files.py directorymetdocumenten

Vervang directorymetdocumenten door het pad waar je verslagen in de vorm van Word-documenten staan. Na de bevestiging met Enter krijg je in de terminal de inhoud van alle documenten als platte tekst te zien. Dat is uiteraard nog altijd de volledige tekst, dus nu gaan we ons programma uitbreiden om die uitgelezen teksten samen te vatten met de OpenAI-API.

Systeemboodschap

We kunnen de code van de eerste workshop in deze reeks hergebruiken om met de OpenAI-API een ‘completion’ te creëren. We geven dan een tekst die we uit een Word-document lezen door als prompt, met ervoor de vraag om die tekst samen te vatten. Maar we gaan hier nog iets extra’s toepassen: een systeemprompt. Dit is een extra prompt die je aan de API doorgeeft met instructies die het gedrag van het taalmodel bepalen.

Voeg eerst bovenaan de code van je programma read_docx_files.py de volgende regels toe om de OpenAI API te kunnen gebruiken:

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

De API-sleutel is degene die je in deel 1 hebt aangemaakt op de website van OpenAI, of maak een nieuwe aan. Wij hebben de gewoonte om voor elk script een nieuwe sleutel aan te maken, zodat we die eenvoudig kunnen intrekken als we de sleutel per ongeluk lekken, zonder dat onze andere scripts stoppen met werken. We geven hier ook een systeemprompt op waarmee we het taalmodel de instructie geven om de gebruikersprompts samen te vatten.

De documentatie van OpenAI bespreekt de verschillen tussen een systeemprompt en gebruikersprompt.

Teksten samenvatten

Voeg nu een licht aangepaste versie van de functie get_completion uit deel 1 toe, waaraan we ook de systeemprompt toevoegen:

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

Je ziet dat de parameter system_prompt hier aan de lijst met boodschappen voor de API wordt toegevoegd met als rol system.

Het enige wat je nu nog in je code moet aanpassen om je teksten te laten samenvatten, is de laatste regel met print(text) vervangen door:

        print(get_completion(text, SYSTEM_PROMPT))

Voer je dit programma nu uit met als argument een directorypad, dan leest het alle Word-documenten in die directory in en toont een samenvatting.

Meer structuur

Waarschijnlijk werkt dit al vrij goed. Maar zoals we in deel 1 al hebben gezien, werkt het taalmodel nog beter als je het specifiekere instructies geeft. De systeemprompt kan dan ook veel concreter om de aard van de samenvatting te sturen. Zo zouden we een maximum aantal woorden kunnen opgeven.

Maar in veel gevallen krijg je het beste resultaat als je een specifieke structuur van het antwoord vraagt. Voor verslagen van vergaderingen, zoals we hier in dit voorbeeld gebruiken, is dat ideaal. Want vergaderingen hebben sowieso al een agenda en er worden specifieke punten besproken. Daarvan kunnen we gebruikmaken. Verander bijvoorbeeld de systeemprompt tot het volgende:

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

Als je nu weer je programma uitvoert, toont het van elk Word-document een samenvatting in de gevraagde vorm.

In onze voorbeeldcode die je kunt downloaden, is het eindresultaat van deze paragraaf ook terug te vinden in het bestand summarize_docx_files.py.

Ons Python-script maakt samenvattingen in de gewenste vorm van onze vergaderverslagen.

Systeem- of gebruikersprompt?

Op het forum van OpenAI vinden we gemengde ervaringen van gebruikers over de systeemprompt: die zou niet in alle gevallen het gewenste gedrag opleveren. Mocht dat bij jou ook het geval zijn, gebruik dan alleen de gebruikersprompt en behoud de functie get_completion uit de vorige workshop van deze reeks.

Verwijder dan de constante SYSTEM_PROMPT uit het begin van de code en vervang de laatste regel print(get_completion(text, SYSTEM_PROMPT)) door de volgende regels om de samen te vatten tekst aan het einde van de instructies te plakken:

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

Zoals vaak bij het werken met taalmodellen kruipt veel tijd in het experimenteren om de juiste prompt te vinden. Maar zodra je die hebt, kan het je heel wat tijd uitsparen!

In onze voorbeeldcode die je kunt downloaden, is het eindresultaat van deze paragraaf ook terug te vinden in het bestand summarize_docx_files_without_system_prompt.py.

De systeemprompt werkt niet in alle gevallen, melden gebruikers op het forum van OpenAI.

Volgende week maandag het derde deel van deze reeks! Hierin laten we ChatGPT de onderwerpen extraheren uit de teksten die we in dit deel geïmporteerd hebben.

Lees ook:

▼ Volgende artikel
AMD maakt adviesprijs van Ryzen 7 9850X3D bekend
Huis

AMD maakt adviesprijs van Ryzen 7 9850X3D bekend

AMD heeft de Europese adviesprijs van de snelste game-cpu tot nu toe - Ryzen 7 9850X3D - aangekondigd.

De Ryzen 7 9850X3D krijgt in Europa een adviesprijs van 514,75 euro, zo schrijft Tweakers. Dat is opvallend, omdat de Europese adviesprijs van voorganger 9800X3D op release 539 euro was - iets duurder dus. Inmiddels is die laatstgenoemde kaart wel voor 449 euro te koop.

De lagere adviesprijs voor de nieuwe 9850X3D komt omdat de dollar zwakker is geworden. AMD rekent de Europese adviesprijs voor hun cpu's altijd uit door de Amerikaanse prijs letterlijk door te rekenen en er btw bij op te tellen. In de VS gaat de 9850X3D 500 dollar kosten.

Snelste processor voor games tot nu toe

AMD deed de Ryzen 7 9850X3D begin dit jaar uit de doeken, en claimde toen dat het de snelste processor tot nu toe voor games ter wereld wordt. Dat was altijd de 9800X3D van AMD. De 9850X3D lijkt op die cpu, met zestien threads en acht cores.

Nieuw aan de 9850X3D is echter een hogere boostsnelheid van 5.6GHz op één core. Dat is een verhoging van 400MHz ten opzichte van de 9800X3D. Het maakt de cpu naar schatting 7,7% sneller dan diens voorganger.

Officieel komt de AMD Ryzen 7 9850X3D volgende week uit, al hebben sommige winkeliers in Europa de kaart al in de verkoop gegooid.

Nieuw op ID: het complete plaatje

Misschien valt het je op dat er vanaf nu ook berichten over games, films en series op onze site verschijnen. Dat is een bewuste stap. Wij geloven dat technologie niet stopt bij hardware; het gaat uiteindelijk om wat je ermee beleeft. Daarom combineren we onze expertise in tech nu met het laatste nieuws over entertainment. Dat doen we met de gezichten die mensen kennen van Power Unlimited, dé experts op het gebied van gaming en streaming. Zo helpen we je niet alleen aan de beste tv, smartphone of laptop, maar vertellen we je ook direct wat je erop moet kijken of spelen. Je vindt hier dus voortaan de ideale mix van hardware én content.

▼ Volgende artikel
Oscarnominaties 2026 bekend: Sinners breekt records
Huis

Oscarnominaties 2026 bekend: Sinners breekt records

De Oscarnominaties voor dit jaar zijn gisteren bekendgemaakt. Sinners heeft de meeste nominaties te pakken, namelijk zestien stuks.

Het gaat om de 98e editie van de Academy Awards, waarbij in de nacht van 15 op 16 maart weer de prestigieuze Oscars worden uitgedeeld aan films en hun makers.

Zoals gezegd heeft de horrorfilm Sinners van regisseur Ryan Coogler (met een dubbelrol van Michael B. Jordan) de meeste nominaties dit jaar gekregen: namelijk zestien nominaties. Dat is een record: de vorige recordhouder waren de films Titanic, La La Land en All About Eve met veertien nominaties. De film is overigens te zien via HBO Max en Pathé Thuis.

Ook One Battle After Another, de meest recente film van Paul Thomas Anderson, maakt kans op veel Oscarbeeldjes, namelijk dertien. Daarnaast zet Timothée Chalamet voor zijn rol in Marty Supreme zijn derde Oscarnominatie op zijn naam: ook een record voor iemand van zijn leeftijd.

Hieronder zijn alle genomineerden in de verschillende categorieën te zien.

Beste film:

  • Bugonia

  • F1

  • Frankenstein

  • Hamnet

  • Marty Supreme

  • One Battle After Another

  • The Secret Agent

  • Sentimental Value

  • Sinners

  • Train Dreams

Beste regisseur:

  • Chloé Zhao - Hamnet

  • Josh Safdie - Marty Supreme

  • Paul Thomas Anderson - One Battle After Another

  • Joachim Trier - Sentimental Value

  • Ryan Coogler - Sinners

Beste actrice in een hoofdrol:

  • Jessie Buckley - Hamnet

  • Rose Byrne - If I Had Legs I'd Kick You

  • Kate Hudson - Song Sung Blue

  • Renate Reinsve - Sentimental Value

  • Emma Stone - Bugonia

Beste acteur in een hoofdrol:

  • Beste Acteur in een Hoofdrol

  • Timothée Chalamet - Marty Supreme

  • Leonardo DiCaprio - One Battle After Another

  • Ethan Hawke - Blue Moon

  • Michael B. Jordan - Sinners

  • Wagner Moura - The Secret Agent

Beste actrice in een bijrol:

  • Elle Fanning - Sentimental Value

  • Inga Ibsdotter Lilleaas - Sentimental Value

  • Amy Madigan - Weapons

  • Wunmi Mosaku - Sinners

  • Teyana Taylor - One Battle After Another

Beste acteur in een bijrol:

  • Benicio Del Toro - One Battle After Another

  • Jacob Elordi - Frankenstein

  • Delroy Lindo - Sinners

  • Sean Penn - One Battle After Another

  • Stellan Skarsgård - Sentimental Value

Beste scenario (gebaseerd op bestaand verhaal):

  • Bugonia

  • Frankenstein

  • Hamnet

  • One Battle After Another

  • Train Dreams

Beste scenario (origineel verhaal):

  • Blue Moon

  • It Was Just an Accident

  • Marty Supreme

  • Sentimental Value

  • Sinners

Beste internationale film:

  • The Secret Agent (Brazilië)

  • It Was Just an Accident (Frankrijk)

  • Sentimental Value (Noorwegen)

  • Sirat (Spanje)

  • The Voice of Hind Rajab (Tunesië)

Beste animatiefilm:

  • Arco

  • Elio

  • KPop Demon Hunters

  • Little Amélie or the Character of Rain

  • Zootopia 2

Beste cinematografie:

  • Frankenstein

  • Marty Supreme

  • One Battle After Another

  • Sinners

  • Train Dreams

Beste originele score:

  • Bugonia

  • Frankenstein

  • Hamnet

  • One Battle After Another

  • Sinners

Beste nummer:

  • Dear Me - Diane Warren: Relentless

  • Golden - KPop Demon Hunters

  • I Lied To You - Sinners

  • Sweet Dreams of Joy - Viva Verdi!

  • Train Dreams - Train Dreams

Beste make-up en styling:

  • Frankenstein

  • Kokuho

  • Sinners

  • The Smashing Machine

  • The Ugly Stepsister

Beste kostuums:

  • Avatar: Fire and Ash

  • Frankenstein

  • Hamnet

  • Marty Supreme

  • Sinners

Beste casting:

  • Hamnet

  • Marty Supreme

  • One Battle After Another

  • The Secret Agent

  • Sinners

Beste montage:

  • F1

  • Marty Supreme

  • One Battle After Another

  • Sentimental Value

  • Sinners

Beste productiedesign:

  • Frankenstein

  • Hamnet

  • Marty Supreme

  • One Battle After Another

  • Sinners

Beste geluid:

  • F1

  • Frankenstein

  • One Battle After Another

  • Sinners

  • Sirat

Beste visuele effecten:

  • Avatar: Fire and Ash

  • F1

  • Jurassic World Rebirth

  • The Lost Bus

  • Sinners

Beste korte animatiefilm:

  • Butterfly

  • Forevergreen

  • The Girl Who Cried Pearls

  • Retirement Plan

  • The Three Sisters

Beste korte live-action film:

  • Butcher's Stain

  • A Friend of Dorothy

  • Jane Austen's Period Drama

  • The Singers

  • Two People Exchanging Saliva

Beste lange documentaire:

  • The Alabama Solution

  • Come See Me in the Good Light

  • Cutting Through Rocks

  • Mr. Nobody Against Putin

  • The Perfect Neighbor

Beste korte documentaire:

  • All the Empty Rooms

  • Armed Only With a Camera: The Life and Death of Brent Renaud

  • Children No More: Were and Are Gone

  • The Devil Is Busy

  • Perfectly a Strangeness

Nieuw op ID: het complete plaatje

Misschien valt het je op dat er vanaf nu ook berichten over games, films en series op onze site verschijnen. Dat is een bewuste stap. Wij geloven dat technologie niet stopt bij hardware; het gaat uiteindelijk om wat je ermee beleeft. Daarom combineren we onze expertise in tech nu met het laatste nieuws over entertainment. Dat doen we met de gezichten die mensen kennen van Power Unlimited, dé experts op het gebied van gaming en streaming. Zo helpen we je niet alleen aan de beste tv, smartphone of laptop, maar vertellen we je ook direct wat je erop moet kijken of spelen. Je vindt hier dus voortaan de ideale mix van hardware én content.