التكرار الحلقي للعامل

يعيد تكرار العامل استدعاء عامل حتى يتم استيفاء شرط الإكمال. استخدمه للتحسين التكراري أو الإكمال أو انتظار المهام في الخلفية أو تقييم ما إذا كانت الإجابة تفي بمعايير صريحة.

حلقات مستقلة مرتبطة دائما. يمكن أن يفشل شرط الإكمال، ويمكن أن يتعطل النموذج، ويمكن أن يكون المقيم احتماليا.

Important

التكرار الحلقي للعامل تجريبي.

إعداد التكرار الحلقي يدويا

استخدم واجهة برمجة تطبيقات التكوين المباشر عندما تريد التكرار الحلقي دون الإعدادات الافتراضية الأخرى ل Harness Agent.

استيراد أنواع التكرار الحلقي والتفاف أي AIAgent مع LoopAgent. الحد الأقصى الافتراضي هو 10 استدعاءات للعامل:

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 وإضافته إلى عادي Agent. الحد الأقصى الافتراضي هو 10 عمليات تشغيل عامل:

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

يمكن أن تكون دالة التقييم متزامنة أو غير متزامنة. ارجع True للمتابعة أو False للإيقاف أو (continue, feedback) لتمرير الملاحظات إلى التكرار التالي.

Note

لا تتوفر إمكانية التكرار الحلقي المجمع الموضحة في هذه الصفحة حاليا في Go.

اختيار شرط إكمال

LoopAgent يقبل مقيما واحدا أو مجموعة مرتبة:

Evaluator يستمر أثناء
CompletionMarkerLoopEvaluator لا تحتوي الاستجابة الأخيرة على العلامة المكونة.
TodoCompletionLoopEvaluator لا يزال الحل TodoProvider يحتوي على عناصر غير مكتملة، اختياريا في أوضاع العامل المحددة.
BackgroundTaskCompletionLoopEvaluator لا يزال الحل BackgroundAgentsProvider يحتوي على مهام قيد التشغيل.
AIJudgeLoopEvaluator يقول عميل قاض منفصل إن الطلب الأصلي لم يتم الرد عليه بالكامل.
DelegateLoopEvaluator يرجع LoopEvaluation.Continue(...)رد الاتصال الخاص بك .

عند تكوين العديد من المقيمين، يتم تشغيلها بالترتيب. يقدم المقيم الأول الذي يطلب تكرارا آخر تعليقاته؛ تتوقف الحلقة فقط عندما يمتنع جميع المقيمين عن المتابعة.

استخدام قاض الذكاء الاصطناعي

يتلقى القاضي الطلب الأصلي وآخر رد من الوكيل. إذا وجد فجوة، يصبح تحليله ملاحظات للتكرار التالي:

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

استخدم نقطة نهاية القاضي التي تثق بها فقط مع الطلب الأصلي والاستجابة التي تم إنشاؤها.

التحكم في السياق والإخراج

بشكل افتراضي، LoopAgent يعيد استخدام جلسة واحدة ويرسل أحدث ملاحظات المقيم الفائز كمدخل تالي. FreshContextPerIteration = true بدلا من ذلك يعيد إنشاء كل تمريرة من الطلب الأصلي بالإضافة إلى سجل ملاحظات مجمع وإعادة تعيين جلسة العمل أو استعادتها.

تقوم عمليات التشغيل غير المتدفقة بإرجاع نسخة مجمعة بشكل افتراضي. تعيين NonStreamingReturnsLastResponseOnly = true لإرجاع الاستجابة النهائية فقط. يصدر الدفق دائما كل تكرار وأي رسائل ملاحظات مرئية نيابة عن.

تتلقى دالة التقييم وسيطات الكلمة الأساسية بما في ذلك iterationو messageslast_resultوoriginal_messagessessionagentprogress.feedback المساعدون ويوفرون todos_remaining()background_tasks_running() شروط المهام المضمنة والخلفية. إقرانها مع todos_remaining_message أو background_tasks_running_message لإنشاء إدخال تاليا مستهدفا.

استخدام قاض الذكاء الاصطناعي

AgentLoopMiddleware.with_judge ينشئ حلقة تستند إلى القاضي. التكرارات الحلقية للقاضي افتراضيا إلى خمس تكرارات:

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

يتم تغذية المنطق القاضي مرة أخرى إلى الوكيل عندما يكون هناك حاجة إلى المزيد من العمل. استخدم نقطة نهاية القاضي التي تثق بها فقط مع الطلب الأصلي والاستجابة التي تم إنشاؤها.

التحكم في السياق والتقدم والإخراج

