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
Waar voor je geld: 5 betaalbare all-in-one-printers met scanfunctie
© MG | ID.nl
Huis

Waar voor je geld: 5 betaalbare all-in-one-printers met scanfunctie

Heb je een kantoorbaan en werk je ook veel thuis? Dan loop je vast wel eens tegen het probleem aan dat je een document wil afdrukken of iets belangrijks moet inscannen of kopiëren, maar dat je dan weer moet wachten tot je op kantoor bent. Waarom niet gewoon thuis alles doen? Met een betaalbare all-in-one-printer met scanfunctie doe je alles vanuit je eigen werkkamer. Handig voor iedereen in huis.

Canon PIXMA TS3750i

Met de Canon PIXMA TS3750i haal je een inkjet all-in-one-printer in huis die printen, kopiëren en scannen combineert in één apparaat. Het is een kleureninkjet met een maximale printresolutie van 4800 x 1200 dpi en A4 als grootste papierformaat. Je legt papier in één papierlade met een capaciteit van 90 vellen, waarbij de invoer handmatig gebeurt. De printer ondersteunt standaard A4-papier en print zwart tot ongeveer 7 ipm en kleur tot 4 ipm. De scanner is een flatbed-type zonder automatische documentinvoer; je legt dus losse pagina’s op de glasplaat en scant enkelzijdig.

De verbinding met je netwerk verloopt via wifi, waardoor je via een laptop maar ook een tablet of telefoon kunt printen. De printer werkt uiteraard goed met Windows- en macOS-systemen en hij is compatibel met mobiele besturingssystemen als iOS en Android.

De TS3750i gebruikt twee cartridges (zwart en kleur) maar vier inkten, waarbij de kleuren in één gecombineerde kleurcartridge zitten.

HP DeskJet 2921

De HP DeskJet 2921 is een thermische inkjet-all-in-one die speciaal bedoeld is voor thuisgebruik. Je hebt één apparaat dat kan printen, kopiëren en scannen; de scanner is een flatbedscanner zonder automatische documentinvoer. De printtechniek gebruikt twee cartridges: een zwarte en een driekleurencartridge. De kleurfunctie is beschikbaar voor zowel printen als kopiëren. De papierlade biedt ruimte aan 60 vellen normaal papier en ondersteunt DL-enveloppen.

Als draadloze all-in-one-printer kan deze DeskJet via wifi op je netwerk worden aangesloten, maar het is ook mogelijk om de printer via een usb-kabel rechtstreeks met een computer aan te verbinden. De printsnelheid bij dit model is rond de 7 pagina's in zwart en 5,5 pagina's per minuut in kleur. Automatisch dubbelzijdig afdrukken wordt niet ondersteund.

Epson Expression Home XP-2200

Bij de Epson Expression Home XP-2200 draait het om een compacte kleureninkjet waarmee je zowel kunt printen als scannen en kopiëren. De printer werkt met vier afzonderlijke inkten en heeft een maximale printresolutie van 4800 x 1200 dpi. De maximale papiermaat is A4 en de papierlade kan 50 vellen bevatten. Printen gebeurt via een handmatige papierinvoer, zonder extra lade.

De XP-2200 heeft een flatbed-scanner zonder automatische documentinvoer; dubbelzijdig scannen wordt niet automatisch ondersteund. Op printsnelheid scoort dit model tot 27 pagina’s per minuut in zwart en tot 15 pagina’s per minuut in kleur in de snelste modus. Verbinden gaat via usb of draadloos via wifi. Via een fysieke WPS-knop maak je eenvoudig verbinding.

Epson Expression Home XP-3200

De Epson Expression Home XP-3200 is een all-in-one-printer met iets meer mogelijkheden aan de bedieningskant. De inkjet is voorzien van een 1,44-inch lcd-scherm en kan dubbelzijdig printen. De maximale afdrukresolutie is 5760 x 1440 dpi. Het apparaat ondersteunt diverse papierformaten tot en met A4 en ook verschillende envelop- en fotopapierformaten accepteert de printer.

