Sustain

← Terug naar Leren
Handleiding

5 augustus 2026

· 7 min lezen

Geneste AI-agents: waarom onze albumchat een eigen zoekagent heeft

Schema van een geneste agent: de albumchat-agent doet één tool-aanroep naar een graafagent, die in zijn eigen context door de beschrijvingen ploegt en alleen de gecontroleerde fotolijst teruggeeft

De editor van Sustain komt met de AI Album Designer — een chatassistent die pagina’s schikt, bijschriften schrijft en op verzoek foto’s opzoekt. Het meeste wat hij doet is één stap: jij vraagt, hij doet. Maar sommige verzoeken verbergen een hoop werk. “Voeg de foto’s toe van Omri lachend op het strand” is niet één handeling — het is een zoekopdracht, het doorlezen van fotobeschrijvingen, een oordeel over welke shots echt passen, en pas dan een plaatsing.

We hebben onlangs opnieuw opgebouwd hoe de assistent zulke verzoeken afhandelt, met een patroon dat geneste agents heet: de ene AI-agent roept een tweede, volwaardige AI-agent aan alsof het een simpele tool is. Deze post legt het patroon uit, waarom het grootste voordeel — kleinere contextvensters — meer betekent dan het klinkt, en loopt door het echte systeem dat we hebben uitgebracht.

Het probleem: een assistent die alles onthoudt, betaalt voor alles

Een chatassistent draait op een contextvenster — het lopende transcript van alles wat er in het gesprek is gezegd en gedaan. Elke keer dat de assistent een nieuwe beurt neemt, gaat het hele venster terug naar het model. Dat heeft een sluipend gevolg: alles wat log en omvangrijk is en het gesprek binnenkomt, wordt bij elk volgend bericht opnieuw betaald.

Fotozoeken is precies zo’n omvangrijke klus. In ons eerdere ontwerp trok de chat ruwe fotolijsten rechtstreeks het gesprek in: bij een album van 219 foto’s betekende dat 219 blokken met bijschriften, datums, kwaliteitsscores en tags in het transcript. We hebben één beurt van dat gesprek gemeten op honderdduizenden invoertokens — grotendeels fotometadata die de gebruiker nooit te zien kreeg, en die bij elk volgend verzoek opnieuw werd meegestuurd.

Grote contexten zijn niet alleen duur. Modellen worden meetbaar slechter in het opvolgen van instructies wanneer de belangrijke zin bedolven ligt onder een berg lijsten — het “lost in the middle”-probleem. Onze assistent had geen groter geheugen nodig. Hij had een manier nodig om omvangrijk werk te doen zonder het te onthouden.

Het patroon: een agent als tool

AI-assistenten handelen via tools — kleine functies zoals plaats deze foto of pas dit thema toe. Een tool krijgt invoer, geeft een resultaat terug, en het gesprek gaat verder. Het inzicht achter geneste agents is dat een tool geen simpele functie hoeft te zijn. Een tool kan een hele andere agent zijn.

In Sustain heeft de albumchat nu een tool die we dig_photos noemen. Als je verzoek echt graafwerk vraagt, geeft de chat jouw woorden — letterlijk, in welke taal je ze ook schreef — door aan een tweede agent: de graafagent, hetzelfde zoekbrein dat het fotozoeken in onze iOS-app aandrijft. De graafagent draait zijn eigen, private lus:

  • Zoeken — met een combinatie van wat er echt op elke foto staat (elke foto wordt bij de analyse uitgebreid beschreven, zodat “strand” ook een foto vindt die niemand ooit gelabeld heeft) plus getagde personen, datums en kwaliteitsfilters. Hij kan meerdere keren zoeken en verfijnen naarmate hij ontdekt wat er is.
  • Controleren — de door AI geschreven beschrijvingen van kandidaat-foto’s lezen om de bijna-treffers te laten vallen: die strandfoto waarop niemand lacht.
  • Bijstellen — verder afbakenen of opnieuw rangschikken, en van reeksduplicaten de beste bewaren.
  • Afronden — een geordende, gecontroleerde lijst teruggeven met een samenvatting van één regel.

Al dat lezen en opnieuw proberen gebeurt in de eigen wegwerpcontext van de graafagent. Zodra hij klaar is, wordt zijn werkruimte weggegooid. Het enige wat het gesprek van de albumchat binnenkomt, is de eindlijst — een paar honderd tokens in plaats van tienduizenden.

De versie van één regel

Een geneste agent maakt van “plak de hele bibliotheek in het gesprek en denk diep na” een “vraag het een specialist en archiveer alleen zijn conclusie.”

Voordeel 1: kleinere contextvensters (de grote)

Dit is het voordeel waar het hele patroon op rust. Het transcript van de chat blijft slank — jouw berichten, zijn antwoorden en compacte resultaten. Het zware leeswerk zit in quarantaine binnen de subagent en wordt weggegooid zodra het klaar is.

Daar volgen direct drie dingen uit:

  • De kosten stapelen niet meer. Bulk die het transcript nooit binnenkomt, wordt ook nooit opnieuw meegestuurd. Tegen de intuïtie in is een tweede AI-agent laten draaien vaak goedkoper dan het platte ontwerp, want dat platte ontwerp bleef die fotolijsten bij elke beurt opnieuw betalen.
  • De kwaliteit gaat omhoog. Elke agent leest een korte, gerichte prompt over zijn eigen taak, in plaats van één megaprompt over alles. De zoeker zoekt beter; de ontwerper ontwerpt beter.
  • Lange gesprekken blijven scherp. Een sessie waarin vijf keer wordt gezocht, gaat niet achteruit, want geen van die zoekopdrachten liet resten achter in het venster.

