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:

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

Teksten samenvatten

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

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:

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.

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:

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.

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
Veilig Google Docs en Sheets delen met anderen
Huis

Veilig Google Docs en Sheets delen met anderen

Googles online tekst- en spreadsheet-bewerkers zijn een fijne, gratis alternatief voor Microsofts Office-suite. De mogelijkheden zijn vrijwel net zo uitgebreid. Het delen en samenwerken in bestanden is misschien nog wel makkelijker dan bij Word en Excel, maar er zijn wel wat dingen waar je op moet letten voor je ongebreideld bestanden gaat delen.

In dit artikel lees je:

  • Hoe je Google Docs en Sheets deelt met anderen
  • Waar je op moet letten
  • Hoe je je documenten beveiligt

Ook interessant: Repetitief werk? Met templates maak je het jezelf zo veel makkelijker

Google Docs en Sheets

Google Docs, ook wel Documenten, is Googles tegenhanger van Microsoft Word, terwijl Sheets een concurrent voor Excel is. Anders dan bij Office-programma's werken Googles diensten in de cloud. De offline-functies zijn echter ook prima, en je kunt de tools prima gebruiken zonder internetverbinding. Het fijne aan dit cloud-first-idee is dat je in principe altijd en overal bij je bestanden kunt, en je niet vooraf hoeft te plannen wanneer en waar je je bestanden wilt openen. 

Back-up maken van bestanden

Voor je bestanden gaat delen, is het handig om eerst een back-up te maken van het te delen bestand, helemaal als je van plan bent om bepaalde mensen - of iedereen met de deellink - bewerkingsrechten te geven. 

Een back-up maken van een Docs- of Sheets-bestand is simpel genoeg. Open het document, ga in de menubalk bovenaan naar Bestand en klik op Kopie maken. Geef je kopie een naam, of laat de huidige naam staan. Het vinkje bij Delen met dezelfde mensen kan handig zijn, maar die wil je nu juist uit laten, als je het bestand al met iemand hebt gedeeld. Klik op Een kopie maken, en het bestand staat nu als los document in je map. 

Werk je veel met teksten en spreadsheets?

Investeer in een fijne muis: je pols is je dankbaar!

Bestand delen

Nu kun je originele bestand daadwerkelijk gaan delen. Klik op de grote Delen-knop rechtsboven. Standaard staat een bestand op Alleen voor jou, met de dropdown op Beperkte toegang. Via de adresbalk bovenaan kun je specifieke mensen uitnodigen - ze hoeven niet per se een Google-account te hebben, je kunt elk e-mailadres invullen. 

Via de dropdown onderaan kun je het bestand ook openstellen voor iedereen die de link heeft. Vanzelfsprekend moet je hier voorzichtig mee omspringen, want je hebt zelf weinig invloed op waar de link allemaal terechtkomt. 

Heb je iemand toegevoegd of heb je de link opengesteld, dan zie je een extra dropdown verschijnen, die standaard op Kijker staat. Zet je die op Reageerder, dan kunnen mensen reacties achterlaten in het document; met Bewerker krijgen ze volledige edit-rechten. Vandaar de back-up die we eerder hadden gemaakt: iemand kan per ongeluk (of expres!) het hele document wissen, zonder dat je er zelf nog veel aan kunt doen. 

Docs.new

Werk je veel met documenten, spreadsheets en presentaties, dan heeft Google een handige shortcut ingebouwd die je op de lange termijn veel tijd kan schelen. Je kunt namelijk direct een nieuw bestand openen zonder eerst naar de homepage van Google Docs te gaan. Dat doe je door docs.new in je adresbalk te typen en op Enter te drukken. Nu opent direct een nieuw Google-document. Hetzelfde geldt voor Sheets (sheets.new), Presentaties (slide.new) en Formulieren (form.new). 

Wachtwoord instellen?

Vreemd genoeg biedt Google geen optie om bestanden te beveiligen met een wachtwoord, al kan een wachtwoord natuurlijk net zo makkelijk gedeeld worden als een link. Wat je wel kunt doen, is een bestand maken in Word en Excel, daar een wachtwoord op zetten, en dat bestand vervolgens importeren in Google Docs of Sheets. 

Het is een wat omslachtige manier, en veel meer beveiliging dan een downloadlink biedt het niet, maar het is een optie. 

Tot slot

Bestanden delen via Google Docs of Sheets is nog makkelijker dan via Microsoft Word of Excel, je moet alleen wel even weten wat je doet. Zorg ervoor dat je niet meer mensen toegang geeft dan nodig, deel de openbare link alleen als je de mensen met wie je samenwerkt vertrouwt, geef niet zomaar iedereen bewerkingsrechten, en vergeet vooral geen back-up te maken, zodat je altijd een originele versie van het bestand in je persoonlijke Drive hebt staan.


▼ Volgende artikel
Review Motorola Moto G35 – Begrijpelijke compromissen
© Wesley Akkerman
Huis

Review Motorola Moto G35 – Begrijpelijke compromissen

Een toestel als de Motorola Moto G35 kan laten zien hoe goed een smartphone-ervaring kan zijn, zelfs als je er minder dan 200 euro voor betaalt. Dit model heeft een adviesprijs van 179 euro en biedt daarvoor een aantal mooie eigenschappen aan.

Goed
Conclusie

Onderaan de streep doet de Motorola Moto G35 weinig fout, dus kun je hem prima meenemen in je overweging. De processor houdt hier en daar je input niet helemaal bij, maar dat is eigenlijk het grootste struikelblok, zeker gezien de prijs. Dat kan overigens ook voor problemen met HDR-content zorgen, aangezien die meer van een systeem vraagt. We zijn echter wel van mening dat de Samsung Galaxy A15 iets meer voor hetzelfde geld aanbiedt, helemaal als het gaat om het updatebeleid. Maar de Moto G35 is allesbehalve een slechte smartphone.