De geïntegreerde flatbed-scanner haalt een optische scanresolutie van 1200 x 2400 dpi, met 48-bit kleurdiepte bij de invoer en 24-bit bij de uitvoer. De XP-3200 gebruikt vier losse cartridges en heeft een papierlade voor standaard papier; randloos printen behoort ook tot de mogelijkheden. De printsnelheid ligt rond de 10 pagina’s per minuut in zwart en 5 in kleur. Voor verbinding met je netwerk is wifi aanwezig, plus usb voor directe koppeling. Apple AirPrint wordt ondersteund.

HP Smart Tank 5108 - Multifunctionele printer

De HP Smart Tank 5108 is een inkjet all-in-one met navulbare inkttanks in plaats van losse cartridges. De printer kan scannen en kopiëren. De papierlade heeft volgens de gegevens plaats voor 100 vellen en ondersteunt verschillende formaten, met een formaatbereik tot ongeveer 215,9 x 355,6 mm.

Bij de printspecificaties wordt een snelheid van ongeveer 12 pagina’s per minuut in zwart en 5 in kleur genoemd en automatisch dubbelzijdig afdrukken is eveneens mogelijk. De scanner is een flatbedscanner en ondersteunt enkelzijdige scans; automatische documentinvoer en automatisch dubbelzijdig scannen zijn niet aanwezig. De verbinding met netwerk gaat via wifi en je kunt de printer direct via usb aansluiten.

▼ Volgende artikel
PlayStation State of Play: hier kijk je vanavond om 23:00 uur
Huis

PlayStation State of Play: hier kijk je vanavond om 23:00 uur

Sony PlayStation zendt aanstaande donderdagavond om 23:00 uur Nederlandse tijd een nieuwe State of Play-livestream uit. Martin, Simon en Jacco kijken live met je mee!

Er gingen al geruchten over de komst van de State of Play, en die blijken nu dus te kloppen. Nate the Hate, de insider die wel vaker de komst van aan games gerelateerde presentaties op voorhand lekt, claimde dat onlangs namelijk al.

Op PlayStation Blog schrijft Sony dat de presentatie meer dan zestig minuten beslaat en "nieuws, gameplay-updates en aankondigingen van gamestudio's verspreid over de wereld" bevat voor aankomende PlayStation 5-games. Daarbij zullen er zowel games van PlayStation Studios zelf als andere bedrijven de revue passeren.

Zoals gezegd wordt de State of Play op donderdag 12 februari om 23:00 uur Nederlandse tijd uitgezonden, en zal deze te zien zijn via YouTube en Twitch. De presentatie zal ook hieronder te zien zijn zodra hij begint. Uiteraard streamen we de presentatie ook op Twitch, YouTube en TikTok!

Over de precieze inhoud van de State of Play-presentatie is nog niets bekend. Wel is het opvallend dat de presentatie meer dan een uur duurt, wat het een van de langste State of Play-presentaties tot dusver maakt.

Watch on YouTube

Wat is er te zien in de nieuwe State of Play?

Sony brengt dit jaar in ieder geval Saros, Marathon en Marvel's Wolverine uit, maar van die laatste is inmiddels bevestigd dat de game in de lente van dit jaar een update krijgt.

Verder werd vorige week een nieuwe Horizon-game met een focus op multiplayergameplay aangekondigd, genaamd Horizon Hunters Gathering. We weten ook dat The Last of Us-ontwikkelaar Naughty Dog aan hun nieuwe game Intergalactic: The Heretic Prophet werkt, en volgens geruchten wordt er bij PlayStation Studios ook een nieuwe God of War-game ontwikkeld met metroidvania-elementen.

Andere titels die vermoedelijk voorbijkomen zijn: Resident Evil Requiem, Helldivers 2, Marvel Tokon: Fighting Souls, Ace Combat 8, Marathon en Phantom Blade Zero.

Kunnen we dan helemaal geen verrassingen verwachten? Volgens geruchten werkt Sony Santa Monica al een tijdje aan een tweedimensionale God of War-game met Kratos' broer Deimos in de hoofdrol, en vermoed wordt dat deze eindelijk wordt aangekondigd. Sowieso zijn er veel God of War-geruchten: ook zou er gewerkt worden aan een heruitgave van de eerste drie delen en spin-off met personages Atreus in de hoofrol.