Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Agentlusing roept een agent opnieuw aan totdat aan een voltooiingsvoorwaarde wordt voldaan. Gebruik het voor iteratieve verfijning, voltooiing van taken, wachten op achtergrondtaken of evalueren of een antwoord voldoet aan expliciete criteria.
Altijd gebonden autonome lussen. Een voltooiingsvoorwaarde kan mislukken, een model kan vastlopen en een evaluator kan probabilistisch zijn.
Important
Agentlussen zijn experimenteel.
Lus handmatig instellen
Gebruik de directe samenstellings-API als u lus wilt uitvoeren zonder de andere Harness Agent-standaardwaarden.
Importeer de lustypen en verpakt deze AIAgent met LoopAgent. Het standaard maximum is 10 agent-aanroepen:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
baseAgent,
new CompletionMarkerLoopEvaluator("DONE"),
new LoopAgentOptions { MaxIterations = 5 });
Importeer AgentLoopMiddleware en voeg het toe aan een gewone Agent. Het standaard maximum is 10 agentuitvoeringen:
from agent_framework import Agent, AgentLoopMiddleware
def needs_more_work(*, last_result, **kwargs):
return "DONE" not in last_result.text
agent = Agent(
client=client,
middleware=[
AgentLoopMiddleware(
needs_more_work,
max_iterations=5,
)
],
)
Het predicaat kan synchroon of asynchroon zijn. Ga terug True om door te gaan, False om te stoppen of (continue, feedback) om feedback door te geven aan de volgende iteratie.
Opmerking
De functionaliteit voor verpakte lussen die op deze pagina worden beschreven, is momenteel niet beschikbaar in Go.
Een voltooiingsvoorwaarde kiezen
LoopAgent accepteert één evaluator of een geordende verzameling:
| Beoordelaar | Gaat door terwijl |
|---|---|
CompletionMarkerLoopEvaluator |
Het meest recente antwoord bevat niet de geconfigureerde markering. |
TodoCompletionLoopEvaluator |
Een opgelost item TodoProvider bevat nog steeds onvolledige items, optioneel in de geselecteerde agentmodi. |
BackgroundTaskCompletionLoopEvaluator |
Een opgeloste BackgroundAgentsProvider taak heeft nog steeds actieve taken. |
AIJudgeLoopEvaluator |
Een afzonderlijke rechterclient zegt dat de oorspronkelijke aanvraag niet volledig wordt beantwoord. |
DelegateLoopEvaluator |
Uw callback retourneert LoopEvaluation.Continue(...). |
Wanneer meerdere evaluators zijn geconfigureerd, worden ze op volgorde uitgevoerd. De eerste evaluator die een andere iteratie vraagt, levert zijn feedback; de lus stopt alleen wanneer alle evaluators weigeren om door te gaan.
Een AI-rechter gebruiken
De rechter ontvangt het oorspronkelijke verzoek en de meest recente reactie van de agent. Als er een hiaat wordt gevonden, wordt de analyse feedback voor de volgende iteratie:
var evaluator = new AIJudgeLoopEvaluator(
judgeClient,
new AIJudgeLoopEvaluatorOptions
{
Criteria =
[
"Answer every part of the request.",
"Support conclusions with evidence.",
],
});
AIAgent loopAgent = new LoopAgent(
agent,
evaluator,
new LoopAgentOptions { MaxIterations = 4 });
Gebruik alleen een rechtereindpunt dat u vertrouwt met de oorspronkelijke aanvraag en het gegenereerde antwoord.
Context en uitvoer beheren
LoopAgent Standaard wordt één sessie opnieuw gebruikt en wordt de meest recente feedback van de winnende evaluator verzonden als de volgende invoer.
FreshContextPerIteration = true in plaats daarvan wordt elke pas opnieuw opgebouwd uit de oorspronkelijke aanvraag plus een samengevoegd feedbacklogboek en wordt de sessie opnieuw ingesteld of hersteld.
Niet-streaminguitvoeringen retourneren standaard een geaggregeerde transcriptie. Ingesteld NonStreamingReturnsLastResponseOnly = true om alleen het uiteindelijke antwoord te retourneren. Streaming verzendt altijd elke iteratie en eventuele zichtbare berichten namens feedback.
Het predicaat ontvangt trefwoordargumenten, waaronder , , , , , , agenten feedbackprogress. sessionoriginal_messagesmessageslast_resultiteration De helpers todos_remaining() en background_tasks_running() bieden ingebouwde taken en achtergrondtaken. Koppel ze aan todos_remaining_message of background_tasks_running_message genereer een gerichte volgende invoer.
Een AI-rechter gebruiken
AgentLoopMiddleware.with_judge bouwt een rechtergestuurde lus. Rechterlussen zijn standaard ingesteld op vijf iteraties:
from agent_framework import Agent, AgentLoopMiddleware
loop = AgentLoopMiddleware.with_judge(
judge_client,
criteria=[
"Answer every part of the request.",
"Support conclusions with evidence.",
],
max_iterations=4,
)
agent = Agent(
client=client,
middleware=[loop],
)
De redenering van de rechter wordt teruggegeven aan de agent wanneer er meer werk nodig is. Gebruik alleen een rechtereindpunt dat u vertrouwt met de oorspronkelijke aanvraag en het gegenereerde antwoord.
Context, voortgang en uitvoer beheren
Voor geavanceerde lussen maakt u AgentLoopMiddleware rechtstreeks het volgende:
-
record_feedbackmaakt een beknopte voortgangsvermelding na elke werkiteratie. -
progressstelt geaccumuleerde vermeldingen beschikbaar voor callbacks. -
inject_progress=Truevoegt de voortgang toe aan de invoer van de volgende iteratie. -
fresh_context=Truestart opnieuw vanaf het oorspronkelijke taak- en voortgangslogboek en herstelt een gekoppelde sessie aan de momentopname van de pre-lus. -
return_final_only=Trueretourneert alleen het laatste antwoord voor niet-streaminguitvoeringen.
Geef alleen door max_iterations=None wanneer het voltooiingspredicaat gegarandeerd wordt beëindigd.
De verpakte voltooiingsvoorwaarden en de integratie van rechters die op deze pagina worden beschreven, zijn momenteel niet beschikbaar in Go.
Lusing gebruiken met Harness Agent
Gebruik de Harness Agent-installatie wanneer u ook de vooraf geconfigureerde geschiedenis, planning, geheugen, goedkeuring en waarneembaarheidspijplijn wilt.
Stel HarnessAgentOptions.LoopEvaluatorsin. De harnas is van toepassing LoopAgent als buitenste agent decorator:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
var options = new HarnessAgentOptions
{
LoopEvaluators =
[
new CompletionMarkerLoopEvaluator("DONE"),
],
LoopAgentOptions = new LoopAgentOptions
{
MaxIterations = 5,
},
};
HarnessAgent agent = chatClient.AsHarnessAgent(options);
// Equivalent construction: new HarnessAgent(chatClient, options)
AgentSession session = await agent.CreateSessionAsync();
Een lege verzameling of nullLoopEvaluators verzameling laat het harnas single-shot achter.
Goedkeuring en sessiegedrag
LoopAgent stopt voordat de voltooiingsvoorwaarde wordt geëvalueerd wanneer een iteratie een aanvraag voor goedkeuring van het hulpprogramma retourneert. Het retourneert de aanvraag aan de aanroeper in plaats van deze achter een andere autonome iteratie te verbergen. Nadat de beller het goedkeuringsantwoord via de normale goedkeuringsstroom voor het hulpprogramma heeft opgegeven, kan de agent doorgaan.
LoopAgent voegt zelf geen goedkeuringsafhandeling toe. De Harness Agent past de lus buiten ToolApprovalAgenttoe, zodat goedkeuringsaanvragen in behandeling kunnen ontsnappen aan de lus.
Gebruik dezelfde AgentSession gesprekken opnieuw om het gesprek voort te zetten. Herhalende iteraties delen die sessie standaard. Met FreshContextPerIteration = true, LoopAgent resett of herstelt de door de beller opgegeven sessiestatus, waar ondersteund. Opslag van gesprekken in eigendom van de service kan de geschiedenis behouden wanneer de geserialiseerde sessie alleen een externe gespreks-id bevat.
Leveren loop_should_continue aan create_harness_agent; loop_max_iterations standaard ingesteld op 10:
from agent_framework import create_harness_agent
def needs_more_work(*, last_result, **kwargs):
return "DONE" not in last_result.text
agent = create_harness_agent(
client=client,
loop_should_continue=needs_more_work,
loop_max_iterations=5,
)
session = agent.create_session()
loop_next_message past de volgende invoer aan. Zonder nee loop_should_continuevoegt de factory geen lus toe en negeert de andere lusargumenten.
Goedkeuring en sessiegedrag
AgentLoopMiddleware stopt voordat het vervolgpredicaat wordt geëvalueerd wanneer een iteratie een aanvraag voor goedkeuring van het hulpprogramma retourneert. Het retourneert de aanvraag aan de aanroeper in plaats van deze achter een andere autonome iteratie te verbergen. Nadat de beller het goedkeuringsantwoord via de normale goedkeuringsstroom voor het hulpprogramma heeft opgegeven, kan de agent doorgaan.
AgentLoopMiddleware voegt zichzelf niet toe ToolApprovalMiddleware . De Harness Agent plaatst de lus buiten de middleware voor goedkeuring, waardoor goedkeuringsaanvragen in behandeling kunnen ontsnappen aan de lus. Elke Harness Agent-uitvoering maken en doorgeven AgentSession terwijl automatisch goedkeuren van hulpprogramma's is ingeschakeld.
Gebruik dezelfde AgentSession gesprekken opnieuw om het gesprek voort te zetten. Herhalende iteraties delen die sessie standaard. Met fresh_context=Truede middleware wordt de gekoppelde sessie hersteld naar de momentopname van de pre-lus tussen iteraties. Opslag van gesprekken in eigendom van de service kan de geschiedenis behouden wanneer de geserialiseerde sessie alleen een externe gespreks-id bevat.
Opmerking
Harness Agent-lussen zijn momenteel niet beschikbaar in Go, dus het goedkeurings- en sessiegedrag is niet van toepassing.