Waarom uw AutoGen-agent vastloopt in oneindige lussen en hoe u dit kunt oplossen

Voordat u een AutoGen-loop debugt, is er een belangrijke platformwijziging waar u rekening mee moet houden. Sinds september 2026 bevindt de officiële AutoGen-repository zich in de onderhoudsmodus: er wordt verwacht dat deze onderhoudswerkzaamheden zal uitvoeren in plaats van nieuwe functies te bevatten, en Microsoft raadt Microsoft Agent Framework aan voor nieuwe projecten. De officiële AutoGen-repository vermeldt nog steeds Python 0.7.5 als de huidige stabiele versie, terwijl Microsoft op 25 augustus 2026 een bijgewerkte migratiehandleiding van AutoGen naar Agent Framework heeft gepubliceerd. Als u AutoGen echter al in productie gebruikt, blijven de onderstaande probleemoplossingstechnieken direct bruikbaar. Raadpleeg de officiële AutoGen-repository , de officiële AutoGen-releases en de AutoGen-migratiehandleiding van Microsoft .

Een AutoGen-agent lijkt meestal vast te zitten in een oneindige lus om een ​​van de volgende vijf redenen: de uitvoering heeft geen betrouwbare beëindigingsvoorwaarde, het beleid voor de volgende spreker kiest steeds een onproductieve deelnemer, een toolaanroep genereert geen zichtbare voortgang, agenten geven werk heen en weer, of de applicatie hervat steeds een verouderde status. De snelste oplossing is niet om elke prompt te herschrijven. Identificeer eerst welke lus er precies is, voeg vervolgens een harde stop toe en repareer daarna de overgang die mislukt.

Diagnostisch diagram dat laat zien hoe een AutoGen-agent de fasen Plannen, Uitvoeren, Observeren en Reflecteren doorloopt, met een overzicht van veelvoorkomende oorzaken en oplossingen.
Een compacte diagnostische visie: herhaaldelijk plannen, gereedschap gebruiken, observeren en reflecteren wordt een vicieuze cirkel wanneer voltooiingscriteria of harde grenzen nooit worden bereikt.

Snelle diagnose: wat voor soort lus zie je?

SymptoomWaarschijnlijke oorzaakHet eerste wat je moet controleren
Dezelfde twee agenten wisselen elkaar oneindig af.Doorverbinden of doorgeven van gegevens via pingpongSprekerselectie, overdrachtsdoelen en een maximumlimiet voor berichten of beurten
Eén agent roept herhaaldelijk dezelfde tool aan met vrijwel identieke argumenten.Het resultaat van de tool bewijst geen vooruitgang of mislukking.max_tool_iterations, retourschema van de tool en logica voor opnieuw proberen
Het team blijft napraten, ook nadat de taak zichtbaar is afgerond.Voltooiing wordt slechts impliciet in de prompt vermeld.Expliciete beëindigingsvoorwaarde en deterministisch voltooiingssignaal
Een selecteur kiest herhaaldelijk de verkeerde specialist.Dubbelzinnige agentbeschrijvingen of selectiepromptDeelnemersbeschrijvingen, kandidatenset enallow_repeated_speaker
Een nieuwe taak lijkt het gedrag van de vorige taak over te nemen.De staat werd opzettelijk bewaard.Of het team of de agent gereset moet worden vóór de nieuwe taak.
Een grafische workflow doorloopt eindeloos een cyclus van beoordelen/herschrijven.De exit-conditie wordt nooit waar.Predicaat voor het verlaten van de cyclus plus een onafhankelijke veiligheidsafsluiting

1. Voeg een harde stop toe voordat je iets anders debugt.

AutoGen AgentChat biedt ingebouwde beëindigingsvoorwaarden, specifiek om teams binnen de perken te houden. De stabiele documentatie bevat MaxMessageTermination, TextMentionTermination, TokenUsageTermination, TimeoutTermination, HandoffTermination, SourceMatchTermination, ExternalTermination, StopMessageTermination, TextMessageTermination, FunctionCallTermination, en FunctionalTermination. Zie de officiële AutoGen-documentatie over beëindiging .

