كيف توقف وكيل البرمجة من الدوران في حلقة أدوات

أدوات الوكلاء الرئيسية توفّر سقوفًا موثقة على عدد الجولات أو الخطوات أو الإنفاق. لكن أغلب مجموعات التطوير ⁦SDK⁩ المفحوصة لا توثق إعدادًا يكتشف تكرار الاستدعاء نفسه. والسقف يوقف الحلقة بعد أن تكلّفك ولا يمنعها من البداية، فاضبطه…

نُشر:

آخر تحديث:

كيف توقف وكيل البرمجة من الدوران في حلقة أدوات

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

الخلاصة أولًا

  • السقوف: موثقة في الأدوات الرئيسية، لكن وحداتها تختلف: جولات، استدعاءات نموذج، خطوات رسم بياني، دولارات.
  • كشف التكرار: وجدته في OpenHands، وهو مفعّل افتراضيًا. وفي Gemini CLI خدمة كشف حلقات في كوده المفتوح. وفي Goose خيار max-tool-repetitions.
  • الزمن: لا يوجد سقف كلي لعمر التشغيل في وثائق هذه الأدوات، بل مهلات لكل استدعاء.
  • السبب العاجل: بلاغ مستخدم في 9 أكتوبر 2026 عن وكيل يكرر استدعاءات الأدوات. هو بلاغ واحد وليس حكمًا عامًا.

ما الذي حدث في بلاغ MiMo؟

فتح مستخدم باسم SirAG183 في 9 أكتوبر 2026 البلاغ رقم 105 في مستودع XiaomiMiMo/MiMo. موضوعه «تكرار وفشل في التقارب» في سلسلة MiMo-V2.6، غالبًا النسخة flash، عبر API منصة Xiaomi المفتوحة وأداة DeepSeek Harness. هذه أرقام المبلّغ نفسه:

الحالة ما ذكره المبلّغ
الموقع الأول 1199 استدعاء أداة، 93% منها تكرار مطابق، و262 مليون توكن.
وجلسة أخرى 1126 استدعاءً، 84% منها تكرار، و467 مليون توكن.
أما جلسات المقارنة فكانت من 21 إلى 36 استدعاءً.
الموقع الثاني فشل 6 من 27 وكيلًا فرعيًا، وتكرار بين 45% و93%، وأسوأ حالة 587 استدعاءً
الموقع الثالث ثلاث حلقات في سلسلة التفكير داخل جلسة واحدة، وأوقف المبلّغ الرابعة يدويًا

حتى 15 أكتوبر ما زال البلاغ مفتوحًا بلا وسوم ولا مسؤول معيّن. تعليقه الوحيد من صاحبه نفسه، وفيه ملفات أدلة مرفقة لم أفتحها. لا رد من الصيانة ولا إعادة إنتاج مستقلة. فهو بلاغ مستخدم، وليس دليلًا على معدل عطل عام.

ما الذي لا علاقة له بالحلقات؟

نشرت Anthropic في 9 أكتوبر 2026 تقريرًا عن أفعال غير مقصودة لنماذجها أثناء التقييم. صنّفتها في أربعة أنواع، منها تجاوز قيد للوصول إلى بيانات، واستخدام خدمات اختصار الروابط لتجاوز حدود طول الرابط في أداة الجلب. وقالت إن معظم الحالات كانت «مثابرة» في الالتفاف على عائق بدل التوقف.

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

ما السقوف الموثقة للجولات والخطوات والإنفاق؟

الأداة الإعداد الافتراضي عند بلوغه
Claude Agent SDK maxTurns في TypeScript، وmax_turns في Python بلا حد، وهذا موثق نتيجة بنوع error_max_turns.
في الاستعلام المفرد يُرمى بعدها استثناء وتنتهي العملية بخروج غير صفري.
Claude Agent SDK maxBudgetUsd أو max_budget_usd بلا حد نتيجة error_max_budget_usd.
التقدير من جهة العميل وقد يتجاوز القيمة، فاترك هامشًا.
تُحسب كلفة الوكلاء الفرعيين.
Claude Code CLI الخياران max-turns وmax-budget-usd، ومتغير البيئة CLAUDE_CODE_MAX_TURNS بلا حد الخياران لوضع الطباعة print فقط، وينتهي بخطأ
OpenAI Agents SDK بلغة Python max_turns 10، من DEFAULT_MAX_TURNS في الكود المصدري. صفحة الوثائق لا تذكر الرقم. يُرمى MaxTurnsExceeded. ويمكن لمعالج أخطاء إرجاع ناتج بديل. وقيمة None تعطّله.
Google ADK max_llm_calls في RunConfig 500 استدعاء لكل تشغيل. القيمة صفر أو سالبة تعني بلا حد، ولا يوصى بها للإنتاج. لم تذكر الصفحة ما يحدث عند التجاوز
LangGraph recursion_limit 1000 خطوة منذ الإصدار 1.0.6 يُرمى GraphRecursionError
Goose max-turns في goose run غير مذكور يحدد عدد الدورات دون سؤال المستخدم. المصدر صفحة man منسوخة، لا وثائق Goose.

عدّاد الجولات في Claude Agent SDK يحسب جولات استخدام الأدوات فقط. والوحدات تختلف بين الأدوات: جولات، واستدعاءات نموذج، وخطوات رسم بياني، ودولارات.

أي الأدوات تكتشف تكرار الاستدعاء؟

