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

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

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

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

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

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
Spreek en luister: ChatGPT als gesprekspartner
© Limitless Visions - stock.adobe.com
Huis

Spreek en luister: ChatGPT als gesprekspartner

ChatGPT kan steeds meer en luistert tegenwoordig ook naar de prompts (opdrachten) die een gebruiker inspreekt. Bovendien leest de chatbot zelfs de uitgebreide antwoorden voor. Hardop voorlezen werkt zelfs met negen natuurlijk klinkende stemmen.

In drie stappen laten we de spreek- en luisterfunctie van ChatGPT zien:

  • Spreek prompts in door op de microfoonknop te tikken
  • Laat ChatGPT de antwoorden voorlezen
  • Kies uit negen verschillende stemmen

Typen te veel gedoe? Lees dan zeker ook: Geen toetsenbord meer nodig: laat je stem het werk doen

Opdrachten inspreken

OpenAI heeft de spraakfunctie voor ChatGPT voor iedereen beschikbaar gemaakt. In het begin was deze functie uitsluitend bedoeld voor wie een Plus- of Enterprise-abonnement had. Natuurlijk moet je via de instellingen van je mobieltje toestemming geven aan ChatGPT voor het gebruik van de microfoon. Als dat is geregeld, open je de app en tik je onderaan op de microfoonknop. Een animatie reageert op je stem en als je klaar bent met praten, tik je op het vinkje in de zwarte cirkel. De app zal wat je gezegd hebt razendsnel weergeven. Ben je tevreden over de formulering, dan tik je op het pijltje. ChatGPT genereert meteen het antwoord en onderaan verschijnt opnieuw de microfoonknop om de volgende opdracht in te spreken.

Een animatie reageert op je stem.

Antwoorden beluisteren

Vervolgens druk je in de mobiele versie lang op de tekst die de chatbot heeft gegenereerd, zodat er een aantal functies verschijnt. Daar kies je de opdracht Voorlezen. Na enkele seconden hoor je een stem die het antwoord voorleest.

Bovenaan zie je een klein gedeelte waarin je het voorlezen kunt pauzeren en met twee knoppen kun je de tekst vijftien seconden terugspoelen en vooruitspoelen.

In de desktop-versie van ChatGPT zie je onder het antwoord het pictogram van een luidspreker. Daar moet je op klikken om de stem van ChatGPT te horen. Klik dus niet met rechts op de tekst om in het contextueel menu de opdracht Spraak te selecteren. Daarmee start je de voorleesfunctie van de browser en die is niet zo goed.

Boven de tekst kun je het voorlezen pauzeren.

Over voorlezen gesproken ...

Kinderen vinden het heerlijk!

Kies een andere stem

Zowel in de mobiele versie als in de desktopversie heb je de keuze uit negen stemmen. In de Android- en iOS-versie moet je naar het beginscherm gaan van de app, waar je onderaan je gebruikersnaam ziet staan. Tik op de drie puntjes en selecteer Spraak. Je krijgt de stem te horen; ze klinken natuurlijk. Sol is ‘gevat en ontspannen’ en van Ember zegt de app dat hij ‘vol vertrouwen en optimistisch’ klinkt. Maak je keuze door op Gereed te tikken.

In de desktop-versie klik je rechtsboven op de profielknop om de Instellingen te openen. Ook daar kun je dan een van de negen stemmen selecteren.

Van iedere stem lees je de vermeende eigenschappen.

Watch on YouTube
▼ Volgende artikel
Waar voor je geld: 5 alles-in-één laserprinters voor een mooie prijs
© Tim Allen
Huis

Waar voor je geld: 5 alles-in-één laserprinters voor een mooie prijs

Bij ID.nl zijn we gek op producten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we daarom binnen een bepaald thema naar zulke deals. Een all-in-one-printer is een handig apparaat voor het scannen, kopiëren en printen van documenten en foto's. De allerbeste afdrukkwaliteit krijg je met een laserprinter. Wij vonden vijf betaalbare modellen voor je.

