Ajanın döngüye girmesi

Aracı döngü, tamamlanma koşulu karşılanana kadar aracıyı yeniden çağırır. Bunu yinelemeli iyileştirme, yapılacakları tamamlama, arka plan görevlerinin tamamlanmasını bekleme veya bir yanıtın açıkça tanımlanmış ölçütleri karşılayıp karşılamadığını değerlendirme için kullanın.

Otonom döngüleri her zaman sınırlandırın. Tamamlama koşulu başarısız olabilir, model duraklayabilir ve değerlendirici olasılıksal olabilir.

Önemli

Ajanın döngüye girmesi deneyseldir.

Döngüyü manuel olarak ayarlayın

Diğer Harness Agent varsayılanları olmadan döngüsel çalışma istediğinizde doğrudan kompozisyon API'sini kullanın.

Döngü türlerini içe aktarın ve tüm AIAgent öğelerini LoopAgent ile sarın. Varsayılan maksimum değer 10 aracı çağrısıdır:

using Microsoft.Agents.AI;
using Microsoft.Extensions.AI;

AIAgent baseAgent = chatClient.AsAIAgent();
AIAgent agent = new LoopAgent(
    baseAgent,
    new CompletionMarkerLoopEvaluator("DONE"),
    new LoopAgentOptions { MaxIterations = 5 });

AgentLoopMiddleware öğesini içeri aktarın ve bunu normal bir Agent öğesine ekleyin. Varsayılan maksimum 10 ajan çalıştırmadır:

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,
        )
    ],
)

Yüklem eşzamanlı veya eşzamansız olabilir. Devam etmek için True öğesine, durdurmak için False öğesine veya geri bildirimi bir sonraki yinelemeye aktarmak için (continue, feedback) öğesine geri dönün.

Uyarı

Bu sayfada açıklanan paketlenmiş döngü özelliği şu anda Go'da sağlanmamaktadır.

Tamamlama koşulu seçme

LoopAgent bir değerlendiriciyi veya sıralı koleksiyonu kabul eder:

Değerlendirici Devam ederken
CompletionMarkerLoopEvaluator En son yanıt, yapılandırılmış işaretçiyi içermez.
TodoCompletionLoopEvaluator Çözümlenmiş TodoProvider öğesinde, isteğe bağlı olarak seçili aracı modlarında hâlâ tamamlanmamış öğeler bulunuyor.
BackgroundTaskCompletionLoopEvaluator Çözülmüş bir BackgroundAgentsProvider öğesinin hâlâ çalışan görevleri var.
AIJudgeLoopEvaluator Ayrı bir hakim istemcisi özgün isteğin tam olarak yanıtlanmadığını söylüyor.
DelegateLoopEvaluator Geri aramanız LoopEvaluation.Continue(...) geri döner.

Birden çok değerlendirici yapılandırıldığında sırayla çalışır. Başka bir yineleme talep eden ilk değerlendirici geri bildirimini sunar; döngü yalnızca tüm değerlendiriciler devam etmeyi reddettiğinde durur.

Yapay zeka hakimi kullanma

Hakim özgün isteği ve en son aracı yanıtını alır. Bir boşluk bulursa, analizi sonraki yineleme için geri bildirim haline gelir:

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 });

Yalnızca özgün istek ve oluşturulan yanıtta güvendiğiniz bir yargıç uç noktasını kullanın.

Bağlamı ve çıktıyı kontrol edin

Varsayılan olarak, LoopAgent bir oturumu yeniden kullanır ve kazanan değerlendiricinin en son geri bildirimlerini bir sonraki giriş olarak gönderir. FreshContextPerIteration = true bunun yerine, özgün istekten gelen her geçişi ve toplu geri bildirim günlüğünü yeniden oluşturur ve oturumu sıfırlar veya geri yükler.

Akış dışı çalıştırmalar varsayılan olarak toplu bir transkript döndürür. Yalnızca son yanıtı döndürecek şekilde ayarlayın NonStreamingReturnsLastResponseOnly = true . Akış her zaman tüm yinelemeleri ve başkası adına görünen tüm geri bildirim mesajlarını gönderir.

Yüklem, iteration, last_result, messages, original_messages, session, agent, progress ve feedback dâhil anahtar sözcük bağımsız değişkenlerini alır. todos_remaining() ve background_tasks_running() yardımcıları, yerleşik todo ve arka plan görevi koşulları sunar. Hedefli bir sonraki istem oluşturmak için bunları todos_remaining_message veya background_tasks_running_message ile eşleştirin.

Yapay zeka hakimi kullanma

AgentLoopMiddleware.with_judge değerlendirici odaklı bir döngü oluşturur. Judge döngüleri varsayılan olarak beş yinelemeye sahiptir:

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],
)