Voor de meeste productieprocessen is het aan te raden een semantische voltooiingsvoorwaarde en een onafhankelijke veiligheidslimiet te gebruiken. De belangrijkste operator is meestal OF, omdat je wilt dat de uitvoering stopt wanneer de taak normaal is voltooid of wanneer de veiligheidslimiet is bereikt.

from autogen_agentchat.conditions import (
    MaxMessageTermination,
    TextMentionTermination,
)

done = TextMentionTermination("TERMINATE")
safety_cap = MaxMessageTermination(max_messages=25)

termination = done | safety_cap

Een veelgemaakte fout is om alleen te vertrouwen op "zeg TERMINATE wanneer klaar". Dat laat de correctheid over aan het modelleren van gedrag. Een andere fout is het combineren van voorwaarden met &terwijl je eigenlijk bedoelt "stop bij een van beide". AutoGen ondersteunt zowel AND- als OR-composities, dus kies de semantiek bewust.

Wat dit oplost

  • Een team dat nooit de verwachte eindzin produceert.
  • Een selector die steeds een andere luidspreker blijft vinden, ook al is het nuttige werk gestopt.
  • Een overdrachtsketen die geen natuurlijk einde heeft.
  • Een onverwacht gedrag van een model of gereedschap dat anders onbeperkte draaiingen zou vereisen.

Een harde limiet is een stroomonderbreker, geen bewijs dat de workflow correct is. Als de uitvoering altijd stopt omdat de limiet wordt bereikt, is er nog steeds een logisch probleem dat moet worden opgelost.

2. Zorg ervoor dat de automatische aanvulling detecteerbaar is, en niet alleen dat deze in conversaties voorkomt.

Het sterkste beëindigingssignaal is er een dat uw applicatie kan herkennen zonder de tekst te hoeven interpreteren. Als de workflow een duidelijke succesvolle gebeurtenis heeft, gebruik dan de meest overeenkomende beëindigingsvoorwaarde. Een specifieke overdracht kan bijvoorbeeld worden gedetecteerd met HandoffTermination, de voltooiing van een bepaalde tool kan worden gedetecteerd met FunctionCallTermination, en aangepaste logica kan worden uitgedrukt met FunctionalTermination.

Als je dit gebruikt TextMentionTermination("TERMINATE"), maak de verantwoordelijkheid dan expliciet: welke agent mag de voltooiing verklaren en onder welke geverifieerde voorwaarde? Vermijd het geven van vage instructies aan elke deelnemer, zoals "ga door tot je tevreden bent". Dat soort instructies kan leiden tot eindeloos gekritiseerd en herschreven gedrag, omdat "tevreden" geen waarneembare grens heeft.

Een nuttig voltooiingscontract is concreet: "De beoordelaar geeft pas het bevel tot beëindiging nadat het concept alle drie de vereiste onderdelen bevat en er geen openstaande blokkades meer zijn." Nog beter is het om, indien mogelijk, de beoordelaar een gestructureerde status te laten produceren die de applicatie kan controleren.

3. Corrigeer de routering van SelectorGroupChat voordat alle agentprompts worden herschreven.

SelectorGroupChatGebruikt een model om de volgende spreker te kiezen uit de gedeelde gesprekscontext. De stabiele documentatie vermeldt dat de namen en beschrijvingen van deelnemers van belang zijn, omdat ze worden gebruikt bij de sprekerselectie. Standaard wordt dezelfde spreker niet achter elkaar geselecteerd, tenzij het de enige beschikbare agent is, hoewel allow_repeated_speaker=Truedit gedrag kan worden gewijzigd. AutoGen biedt ook mogelijkheden selector_funcvoor candidate_funcmeer deterministische controle wanneer dat nodig is. Raadpleeg de officiële SelectorGroupChat-documentatie .

