Files
prompts.chat/src/content/book/ar/14a-loop-engineering.mdx
T
Fatih Kadir Akın f9bfb652f5 loop engineering
2026-07-17 12:30:58 +03:00

406 lines
28 KiB
Plaintext

هندسة السياق تحدد **ما يمكن للنموذج أن يراه**. أما هندسة الحلقات فتحدد **ما يفعله النظام تالياً**.
بدلاً من أن يقرأ شخصٌ الإجابة مراراً ويكتب الموجه التالي، تحوّل الحلقة عملَ المتابعة هذا إلى نظام مصمَّم: تمنح الذكاء الاصطناعي هدفاً، وتتيح له التصرف، وترصد تغذية راجعة حقيقية، وتقيّم النتيجة، ثم إما تتكيف أو تتوقف.
<Callout type="info" title="التعريف المختصر">
هندسة الحلقات هي ممارسة تصميم دورة التغذية الراجعة المحيطة بنظام الذكاء الاصطناعي: الهدف، والإجراءات، والملاحظات، والتقييم، والحالة، وحواجز الحماية، وقواعد التوقف التي تدفع العمل نحو نتيجة يمكن التحقق منها.
</Callout>
## من موجه جيد إلى حلقة جيدة
يمكن لموجه جيد أن ينتج محاولة أولى قوية. أما الحلقة فتصبح مفيدة عندما يتعذر معرفة عدد الخطوات مسبقاً، أو عندما تكون البيئة قابلة للتغير، أو عندما يجب التحقق من المحاولة الأولى في ضوء الأدلة.
<Compare
before={{
label: "موجه لمرة واحدة",
content: "اسأل → ولّد → أعد الإجابة\n\nالنموذج ينتج إجابة، وشخص يقرر ما إذا كانت ناجحة ثم يكتب الموجه التالي."
}}
after={{
label: "حلقة مهندَسة",
content: "أطّر → تصرّف → لاحظ → قيّم → تكيّف\n ↑______________________↓\n\nالنظام يجمع الأدلة، ويسجل الحالة، ولا يستمر إلا ما دامت جولة أخرى مفيدة."
}}
/>
تبني هذه الفكرة على أنماط وكلاء سابقة. فقد أظهرت [ورقة ReAct](https://arxiv.org/abs/2210.03629) قيمة المزاوجة بين الإجراءات والملاحظات القادمة من بيئة خارجية. ويضيف [نمط المقيّم-المحسّن](https://www.anthropic.com/engineering/building-effective-agents) من Anthropic خطوة تغذية راجعة منفصلة، بينما يصف [الدليل العملي لبناء الوكلاء](https://openai.com/business/guides-and-resources/a-practical-guide-to-building-ai-agents/) من OpenAI تشغيلات الوكيل بوصفها حلقات تحكمها شروط خروج. أما المصطلح الأحدث **هندسة الحلقات** فيركّز الانتباه على التصميم المتعمّد لهذه الدورة بأكملها.
## الحركات الخمس
<InfoGrid items={[
{ label: "1. أطّر", description: "حوّل النية إلى هدف وقيود ومعايير نجاح وميزانية.", color: "blue" },
{ label: "2. تصرّف", description: "اختر إجراءً واحداً محدود النطاق: ابحث، أو عدّل، أو احسب، أو استدعِ أداة، أو اسأل شخصاً.", color: "amber" },
{ label: "3. لاحظ", description: "اجمع ما حدث فعلاً: مخرجات الاختبارات، أو نتائج واجهة برمجة التطبيقات، أو الاستشهادات، أو ملاحظات المستخدمين.", color: "cyan" },
{ label: "4. قيّم", description: "قارن الأدلة بمعايير صريحة — لا بثقة النموذج في نفسه.", color: "purple" },
{ label: "5. تكيّف", description: "حدّث الحالة، أو غيّر الخطة، أو أعد المحاولة بأمان، أو صعّد الأمر، أو توقف.", color: "green" },
]} />
الحلقة ليست الأسهم. الهندسة تكمن في **العقود بين الأسهم**: ما الذي يُعد إجراءً، وأي الملاحظات جديرة بالثقة، ومن يقيّمها، وأي حالة تبقى بين الجولات، ومتى ينتهي التنفيذ بالضبط.
<LoopEngineeringLab content={{
eyebrow: "التحكم في الحلقة / محاكٍ تفاعلي",
title: "تتبّع حلقة تغذية راجعة عاملة خطوةً بخطوة",
description: "اختر مهمة، ثم تقدّم إشارةً واحدة في كل مرة. لاحظ كيف يأتي التقدم من أدلة البيئة والتقييم الصريح — لا من سؤال النموذج عما إذا كان يشعر بأنه انتهى.",
chooseScenarioLabel: "اختر حلقة",
goalLabel: "الهدف",
stopRuleLabel: "قاعدة التوقف",
evidenceLabel: "الأدلة الموثوقة",
iterationLabel: "التكرار",
progressLabel: "التقدم المتحقَّق منه",
openIssuesLabel: "المشكلات المفتوحة",
currentSignalLabel: "الإشارة الحالية",
advanceLabel: "تقدّم خطوة واحدة",
nextIterationLabel: "ابدأ التكرار التالي",
resetLabel: "أعد ضبط الحلقة",
completeLabel: "تم التحقق من الهدف",
completeDescription: "استُوفيت معايير النجاح، وسُجلت الأدلة، وتوقفت الحلقة بدلاً من إنفاق دورة أخرى.",
stages: [
{ id: "frame", label: "أطّر", verb: "أعد قراءة العقد" },
{ id: "act", label: "تصرّف", verb: "نفّذ حركة واحدة محدودة" },
{ id: "observe", label: "لاحظ", verb: "اقرأ التغذية الراجعة الخارجية" },
{ id: "evaluate", label: "قيّم", verb: "طبّق معايير التقييم" },
{ id: "adapt", label: "تكيّف", verb: "حدّث الحركة التالية" },
],
scenarios: [
{
id: "code",
label: "إصلاح خلل في إتمام الشراء",
goal: "تصحيح مجاميع إتمام الشراء دون تغيير سلوك الخصومات الصحيح.",
stopRule: "أن ينجح اختبار الانحدار المستهدف، وتنجح حزمة اختبارات إتمام الشراء كاملةً، وتكون نتيجة lint نظيفة — أو تُستنفد ثلاث محاولات فتصعّد الحلقة الأمر إلى إنسان.",
evidence: "خطوات إعادة إنتاج الخلل، ومخرجات الاختبارات، وفرق الكود، وحزمة الانحدار النهائية.",
cycles: [
{
action: "أعد إنتاج المجموع المبلَّغ عنه وأضف اختباراً فاشلاً لحالة الضريبة مع خصم بنسبة مئوية.",
observation: "يفشل الاختبار بفارق سنت واحد فقط عندما تُقرَّب الضريبة قبل تطبيق الخصم.",
evaluation: "أُعيد إنتاج الخلل بإشارة حتمية، لكن مصدره لم يُصلَح بعد.",
adaptation: "افحص موضع التقريب وغيّر مسار حساب مجموع الطلب دون سواه.",
progress: 34,
openIssues: 2,
},
{
action: "انقل التقريب إلى الحد النقدي النهائي وشغّل اختبارات إتمام الشراء المستهدفة.",
observation: "نجح اختبار الانحدار، لكن أحد اختبارات تكامل القسائم يفشل الآن مع خصم بمبلغ ثابت.",
evaluation: "أُصلح العرَض الأول، لكن التغيير أوسع من اللازم. قاعدة التوقف لم تتحقق بعد.",
adaptation: "ضيّق نطاق التعديل وأضف حالة اختبار تفصل تقريب الضريبة عن تقريب القسيمة.",
progress: 71,
openIssues: 1,
},
{
action: "طبّق إصلاح الحساب الضيق، ثم شغّل اختبار الانحدار وحزمة إتمام الشراء كاملة وأداة lint.",
observation: "نجحت جميع الفحوص. الفرق لا يمس سوى دالة حساب واحدة واختبار الانحدار الجديد.",
evaluation: "لكل معيار نجاح دليل مستقل، ولم يُتجاوز أي حد من حدود الميزانية.",
adaptation: "توقف، واحفظ مخرجات الاختبارات، وسلّم الفرق الصغير إلى مراجع بشري.",
progress: 100,
openIssues: 0,
},
],
},
{
id: "research",
label: "التحقق من ادعاء بحثي",
goal: "تقييم الادعاء القائل إن العمل عن بُعد يزيد إنتاجية الفريق دائماً.",
stopRule: "أن يوجد استنتاج مدروس مدعوم بثلاثة مصادر موثوقة على الأقل، مع ذكر أوجه الخلاف والقيود.",
evidence: "روابط مباشرة إلى المصادر، وتواريخ النشر، ومنهجيات الدراسات، وأحجام العينات، والمقاييس المقتبسة.",
cycles: [
{
action: "ابحث عن أدلة حديثة وتتبّع إحصائية الإنتاجية الأكثر تكراراً وصولاً إلى مصدرها.",
observation: "تكرر معظم المقالات استطلاعاً أجرته شركة مورّدة دون رابط إلى استبيانه أو عينته الخام.",
evaluation: "الدليل شائع لكنه ليس قوياً بما يكفي لدعم ادعاء مطلق.",
adaptation: "أعطِ الأولوية للدراسات المحكّمة ومجموعات البيانات العامة، وابحث عن النتائج المخالفة أيضاً.",
progress: 28,
openIssues: 3,
},
{
action: "قارن دراستين محكّمتين بمجموعة بيانات وطنية عن سوق العمل.",
observation: "تختلف النتائج بحسب نوع المهمة وطريقة القياس وما إذا كان العمل عن بُعد كلياً أم هجيناً.",
evaluation: "الأدلة تناقض كلمة «دائماً»، وبدأ استنتاج مشروط يصبح قابلاً للدفاع عنه.",
adaptation: "تحقق مما إذا كانت الدراسات تميّز بين الناتج وساعات العمل والإنتاجية المتصوَّرة.",
progress: 68,
openIssues: 1,
},
{
action: "أنشئ جدول أدلة وتحقق من كل ادعاء بمقارنته بالمصدر الأصلي.",
observation: "تدعم المصادر وجود آثار متباينة، وتحدد الاستقلالية والتنسيق ونوع المهمة بوصفها متغيرات أساسية.",
evaluation: "الاستنتاج مدعوم، وعدم اليقين ظاهر، وتم بلوغ عتبة المصادر المطلوبة.",
adaptation: "توقف بإجابة مشروطة واحتفظ بجدول الأدلة للمراجعة.",
progress: 100,
openIssues: 0,
},
],
},
{
id: "writing",
label: "صقل بريد إطلاق منتج",
goal: "إنشاء بريد إطلاق موجز يشرح الفائدة ويكسب نقرات مؤهلة على طلب العرض التوضيحي.",
stopRule: "أن يجتاز البريد معايير الأسلوب، ويبقى دون 140 كلمة، ويتضمن دعوة واحدة واضحة لاتخاذ إجراء، ويصمد أمام مراجعة الحقائق.",
evidence: "عدد الكلمات، ودرجات معايير التقييم، والتحقق من صلاحية الروابط، وحقائق المنتج المصدرية، وملاحظات المراجع.",
cycles: [
{
action: "اكتب مسودة انطلاقاً من موجز المنتج وقيّم النتيجة وفق معايير الجمهور والأسلوب.",
observation: "المسودة من 204 كلمات، تبدأ بالميزات، وتحتوي على دعوتين متنافستين لاتخاذ إجراء.",
evaluation: "الحقائق دقيقة، لكن معياري ترتيب الأولويات والطول لم يتحققا.",
adaptation: "ابدأ بالنتيجة التي يجنيها العميل، واحذف الإجراء الثانوي، وقلّص تفاصيل التنفيذ.",
progress: 41,
openIssues: 3,
},
{
action: "أعد كتابة الافتتاحية واضغط المتن في تسلسل واحد: مشكلة ففائدة فدليل.",
observation: "البريد من 126 كلمة وفيه دعوة واحدة لاتخاذ إجراء، لكن جملة الدليل تبالغ في نتيجة النسخة التجريبية.",
evaluation: "البنية تجتاز المعايير، لكن دقة الحقائق ما تزال دون المطلوب.",
adaptation: "استبدل الادعاء الفضفاض بنتيجة النسخة التجريبية المقيسة واطلب تدقيقاً نهائياً للحقائق.",
progress: 79,
openIssues: 1,
},
{
action: "أدرج المقياس المتحقَّق منه، وتأكد من صلاحية الرابط، وطبّق معايير التقييم كاملةً مرة أخيرة.",
observation: "البريد من 132 كلمة، والرابط يعمل، والحقائق تطابق الموجز، وكل بند من بنود المعايير يجتاز الفحص.",
evaluation: "الناتج يستوفي عتبة الجودة المحددة بأدلة قابلة للمراجعة.",
adaptation: "توقف وأرسل النسخة المعتمدة إلى مسؤول الحملة.",
progress: 100,
openIssues: 0,
},
],
},
],
}} />
## اكتب عقد الحلقة أولاً
قبل اختيار نموذج أو إطار عمل، اكتب عقداً صغيراً. إذا كانت هذه الحقول غامضة، فستحوّل الحلقة الغموض إلى تكلفة متكررة.
```yaml
goal: "ما الحالة القابلة للملاحظة التي يجب أن تتحقق؟"
inputs: "ما الذي يطلق الحلقة؟"
state: "ما الحقائق والمحاولات التي تبقى بين التكرارات؟"
actions: "ما الأدوات التي يجوز للنظام استخدامها، وبأي صلاحيات؟"
observations: "ما الإشارات الخارجية التي تعود من تلك الإجراءات؟"
evaluator: "ما معايير التقييم أو الفحوص الحتمية التي تحكم على النتيجة؟"
success: "ما الدليل الذي يثبت اكتمال الهدف؟"
failure: "ما الظروف التي تستدعي التعافي أو تدخل إنسان؟"
budget: "الحد الأقصى للجولات أو الوقت أو الرموز أو المال أو الآثار الجانبية"
```
<Callout type="warning" title="حلقة بلا مخرج هي نمط فشل">
حدد دائماً ثلاثة مخارج: **النجاح** عندما تستوفي الأدلة الهدف، و**الفشل** عندما لا يعود التعافي مجدياً، و**استنفاد الميزانية** عندما تبلغ الحلقة حدها المسموح من التكلفة أو المخاطرة.
</Callout>
## الملاحظات يجب أن تأتي من العالم
قولُ النموذج «هذا يبدو صحيحاً» ليس دليلاً قوياً. الملاحظة المفيدة ينتجها شيء يقع خارج الإجابة التي يجري الحكم عليها.
<table>
<thead>
<tr>
<th>المهمة</th>
<th>ملاحظة ضعيفة</th>
<th>ملاحظة قوية</th>
</tr>
</thead>
<tbody>
<tr>
<td>إصلاح الكود</td>
<td>«من المفترض أن ينجح الإصلاح.»</td>
<td>يُعاد إنتاج الفشل الأصلي، ثم ينجح اختبار الانحدار والحزمة الكاملة.</td>
</tr>
<tr>
<td>البحث</td>
<td>«عدة مصادر متفقة.»</td>
<td>ترتبط الادعاءات بمصادرها الأصلية مع تسجيل التواريخ والمنهجيات وأوجه الخلاف.</td>
</tr>
<tr>
<td>استخراج البيانات</td>
<td>«يبدو ملف JSON صالحاً.»</td>
<td>ينجح التحقق من المخطط، وتطابق عيّنةٌ مفحوصة من السجلات المصدرَ.</td>
</tr>
<tr>
<td>المحتوى</td>
<td>«النص يبدو واضحاً.»</td>
<td>يجتاز معايير تقييم مسماة، ومراجعة للحقائق، وفحصاً للروابط، واختباراً على الجمهور.</td>
</tr>
<tr>
<td>العمليات</td>
<td>«لقد نجح الطلب.»</td>
<td>يعيد النظام الخارجي الحالة المتوقعة، ويوجد سجل تدقيق للعملية.</td>
</tr>
</tbody>
</table>
لهذا تكتسب الأدوات أهميتها: فالاختبارات والمتصفحات وقواعد البيانات وأدوات التحقق والمراجعة البشرية تحوّل التخمين الداخلي إلى نتيجة قابلة للملاحظة.
## افصل الصانع عن المدقق
في الأعمال منخفضة المخاطر، يمكن لنموذج واحد أن يصيغ العمل ويراجع نفسه. أما في الأعمال المهمة، فاستخدم مدققاً له مهمة مختلفة وصلاحيات محدودة.
<InfoGrid columns={2} items={[
{ label: "الصانع", description: "يقترح التغيير، ويستدعي أدوات التنفيذ، ويوضح الأدلة التي ينبغي جمعها.", color: "amber" },
{ label: "المدقق", description: "يتلقى الهدف والناتج والأدلة؛ ويطبّق معايير التقييم؛ ولا يستطيع أن يعيد كتابة العمل الذي يقيّمه في الخفاء.", color: "green" },
]} />
لا يلزم أن يكون المدقق ذكاءً اصطناعياً آخر. فضّل دائماً أكثر المقيّمين المتاحين حتميةً:
1. **فحوص دقيقة** — الأنواع، والمخططات، والقيود، والصلاحيات، وقيم التجزئة
2. **فحوص قابلة للتنفيذ** — الاختبارات، وأدوات lint، والمحاكاة، والتحقق من الروابط
3. **فحوص بمعايير تقييم** — نموذج مستقل أو إنسان يستخدم معايير مسماة
4. **فحوص النتائج** — سلوك المستخدمين الفعلي أو مقاييس الإنتاج عبر الزمن
<Callout type="tip" title="الثقة ليست دليلاً">
درجة الثقة التي يولّدها النموذج نفسه الذي أنتج العمل تبقى مخرَجاً من مخرجات النموذج. تعامل معها كتلميح للتوجيه، لا كإثبات.
</Callout>
## الحالة هي العمود الفقري للحلقة
السياق هو ما يراه النموذج **في هذه الجولة**. أما الحالة فهي السجل المضغوط الذي يتيح للجولة التالية أن تستأنف دون تكرار العمل أو نسيانه.
<Checklist title="حالة حلقة مفيدة" items={[
{ text: "الهدف الحالي ومعايير القبول" },
{ text: "الإجراءات المجرَّبة سابقاً ونتائجها القابلة للملاحظة" },
{ text: "النواتج المُنتَجة، مع إصداراتها أو مراجع ثابتة إليها" },
{ text: "أحكام المقيّم والمشكلات غير المحلولة" },
{ text: "الميزانية المستهلكة والصلاحيات التي ما تزال متاحة" },
{ text: "سبب الاستمرار أو التوقف أو التصعيد" },
]} />
خزّن قرارات وأدلة موجزة — لا سلسلة التفكير الداخلية للنموذج. الحالة الجيدة صغيرة، وقابلة للفحص، وآمنة عند الاستئناف.
## أشكال الحلقات الشائعة
### حلقة الإصلاح
`أعد إنتاج الخلل → غيّر شيئاً واحداً → شغّل الفحوص → شخّص → كرر أو توقف`
الأنسب للكود والإعدادات وتنظيف البيانات وأي مهمة ذات تغذية راجعة قابلة للتنفيذ.
### حلقة المقيّم-المحسّن
`ولّد → قيّم بمعايير تقييم → أعد تغذية راجعة موجهة → نقّح`
الأنسب للكتابة والترجمة ونقد التصميم والمخرجات التي تتحسن جودتها بالتغذية الراجعة المفصّلة.
### حلقة البحث
`ابحث → افحص المصادر → حدد الثغرات أو التعارضات → ابحث مجدداً → ركّب النتائج`
الأنسب عندما لا يكون الاكتمال معروفاً مسبقاً. ينبغي أن تقيس قاعدة التوقف تغطية الأدلة، لا عدد نتائج البحث.
### الحلقة الخاضعة لبوابة بشرية
`حضّر → تحقق آلياً → توقف قبل الإجراء عالي الخطورة → يوافق الإنسان أو يعيد التوجيه`
الأنسب للمدفوعات والنشر والحذف وتغييرات الصلاحيات والقرارات الطبية أو القانونية وسائر الإجراءات ذات العواقب الجسيمة.
## أنماط فشل يجب تصميم الحلقة لتفاديها
<table>
<thead>
<tr>
<th>الفشل</th>
<th>ما الذي حدث</th>
<th>الاستجابة الهندسية</th>
</tr>
</thead>
<tbody>
<tr>
<td>إعادة المحاولة اللانهائية</td>
<td>لا تملك الحلقة مخرج نجاح قابلاً للقياس ولا مخرج ميزانية.</td>
<td>أضف حالات نهائية صريحة وسقفاً صارماً لعدد التكرارات.</td>
</tr>
<tr>
<td>الإطراء الذاتي</td>
<td>يقبل الصانع إجابته المعقولة الشكل دون دليل.</td>
<td>استخدم فحوصاً حتمية أو مدققاً مستقلاً.</td>
</tr>
<tr>
<td>تضخّم السياق</td>
<td>يُلحق كل تكرار كل شيء بالسياق حتى يفقد النموذج الإشارة.</td>
<td>خزّن حالة منظمة وأعد بناء السياق ذي الصلة فقط.</td>
</tr>
<tr>
<td>التأرجح</td>
<td>تتناوب الحلقة بين إصلاحين بلا جدوى.</td>
<td>اكتشف الحالات المتكررة واشترط استراتيجية مختلفة أو تصعيداً.</td>
</tr>
<tr>
<td>انحراف الهدف</td>
<td>تحل التحسينات الموضعية محل الهدف الأصلي.</td>
<td>أعد قراءة الهدف الثابت ومعايير القبول في كل دورة.</td>
</tr>
<tr>
<td>التكرار غير الآمن</td>
<td>خطأ قابل للتراجع عنه يصبح ضاراً عند تكراره.</td>
<td>قيّد الصلاحيات والآثار الجانبية والمعدل والإنفاق ونطاق الضرر.</td>
</tr>
</tbody>
</table>
## تنفيذ بالحد الأدنى
```typescript
let state = initialize(goal, acceptanceCriteria, budget);
while (state.budget.remaining > 0) {
const context = assembleRelevantContext(state);
const proposedAction = await maker.chooseAction(context);
const observation = await tools.executeWithinPolicy(proposedAction);
const verdict = await evaluator.check({ goal, observation, state });
state = recordIteration(state, { proposedAction, observation, verdict });
if (verdict.status === "passed") return complete(state);
if (verdict.status === "unsafe" || verdict.status === "blocked") {
return escalateToHuman(state);
}
state = adaptPlan(state, verdict.feedback);
}
return stopWithBudgetReport(state);
```
الكود هو الجزء السهل. الأسئلة الصعبة أسئلةُ مجالٍ: أي اختبار يثبت زوال الخلل؟ أي مصدر يُحتج به؟ أي إجراء يمكن التراجع عنه؟ من يملك اعتماد الخطوة الأخيرة؟ هذه القرارات هي العمل الحقيقي لهندسة الحلقات.
## تدريب: صمّم حلقة
<TryIt
title="اكتب مسودة عقد حلقة"
description="استبدل المتغيرات بمهمة متكررة من عملك، واطلب من الذكاء الاصطناعي أن يعترض على الأدلة الضعيفة وقواعد التوقف الغامضة."
prompt={`صمّم حلقة عمل محدودة للذكاء الاصطناعي لهذه المهمة:
المهمة: \${task:فرز طلبات دعم العملاء الجديدة كل صباح}
حدد ما يلي:
1. الهدف القابل للملاحظة
2. المُطلِق والمدخلات المطلوبة
3. الإجراءات المسموح بها وصلاحيات الأدوات
4. الملاحظات الموثوقة القادمة من البيئة الخارجية
5. المقيّم ومعايير تقييمه
6. الحالة التي تبقى بين التكرارات
7. مخارج النجاح والفشل واستنفاد الميزانية
8. بوابات الموافقة البشرية للإجراءات الخطرة
9. صيغة تتبّع تجعل كل تكرار قابلاً للتدقيق
ثم حدد أنماط الفشل الثلاثة الأكثر ترجيحاً في تصميمك ونقّح الحلقة لمنعها.`}
/>
<Quiz
question="يعدّل وكيلٌ الكود، ويعيد قراءة الفرق، ثم يقول إن الخلل قد أُصلح. ما أهم جزء مفقود في الحلقة؟"
options={[
"موجه نظام أطول",
"ملاحظة خارجية تُقيَّم وفق قاعدة توقف",
"جولة تعديل ثانية",
"نافذة سياق أكبر"
]}
correctIndex={1}
explanation="لقد أنتج الوكيل عملاً وفحصه بنفسه، لكنه لم يجمع دليلاً مستقلاً. إن إعادة إنتاج الفشل وتشغيل الاختبارات ذات الصلة يُنشئان إشارة قابلة للملاحظة تستطيع قاعدة التوقف تقييمها."
/>
## قراءات إضافية
- [Loop Engineering — Addy Osmani](https://addyosmani.com/blog/loop-engineering/) — الطرح الحديث لفكرة استبدال موجهات المتابعة اليدوية بنظام مصمَّم، مع تنبيهات عملية حول التحقق والمسؤولية البشرية
- [Building Effective Agents — Anthropic](https://www.anthropic.com/engineering/building-effective-agents) — تدفقات عمل المقيّم-المحسّن، والتغذية الراجعة من البيئة، وشروط التوقف، وإرشادات حول متى يكون تعقيد الوكلاء مبرراً
- [A Practical Guide to Building Agents — OpenAI](https://openai.com/business/guides-and-resources/a-practical-guide-to-building-ai-agents/) — تشغيلات الوكيل، وشروط الخروج، والأدوات، وحواجز الحماية، والتدخل البشري
- [ReAct: Synergizing Reasoning and Acting in Language Models](https://arxiv.org/abs/2210.03629) — بحث تأسيسي حول المزاوجة بين الإجراءات والملاحظات القادمة من بيئة خارجية
## الخلاصة
<Callout type="tip" title="ابنِ التغذية الراجعة، لا الموجه فقط">
الحلقة الموثوقة لها هدف قابل للقياس، وإجراءات محدودة، وملاحظات موثوقة، ومقيّم صريح، وحالة مضغوطة، ومخارج آمنة، وحكم بشري حيث تقتضيه العواقب. النموذج داخل الحلقة؛ أما المهندس فيبقى مسؤولاً عن الحلقة.
</Callout>