Plus- en minpunten
  • Mooi scherm
  • Strak ontwerp
  • Groothoeklens
  • Prijs
  • Accuduur
  • Updatebeleid
  • Camerakwaliteit
  • Werkgeheugen

Net zoals bij seriegenoot Moto G55 kunnen we het ontwerp en de gekozen materialen voor de behuizing waarderen. De Motorola Moto G35 oogt strak en ligt lekker in de hand. Hij glijdt er bovendien niet snel uit, vanwege het polycarbonaat op de achterkant. Het toestel is niet waterdicht, maar is wel waterafstotend – dat is tenminste iets. Verder waarderen we het lage gewicht van 188 gram, de koptelefoonaansluiting onderop en de vingerafdrukscanner in de powerknop. De G35 voelt derhalve compleet aan, in elk geval op het gebied van hardware.

De Moto G35 heeft een aantal overeenkomsten met de 70 euro duurdere Moto G55. Zo heeft het riante lcd-scherm van 6,72 inch veel dezelfde eigenschappen. De (HDR-)kleuren en het contrast ogen mooi, maar de kijkhoek is niet fraai. De maximale helderheid ligt lekker hoog, waardoor je op zonnige dagen goed ziet wat er gebeurt. Daarnaast is er een hoge resolutie (1080 × 2400 pixels) en verversingssnelheid van 120 Hertz. Ook dit model heeft helaas last van die goedkoop ogende luchtlaag en bijbehorend schaduwspel aan de randen.

©Wesley Akkerman




©Wesley Akkerman




©Wesley Akkerman

Begrijpelijke keuzes

Onder de motorkap zit de relatief onbekende Unisoc T760-processor, die qua prestaties net iets achterloopt op de cpu van de Sony Xperia 10 VI (de Snapdragon 6 Gen 1). Als je bedenkt dat de Sony twee keer zo duur is, dan is dat helemaal niet verkeerd voor de prijs.

In tegenstelling tot de Moto G55 merken we soms dat het scherm te snel wil voor de processor. Dat merk je tijdens het scrollen. Het kan daardoor zijn dat het display, ondanks die hoge verversingssnelheid, schokt. Ook hebben apps soms wat tijd en ruimte nodig om op gang te komen.

Dat valt een beetje tegen, maar hoort bij deze prijsklasse. Datzelfde geldt voor de hoeveelheid werkgeheugen en opslagruimte, die 4 en 128 GB bedragen. De eerste is echt het minimale voor een Android-apparaat, terwijl de tweede niet meer van deze tijd is gezien de ruimte die we nodig hebben, maar gelukkig kun je die uitbreiden met een micro-SD-kaart. Het updatebeleid is ook niet te scherp, maar voor minder dan 200 euro begrijpelijk. Je krijgt in twee upgrades en drie jaar aan updates. De vergelijkbare Samsung Galaxy A15 doet dat beter met vier en vijf jaar.







Groothoeklens in dit prijssegment?

Net zoals bij de Moto G55 beschikt de Motorola Moto G35 over een hoofdlens van 50 megapixel. Gezien de prijs zijn we iets vergevingsgezinder en willen we graag benadrukken dat het toestel kleurrijke en redelijk gebalanceerde foto's maakt. Echter, het ontbreekt her en der wel een detail. Daarvoor ogen de beelden helaas te wazig, ondanks de autofocus. Avondfotografie is helaas niets om over naar huis te schrijven, aangezien details nog meer opgaan in de achtergrond dan overdag. Als je hier dus een foto mee maakt, doe dat dan in goed verlichte omgevingen.

Wat de Motorola Moto G35 redelijk uniek maakt, is de toevoeging van een groothoeklens. Die komen we niet vaak tegen op toestellen voor minder dan 200 euro. Hoewel we over het algemeen de resultaten van deze cameralens een voldoende willen geven, moet je wel rekening houden met een aantal vervelende zaken. De beelden ogen soms onscherp, een beetje korrelig en ook de kleuren komen niet helemaal overeen met de werkelijkheid. Houd het dus lekker op de hoofdcamera voor wanneer je foto's maakt, voor zowel ver weg als heel dichtbij.







Motorola Moto G35 kopen?

Ook de Motorola Moto G55 biedt een accu met een totaalvermogen van 5000 mAh aan. Door de niet al te krachtige processor kun je er daarom van uitgaan dat je hem meer dan een dag kunt gebruiken zonder hem te hoeven opladen. Soms zelfs twee dagen, als je rustig aan doet. Opladen gaat niet ontzettend snel met maximaal achttien watt, waardoor het al snel meer dan twee uur kan duren voordat de batterij weer vol is. De oplader moet je overigens zelf even regelen, omdat die, volgens Europese regels, niet meer in de doos verpakt wordt.

Onderaan de streep doet de Motorola Moto G35 weinig fout, dus kun je hem prima meenemen in je overweging. De processor houdt hier en daar je input niet helemaal bij, maar dat is eigenlijk het grootste struikelblok, zeker gezien de prijs. Dat kan overigens ook voor problemen met HDR-content zorgen, aangezien die meer van een systeem vraagt. We zijn echter wel van mening dat de Samsung Galaxy A15 iets meer voor hetzelfde geld aanbiedt, helemaal als het gaat om het updatebeleid. Maar de Moto G35 is allesbehalve een slechte smartphone.