laravel/ai v1.3.0 gaat deze pagina een stap verder dan de basis van de AI SDK en zet de uitvoeringsvolgorde en stopvoorwaarden op een rij.
De eenheid waarin middleware wordt uitgevoerd
Wanneer een agent een respons van het model ontvangt, tools uitvoert en het model opnieuw aanroept, is de volgende modelaanroep een aparte stap. Vlak voor elke stap gaat de uitvoering door de middleware dieHasMiddleware::middleware() teruggeeft, in de volgorde waarin die is gedeclareerd.
De PendingStep die aan handle(PendingStep $step, Closure $next) van de middleware wordt doorgegeven, bevat de array steps met reeds uitgevoerde stappen, hun cumulatieve verbruik usage en het huidige, vanaf nul tellende stapnummer number. Bij de eerste stap bevat usage nog niet het verbruik van de huidige modelaanroep.
De then() die je aan het resultaat van $next($step) koppelt, draait nadat het model heeft geantwoord en voordat toolaanroepen worden uitgevoerd. Het is geen hook die pas na de uitvoering van tools wordt aangeroepen. Bovendien is usage op dat moment het totaal van eerder voltooide stappen en voorspelt het niet het aantal tokens van de lopende request.
Verwerking per stap registreren
In dit voorbeeld worden alleen het stapnummer en het aantal tot dan toe gebruikte inputtokens gelogd. Sla prompttekst of modeloutput niet zomaar onvoorwaardelijk op in logs.HasMiddleware op de agent en geef de instanties terug vanuit middleware().
Stop in de volgorde van middleware() vooraan. Wanneer de limiet is overschreden en de volgende stap niet wordt gestart, wordt de daaropvolgende LogAgentSteps voor die stap niet uitgevoerd. Draai je de volgorde om, dan kan het gebeuren dat alleen “starting” wordt gelogd en “model responded” niet. Geef het resultaat van $next($step) terug vanuit handle(); de callback van then() hoeft geen respons terug te geven.
Stop houdt de volgende modelaanroep tegen
Stop::when(...) beëindigt de verwerking vóór de betreffende stap wanneer de voorwaarde true wordt, en Stop::unless(...) wanneer de voorwaarde false wordt. Het voorbeeld hierboven doet geen volgende aanroep meer zodra de cumulatieve inputtokens van voltooide stappen 50.000 of meer bedragen. Het is geen harde limiet die een enkele modelaanroep geforceerd afbreekt voordat de drempel wordt overschreden.
Middleware die op een eigen voorwaarde wil stoppen, kan ook
Laravel\Ai\Gateway\StepResult::stop() teruggeven. Vanuit handle() geef je het resultaat van $next($step), een StepResponse of StepResult::stop() terug. Een ander type teruggeven leidt tot een exception.
De uitvoeringsvolgorde verifiëren
Controleer ten minste de volgende gevallen, zodat je modelresponses en de uitvoering van tools niet door elkaar haalt.- Bij een generatie van één stap verschijnen de startlog en de log van de modelrespons elk één keer.
- Bij extra stappen na een tool loopt het nummer op vanaf 0 en bevat de
usagevan latere stappen het verbruik van eerdere stappen. - Als de stopvoorwaarde vanaf het begin geldt, vinden er geen modelaanroep en geen logs van
LogAgentStepsplaats. - Als de voorwaarde halverwege wordt bereikt, blijven de stappen tot dat moment behouden en vindt de modelaanroep voor de volgende stap niet plaats.
then() neveneffecten nodig heeft, ontwerp je die in de veronderstelling dat de callback niet wordt aangeroepen op paden die mislukken of stoppen voordat er een modelrespons is.
Geraadpleegde primaire bronnen
- Officiële documentatie van Laravel 13: middleware in de AI SDK
- Laravel AI SDK v1.3.0: waarden van PendingStep
- Laravel AI SDK v1.3.0: generatielus en uitvoeringsvolgorde van middleware
- Laravel AI SDK v1.3.0: StepResult::stop() en then()
- Laravel AI SDK v1.3.0: Stop-middleware
- Laravel AI SDK v1.3.0: tests voor het stoppen van stappen