Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wykonywanie pętli agenta ponownie wywołuje agenta do momentu spełnienia warunku ukończenia. Służy do iteracyjnego uściślenia, wykonywania zadań do wykonania, oczekiwania na zadania w tle lub oceniania, czy odpowiedź spełnia jawne kryteria.
Zawsze powiązane pętle autonomiczne. Warunek ukończenia może zakończyć się niepowodzeniem, model może zatrzymać się, a ewaluator może być probabilistyczne.
Ważna
Pętla agenta jest eksperymentalna.
Ręczne konfigurowanie pętli
Użyj interfejsu API kompozycji bezpośredniej, jeśli chcesz utworzyć pętlę bez innych domyślnych ustawień agenta uprzężenia.
Zaimportuj typy pętli i zawij je AIAgent za pomocą polecenia LoopAgent. Wartość domyślna to 10 wywołań agenta:
using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;
AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
baseAgent,
new CompletionMarkerLoopEvaluator("DONE"),
new LoopAgentOptions { MaxIterations = 5 });
Zaimportuj AgentLoopMiddleware i dodaj go do zwykłego Agentelementu . Wartość domyślna to 10 przebiegów agenta:
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,
)
],
)
Predykat może być synchroniczny lub asynchroniczny. Wróć True , aby kontynuować, False zatrzymać lub (continue, feedback) przekazać opinię do następnej iteracji.
Note
Spakowane możliwości pętli opisane na tej stronie nie są obecnie dostępne w języku Go.
Wybieranie warunku ukończenia
LoopAgent akceptuje jeden ewaluator lub uporządkowaną kolekcję:
| Oceniacz | Trwa |
|---|---|
CompletionMarkerLoopEvaluator |
Najnowsza odpowiedź nie zawiera skonfigurowanego znacznika. |
TodoCompletionLoopEvaluator |
Rozwiązane TodoProvider nadal zawiera niekompletne elementy, opcjonalnie w wybranych trybach agenta. |
BackgroundTaskCompletionLoopEvaluator |
Rozwiązane BackgroundAgentsProvider nadal ma uruchomione zadania. |
AIJudgeLoopEvaluator |
Oddzielny klient sędziego mówi, że oryginalne żądanie nie jest w pełni odpowiedzi. |
DelegateLoopEvaluator |
Wywołanie zwrotne zwraca wartość LoopEvaluation.Continue(...). |
Po skonfigurowaniu wielu ewaluatorów są one uruchamiane w kolejności. Pierwszy ewaluator, który żąda innej iteracji dostarcza swoją opinię; pętla zatrzymuje się tylko wtedy, gdy wszyscy ewaluatorzy odmawiają kontynuowania.
Korzystanie z sędziego sztucznej inteligencji
Sędzia otrzymuje oryginalne żądanie i najnowszą odpowiedź agenta. Jeśli znajdzie lukę, jej analiza stanie się opinią na potrzeby następnej iteracji:
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 });
Użyj tylko punktu końcowego sędziego, któremu ufasz, z oryginalnym żądaniem i wygenerowaną odpowiedzią.
Kontekst i dane wyjściowe kontrolki
Domyślnie LoopAgent ponownie używa jednej sesji i wysyła najnowszą opinię ewaluatora jako następne dane wejściowe.
FreshContextPerIteration = true zamiast tego ponownie kompiluje każde przekazanie z oryginalnego żądania oraz zagregowany dziennik opinii i resetuje lub przywraca sesję.
Uruchomienia nieprzesyłania strumieniowego zwracają domyślnie zagregowaną transkrypcję. Ustaw NonStreamingReturnsLastResponseOnly = true wartość , aby zwrócić tylko ostateczną odpowiedź. Przesyłanie strumieniowe zawsze emituje każdą iterację i wszelkie widoczne w imieniu wiadomości zwrotnych.
Predykat odbiera argumenty słów kluczowych, w tym iteration, , sessionoriginal_messagesmessagesagentlast_resultprogress, i .feedback Pomocnicy todos_remaining() i background_tasks_running() zapewniają wbudowane warunki zadań do wykonania i zadań w tle. Połącz je z elementem todos_remaining_message lub background_tasks_running_message , aby wygenerować docelowe następne dane wejściowe.
Korzystanie z sędziego sztucznej inteligencji
AgentLoopMiddleware.with_judge tworzy pętlę sterowaną sędzią. Pętle sędziego są domyślnie ustawione na pięć iteracji:
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],
)
Rozumowanie sędziego jest karmione z powrotem do agenta, gdy wymagana jest większa praca. Użyj tylko punktu końcowego sędziego, któremu ufasz, z oryginalnym żądaniem i wygenerowaną odpowiedzią.
Kontrolowanie kontekstu, postępu i danych wyjściowych
W przypadku pętli zaawansowanych skonstruuj AgentLoopMiddleware bezpośrednio:
-
record_feedbacktworzy zwięzły wpis postępu po każdej iteracji pracy. -
progressuwidacznia skumulowane wpisy w wywołaniach zwrotnych. -
inject_progress=Truedodaje postęp do danych wejściowych następnej iteracji. -
fresh_context=Trueuruchamia się ponownie z oryginalnego dziennika zadań i postępu oraz przywraca dołączoną sesję do migawki przed pętlą. -
return_final_only=TrueZwraca tylko ostatnią odpowiedź dla przebiegów nieprzesyłania strumieniowego.
Przekaż max_iterations=None tylko wtedy, gdy predykat ukończenia ma gwarancję zakończenia.
Spakowane warunki ukończenia i integracja sędziego opisane na tej stronie nie są obecnie dostępne w języku Go.
Używanie pętli z agentem uprzężenia
Użyj konfiguracji agenta uprzęży, jeśli chcesz również mieć wstępnie skonfigurowaną historię, planowanie, pamięć, zatwierdzenie i potok obserwacji.
Ustaw wartość HarnessAgentOptions.LoopEvaluators. Uprzęża ma zastosowanie LoopAgent jako najbardziej zewnętrzna dekorator agenta:
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();
Pusta lub nullLoopEvaluators kolekcja pozostawia uprzężę jednostrzeliwą.
Zachowanie zatwierdzania i sesji
LoopAgent zatrzymuje się przed oceną warunku ukończenia, gdy iteracja zwraca oczekujące żądanie zatwierdzenia narzędzia. Zwraca żądanie do obiektu wywołującego zamiast ukrywać je za inną autonomiczną iterację. Gdy obiekt wywołujący dostarczy odpowiedź na zatwierdzenie za pośrednictwem normalnego przepływu zatwierdzania narzędzi , agent może kontynuować.
LoopAgent nie dodaje samej obsługi zatwierdzania. Agent uprzęży stosuje pętlę poza ToolApprovalAgentprogramem , umożliwiając oczekiwanie na żądania zatwierdzenia w celu ucieczki pętli.
Użyj ponownie tych samych AgentSession wywołań, aby kontynuować konwersację. Iteracji pętli domyślnie współużytkuje tę sesję. W FreshContextPerIteration = trueprogramie LoopAgent program resetuje lub przywraca stan sesji dostarczonej przez obiekt wywołujący, jeśli jest obsługiwany. Magazyn konwersacji należących do usługi może zachować historię, gdy serializowana sesja zawiera tylko identyfikator konwersacji zdalnej.
Podaj loop_should_continue wartość na create_harness_agent; loop_max_iterations wartość domyślna to 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 dostosowuje następne dane wejściowe.
loop_should_continueBez parametru fabryka nie dodaje pętli i ignoruje inne argumenty pętli.
Zachowanie zatwierdzania i sesji
AgentLoopMiddleware zatrzymuje się przed oceną predykatu kontynuacji, gdy iteracja zwraca oczekujące żądanie zatwierdzenia narzędzia. Zwraca żądanie do obiektu wywołującego zamiast ukrywać je za inną autonomiczną iterację. Gdy obiekt wywołujący dostarczy odpowiedź na zatwierdzenie za pośrednictwem normalnego przepływu zatwierdzania narzędzi , agent może kontynuować.
AgentLoopMiddleware nie dodaje ToolApprovalMiddleware się. Agent harness umieszcza pętlę poza oprogramowaniem pośredniczącym zatwierdzania, umożliwiając oczekiwanie na żądania zatwierdzenia w celu uniknięcia pętli. Utwórz i przekaż element AgentSession na każdym uruchomieniu agenta uprzęży, gdy jest włączone automatyczne zatwierdzanie narzędzi.
Użyj ponownie tych samych AgentSession wywołań, aby kontynuować konwersację. Iteracji pętli domyślnie współużytkuje tę sesję. W programie fresh_context=Trueoprogramowanie pośredniczące przywraca dołączoną sesję do migawki przed pętlą między iteracjami. Magazyn konwersacji należących do usługi może zachować historię, gdy serializowana sesja zawiera tylko identyfikator konwersacji zdalnej.
Note
Pętla uprzężenia agenta nie jest obecnie dostępna w języku Go, więc nie ma zastosowania jego zachowanie zatwierdzania i sesji.