“Bouw je eigen AI-agent” klinkt als een middag zwoegen met een zwaar framework. Maar onder elke agent — of die nu op CrewAI, LangGraph of AutoGen draait — zit één verrassend simpele lus. Snap je die lus, dan snap je de hele categorie. Hieronder bouw je hem na met de gratis Gemini API, in gewone Python, zonder framework ertussen.
De loop in één zin
Een agent doet dit, steeds opnieuw: het model krijgt je vraag én een lijst van functies die het mag gebruiken. Beslist het model dat het een functie nodig heeft, dan geeft het de naam en de argumenten terug. Jouw code voert die functie uit en stuurt het resultaat terug. Het model gebruikt dat resultaat om verder te denken — en vraagt eventueel de volgende functie aan, tot het klaar is en een gewoon antwoord geeft.
Dat is alles. Geen magie, wel een strak ritme van “model vraagt, code doet, model gaat verder”.
💡 Beginner-tip: Gemini roept je functie nooit zelf aan. Het zegt alleen “ik zou
weer_opvragen('Amsterdam')willen”. Jij bent degene die de functie draait en het antwoord teruggeeft. Die scheiding is precies wat het veilig maakt: het model raakt nooit rechtstreeks aan jouw systemen.
In vijf stappen zelf bouwen
-
Haal een gratis sleutel op. Ga naar Google AI Studio (aistudio.google.com), log in met een Google-account en maak een API-sleutel aan. Je zit meteen op de gratis laag — geen creditcard nodig. Zet de sleutel in een
.env-bestand alsGEMINI_API_KEY=...zodat hij niet in je code belandt. -
Schrijf een gewone functie. Begin klein, bijvoorbeeld een functie die het weer teruggeeft:
def get_weather(stad): .... In een echte agent zou dit een API-aanroep zijn; om te leren volstaat een functie die een vast antwoord teruggeeft. -
Beschrijf de functie voor het model. Maak een ‘function declaration’: de naam (
get_weather), een korte uitleg (“geeft het huidige weer voor een stad”) en welke argumenten hij verwacht (stad, een string). Deze beschrijving is hoe Gemini snapt wanneer en hoe het je functie mag aanroepen — hoe scherper de uitleg, hoe beter de keuze. -
Stuur vraag én functies naar Gemini. Doe een gewone
generate_content-aanroep met daarin je prompt (“Wat voor weer is het in Amsterdam?”) en de lijst met function declarations. Kijk naar het antwoord: krijg je gewone tekst, dan was geen functie nodig. Zie je eenfunctionCallmet een naam en argumenten, dan wil het model dat jij die functie draait. -
Voer uit en geef terug. Roep zelf
get_weather('Amsterdam')aan, verpak het resultaat en stuur het terug naar Gemini in een vervolgaanroep. Nu heeft het model de echte data en maakt het er een net antwoord van. Zit je in een echte agent, dan herhaal je stap 4 en 5 in een lus tot het model geen functie meer aanvraagt.
⚡ Gevorderden: Wikkel stap 4 en 5 in een
while-lus met een harde limiet, bijvoorbeeld tien rondes. Zonder plafond kan een model in theorie eindeloos functies blijven aanvragen. Die limiet is het simpelste vangnet tegen een agent die op hol slaat.
Waarom dit de moeite waard is
Zodra je deze vijf stappen één keer met de hand hebt gedraaid, lezen frameworks anders. Wat CrewAI een “tool” noemt, is jouw function declaration. Wat LangGraph als een “node” tekent, is een ronde door deze lus. Je hoeft het wiel niet elke keer opnieuw uit te vinden — maar je weet nu wél wat er draait als je op start drukt. En dat is het verschil tussen een tool gebruiken en een tool begrijpen.