الأداة ما يكتشفه ملاحظات
OpenHands Software Agent SDK معامل stuck_detection في Conversation، مفعّل افتراضيًا. خمسة أنماط:
الفعل والملاحظة نفسهما 4 مرات أو أكثر.
الفعل نفسه ينتج أخطاء 3 مرات أو أكثر.
3 رسائل متتالية من الوكيل بلا مدخل من المستخدم.
زوجان فعل وملاحظة يتناوبان 6 دورات أو أكثر.
أخطاء نافذة السياق المتكررة.
تقول الوثائق إنه قد يوقف التنفيذ تلقائيًا عند اكتشاف التعطل. العتبات مثبّتة في الكود بحسب طلب على GitHub رقم 762 لجعلها قابلة للضبط، ولم أتحقق من حالته. وكون التعطيل بـstuck_detection=False استنتاج من الاسم وليس منصوصًا عليه.
Gemini CLI، كود مفتوح ملف loopDetectionService.ts فيه ثلاثة أنواع من الكشف:
استدعاءات أداة متطابقة متتالية، تُجزَّأ بالاسم والمعاملات، أو دورة من 1 إلى 5 استدعاءات تتكرر 5 مرات.
تكرار محتوى.
كشف بنموذج ثانٍ بعد 30 دورة.
الثوابت من الكود: TOOL_CALL_LOOP_THRESHOLD = 5 وCONTENT_LOOP_THRESHOLD = 10 وLLM_CHECK_AFTER_TURNS = 30. الملف يسجّل حدثًا ويعيد النتيجة ولا يُظهر ما يفعله المستدعي. ولم أجد اسم إعداد موجّه للمستخدم.
Goose الخيار max-tool-repetitions: يحدد كم مرة تُستدعى الأداة نفسها متتاليةً بمعاملات مطابقة الافتراضي غير مذكور. المصدر صفحة man منسوخة.

لم أجد كشف تكرار موثقًا في Claude Code وCodex CLI، وقد قرأت جزءًا من صفحة إعدادات Codex فقط. ولم أجده كذلك في Cline وRoo Code وAider، إذ لم أجد وثائق رسمية تذكر ذلك.

هل يوجد سقف للزمن؟

لم أجد في وثائق هذه الأدوات سقفًا زمنيًا يحدد عمر التشغيل كله. الموجود مهلات جزئية لكل استدعاء:

  • Claude Agent SDK: abortController للإلغاء، وAPI_TIMEOUT_MS بقيمة 600000 افتراضيًا، وCLAUDE_STREAM_IDLE_TIMEOUT_MS بقيمة 300000.
  • Claude Code: BASH_DEFAULT_TIMEOUT_MS بقيمة 120000.
  • Codex: tool_timeout_sec لخوادم MCP، وقيمته 60 ثانية.
  • OpenAI Agents SDK: ModelSettings.timeout، ويرمي ModelTimeoutError، دون افتراضي مذكور.

ماذا تفعل بعد ذلك؟

هذه توصيات مني ولم أنفذها كلها.

  1. اضبط سقف الجولات والإنفاق صراحةً لكل تشغيل غير مراقب، ولا تعتمد على غياب الحد.
  2. خصّص سقفًا أصغر للوكلاء الفرعيين إن كانت أداتك تدعم ذلك. في Claude Agent SDK يوجد maxTurns لكل تعريف وكيل.
  3. أضف عدّادًا خاصًا بك للاستدعاء نفسه إن لم تكن أداتك تكتشف التكرار. الاستدعاء نفسه يعني الأداة والمعاملات نفسها. أوقف الوكيل أو مرّر الحالة لإنسان عند عدد تحدده. وعتبات OpenHands وGemini CLI، من 3 إلى 6 تكرارات، مرجع للتقدير فقط.
  4. اجعل بلوغ السقف حالة مراجعة لا فشلًا صامتًا: سجّل ما نُفذ وآخر خطوة.
  5. قِس النتيجة الفعلية وليس انتهاء الوكيل فقط: دراسة EBO.

أسئلة وأجوبة

هل يوقف max_turns حلقة استدعاءات الأدوات؟

يوقفها عند بلوغ العدد المحدد، لا قبله. في Claude Agent SDK الافتراضي بلا حد، وفي OpenAI Agents SDK الافتراضي 10 جولات بحسب الكود المصدري.

هل بلاغ MiMo دليل على أن النموذج معطوب؟

لا. هو بلاغ مستخدم واحد بأرقامه الخاصة، بلا رد من الصيانة ولا إعادة إنتاج مستقلة.

هل تكتشف الأدوات الاستدعاء المتطابق المتكرر؟

بعضها: OpenHands مفعّل افتراضيًا، وGemini CLI في كوده، وGoose بخيار. ولم أجد ذلك موثقًا في الـSDK الأخرى المفحوصة.

هل سقف الإنفاق دقيق؟

في Claude Agent SDK هو تقدير من جهة العميل وقد يتجاوز القيمة، فاترك هامشًا.

مصطلحات بلغة مبسطة

  • حلقة الأدوات: أن يكرر الوكيل استدعاء الأداة نفسها دون تقدم.
  • الجولة: دورة واحدة يطلب فيها النموذج أداة ثم يتلقى نتيجتها.
  • التوكن: قطعة نصية صغيرة يعالجها النموذج، وتُحسب بها التكلفة.
  • الوكيل الفرعي: وكيل يطلقه الوكيل الرئيسي لينجز جزءًا من المهمة.

المصادر

رُوجعت الوقائع على الصفحات المذكورة في 15 أكتوبر 2026. أسماء الإعدادات من الصفحات كما ظهرت.

جميع الأقسام جميع المقالات

أحدث المقالات