Voordeel 2: één brein, veel plekken

Omdat de graafagent een op zichzelf staande eenheid is met een schoon contract — vraag erin, gecontroleerde lijst eruit — laten we er meer dan één plek in het product op aansluiten. Het fotozoeken op ons iOS-startscherm en de albumchat op het web delen nu hetzelfde zoekbrein. Leren we het één nieuw kunstje, dan leert elke plek het tegelijk.

Dat weerspiegelt een principe dat we overal in Sustain toepassen: één engine per taak. In dezelfde week dat we geneste zoekopdrachten uitbrachten, hebben we ook het plaatsen van foto’s samengevoegd — het “bouw mijn album opnieuw” van de chat draait nu exact dezelfde pipeline als de knop AI-verbetering, parameters en al, in plaats van een lookalike. Twee engines die uit elkaar groeien, gaan het op een dag oneens zijn; één engine kan dat niet.

Voordeel 3: afgebakend, voorspelbaar gedrag

Een geneste agent heeft een beperkte impactradius. De onze draait hooguit een handvol denkrondes, op een klein en snel model dat geschikt is voor zoeken, en zijn uitvoer wordt gevalideerd voordat we hem vertrouwen — elk foto-id dat hij teruggeeft, wordt gecontroleerd tegen de foto’s die jij daadwerkelijk bezit, en als hij van het script afdwaalt, valt het systeem terug op een gewone gefilterde zoekopdracht in plaats van je bericht te laten mislukken.

Diezelfde afbakening maakt het patroon ook veilig om uit te breiden. De graafagent kan van binnen slimmer, spraakzamer of grondiger worden zonder enig risico dat hij het albumgesprek overspoelt — de koppeling tussen de twee agents verandert niet.

Wanneer je niet moet nesten

Nesten is niet gratis — een subagent voegt een denkronde toe, en dus een moment vertraging. Daarom hanteert de albumchat een simpele opschalingsregel:

  • Eenduidige opzoekingen blijven plat. “Foto’s uit 2023,” “foto’s van Omri,” “ongeplaatste portretshots” — dat zijn directe databasefilters. Die in een agent verpakken maakt ze alleen maar trager.
  • Vage verzoeken met meerdere voorwaarden schalen op. “Omri lachend op het strand,” “de beste 20 van de reis naar Rome” — alles wat visueel zoeken plus een oordeel vraagt, gaat naar de graafagent.

Het orkestratieniveau moet passen bij de complexiteit van de vraag. Een goede vuistregel uit onze ervaring: zou een menselijke assistent bestanden moeten openen en lezen voordat hij kan antwoorden, nest het dan. Zou hij gewoon een query draaien, doe het dan niet.

De showcase: een echt verzoek, van begin tot eind

Hier is een echte uitwisseling uit een reisalbum. Het verzoek is met opzet lastig — het beschrijft een tafereel, geen trefwoord:

“vind foto’s met bergzichten”

Een paar seconden later kwam het antwoord terug als beelden: een veegbare strip met de zeven passende foto’s, elk met zijn nummer. Veeg naar het eind en één heeft een gouden rand en het label nieuw — de enige van de zeven die nog op geen pagina staat, precies het ene ding waar je misschien echt iets mee wilt. Niets te ontcijferen, niets op te zoeken.

Onder die strip had de graafagent zijn eigen lus gedraaid: het album doorzoeken, en daarna de beschrijvingen van de kandidaten lezen om de echte bergzichten te houden en de bijna-treffers te laten vallen. Al dat leeswerk gebeurde in de context van de subagent en werd weggegooid. Het transcript van de albumchat kreeg er één korte regel bij.

Dan een tweede, smallere vraag in dezelfde adem:

“en de foto’s van mensen op een strand bij zonsondergang?”

Deze keer drie treffers — weinig genoeg om elk een volle rij te geven: de miniatuur, wat erop staat, en een knop Toepassen om hem te plaatsen. Dezelfde agent, dezelfde zoekopdracht, een andere presentatie, want drie resultaten en dertig resultaten zijn niet hetzelfde soort antwoord.

Het onderscheid dat de agent hier maakt — een strand bij zonsondergang met mensen erop versus een lege zonsondergang boven zee — bestaat in geen enkele tag of filter. Het komt doordat een tweede agent daadwerkelijk heeft gelezen wat er op de foto’s staat, in een context waar je nooit meer voor hoeft te betalen.

Wat dit voor jou betekent

Niets hiervan verandert hoe je Sustain gebruikt — dat is nou juist het punt. De assistent wordt alleen prettiger om mee te praten, beter in moeilijke zoekopdrachten en identiek op al je apparaten, omdat het werk op de juiste plek gebeurt. De volgende keer dat hij een speld-in-een-hooiberg-vraag in een paar seconden beantwoordt met een strakke shortlist, weet je: er was een tweede agent in de kamer, en die is alweer vertrokken.

Veelgestelde vragen

Klaar om het te proberen?

Probeer de AI Album Designer

We gebruiken cookies om het sitegebruik te analyseren en jouw ervaring te verbeteren. Meer info