بالنسبة إلى الحلقات المتقدمة، أنشئ AgentLoopMiddleware مباشرة:

  • record_feedback إنشاء إدخال تقدم موجز بعد كل تكرار عمل.
  • progress يعرض الإدخالات المتراكمة إلى عمليات رد الاتصال.
  • inject_progress=True يضيف التقدم إلى إدخال التكرار التالي.
  • fresh_context=True إعادة التشغيل من المهمة الأصلية وسجل التقدم واستعادة جلسة عمل مرفقة إلى لقطة ما قبل التكرار الحلقي.
  • return_final_only=True إرجاع الاستجابة الأخيرة فقط للجولات غير المتدفقة.

مرر max_iterations=None فقط عند ضمان إنهاء دالة تقييم الإكمال.

لا تتوفر شروط الإكمال المجمعة وتكامل القاضي الموضحة في هذه الصفحة حاليا في Go.

استخدام التكرار الحلقي مع Harness Agent

استخدم إعداد Harness Agent عندما تريد أيضا البنية الأساسية لبرنامج ربط العمليات التجارية للمحفوظات والتخطيط والذاكرة والموافقة وإمكانية المراقبة التي تم تكوينها مسبقا.

ضبط HarnessAgentOptions.LoopEvaluators. ينطبق LoopAgent التسخير كمصمم لعامله الخارجي:

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

فارغة أو nullLoopEvaluators مجموعة يترك تسخير طلقة واحدة.

سلوك الموافقة والجلسة

LoopAgent يتوقف قبل تقييم شرط الإكمال الخاص به عندما يقوم التكرار بإرجاع طلب موافقة أداة معلقة. يقوم بإرجاع الطلب إلى المتصل بدلا من إخفائه خلف تكرار مستقل آخر. بعد أن يوفر المتصل استجابة الموافقة من خلال تدفق الموافقة على الأداة العادية، يمكن للعامل المتابعة.

LoopAgent لا يضيف معالجة الموافقة نفسها. يطبق عامل Harness التكرار الحلقي خارج ToolApprovalAgent، مما يسمح لطلبات الموافقة المعلقة بالهروب من الحلقة.

أعد استخدام نفس الشيء AgentSession عبر المكالمات لمتابعة المحادثة. تشارك التكرارات الحلقية جلسة العمل هذه بشكل افتراضي. مع FreshContextPerIteration = true، LoopAgent يعيد تعيين أو استعادة حالة جلسة العمل التي يوفرها المتصل حيثما كان مدعوما. يمكن لتخزين المحادثات المملوكة للخدمة الاحتفاظ بالمحفوظات عندما تحتوي جلسة العمل المتسلسلة على معرف محادثة بعيد فقط.

توفير loop_should_continue إلى create_harness_agent؛ loop_max_iterations الإعدادات الافتراضية إلى 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 تخصيص الإدخال التالي. مع عدم وجود loop_should_continue، لا يضيف المصنع حلقة ويتجاهل وسيطات الحلقة الأخرى.

سلوك الموافقة والجلسة

AgentLoopMiddleware يتوقف قبل تقييم دالة تقييم المتابعة الخاصة به عندما يقوم التكرار بإرجاع طلب موافقة أداة معلقة. يقوم بإرجاع الطلب إلى المتصل بدلا من إخفائه خلف تكرار مستقل آخر. بعد أن يوفر المتصل استجابة الموافقة من خلال تدفق الموافقة على الأداة العادية، يمكن للعامل المتابعة.

AgentLoopMiddleware لا يضيف ToolApprovalMiddleware نفسه. يضع عامل Harness التكرار الحلقي خارج برنامجه الوسيط للموافقة، ما يسمح لطلبات الموافقة المعلقة بالهروب من الحلقة. إنشاء وتمرير AgentSession على كل تشغيل عامل Harness أثناء تمكين الموافقة التلقائية للأداة.

أعد استخدام نفس الشيء AgentSession عبر المكالمات لمتابعة المحادثة. تشارك التكرارات الحلقية جلسة العمل هذه بشكل افتراضي. مع fresh_context=True، يستعيد البرنامج الوسيط الجلسة المرفقة إلى لقطة ما قبل التكرار الحلقي بين التكرارات. يمكن لتخزين المحادثات المملوكة للخدمة الاحتفاظ بالمحفوظات عندما تحتوي جلسة العمل المتسلسلة على معرف محادثة بعيد فقط.

Note

لا يتوفر التكرار الحلقي ل Harness Agent حاليا في Go، لذلك لا ينطبق سلوك الموافقة والجلسة.

الخطوات التالية

التعمق أكثر