Als dezelfde deelnemer steeds opnieuw wordt geselecteerd, controleer dan de volgende punten in deze volgorde:

  • Agentbeschrijvingen: elke beschrijving moet aangeven wat de agent doet en wanneer deze moet worden gekozen. Overlappende beschrijvingen maken de routering instabiel.
  • Selectieprompt: houd de routeringsregels kort genoeg zodat het model ze betrouwbaar kan toepassen. De AutoGen-documentatie raadt expliciet aan om een ​​aangepaste selector te overwegen wanneer de prompt veel voorwaarden begint te bevatten.
  • Herhaalde luidsprekerinstelling: laat deze allow_repeated_speakerfunctie uitgeschakeld, tenzij opeenvolgende schakelingen echt nodig zijn.
  • Kandidaatbeperking: als er na een bepaalde toestand slechts twee agenten geldig zijn, beperk dan de set kandidaten in plaats van het model te vragen een keuze te maken uit alle deelnemers.
  • Deterministische overgangen: gebruik deze selector_funcwanneer de workflow in feite een toestandsmachine is vermomd als een gesprek.

Het belangrijkste onderscheid is eenvoudig: gebruik LLM-gebaseerde sprekerselectie wanneer de volgende spreker daadwerkelijk semantisch oordeel vereist. Gebruik deterministische routering wanneer de volgende spreker wordt bepaald door de workflowstatus.

4. Voorkom herhaalde toolaanroepen door de voortgang zichtbaar te maken.

In de huidige versie van AgentChat AssistantAgentis er een max_tool_iterationsparameter. De stabiele API-documentatie vermeldt dat de standaardwaarde 1 is; wanneer deze wordt verhoogd, kan de agent extra opeenvolgende toolaanroepen doen totdat het model een tekstreactie retourneert of het maximum is bereikt. Dit betekent dat een enkele agentrun beperkt is door deze instelling, maar dezelfde agent kan nog steeds opnieuw door een team worden geselecteerd en hetzelfde mislukte toolpatroon herhalen in verschillende beurten. Zie de officiële API-referentie van AssistantAgent .

agent = AssistantAgent(
    name="worker",
    model_client=model_client,
    tools=[lookup_tool],
    max_tool_iterations=3,
)

Als je steeds dezelfde tool en argumenten ziet, beperkt het verlagen van de iteratielimiet alleen de schade. De fundamentele oplossing zit meestal in het toolcontract. Het model heeft voldoende informatie nodig om te bepalen of de aanroep is geslaagd, permanent is mislukt, tijdelijk is mislukt of geen nieuwe informatie heeft opgeleverd.

Geef de voorkeur aan een compact, expliciet resultaat, zoals:

{
    "status": "no_new_data",
    "query": "customer_123",
    "retryable": false,
    "reason": "record already checked",
    "next_action": "return_to_planner"
}

Dat is nuttiger dan een algemene tekst zoals "Geen resultaat", omdat het model kan zien dat het herhalen van dezelfde aanroep geen vooruitgang is. Voor tools met neveneffecten is het ook aan te raden om idempotentie op applicatieniveau toe te voegen, zodat een herhaalde aanroep niet herhaaldelijk hetzelfde ticket, dezelfde betaling, hetzelfde bericht of dezelfde databasewijziging kan genereren.

Controleer ook parallelle toolaanroepen.

De stabiele AssistantAgentreferentie vermeldt dat meerdere toolaanroepen gelijktijdig kunnen worden uitgevoerd en dat parallelle toolaanroepen kunnen worden uitgeschakeld in ondersteunde modelclients. Er wordt ook gewaarschuwd dat als er meerdere overdrachten worden gedetecteerd, alleen de eerste wordt uitgevoerd, en er wordt aanbevolen om parallelle toolaanroepen uit te schakelen om deze situatie te voorkomen. Als uw workflow uitgaat van strikte statusovergangen waarbij slechts één actie tegelijk plaatsvindt, kunnen parallelle aanroepen de resulterende status moeilijker te begrijpen maken.

5. Onderbreek het pingpongspel bij de overdracht in teams in de stijl van Swarm.

Een overdrachtscyclus ziet er meestal als volgt uit: Agent A besluit dat Agent B beter geschikt is, Agent B ziet onvolledige context en stuurt de taak terug, en beide keuzes blijven lokaal voor altijd redelijk. Het probleem is niet dat een van beide modellen "fout" is. Het overdrachtsbeleid mist eigenaarschap en een eindtoestand.

