نظرة عامة
يمكن لـ Agents في CrewAI استدعاء أدوات تنفّذ إجراءات حقيقية. يمكن للنص غير الموثوق في سياق النموذج أن يغيّر تلك الإجراءات. توضّح هذه الصفحة كيفية الحد من هذا الخطر. مرجع ذو صلة: OWASP Top 10 for LLM Applications (حقن المطالبات والوكالة المفرطة). يمنحكم CrewAI لبنات بناء: hooks وguardrails ومخرجات منظمة وحالة Flow. وهو لا يفعّلها كإعداد آمن افتراضي. يجب عليكم تعيين الأدوات وقوائم السماح وفحوصات الموافقة في كود التطبيق. Human-in-the-loop (HITL) موافقة، وليس عنصر تحكم. يتوقف ليقبل شخص أو يرفض أو يعلّق. وهو لا يصادق على الموافق، ولا يتحقق من دوره، ولا يثبت أنه مسموح له بالقرار. تغطي هذه الصفحة نموذج التهديد وسلوك مسار التنفيذ. لحدود التنفيذ (max_rpm وmax_iter وmax_execution_time) والتفصيل وإعدادات الـ Agent، راجع Agents وتخصيص الـ Agents.
عناصر التحكم حسب مسار التنفيذ
لدى CrewAI مساران شائعان للتنفيذ. بعض عناصر التحكم تعمل على مسار واحد فقط.agent.kickoff()
يشغّل Agent.kickoff() مُنفّذ AgentExecutor. ولا ينشئ Task ولا Crew. ويُرجع LiteAgentOutput.
تُضاف دوال
@on على صنف @CrewBase إلى قائمة الـ hooks العامة عند إنشاء ذلك الـ crew. بعد ذلك، يمكن أن تعمل تلك الـ hooks أيضًا على استدعاءات agent.kickoff() اللاحقة في العملية نفسها. وهي غير مقتصرة على crew واحد.
راجع التفاعل المباشر مع الـ Agent.
Crew وFlow
يمكن لعمليات kickoff في Crew وFlow استخدام Task guardrails وTaskhuman_input وexecution boundary hooks. تنطبق أيضًا tool hooks وLLM hooks.
1. المدخلات الموثوقة مقابل غير الموثوقة
صنّف كل مدخل يصل إلى النموذج كموثوق أو غير موثوق.
القواعد:
- التسمية في المطالبة لا تمنع النموذج من اتباع النص غير الموثوق. استخدم عناصر تحكم في الكود.
- لا تُضف نصًا غير موثوق إلى التعليمات على مستوى النظام. أبقه في قسم مميّز.
- أعطِ كل Agent الحقول التي يحتاجها فقط.
- حمّل بيانات الاعتماد في كود الأداة من البيئة أو مدير أسرار. لا تضعها في المطالبات أو الذاكرة أو وسيطات الأداة التي يبنيها النموذج.
- افرض السياسة في الكود (tool hooks وقوائم سماح الوسيطات وguardrails).
backstory عنصر تحكم ضعيف. وهو لا يمنع النموذج من اتباع النص غير الموثوق. استخدم tool hooks وقوائم السماح أدناه لفرض السياسة.
لمدخلات Crew وFlow، استخدم execution boundary hooks (INPUT). هذه الـ hooks لا تعمل على agent.kickoff() المستقل. لـ MCP، راجع أمان MCP.
2. حقن المطالبات
حقن المطالبات هو نص غير موثوق يحاول تجاوز تعليمات الـ Agent. تشمل الأمثلة: تجاهل القواعد السابقة، أو استدعاء أدوات، أو تسريب بيانات، أو تغيير المهمة. أمثلة:- “Ignore all previous instructions and…”
- “You are now in developer mode…”
- تعليمات مرمّزة أو متعددة اللغات تستهدف المرشحات
- طلبات لكشف مطالبة النظام أو إعادة توجيه سياق خاص
لا تعتمد على صياغة المطالبة وحدها. حدّ مما يمكن للـ Agent فعله بعد توجيه النموذج.
3. حقن المطالبات غير المباشر
يضع حقن المطالبات غير المباشر تعليمات في محتوى يجلبه الـ Agent لاحقًا. التعليمات ليست في رسالة المستخدم. يمكن أن تكون في صفحة ويب أو بريد أو PDF أو تذكرة أو جزء RAG. مثال:- يطلب المستخدم من الـ Agent تلخيص صفحة مورّد وصياغة رسالة تواصل.
- يعيد الاستخراج أو البحث نص الصفحة الذي يطلب نسخة مخفية (BCC) لمهاجم وإرفاق مفاتيح API.
- يتبع الـ Agent ذلك النص عند صياغة الرسالة أو إرسالها.
- أعطِ Agents البحث أدوات القراءة والجلب فقط. وأعطِ Agents التنفيذ أدوات الإرسال أو الكتابة أو تغيير البيانات فقط.
- مرّر حالة منظمة مُتحقَّقًا منها بينها. لا تمرّر مخرج الأداة الخام.
- ضع قائمة سماح للوجهات في tool hooks (النطاقات؛ احظر النطاقات الخاصة وlink-local عند الحاجة).
- لحقن بيانات MCP الوصفية للأدوات، راجع أمان MCP.
4. إساءة استخدام الأدوات
إساءة استخدام الأدوات هي استخدام أداة صالحة بطريقة ضارة. أمثلة: حذف بيانات، أو تصدير بيانات، أو إنفاق مال، أو إرسال رسالة، أو تشغيل كود.- أعطِ كل Agent الأدوات التي يحتاجها دوره فقط.
- قيّد الوسيطات في الكود.
- فضّل بيانات اعتماد قصيرة العمر لكل أداة. لا تشارك حسابًا واحدًا عالي الامتياز.
tools= على @on بعد sanitize_tool_name (أحرف صغيرة وشرطات سفلية). استخدم اسم الأداة المُنظَّف (مثل send_email، أو file_writer_tool لـ FileWriterTool).
عندما يُحظر استدعاء أداة، لا تعمل الأداة. يتلقى الـ Agent رسالة بأن الأداة حُظرت. ويستمر التشغيل. يعمل POST_TOOL_CALL أيضًا على الاستدعاءات المحظورة.
استخدم POST_TOOL_CALL لتنظيف النتائج إذا لزم الأمر. هذه الخطوة اختيارية. راجع Tool Hooks.
5. التحقق من المخرجات
تحقق من المخرج قبل تسليمه أو تخزينه أو اتخاذ أثر جانبي أو إرجاعه من API. يفحصoutput_pydantic وoutput_json شكل المخطط فقط. ولا يفحصان السياسة. أضف guardrail قابلًا للاستدعاء عندما تحتاج إلى النية أو قواعد العمل.
مسار Task (Crew)
مسار agent.kickoff()
استخدم Agent.guardrail / guardrail_max_retries. يمكنك أيضًا تمرير response_format= على kickoff(). لا يعمل Agent.guardrail أثناء تنفيذ Task في Crew.
تعمل فحوصات السلسلة أو LLMGuardrail على مسار Task ومسار kickoff معًا. يمكن لتشغيلات Crew وFlow أيضًا استخدام execution boundary hooks.
6. بوابات الموافقة
HITL موافقة، وليس عنصر تحكم. يطلب من شخص القبول أو الرفض. وهو لا يصادق على ذلك الشخص، ولا يتحقق من دوره، ولا يسجّل أنه كان مخوّلًا. يقبلinput() الافتراضي في وحدة التحكم من يكون على لوحة المفاتيح.
اطلب موافقة قبل الإجراءات غير القابلة للعكس أو المكلفة أو العلنية. ضع التوقف في الكود. لا تعتمد على المطالبة وحدها.
يتوقف Task
human_input=True بعد أن يشغّل الـ Agent أدواته وينتج نتيجة. ويراجع الإجابة النهائية قبل قبول ذلك المخرج. ولا يمنع تنفيذ الأدوات. يمكن للـ Agent في تلك الـ Task أن يستدعي أدوات مدمرة قبل أن يرى أي إنسان التشغيل. استخدمه فقط عندما تكفي مراجعة المخرج بعد التشغيل. راجع الإدخال البشري أثناء التنفيذ.
للموافقة قبل تشغيل أداة، استخدم tool hook وHookAborted:
request_human_input ما زال موافقة. وهو لا يتحقق ممن كتب yes. أضف فحص هوية أو سياسة خاصًا بك إذا احتجت ذلك.
خيارات أخرى:
- Task
human_input=True— مراجعة المخرج بعد التشغيل على مسار Task / Crew فقط. ToolCallHookContext.request_human_input— يعمل علىagent.kickoff()وتشغيلات Crew. يستخدم افتراضيًاinput()لوحدة تحكم حاجزًا.@human_feedback/ webhooks HITL للمؤسسات — Human-in-the-Loop، Human Feedback في Flows. الحد نفسه: CrewAI لا يتحقق من الموافق إلا إذا أضفت ذلك خارج هذه الواجهات.
7. تقييد التفويض
- القيمة الافتراضية لـ
allow_delegationهيFalse. عيّنهاTrueفقط عندما يجب أن يتعاون الـ Agents. - لا يمكنك السماح بالتفويض لبعض الـ Agents ومنعه عن آخرين. الحدود هي عضوية الـ crew و
toolsلكل Agent. - العملية الهرمية تعيّن
manager_agent.allow_delegation = True. أبقِ الأدوات عالية المخاطر لدى Agents متخصصة. وضع تلك الأدوات خلف hooks أو موافقات. - لـ A2A، فضّل
A2AClientConfig. أبقِtrust_remote_completion_status=Falseما لم ترد الوثوق بحالة الإكمال البعيدة. راجع تفويض Agent عبر A2A.
8. العزل بين الـ Agents
- افصل صلاحيات القراءة والكتابة عبر الـ Agents. مثال: باحث يقرأ؛ ومنفّذ يرسل أو يكتب.
- استخدم crews منفصلة أو خطوات Flow للمدخل غير الموثوق والإجراء المميز.
- مرّر حالة منظمة مُتحقَّقًا منها بين الخطوات. لا تمرّر مخرج الأداة الخام.
- حدّ المعرفة بـ
knowledge_sourcesلكل Agent. للذاكرة، امنح الـ AgentMemoryأوMemoryScopeالخاص به، أو عطّل الذاكرة على الـ crew. على مسار Task، يصبحmemory=Falseعلى Agent هوNone. ثم يستخدم الـ Agent ذاكرة الـ crew إذا كانت مفعّلة على الـ crew. - شغّل الكود في sandbox خارجي مثل أدوات E2B أو Modal. عامل مخرج sandbox على أنه غير موثوق. أُزيل
CodeInterpreterTool. وallow_code_executionمهمل ولم يعد يرفق أداة كود. - اتصل فقط بخوادم MCP التي تثق بها. راجع أمان MCP.
أدلة ذات صلة
صياغة Agents فعّالة
الأدوار والأهداف والخلفيات لـ Agents متخصصة.
بنية الإنتاج
Flows وguardrails ومخرجات منظمة.
Tool Hooks
فحوصات السياسة والموافقة حول استدعاءات الأدوات.
أمان MCP
الثقة وحقن البيانات الوصفية والنقل لـ MCP.
Task Guardrails
تحقق من مخرجات Task قبل أن تستمر.
Human-in-the-Loop
مراجعة بشرية لمخرج Task واستدعاءات الأدوات.
تخصيص الـ Agents
حدود التنفيذ والتفصيل وإعدادات الـ Agent.
