دع الوكيل يعمل بنفسه دون حظر الوكيل.
「Fire and forget — the agent doesn't block while the command runs.」
ألم حظر المكالمات
أداة bash في S02 متزامنة: subprocess.run(..., timeout=120). يستغرق تشغيل أمر مثل npm install 90 ثانية، وتتوقف حلقة الوكيل بأكملها لمدة 90 ثانية. يحدق المستخدم في الجهاز، ولا يعرف ما إذا كان معلقًا أم يعمل. ص>
حل s08: امنح الوكيل أداة background_run. يقوم على الفور بإرجاع task_id ويتم تشغيل الأمر على مؤشر ترابط آخر. يستمر الوكيل في التكرار والقيام بأشياء أخرى؛ عند اكتمال مهمة bg، تتم إضافة النتائج إلى قائمة انتظار الإشعارات. ص>
def تشغيل(self, الأمر: str) -> str: Task_id = str(uuid.uuid4())[:8] self.tasks[task_id] = {"الحالة":"قيد التشغيل", ...} Thread = Threading.Thread(target=self._execute, args=(task_id, Command), daemon=True) الموضوع.بدء() return f"بدأت مهمة الخلفية {task_id}" # العودة فورًا
كيفية إرجاع النتيجة إلى الوكيل؟
المفتاح عبارة عن قائمة انتظار آمنة لمؤشر الترابط: عند اكتمال مؤشر ترابط bg، يتم إلحاقه بقائمة الانتظار؛ قبل كل استدعاء LLM بواسطة سلسلة الرسائل الرئيسية، يتم استنزاف قائمة الانتظار ويتم حشو إشعار الإكمال في الرسائل كرسائل مستخدم. ص>
def agent_loop(الرسائل): بينما صحيح: # استنزاف إشعارات bg قبل كل مكالمة LLM الإخطارات = BG.drain_notifications() إذا إشعارات: الرسائل.إلحاق({ "الدور": "المستخدم"، "content": f"<background-results>{notif_text}</background-results>", }) الاستجابة = client.messages.create(...) ...
بهذه الطريقة، يقوم الوكيل بإنشاء مهمة bg في الجولة Nth. عند اكتمال المهمة في جولة N+3، سيجلب استدعاء LLM التالي النتائج تلقائيًا - سيعرف النموذج عندما يرى كتلة <background-results>: "أوه، انتهت هذه المهمة، سأستمر." ص>
عرض الجدول الزمني
يسمح لك عنصر واجهة المستخدم التالي بالمحاكاة: يتم تحديد مؤشر الترابط الرئيسي كل ثانية (محاكاة إيقاع دورة الوكيل)؛ يمكنك إنشاء مهمة bg في أي وقت. شاهد كيف يلتقي الدليلان عند "نقطة التصريف". ص>
ما هي الأوامر التي يجب وضعها في الخلفية؟
لا ينبغي وضع كافة الأوامر في الخلفية. هناك معياران:
- استهلاك الوقت: يعد التشغيل المتزامن في غضون ثوانٍ قليلة أمرًا أبسط، مما يلغي الحاجة إلى الاحتفاظ بقوائم الانتظار. لي>
- أهمية النتيجة: إذا تم استخدام النتيجة فورًا في الخطوة التالية (مثل
cat file.txtمتبوعة مباشرة بـgrep)، فإن الخلفية لا معنى لها - فلا يزال يتعين عليك انتظارها. لي>