Los dit op door elke overdracht een specifieke voorwaarde en een regel te geven voor wat er gebeurt als het doel geen vooruitgang kan boeken. Voor interactieve workflows HandoffTermination(target="user")is dit zo ontworpen dat het team stopt wanneer de controle moet terugkeren naar de applicatie of persoon. De documentatie van AutoGen over menselijke interactie legt ook uit dat Swarm-workflows een bewust hervatgedrag vereisen na een gebruikersoverdracht. Zie de officiële documentatie over menselijke interactie .

Een goed overdrachtscontract omvat het volgende:

  • de exacte capaciteit waarover het doelwit beschikt;
  • het bewijs dat de overdracht rechtvaardigt;
  • wat het doel moet retourneren als het slaagt;
  • wat de doelgroep moet doen als de vereiste informatie ontbreekt;
  • een verbod om de taak ongewijzigd terug te sturen.

6. Beschouw GraphFlow-cycli als echte lussen die expliciete uitgangen vereisen.

GraphFlowOndersteunt opzettelijke cycli, voorwaardelijke vertakkingen en lusuitgangen. De stabiele API beschrijft lussen als geldig alleen wanneer er een voorwaarde is die de lus uiteindelijk verlaat, en de builder valideert de grafstructuur. Deze is ook gemarkeerd als experimenteel. Een structureel geldige lus kan nog steeds te lang duren als de exitvoorwaarde logisch onbereikbaar is, dus zorg voor een onafhankelijke beëindigingsvoorwaarde of een limiet op het aantal beurten. Zie de officiële API-referentie van de AutoGen-teams .

Dit is vooral belangrijk bij ontwerpen met een "schrijver → beoordelaar → schrijver"-structuur. Als de beoordelaar de instructie krijgt om "te blijven verbeteren tot het perfect is", kan het uitgangspunt nooit waar worden. Vervang subjectieve perfectie door een concrete beoordelingscriteria, zoals: vereiste onderdelen aanwezig, validatiecontroles geslaagd, geen kritieke fouten en maximaal aantal revisies bereikt.

7. Stel de status opnieuw in wanneer de volgende taak niet relevant is.

AgentChat-agenten en -teams hebben een eigen status. De stabiele documentatie van AutoGen stelt dat het team de gesprekscontext behoudt tussen verschillende uitvoeringen, zodat gerelateerde taken kunnen worden voortgezet. Het biedt ook de mogelijkheid reset()om de status van het team en de deelnemer te wissen. Dit gedrag is nuttig voor het voortzetten van taken, maar het kan lijken op een oneindige lus als een niet-gerelateerde taak oude context, onvoltooide delegatie of eerdere aannames overneemt.

await team.reset()
result = await team.run(task=new_unrelated_task)

De stabiele agent-API waarschuwt bellers er ook voor om bij elk gesprek alleen nieuwe berichten door te geven in plaats van de volledige gespreksgeschiedenis handmatig opnieuw af te spelen. Het opnieuw invoeren van de volledige geschiedenis terwijl de agent ook de status bijhoudt, kan context dupliceren en repetitief gedrag versterken.

8. Noteer de overgang, niet alleen de eindtekst.

Wanneer een lus moeilijk te reproduceren is, registreer dan voldoende informatie om voor elke beurt vier vragen te beantwoorden: wie handelde, waarom werden ze geselecteerd, welke actie probeerden ze uit te voeren en wat veranderde er daarna? AutoGen biedt ondersteuning voor tracering en observatie, en de stabiele traceringshandleiding laat zien hoe je AgentChat-teams kunt traceren. Zie de officiële AutoGen-traceringsdocumentatie .

Log minimaal:

  • run-ID en beurtnummer;
  • berichtbron en berichttype;
  • geselecteerde spreker en beschikbare kandidaten;
  • de naam van het hulpmiddel plus een hash of genormaliseerde vorm van de argumenten;
  • De status van het gereedschap en of de status is gewijzigd;
  • overdracht van bron en doel;
  • resultaat van de beëindigingsvoorwaarde;
  • TaskResult.stop_reasonwanneer de wedstrijd eindigt.