Hakimin mantığı, daha fazla çalışma gerektiğinde temsilciye geri döner. Yalnızca özgün istek ve oluşturulan yanıtta güvendiğiniz bir yargıç uç noktasını kullanın.

Bağlamı, ilerlemeyi ve çıkışı denetleme

Gelişmiş döngüler için AgentLoopMiddleware’i doğrudan oluşturun:

  • record_feedback her çalışma yinelemesi sonrasında kısa bir ilerleme girdisi oluşturur.
  • progress birikmiş kayıtları geri çağırma işlevlerine sunar.
  • inject_progress=True bir sonraki yinelemenin girdisine ilerleme ekler.
  • fresh_context=True orijinal görev ve ilerleme günlüğünden yeniden başlatılır ve ekli bir oturumu döngü öncesi anlık görüntüsüne geri yükler.
  • return_final_only=True akışsız çalıştırmalarda yalnızca son yanıtı döndürür.

max_iterations=None öğesini yalnızca tamamlanma yükleminin sonlanacağı garanti edildiğinde geçirin.

Bu sayfada açıklanan paketlenmiş tamamlama koşulları ve değerlendirici entegrasyonu şu anda Go'da kullanılamamaktadır.

Harness Agent ile döngü kullanımı

Önceden yapılandırılmış geçmişini, planlama, bellek, onay ve gözlemlenebilirlik işlem hattını da kullanmak istiyorsanız Harness Agent kurulumunu kullanın.

HarnessAgentOptions.LoopEvaluatorsayarlayın. Koşum, en dıştaki aracı dekoratörü olarak LoopAgent öğesini uygular:

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();

Boş bir koleksiyon ya da nullLoopEvaluators koleksiyonu, test düzeneğini tek seferlik hâle getirir.

Onay ve oturum davranışı

LoopAgent bir yineleme bekleyen bir araç onay isteği döndürdüğünde, tamamlanma koşulunu değerlendirmeye geçmeden durur. İsteği başka bir otonom yinelemenin arkasına gizlemek yerine çağıran tarafa döndürür. Çağrıyı yapan taraf, normal araç onayı akışı üzerinden onay yanıtını ilettikten sonra ajan devam edebilir.

LoopAgent kendisi onay işleme desteği eklemez. Harness Agent, döngüyü ToolApprovalAgent dışında uygular ve bekleyen onay isteklerinin döngüden çıkmasına izin verir.

AgentSession Konuşmaya devam etmek için aynı işlemi çağrılar arasında yeniden kullanabilirsiniz. Döngü yinelemeleri bu oturumu varsayılan olarak paylaşır. ile FreshContextPerIteration = true, LoopAgent desteklenen durumlarda çağıran tarafından sağlanan oturum durumunu sıfırlar veya geri yükler. Hizmete ait konuşma depolama alanı, serileştirilmiş oturum yalnızca uzak konuşma tanımlayıcısı içerdiğinde geçmişi koruyabilir.

loop_should_continue öğesini create_harness_agent öğesine sağlayın; loop_max_iterations varsayılan olarak 10'dur:

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 sonraki girişi özelleştirir. loop_should_continue olmadan, fabrika bir döngü eklemez ve diğer döngü argümanlarını yok sayar.

Onay ve oturum davranışı

AgentLoopMiddleware , bir yineleme bekleyen bir araç onay isteği döndürdüğünde, devam koşulunu değerlendirmeden durur. İsteği, başka bir özerk yinelemenin arkasına gizlemek yerine çağırana geri döndürür. Çağrıyı yapan normal araç onayı akışı aracılığıyla onay yanıtını ilettikten sonra ajan devam edebilir.

AgentLoopMiddleware ToolApprovalMiddleware öğesini kendiliğinden eklemez. Koşum Aracısı, döngüyü onay ara yazılımının dışına yerleştirerek bekleyen onay isteklerinin döngüden çıkmasına olanak tanır. Araçlar için otomatik onay etkinken, her Harness Agent çalıştırmasında bir AgentSession oluşturup iletin.

AgentSession Konuşmaya devam etmek için aynı işlemi çağrılar arasında yeniden kullanabilirsiniz. Döngü yinelemeleri bu oturumu varsayılan olarak paylaşır. fresh_context=True ile, ara yazılım bağlı oturumu yinelemeler arasında döngü öncesindeki anlık görüntüsüne geri yükler. Hizmete ait konuşma depolama alanı, serileştirilmiş oturum yalnızca uzak konuşma tanımlayıcısı içerdiğinde geçmişi koruyabilir.

Uyarı

Harness Agent döngü özelliği şu anda Go’da kullanılamadığından, onay ve oturum davranışı geçerli değildir.

Sonraki Adımlar

Daha derine git