التصعيد إلى الإنسان ضمن الحلقة
حدّد محفزات التصعيد التي توقف الوكيل مؤقتًا وتطلب توجيهًا بشريًا عند انخفاض مستوى الثقة، أو قرب تنفيذ إجراء تدميري، أو استنفاد ميزانية إعادة المحاولة.
التصعيد إلى الإنسان ضمن الحلقة درس مجاني في AI Engineering Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في AI Engineering Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
متى تحتاج الوكلاء إلى توجيه بشري
تكون الوكلاء المستقلون بالكامل مناسبين للمهام المحددة جيدًا ومنخفضة المخاطر. لكن بعض المواقف تتطلب حكمًا بشريًا، مثل التعليمات الغامضة، أو انخفاض ثقة النموذج، أو الإجراءات المدمرة التي لا يمكن التراجع عنها، أو المهام التي يترتب على فشلها عواقب خطيرة. يوقف التصعيد الذي يتضمن الإنسان في الحلقة (HITL) الوكيل عند نقاط القرار هذه، ويطلب مدخلات بشرية قبل المتابعة، جامعًا بين كفاءة الأتمتة وحكم البشر.
تحديد مُشغّلات التصعيد
ينبغي أن يُفعّل التصعيد بشروط محددة وقابلة للقياس، لا بحدس غامض. حدّدوا مُشغّلات تصعيد صريحة لتطبيقكم. تشمل المُشغّلات الشائعة: انخفاض ثقة النموذج عن حد معين، أو قرب تنفيذ إجراء مدمر، أو الاقتراب من حد للسياسة، أو استنفاد ميزانية إعادة المحاولة، أو تجاوز المهمة للمدة الزمنية المحددة. وثّقوا المُشغّلات في التعليمات البرمجية كثوابت مسماة، حتى يمكن ضبطها دون تغيير منطق تدفق التحكم.
from enum import Enum
class EscalationReason(Enum):
LOW_CONFIDENCE = 'low_confidence' # model uncertainty
DESTRUCTIVE_ACTION = 'destructive_action' # irreversible change
AMBIGUOUS_TASK = 'ambiguous_task' # unclear instructions
RETRY_BUDGET_EXHAUSTED = 'retry_exhausted' # too many failures
POLICY_BOUNDARY = 'policy_boundary' # approaching limit
HUMAN_REQUESTED = 'human_requested' # explicit request
TIMEOUT = 'timeout' # took too long
ESCALATION_THRESHOLDS = {
'min_confidence': 0.6,
'max_retries': 5,
'max_runtime_minutes': 30,
}اكتشاف انخفاض الثقة
اطلبوا من النموذج التعبير عن مدى ثقته في إجراء مقترح قبل تنفيذه. يؤدي انخفاض درجة الثقة عن الحد المحدد إلى تفعيل التصعيد. استخدموا فحص ثقة منظمًا يتضمن درجة رقمية ومبررًا موجزًا، حتى يفهم المراجع البشري سبب عدم يقين الوكيل تحديدًا. ويساعد المبرر الإنسان على تقديم توجيه مستهدف بدلًا من الاضطرار إلى مراجعة سجل المهمة بالكامل.
from pydantic import BaseModel
class ConfidenceCheck(BaseModel):
proposed_action: str
confidence: float # 0.0 to 1.0
uncertainty_reason: str | None
proceed: bool
async def check_confidence(context: str, proposed_action: str) -> ConfidenceCheck:
return await judge_client.chat.completions.create(
model='gpt-4o',
response_model=ConfidenceCheck,
messages=[{
'role': 'user',
'content': f'Context: {context}\n\nI am about to: {proposed_action}\n\nHow confident am I that this is correct? Be honest about uncertainty.'
}]
)اكتشاف الإجراءات المدمرة
ضعوا علامة destructive=True على الأدوات التي تنفذ إجراءات لا يمكن التراجع عنها، واشترطوا تأكيدًا بشريًا قبل تنفيذها. ومن أمثلتها: حذف الملفات، وإرسال رسائل بريد إلكتروني إلى مستخدمين حقيقيين، وإجراء تغييرات في قاعدة البيانات لا يمكن التراجع عنها، وفرض رسوم على عميل، ونشر محتوى للعامة. يجب أن يتوقف الوكيل عند هذه الإجراءات وينتظر موافقة بشرية صريحة، حتى إذا كان يعمل باستقلالية في بقية الحالات.
from dataclasses import dataclass
from typing import Callable
@dataclass
class Tool:
name: str
func: Callable
destructive: bool = False
description: str = ''
tools = [
Tool('search_web', search_web, destructive=False),
Tool('read_file', read_file, destructive=False),
Tool('write_file', write_file, destructive=True, description='Overwrites existing file'),
Tool('send_email', send_email, destructive=True, description='Sends real email to user'),
Tool('delete_records', delete_records, destructive=True, description='Permanent DB deletion'),
]
def requires_approval(tool: Tool) -> bool:
return tool.destructiveإيقاف الوكيل وانتظار المدخلات
عند تفعيل مُشغّل تصعيد، احفظوا نقطة الفحص حتى يمكن استئناف المهمة، وأنشئوا سجلًا لطلب التصعيد، وأخطروا المراجع البشري. يتوقف الوكيل عن المعالجة وينتظر. يراجع الإنسان التصعيد عبر لوحة معلومات أو إشعار، ويقدم التوجيه أو الموافقة، ثم يستأنف الوكيل العمل من نقطة الفحص مع تضمين ذلك التوجيه في السجل بوصفه رسالة جديدة.
import asyncio
async def escalate_and_wait(task_id: str, reason: EscalationReason, context: str,
question: str, timeout_hours: int = 24) -> str:
# Save checkpoint
save_checkpoint(load_checkpoint(task_id))
# Create escalation record
escalation_id = create_escalation(task_id, reason, context, question)
# Notify reviewer
notify_reviewer(escalation_id, question)
# Wait for response (polling with timeout)
deadline = asyncio.get_event_loop().time() + timeout_hours * 3600
while asyncio.get_event_loop().time() < deadline:
response = get_escalation_response(escalation_id)
if response:
return response.guidance
await asyncio.sleep(60) # check every minute
raise TimeoutError(f'Escalation {escalation_id} not answered within {timeout_hours}h')إنشاء واجهة المراجع
يحتاج المراجعون البشريون إلى واجهة بسيطة للاستجابة للتصعيدات. كحد أدنى، اعرضوا: وصف المهمة، وتقدم الوكيل حتى الآن، والسؤال المحدد أو الإجراء المقترح الذي يتطلب الموافقة، وأزرار «موافقة» و«رفض» و«تقديم إرشادات». سجّلوا كل قرار يتخذه المراجع مع هوية المراجع والطابع الزمني لأغراض التدقيق. ويُعد كلٌّ من روبوت Slack ونموذج الويب البسيط خيارًا مناسبًا للفرق الداخلية.
# FastAPI escalation endpoint
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class EscalationResponse(BaseModel):
escalation_id: str
decision: str # 'approve', 'reject', 'guide'
guidance: str | None = None
reviewer_id: str
@app.post('/escalations/{escalation_id}/respond')
async def respond_to_escalation(esc_id: str, response: EscalationResponse):
escalation = get_escalation(esc_id)
if not escalation or escalation.status != 'pending':
return {'error': 'Escalation not found or already resolved'}
save_escalation_response(esc_id, response)
return {'status': 'response_recorded', 'task_will_resume': True}إدراج إرشادات بشرية في سياق الوكيل
بعد استجابة الإنسان، أدرجوا إرشاداته كرسالة جديدة في سجل محادثة الوكيل قبل استئناف التنفيذ. صيغوا الرسالة على أنها صادرة عن «مشرف» لتمييزها عن ملاحظات الوكيل نفسه. ويمكن للوكيل بعد ذلك الرجوع إلى هذا الإرشاد في خطوته التالية. وإذا رفض الإنسان الإجراء المقترح، فأدرجوا تعليمات توضّح ما ينبغي فعله بدلًا منه.
def inject_human_guidance(messages: list, decision: str, guidance: str | None) -> list:
if decision == 'approve':
messages.append({
'role': 'user',
'content': 'Supervisor: Your proposed action has been approved. Proceed.'
})
elif decision == 'reject':
messages.append({
'role': 'user',
'content': f'Supervisor: Your proposed action was rejected. Instead: {guidance}'
})
elif decision == 'guide':
messages.append({
'role': 'user',
'content': f'Supervisor: Additional guidance: {guidance}'
})
return messagesتتبّع مقاييس التصعيد
راقبوا حجم التصعيدات وأسبابها وأوقات الاستجابة. يشير ارتفاع حجم التصعيدات إلى أن الوكيل لا يتمتع بدرجة كافية من الثقة؛ فقد تكون المهمة غامضة جدًا، أو يحتاج النموذج إلى تعليمات أفضل، أو تكون عتبات الثقة منخفضة جدًا. وتشير أوقات الاستجابة الطويلة إلى مشكلات في عبء عمل المراجعين. تساعدكم هذه المقاييس على ضبط التوازن بين الأتمتة والتدخل البشري لتقليل المقاطعات غير الضرورية، مع إبقاء البشر ضمن الحلقة عند اتخاذ قرارات تنطوي فعلًا على مخاطر.
def escalation_report(db_connection, days: int = 7) -> dict:
# SQL query (pseudocode)
rows = db_connection.execute('''
SELECT
reason,
COUNT(*) as count,
AVG(EXTRACT(EPOCH FROM (responded_at - created_at)) / 3600) as avg_response_hours,
SUM(CASE WHEN decision = 'approve' THEN 1 ELSE 0 END) as approvals,
SUM(CASE WHEN decision = 'reject' THEN 1 ELSE 0 END) as rejections
FROM escalations
WHERE created_at > NOW() - INTERVAL '%s days'
GROUP BY reason
ORDER BY count DESC
''' % days).fetchall()
return [dict(r) for r in rows]التوسع التدريجي في الاستقلالية
ابدؤوا بحساسية تصعيد مرتفعة، أي بعتبة ثقة منخفضة وتصعيد جميع الإجراءات التدميرية، ثم قلّلوا وتيرة التصعيد تدريجيًا كلما ازددتم ثقة بسلوك الوكيل. تتبّعوا التصعيدات التي أسفرت عن قرارات «موافقة» مقارنةً بالتصعيدات التي أدت إلى تصحيحات فعلية. ويعني ارتفاع معدل الموافقة باستمرار لنوع معين من المحفزات أن بإمكانكم أتمتة هذا المحفز بأمان، مما يقلل عبء العمل البشري مع الحفاظ على الإشراف حيث تكون الحاجة إليه فعلية.
# Autonomy expansion strategy:
# Week 1: escalate for ALL destructive actions
# Week 2: auto-approve file writes to /tmp (low-risk), escalate others
# Week 4: auto-approve all file writes, escalate only email/DB changes
# Week 8: auto-approve emails under 10 recipients, escalate mass emails
# Track approval rates per trigger type:
# Tool: write_file -> 98% approve -> safe to automate
# Tool: send_email -> 89% approve -> near-automate with content check
# Tool: delete_records -> 43% approve -> always escalateتجاوز الطوارئ وإلغاء المهمة
وفّروا دائمًا آلية تجاوز الطوارئ تتيح للإنسان إلغاء مهمة وكيل قيد التشغيل فورًا. فإذا كان الوكيل يتصرف على نحو غير صحيح، كأن يستدعي أدوات لا ينبغي له استدعاؤها أو يتخذ إجراءات خارج نطاقه المقصود، فيجب أن يتمكن الإنسان من إيقافه خلال ثوانٍ. نفّذوا إشارة إلغاء، مثل علامة في قاعدة البيانات يتحقق منها الوكيل في كل خطوة، وتأكدوا من تجاهل نتائج استدعاءات الأدوات إذا أُلغي الوكيل أثناء تنفيذ الخطوة.
async def run_agent_with_cancel(task_id: str, messages: list) -> str:
for step in range(MAX_ITERATIONS):
# Check cancel flag at start of every step
if redis_client.get(f'agent:cancel:{task_id}'):
save_final_status(task_id, 'cancelled')
return 'Task cancelled by operator.'
response = await get_next_action(messages)
if response.is_final:
return response.answer
result = await execute_tool(response.tool, response.args)
messages.append({'role': 'user', 'content': result})
save_checkpoint_after_step(task_id, step, messages)
return 'Max iterations reached'معايرة عتبات التصعيد
تحتاج عتبات التصعيد إلى ضبط. فإذا كانت عتبة الثقة مرتفعة جدًا، صعّد الوكيل كل إجراء تقريبًا، مما يثقل كاهل المراجعين. وإذا كانت منخفضة جدًا، فقد تمر الإجراءات المحفوفة بالمخاطر دون مراجعة. ابدؤوا بعتبات محافظة في الأسبوع الأول، وتتبّعوا حجم التصعيدات ومعدل موافقة المراجعين، ثم أجروا التعديلات. ينبغي للنظام المستقر أن يصعّد 5–15% من المهام بسبب مشكلات الثقة، وأن يصعّد ما يقارب 100% من الإجراءات التدميرية، مع تحقيق معدل موافقة إجمالي يتجاوز 80%.
# Threshold tuning guide:
# Escalation rate vs quality trade-off:
#
# confidence_threshold=0.8 -> 35% escalation rate (too many)
# confidence_threshold=0.6 -> 12% escalation rate (target)
# confidence_threshold=0.4 -> 4% escalation rate (too few)
#
# Weekly review of escalation decisions:
# - Approval rate > 90%: lower threshold (too conservative)
# - Approval rate < 70%: raise threshold (not catching real issues)
# - Target: 75-85% approval rateتحقق سريع
اختبروا مدى فهمكم لتصميم التصعيد مع وجود الإنسان ضمن الحلقة.
مراجعة الدرس
تعلمتم في هذا الدرس أن محفزات التصعيد تحدد الشروط الدقيقة التي يجب عند تحققها أن يوقف الوكيل التنفيذ ويطلب إرشادات بشرية، وأن علامات الإجراءات التدميرية على الأدوات تفرض متطلبات الموافقة على العمليات غير القابلة للعكس، وأن التوسع التدريجي في الاستقلالية يتيح لكم زيادة الأتمتة بأمان كلما كسب الوكيل ثقتكم. بعد ذلك، سنصمم بنية الإنتاج لمشروعنا الختامي.
الأسئلة الشائعة
هل درس «التصعيد إلى الإنسان ضمن الحلقة» مجاني؟
نعم — نص درس «التصعيد إلى الإنسان ضمن الحلقة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة AI Engineering Academy، انتقل إلى CoddyKit PRO. تتضمن دورة AI Engineering Academy 4 دروس في المجموع.
ماذا ستتعلم في «التصعيد إلى الإنسان ضمن الحلقة»؟
حدّد محفزات التصعيد التي توقف الوكيل مؤقتًا وتطلب توجيهًا بشريًا عند انخفاض مستوى الثقة، أو قرب تنفيذ إجراء تدميري، أو استنفاد ميزانية إعادة المحاولة. تتمرن على AI Engineering Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ AI Engineering Academy؟
لا تُشترط خبرة سابقة. AI Engineering Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «التصعيد إلى الإنسان ضمن الحلقة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس AI Engineering Academy هذا؟
نعم. كل درس في AI Engineering Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تصنيف أنماط فشل الوكلاء
- التصحيح الذاتي وكتابة Prompts تأملية
- حفظ نقاط التحقق واستئناف المهام
- التصعيد إلى الإنسان ضمن الحلقة