Een zeer effectieve diagnosemethode is het detecteren van "zelfde actie, zelfde status". Als dezelfde agent dezelfde tool aanroept met equivalente argumenten en de gedeelde status-hash gedurende meerdere beurten niet is gewijzigd, stop dan de uitvoering en markeer deze als een lus zonder voortgang. Deze controle bevindt zich in uw applicatielogica in plaats van een ingebouwde AutoGen-functie te zijn, maar het detecteert een klasse van fouten die token- of berichtlimieten pas achteraf kunnen detecteren.

Een praktische, veilige basislijn

Voor een bestaande AutoGen AgentChat-applicatie geldt als volgt een conservatieve basislijn:

  • Configureer altijd een vast bericht, een beurt, een time-out of een tokenlimiet.
  • Combineer die bovengrens met een zinvolle voltooiingsvoorwaarde met behulp van OF, waarbij een van beide de uitvoering moet stoppen.
  • Houd max_tool_iterationshet kort, tenzij de gebruiker echt een gereedschapsreeks met meerdere stappen nodig heeft.
  • Geef gestructureerde toolresultaten terug die onderscheid maken tussen succes, geen voortgang, herhaalbare fout en permanente fout.
  • Sta niet toe dat sprekers meerdere keren aan het woord komen, tenzij de workflow dit vereist.
  • Gebruik deterministische selectors voor deterministische workflows.
  • Wijs bij overdrachten expliciet eigenaarschap en een eindroute toe.
  • Reset teams tussen taken die niets met elkaar te maken hebben.
  • Volg bochten en detecteer herhaalde acties met ongewijzigde toestand.

Wat je vooral niet moet doen

Los niet elke lus op door simpelweg de waarde max_messagesvan 25 naar 100 te verhogen. Dat verandert de kosten van een fout, niet de logica. Voeg geen langere systeemprompt toe voordat u controleert of de beëindigingsvoorwaarde daadwerkelijk in het team is opgenomen. Laat niet twee agenten allebei de "eindbeoordeling" beheren. Retourneer geen dubbelzinnige toolstrings als de volgende modelaanroep moet bepalen of er opnieuw moet worden geprobeerd. En ga er niet van uit dat een run die uiteindelijk stopt gezond is: een workflow die altijd de veiligheidslimiet bereikt, functioneert nog steeds niet goed.

Wanneer is migreren beter dan blijven patchen?

Als u een bestaande AutoGen-applicatie onderhoudt, zijn deze oplossingen geschikt en blijft de huidige documentatie beschikbaar. Voor een nieuw systeem of een ingrijpende herziening van de orchestratie verandert de onderhoudsmodus echter de beslissing. Microsoft verwijst nieuwe gebruikers nu naar Microsoft Agent Framework, en de migratiedocumentatie beschrijft een verschuiving van de gebeurtenisgestuurde kern en teams op hoog niveau van AutoGen naar getypte, grafiekgebaseerde workflows. Dit betekent niet dat een AutoGen-loop onmiddellijk moet worden gemigreerd, maar wel dat u de kosten van diepgaander, AutoGen-specifiek orchestratiewerk moet afwegen tegen de overstap naar de ondersteunde opvolger.

De kortste en meest betrouwbare manier om fouten op te sporen is daarom: beperk de uitvoering, identificeer de herhalende overgang, maak de voortgang waarneembaar en zorg er vervolgens voor dat de uitgang deterministisch is. Zodra deze vier onderdelen aanwezig zijn, worden de meeste "oneindige" AutoGen-lussen gewone workflowfouten die je kunt reproduceren en verhelpen.

Officiële referenties

Laat een reactie achter

Hoe je automatisch SEO-metatitels en -beschrijvingen kunt genereren met Local Ollama

Hoe je automatisch SEO-metatitels en -beschrijvingen kunt genereren met Local Ollama

