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
Waar voor je geld: 5 veelzijdige camera's voor rondom het huis
Zekerheid & gemak

Waar voor je geld: 5 veelzijdige camera's voor rondom het huis

Bij ID.nl zijn we dol op kwaliteitsproducten waar je niet de hoofdprijs voor betaalt. Daarom speuren we een paar keer per week binnen een bepaald thema naar zulke deals. Dit keer: beveiligingscamera's voor rondom het huis.

Met een beveligingscamera houd je je woning rondom in de gaten wanneer je er niet bent of bijvoorbeeld slaapt. De camera's kunnen video's opnemen, maar daarvoor heb je meestal wel een abonnement nodig. Voordeel is dan wel dat je de beelden overal ter wereld kunt terugkijken. Wij vonden vijf modellen, waarvan je er bij een aantal ook nog een extra camera bij krijgt.

Ring Stick Up Cam Battery (2 pack)

De Ring Stick Up Cam is een veelzijdige camera die je zowel binnen als buiten kunt gebruiken. De camera is volledig draadloos en je hoeft alleen maar de opgeladen batterij in de camera te schuiven en de camera te verbinden met je wifi-netwerk via de Ring-app. Omdat de camera draadloos is, kun je hem op vrijwel elke plek zetten, hangen of monteren. Of je nu je huisdieren in de gaten wilt houden in de woonkamer of een oogje in het zeil wilt houden op je oprit, het kan allemaal. De camera geeft heldere beelden in 1080p en heeft ingebouwd nachtzicht, zodat je ook in het donker goed kunt zien wat er gebeurt. Als er beweging wordt gedetecteerd, krijg je indien gewenst direct een melding op je telefoon. De camera heeft ook tweerichtingsspraak, waardoor je kunt communiceren met bezoekers of ongewenste gasten kunt laten weten dat ze gezien worden. Om video's op te slaan en terug te kijken, heb je wel een Ring Protect-abonnement nodig.

Eufy SoloCam S220

Deze camera van Eufy is een ideale oplossing voor wie op zoek is naar een camera zonder gedoe met maandelijkse kosten. Deze camera heeft een ingebouwde batterij én een zonnepaneel. Door het zonnepaneel hoef je de camera bijna nooit handmatig op te laden, want slechts een paar uur zonlicht per dag is al voldoende om hem van stroom te voorzien. De camera is volledig draadloos en eenvoudig te installeren, perfect voor buiten aan een schutting of muur. De beelden zijn in 2K-resolutie, wat zorgt voor een scherpe weergave. De SoloCam S220 heeft een lokaal geheugen van 8 GB, wat betekent dat je al je beelden direct op de camera opslaat. Zo heb je geen abonnement nodig om beelden te bewaren of terug te kijken. Een ingebouwde AI-technologie zorgt ervoor dat de camera het verschil ziet tussen mensen, dieren en voertuigen, zodat je alleen relevante meldingen krijgt.

Google Nest Cam

Deze camera van Google is een veelzijdige optie die zowel binnen als buiten kan worden gebruikt. Het draadloze ontwerp met batterij maakt de installatie heel flexibel, want je bent niet afhankelijk van een stopcontact in de buurt. De Google Nest Cam is weerbestendig en kan dus tegen een stootje van de elementen. De Nest Cam heeft slimme functies, zoals het herkennen van personen, dieren en voertuigen, waardoor je alleen de meldingen ontvangt die je belangrijk vindt. Je krijgt direct een seintje op je telefoon via de Google Home app. De camera biedt 24/7 live-weergave en je kunt de gebeurtenisgeschiedenis van de afgelopen drie uur gratis terugkijken. Wil je langer terugkijken of extra functies, zoals gezichtsherkenning, dan is een abonnement op Nest Aware nodig.

Ezviz BC1C