Een laserprinter maakt gebruik van toner in plaats van inkt om afdrukken te produceren. Toner is een fijn poeder dat met hoge temperaturen op het papier wordt gesmolten. Dit proces zorgt ervoor dat je met grote toners kunt printen, wat betekent dat je langere tijd kunt blijven afdrukken zonder de toner te hoeven vervangen. Laserprinters zijn vaak snel en efficiënt, waardoor ze uitstekend zijn voor gebruik op kantoor. Maar ook als je thuis veel print, bijvoorbeeld als zzp'er, kan een laserprinter uitkomst bieden.

HP Color Laser 179fnw

De HP Color Laser MFP 179fnw is een van de kleinste kleurenlaserprinters in zijn klasse en is daardoor ideaal voor thuisgebruik en plekken waar niet veel plek voor een printer is. Met functies zoals printen, scannen, kopiëren en zelfs nog faxen biedt deze 4-in-1 printer een hoop veelzijdigheid. De afdruksnelheid bedraagt tot 18 pagina's per minuut in zwart-wit en 4 ppm in kleur, met een resolutie van 600 x 600 dpi.

Dankzij de automatische documentinvoer (ADF) voor 40 pagina's en wifi-verbinding is deze printer gebruiksvriendelijk en multi-inzetbaar. Hoewel de afdruksnelheid lager ligt dan bij sommige concurrenten, is zijn compacte formaat juist een pluspunt.

Brother DCP 1610W

De Brother DCP-1610W is een compacte zwart-wit laserprinter die printen, kopiëren en scannen combineert. Met een afdruksnelheid van 20 pagina's per minuut en een resolutie van 2400 x 600 dpi levert hij haarscherpe resultaten. Dankzij wifi-connectiviteit kunnen meerdere gebruikers eenvoudig draadloos printen.

De papierlade biedt plaats aan 150 vellen en het apparaat is voorzien van anti-jam-technologie om papierstoringen tot een minimum te beperken. In vergelijking met de HP Color Laser MFP 179fnw biedt deze printer geen kleurafdrukken, maar hij is wel een stuk sneller met zijn afdrukken.

HP Laserjet Pro 2Z622

De HP LaserJet Pro 2Z622 is geschikt voor onder meer kantooromgevingen. Met afdruksnelheden tot 42 pagina's per minuut en functies zoals dubbelzijdig printen, scannen, kopiëren en faxen is dit een lekker veelzijdige 4-in-1-laserprinter. Het apparaat ondersteunt zowel bekabelde als draadloze netwerken en biedt geavanceerde beveiligingsfuncties.

Canon i-SENSYS MF272wd

De Canon i-SENSYS MF272dw is een monochrome laserprinter en drukt af met en snelheid van 29 pagina's per minuut. Met een resolutie van 2400 x 600 dpi levert hij snelle en scherpe resultaten. Dankzij automatische dubbelzijdige afdrukken, wifi- en ethernetverbinding is hij veelzijdig inzetbaar.

In vergelijking met de Brother DCP-1610W levert deze Canon i-SENSYS MF272dw snellere prestaties en meer connectiviteitsopties, hoewel hij geen kleurendruk ondersteunt; dan moet je toch echt bij de HP Color Laser MFP 179fnw zijn.

Xerox B225 A4

De Xerox B225 is een zwart-wit all-in-one-laserprinter die printen, kopiëren en scannen combineert. Met een afdruksnelheid van maar liefst 34 pagina's per minuut en een eerste afdruktijd van slechts 6,4 seconden is hij goed in te zetten als je veel en vaak print. De printer beschikt over automatische dubbelzijdige afdrukken, een papierlade voor 250 vellen en kan via wifi of een vaste netwerkverbinding met je thuisnetwerk worden verbonden.