Ontwikkel een lokale Ollama-workflow die in bulk gestructureerde SEO-titels en meta-beschrijvingen genereert, de output valideert en resultaten markeert voor handmatige beoordeling.

Moderne PowerPoint-presentatiesjabloon voor vastgoedaanbiedingen (gratis): een praktisch, kant-en-klaar sjabloon voor verkopers

Moderne PowerPoint-presentatiesjabloon voor vastgoedaanbiedingen (gratis): een praktisch, kant-en-klaar sjabloon voor verkopers

Gebruik deze gratis, moderne PowerPoint-presentatiesjabloon voor vastgoedaanbiedingen om de prijsbepaling, marketing, voorbereiding van de woning, makelaarswaarde en vervolgstappen voor de verkoper te organiseren.

Afdrukbaar sjabloon voor bouwkostenraming in Excel: een praktische oplossing voor kleine aannemers

Afdrukbaar sjabloon voor bouwkostenraming in Excel: een praktische oplossing voor kleine aannemers

Maak in Excel een afdrukbaar sjabloon voor een bouwkostenraming met duidelijke gegevens over arbeid, materialen, formules, winstmarges, uitsluitingen en afdrukklare totalen voor de klant.

Hoe genereer je filmische belichtingssignalen voor Luma Dream Machine?

Hoe genereer je filmische belichtingssignalen voor Luma Dream Machine?

Maak krachtigere Luma Dream Machine-videoprompts met een praktische filmische belichtingsformule, herbruikbare recepten, voorbeelden en een snelle checklist voor probleemoplossing.

Minimalist Investor Pitch Deck PowerPoint Template for Tech Startups: What to Include and How to Structure It

Minimalist Investor Pitch Deck PowerPoint Template for Tech Startups: What to Include and How to Structure It

Build a minimalist tech startup investor pitch deck in PowerPoint with the right slide order, clear design rules, traction metrics, and investor-ready appendix.

Hoe voorkom je dat Excel automatisch getallen in datums omzet?

Hoe voorkom je dat Excel automatisch getallen in datums omzet?

Voorkom dat Excel codes, ID's en breuken omzet in datums. Gebruik de tekstindeling, apostrofen, importopties en de huidige Microsoft 365-opties.

Hoe de rendertijd in ComfyUI te verkorten voor een SDXL-workflow

Hoe de rendertijd in ComfyUI te verkorten voor een SDXL-workflow

Versnel ComfyUI SDXL-renders door het aantal samplingtaken te verminderen, de resolutie en batchgrootte te beheren, knooppunten te vereenvoudigen, caching te gebruiken en VRAM en aandacht op een veilige manier af te stemmen.

Gratis Excel-sjabloon voor het bijhouden van kosten en inkomsten van verhuurwoningen: Eenvoudig werkboek voor verhuurders

Gratis Excel-sjabloon voor het bijhouden van kosten en inkomsten van verhuurwoningen: Eenvoudig werkboek voor verhuurders

Maak in Excel een praktische tool voor het bijhouden van inkomsten en uitgaven van uw huurwoning, met duidelijke categorieën, formules, maandelijkse overzichten en richtlijnen voor een belastingvriendelijke administratie.

Hoe u een privé, lokale AI-kennisbank voor persoonlijke documenten kunt opzetten

Hoe u een privé, lokale AI-kennisbank voor persoonlijke documenten kunt opzetten

Bouw een eigen, lokale AI-kennisbank met Ollama, AnythingLLM, lokale embeddings en RAG. Leer hoe je alles in vier stappen instelt, privacycontroles uitvoert, test en back-ups maakt.

Hoe los je de foutmelding "Context Window Exceeded" op bij de analyse van lange documenten zonder belangrijke bewijsgegevens te verliezen?

Hoe los je de foutmelding "Context Window Exceeded" op bij de analyse van lange documenten zonder belangrijke bewijsgegevens te verliezen?

Corrigeer contextvensterfouten bij de analyse van lange documenten door de invoer te verkleinen, bestanden te splitsen, gegevens op te halen en te controleren of het uiteindelijke antwoord de bron dekt.