Met zijn indrukwekkende batterijduur onderscheidt de Ezviz BC1C zich. Volgens de fabrikant kan de camera tot wel 210 dagen meegaan op één oplaadbeurt. Deze camera is volledig draadloos, waardoor je hem overal kunt plaatsen waar je maar wilt, zowel binnen als buiten dankzij de weerbestendige behuizing. De Ezviz BC1C heeft een slimme AI die onderscheid maakt tussen personen en andere bewegingen, wat het aantal valse meldingen flink vermindert. De camera filmt in 1080p en beschikt over kleurennachtzicht, wat betekent dat je ook 's nachts heldere beelden in kleur krijgt, in plaats van de gebruikelijke zwart-wit weergave. Er is 32 GB ingebouwde opslag, dus je hebt geen extra geheugenkaart of abonnement nodig om je beelden te bewaren. Via de app kun je de live beelden bekijken, terugkijken en zelfs praten met mensen aan de andere kant via de tweerichtingsspraak. Dit maakt het makkelijk om bijvoorbeeld een bezorger instructies te geven.

Arlo Essential Wireless Camera + draadloze deurbel

De Arlo Essential is een draadloze buitencamera die ontworpen is voor eenvoud en effectiviteit. Je monteert hem in een handomdraai en verbindt hem via wifi met de Arlo-app. Met een batterijduur van 4 tot 6 maanden hoef je je niet continu druk te maken om de accu. De camera heeft een 130° brede kijkhoek en filmt in 2K-resolutie, zodat je een groot deel van je tuin of oprit in de gaten kunt houden. Een ingebouwde spotlight verlicht de omgeving bij beweging en zorgt voor heldere beelden, zelfs in het donker. De camera beschikt over een sirene die je op afstand kunt activeren om indringers af te schrikken. De beelden worden opgeslagen in de cloud, waar je met een Arlo Secure abonnement toegang toe hebt. De Arlo Essential Wireless Camera wordt aangeboden in een bundel met een extra draadloze deurbel van hetzelfde merk.

▼ Volgende artikel
JBL introduceert de Grip, een speaker zo klein als een blikje
© JBL
Huis

JBL introduceert de Grip, een speaker zo klein als een blikje

Een speaker die je zo in je handpalm kunt zetten, maar toch genoeg 'oomf' heeft om een feestje op poten te zetten. Dat is de nieuwe JBL Grip. Het apparaat is zo groot als een blikje bier (of frisdrank) en past dus makkelijk in een tas of aan je fiets. Toch moet hij genoeg vermogen, slimme functies en een stevig ontwerp bieden om mee te gaan op elk vrolijk avontuur.

De Grip levert 16 watt aan geluid en gebruikt een techniek die AI Sound Boost heet. Daarmee wordt de muziek live geanalyseerd en bijgesteld, zodat de bassen voller klinken zonder dat het geluid vervormt of kraakt. Wie zin heeft in meer volume kan twee speakers koppelen voor stereogeluid, of via Auracast meerdere modellen aan elkaar linken. Zo tover je het compacte speakertje al snel om tot een groter geluidssysteem.

©JBL

Gemaakt om mee te nemen

Met de geïntegreerde lus klik je de Grip eenvoudig vast aan een rugzak, een fiets of zelfs een kajak. Dankzij de IP68-classificatie kan hij bovendien tegen een spatje water, stofje stof of gewoon een stootje. Daarmee mikt JBL duidelijk op buitengebruik: festivals, stranddagen of een lange picknick in het park. De speaker is daarnaast licht en handzaam, waardoor je hem eigenlijk overal kwijt kunt.

Op de achterkant van het apparaatje zit subtiele verlichting die je via de JBL Portable-app kunt aanpassen. Kleuren en intensiteit kunnen worden afgestemd op je afspeellijst of de sfeer van het moment. Oké, het zal niet genoeg zijn om een heel feest van de benodigde verlichting te voorzien, maar het geeft nét een extra laagje beleving. Toch leuk.

©JBL

Accu en extra uurtjes

De Grip gaat ongeveer 12 uur mee op één lading. Wie langer door wil, kan Playtime Boost inschakelen, een functie die nog eens 2 uur extra uit de accu haalt. Daarbij past de speaker zich aan voor een harder en efficiënter geluid. Voor een dag buiten of een lange avond muziek draaien is dat een heel handige toevoeging.

De speaker verschijnt in zeven varianten, van neutraal zwart en wit tot paars, camo en felroze. Er is gekozen voor gerecycled plastic en een verpakking van FSC-gecertificeerd papier. Daarmee sluit de Grip aan bij de trend om dit soort gadgets duurzamer te maken. De adviesprijs bedraagt 99,99 euro en het model is direct verkrijgbaar via JBL.com en verschillende (web)winkels.