<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://thakicloud.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://thakicloud.github.io/" rel="alternate" type="text/html" /><updated>2026-06-25T21:24:15+09:00</updated><id>https://thakicloud.github.io/feed.xml</id><title type="html">Thaki Cloud Tech Blog | ThakiCloud | 다키클라우드 기술 블로그</title><subtitle>Thaki Cloud (ThakiCloud, 다키클라우드, thaki cloud, THAKI CLOUD, ثاكي كلاود)는 AI/ML Engineering, LLMOps, DevOps 분야의 최신 기술과 실무 경험을 공유하는 전문 기술 블로그입니다. 머신러닝 모델 운영, 쿠버네티스, 클라우드 인프라, AI 엔지니어링 커리어, 인공지능 기술 블로그, 다키클라우드 개발 팀의 깊이 있는 인사이트를 제공합니다. مدونة تقنية متخصصة في هندسة الذكاء الاصطناعي والحوسبة السحابية.</subtitle><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><entry xml:lang="ar"><title type="html">بناء أول وكيل ذكاء اصطناعي - ابدأ بحلقة التحكم الدنيا المحمية</title><link href="https://thakicloud.github.io/ar/dev/minimal-guarded-agent-loop/" rel="alternate" type="text/html" title="بناء أول وكيل ذكاء اصطناعي - ابدأ بحلقة التحكم الدنيا المحمية" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/dev/minimal-guarded-agent-loop</id><content type="html" xml:base="https://thakicloud.github.io/ar/dev/minimal-guarded-agent-loop/"><![CDATA[<p>تحظى أدلة المبتدئين المعنونة بـ “كيف تبني أول وكيل ذكاء اصطناعي” باهتمام متواصل. والأدلة الجيدة منها تقسّم الوكيل عادةً إلى أربعة أجزاء: دماغ نموذج اللغة الكبير المسؤول عن الاستدلال، والذاكرة التي تحفظ الحالة، والأدوات التي تتفاعل مع العالم الخارجي، وحلقة الوكيل التي تربط الثلاثة معاً في تكرار. ويصاحب ذلك نمط ReAct - التناوب بين الاستدلال والتصرف - باعتباره المعيار الفعلي. كل ذلك صحيح. لكن عند تشغيل الوكلاء فعلياً في الإنتاج، يكون الجزء الذي يتعطل مختلفاً. إنه ضوابط الحماية التي تقرر متى توقف الحلقة. يشغّل هذا المقال حلقة وكيل دنيا مع ضوابط حماية بلغة Python الصرفة دون استدعاء أي نموذج لغوي خارجي، ويوضح الفارق بأرقام حقيقية.</p>

<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>حلقة الوكيل في جوهرها حلقة while. تراقب الحالة، وتقرر الإجراء التالي، وتنفّذ أداة، ثم تراقب النتيجة من جديد. في المسار السعيد الذي تعرضه مواد المبتدئين، تدور هذه الحلقة بضع مرات وتنتج إجابة وتنتهي. المشكلة هي المسار غير السعيد. في العمليات الحقيقية، يحدث كثيراً أن يستدعي النموذج الأداة ذاتها إلى ما لا نهاية، أو يتعلق بمهمة لا تنتهي، أو يظل طلب واحد يشغل وحدة معالجة الرسوميات GPU دون أن يُفرج عنها. ضوابط الحماية هي الآلية التي تحجب هذا الانفلات على مستوى الكود.</p>

<p>تشغّل ThakiCloud وكلاء ومهام دفعية لعملاء متعددين على مجموعة GPU واحدة في بيئة متعددة المستأجرين. في هذا السياق، تُعدّ ضوابط الحماية شرطاً مسبقاً لا خياراً. لا يمكن السماح لحلقة منفلتة من مستأجر واحد بتعطيل المجموعة بأكملها. لهذا يصبح السؤال “كيف توقف حلقة الوكيل” أهم من الناحية التشغيلية من السؤال “كيف تبني وكيلاً”. يشارك هذا المقال نتائج تطبيق آلية الإيقاف في أصغر صورة لها وتشغيلها مباشرة.</p>

<h2 id="ما-هذه-التقنية">ما هذه التقنية</h2>

<p>هيكل حلقة ReAct بسيط. تنظر السياسة إلى الحالة الراهنة وتقرر ما ستفعله بعد ذلك. إن طالبت باستدعاء أداة، تعمل الأداة وتنتج ملاحظة. وإن طالبت بالانتهاء، تُعاد الإجابة. في الوكيل الحقيقي تكون السياسة نموذج لغة كبير LLM، لكن بنية التحكم في الحلقة ذاتها مستقلة عن النموذج. لهذا استُعيض في هذه التجربة عن السياسة بمحاكٍ يعمل بقواعد ثابتة - لمراقبة مستوى التحكم في الحلقة لا جودة النموذج - مما يجعل النتائج قابلة للتكرار الكامل.</p>

<p>تُضيف ضوابط الحماية ثلاثة شروط إيقاف إلى هذه الحلقة. حد الخطوات (max_steps) يُجبر الحلقة على التوقف بعد عدد محدد من التكرارات. ميزانية الوقت (wall_budget) تقيّد وقت الساعة الجدارية لكل مهمة. كشف التكرار (repeat_guard) يقطع الحلقة حين تتكرر الإجراء ذاته، مما يشير إلى فخ تكرار. تنتهي كل مهمة بسبب إنهاء واحد بالضبط من بين: finished أو max_steps أو wall_budget أو repeat_guard أو no_action.</p>

<p><img src="/assets/images/minimal-guarded-agent-loop-diagram.png" alt="حلقة الوكيل مع ضوابط الحماية: بعد قرار السياسة، يجب على الحلقة اجتياز حد الخطوات وميزانية الوقت وكشف التكرار قبل تنفيذ أي أداة. وإذا أُطلق أي ضابط حماية، توقف الحلقة بسبب إنهاء صريح" /></p>

<p>النقطة الجوهرية في هذا الشكل هي أن فحوصات ضوابط الحماية تجري قبل كل تنفيذ لأداة. وضع ضوابط الحماية خارج الحلقة أو فحصها بعد الحقيقة يعني أن الانفلات قد بدأ فعلاً. الفحص في كل تكرار مباشرةً قبل كل إجراء هو ما يضمن الإيقاف.</p>

<h2 id="الإعداد-والتكامل">الإعداد والتكامل</h2>

<p>هذه التجربة لا تعتمد على أي مكتبة خارجية. تستخدم مكتبة Python القياسية فقط، فلا حاجة لأي تثبيت إضافي. تختار السياسة أداة بتطبيق تعابير نمطية على سلسلة المهمة، وتوجد أداتان: حاسبة حسابية محدودة بأمان ونظام استعلام معرفي صغير.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nd">@dataclass</span>
<span class="k">class</span> <span class="nc">Guards</span><span class="p">:</span>
    <span class="n">max_steps</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">6</span>
    <span class="n">wall_budget_s</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">2.0</span>
    <span class="n">repeat_limit</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">2</span>

<span class="k">def</span> <span class="nf">run_task</span><span class="p">(</span><span class="n">task</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">g</span><span class="p">:</span> <span class="n">Guards</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">Trace</span><span class="p">:</span>
    <span class="n">t0</span> <span class="o">=</span> <span class="n">time</span><span class="p">.</span><span class="nf">perf_counter</span><span class="p">()</span>
    <span class="n">tr</span> <span class="o">=</span> <span class="nc">Trace</span><span class="p">(</span><span class="n">task</span><span class="o">=</span><span class="n">task</span><span class="p">)</span>
    <span class="n">repeats</span><span class="p">:</span> <span class="nb">dict</span><span class="p">[</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span>
    <span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
        <span class="k">if</span> <span class="n">tr</span><span class="p">.</span><span class="n">steps</span> <span class="o">&gt;=</span> <span class="n">g</span><span class="p">.</span><span class="n">max_steps</span><span class="p">:</span>
            <span class="n">tr</span><span class="p">.</span><span class="n">terminal</span> <span class="o">=</span> <span class="sh">"</span><span class="s">max_steps</span><span class="sh">"</span><span class="p">;</span> <span class="k">break</span>
        <span class="nf">if </span><span class="p">(</span><span class="n">time</span><span class="p">.</span><span class="nf">perf_counter</span><span class="p">()</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> <span class="o">&gt;</span> <span class="n">g</span><span class="p">.</span><span class="n">wall_budget_s</span><span class="p">:</span>
            <span class="n">tr</span><span class="p">.</span><span class="n">terminal</span> <span class="o">=</span> <span class="sh">"</span><span class="s">wall_budget</span><span class="sh">"</span><span class="p">;</span> <span class="k">break</span>
        <span class="n">act</span> <span class="o">=</span> <span class="nf">policy</span><span class="p">(</span><span class="n">task</span><span class="p">,</span> <span class="n">tr</span><span class="p">.</span><span class="n">scratch</span><span class="p">)</span>
        <span class="k">if</span> <span class="sh">"</span><span class="s">final</span><span class="sh">"</span> <span class="ow">in</span> <span class="n">act</span><span class="p">:</span>
            <span class="n">tr</span><span class="p">.</span><span class="n">answer</span> <span class="o">=</span> <span class="n">act</span><span class="p">[</span><span class="sh">"</span><span class="s">final</span><span class="sh">"</span><span class="p">]</span>
            <span class="n">tr</span><span class="p">.</span><span class="n">terminal</span> <span class="o">=</span> <span class="sh">"</span><span class="s">finished</span><span class="sh">"</span> <span class="k">if</span> <span class="n">act</span><span class="p">[</span><span class="sh">"</span><span class="s">final</span><span class="sh">"</span><span class="p">]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="k">else</span> <span class="sh">"</span><span class="s">no_action</span><span class="sh">"</span>
            <span class="k">break</span>
        <span class="n">sig</span> <span class="o">=</span> <span class="sa">f</span><span class="sh">"</span><span class="si">{</span><span class="n">act</span><span class="p">[</span><span class="sh">'</span><span class="s">tool</span><span class="sh">'</span><span class="p">]</span><span class="si">}</span><span class="s">:</span><span class="si">{</span><span class="n">act</span><span class="p">[</span><span class="sh">'</span><span class="s">input</span><span class="sh">'</span><span class="p">]</span><span class="si">}</span><span class="sh">"</span>
        <span class="n">repeats</span><span class="p">[</span><span class="n">sig</span><span class="p">]</span> <span class="o">=</span> <span class="n">repeats</span><span class="p">.</span><span class="nf">get</span><span class="p">(</span><span class="n">sig</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span>
        <span class="k">if</span> <span class="n">repeats</span><span class="p">[</span><span class="n">sig</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">g</span><span class="p">.</span><span class="n">repeat_limit</span><span class="p">:</span>
            <span class="n">tr</span><span class="p">.</span><span class="n">terminal</span> <span class="o">=</span> <span class="sh">"</span><span class="s">repeat_guard</span><span class="sh">"</span><span class="p">;</span> <span class="k">break</span>
        <span class="n">obs</span> <span class="o">=</span> <span class="n">TOOLS</span><span class="p">[</span><span class="n">act</span><span class="p">[</span><span class="sh">"</span><span class="s">tool</span><span class="sh">"</span><span class="p">]](</span><span class="n">act</span><span class="p">[</span><span class="sh">"</span><span class="s">input</span><span class="sh">"</span><span class="p">])</span>
        <span class="n">tr</span><span class="p">.</span><span class="n">scratch</span><span class="p">.</span><span class="nf">append</span><span class="p">({</span><span class="sh">"</span><span class="s">tool</span><span class="sh">"</span><span class="p">:</span> <span class="n">act</span><span class="p">[</span><span class="sh">"</span><span class="s">tool</span><span class="sh">"</span><span class="p">],</span> <span class="sh">"</span><span class="s">input</span><span class="sh">"</span><span class="p">:</span> <span class="n">act</span><span class="p">[</span><span class="sh">"</span><span class="s">input</span><span class="sh">"</span><span class="p">],</span> <span class="sh">"</span><span class="s">obs</span><span class="sh">"</span><span class="p">:</span> <span class="n">obs</span><span class="p">})</span>
        <span class="n">tr</span><span class="p">.</span><span class="n">steps</span> <span class="o">+=</span> <span class="mi">1</span>
    <span class="n">tr</span><span class="p">.</span><span class="n">latency_ms</span> <span class="o">=</span> <span class="nf">round</span><span class="p">((</span><span class="n">time</span><span class="p">.</span><span class="nf">perf_counter</span><span class="p">()</span> <span class="o">-</span> <span class="n">t0</span><span class="p">)</span> <span class="o">*</span> <span class="mi">1000</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
    <span class="k">return</span> <span class="n">tr</span>
</code></pre></div></div>

<p>إذا نظرت إلى بنية الحلقة، ستجد أن جميع ضوابط الحماية مُوضعة مباشرةً قبل كل إجراء. يُفحص حد الخطوات وميزانية الوقت عند مدخل الحلقة، ويُفحص كشف التكرار مباشرةً قبل استدعاء الأداة. حين تقرر السياسة الانتهاء، تخرج الحلقة فوراً. وإلا، لا تُنفَّذ إلا الإجراءات التي اجتازت ضوابط الحماية. التشغيل يكون بهذا السطر الواحد:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>.venv/bin/python scripts/experiments/minimal-guarded-agent-loop/agent_loop.py
</code></pre></div></div>

<p>تضمّن مجموعة المهام أربع مهام تكتمل بصورة طبيعية، إلى جانب مهمة فخ تكرار مصمّمة عمداً لتكرار الاستعلام ذاته إلى الأبد. ما إذا كانت مهمة الفخ تُوقفها آلية كشف التكرار هو التحقق المحوري لهذه التجربة.</p>

<h2 id="نتائج-التجربة-الفعلية">نتائج التجربة الفعلية</h2>

<p>فيما يلي النتائج الحقيقية لتشغيل خمس مهام. ضُبطت ضوابط الحماية على: حد خطوات 6، وميزانية وقت 2.0 ثانية، وحد تكرار 2.</p>

<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
  </span><span class="nl">"n_tasks"</span><span class="p">:</span><span class="w"> </span><span class="mi">5</span><span class="p">,</span><span class="w">
  </span><span class="nl">"by_terminal"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nl">"finished"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="p">,</span><span class="w"> </span><span class="nl">"repeat_guard"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span><span class="p">},</span><span class="w">
  </span><span class="nl">"total_latency_ms"</span><span class="p">:</span><span class="w"> </span><span class="mf">0.115</span><span class="p">,</span><span class="w">
  </span><span class="nl">"total_steps"</span><span class="p">:</span><span class="w"> </span><span class="mi">7</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>

<p>المحور الرئيسي هو توزيع أسباب الإنهاء. أربع مهام انتهت بصورة طبيعية، ومهمة واحدة أوقفها كاشف التكرار. مهمة “loop forever please” المزروعة عمداً واصلت تكرار الاستعلام ذاته حتى أوقفها كشف التكرار عند الخطوة الثانية بالضبط. بمجرد أن تجاوز الإجراء ذاته الحد المسموح به، قُطعت الحلقة. بدون ضوابط الحماية، ما كانت هذه المهمة لتنتهي أبداً، مع إصرار السياسة على الإجراء ذاته إلى الأبد.</p>

<p><img src="/assets/images/minimal-guarded-agent-loop-results.png" alt="عدد خطوات الحلقة لكل مهمة وتوزيع أسباب الإنهاء: أربع مهام تنتهي بصورة طبيعية في 1 إلى 2 خطوة، ومهمة فخ التكرار الوحيدة تتوقف عبر كشف التكرار" /></p>

<p>يوضح الشريط الأيسر عدد الخطوات حتى الإنهاء لكل مهمة. انتهت المهام الطبيعية في خطوة أو خطوتين، والمهمة الوحيدة التي تطلبت حساباً واستعلاماً معاً احتاجت خطوتين. يُظهر الجانب الأيمن توزيع أسباب الإنهاء، مؤكداً أن مهمة واحدة من خمس أوقفها ضابط حماية. كان إجمالي وقت المعالجة 0.115 ميلي ثانية، وإذ لا توجد استدعاءات لنماذج اللغة الكبيرة LLM فإن تكلفة التحكم في الحلقة ذاتها لا تكاد تُذكر. يكشف هذا عن حقيقة مهمة: تكلفة إضافة ضوابط الحماية تافهة، وتكلفة حذفها هي الحلقة المنفلتة بأكملها.</p>

<p>هذه الأرقام لا تقيس أداء النموذج. بما أن السياسة ثابتة كقواعد، فما يُقاس هو مستوى التحكم. لكن مع تركيب نموذج لغوي حقيقي، يكون سلوك ضوابط الحماية متطابقاً تماماً. بصرف النظر عما يُخرجه النموذج، فإن حدود الخطوات وميزانيات الوقت وكشف التكرار تُفرض بكود خارج النموذج. جوهر هذه البنية أن الإيقاف يملكه الكود، لا حسن نية النموذج.</p>

<h2 id="التطبيق-على-منصة-thakicloud-للذكاء-الاصطناعي-وتعلم-الآلة-على-kubernetes">التطبيق على منصة ThakiCloud للذكاء الاصطناعي وتعلم الآلة على Kubernetes</h2>

<p>قد تبدو هذه الحلقة الدنيا مجرد تمرين، لكن المبادئ التي تجسّدها هي ذاتها جوهر تشغيل وكلاء الإنتاج. المبدأ هو أن الإيقاف مسؤولية البنية التحتية لا النموذج. في حزمة عمليات ThakiCloud، يتجلى هذا المبدأ على مستويين.</p>

<p>على مستوى التطبيق، تعمل ضوابط الحماية الداخلية للحلقة التي رأيناها للتو. حدود الخطوات وكشف التكرار يمنعان الانفلات من طلب واحد داخل كود الوكيل. وعلى مستوى البنية التحتية فوق ذلك، يؤدي Kueue الدور ذاته على بُعد الموارد. حين تطلب مهمة وكيل وحدة معالجة رسوميات GPU، يضعها Kueue في قائمة الانتظار ويجدول تشغيلها حين تتوفر الموارد، والمهام التي تتجاوز الحصص المخصصة لكل مستأجر توضع في الانتظار أو يُزاح عنها. ومن ثم، بصرف النظر عن عدد المهام التي يُلقيها وكيل مستأجر واحد على النظام، يحجب الكود ميزانية الوقت ويحجب Kueue حد الموارد. ضابطا حماية على طبقتين مختلفتين يحجبان الانفلات ذاته بشكل مزدوج.</p>

<p>وتأتي قابلية التدقيق بصورة طبيعية. في هذه التجربة، أبقت كل مهمة سجلاً بسبب الإنهاء بصريح العبارة. ما إذا انتهت طبيعياً، أو أوقفها كشف التكرار، أو تجاوزت الوقت يُسجَّل بصورة هيكلية. مدّ هذا النمط للإنتاج يعني أن كل إجراء وسبب إنهاء من وكيل يُدوَّن في سجلات، ويمكن تتبع من أوقف ماذا ومتى ولماذا. في البيئات التي تفترض النشر المحلي والسيادي، تُعدّ هذه القابلية للتتبع شرطاً مسبقاً للتبني من قِبل القطاع العام أو عملاء الصناعات المنظَّمة. النظام الذي لا يستطيع شرح ما فعله وكلاؤه غير قابل للنشر بحكم تعريفه.</p>

<p>خلاصة القول: أهم ما ينبغي تعلّمه عند بناء أول وكيل ليس كيفية توصيل الأدوات، بل كيفية إيقاف الحلقة. ضوابط الحماية ليست ميزة أمان تُضاف لاحقاً بل يجب أن تكون جزءاً من الحلقة منذ البداية. ووضع هذه الضوابط على مستوى التطبيق والبنية التحتية معاً هو الطريقة الآمنة لتشغيل الوكلاء على منصة GPU متعددة المستأجرين.</p>

<h2 id="القيود-والاعتراضات">القيود والاعتراضات</h2>

<p>لهذه التجربة قيود واضحة. أولاً: بما أن السياسة ثابتة كقواعد، لم يُقس عدم القدرة على التنبؤ الذي تُحدثه نماذج اللغة الكبيرة الحقيقية. نموذج حقيقي قد يستدعي أداة خاطئة، أو يُنتج مدخلات مشوهة، أو يواصل الاستدلال بلا نهاية عبر الهلوسة. لا تُثبت النتائج هنا إلا أن ضوابط الحماية تضمن الإيقاف في تلك الحالات أيضاً، وهي لا تضمن أن النموذج سيصبح أذكى.</p>

<p>ثانياً: ضوابط الحماية تمنع الانفلات لكنها لا تصنع الجودة. مهمة أوقفها حد الخطوات انتهت بأمان لكنها فشلت في إنتاج إجابة. ضبط ضوابط الحماية بإحكام شديد يقطع المهام الطويلة الطبيعية أيضاً، وضبطها بتساهل يعني عدم حجب الانفلات بسرعة كافية. يجب تعديل الحدود المناسبة وفق خصائص المهام، وهذا تحدٍّ تشغيلي مستمر لا يُحسم مرة واحدة.</p>

<p>ثالثاً: الأنظمة الحقيقية تحتاج إلى أنواع أكثر من ضوابط الحماية. ميزانيات الرمز، وأسقف التكلفة، وحدود استدعاء الأدوات لكل أداة، ومهل الاستدعاءات الخارجية كلها ضرورية. غطّى هذا التطبيق الدني ثلاثة أنواع، لكن المبدأ يتوسع بالطريقة ذاتها. شروط الإيقاف يملكها الكود خارج النموذج، وتُفحص في كل تكرار مباشرةً قبل كل إجراء. إضافة هذا الجزء الخامس - ضوابط الحماية - إلى الأجزاء الأربعة التي تعرضها أدلة المبتدئين هو الفارق الذي يرفع الوكيل الأول من مجرد تمرين إلى نظام قابل للتشغيل.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li>الخيط التعريفي الأصلي: <a href="https://x.com/eng_khairallah1">How to build your first AI agent by @eng_khairallah1</a></li>
  <li>مفهوم حلقة تنفيذ الوكيل: <a href="https://newsletter.victordibia.com/p/the-agent-execution-loop-how-to-build">The Agent Execution Loop (Victor Dibia)</a></li>
  <li>نظرة عامة على ReAct ونماذج اللغة الكبيرة LLM: <a href="https://www.promptingguide.ai/research/llm-agents">Prompt Engineering Guide - LLM Agents</a></li>
  <li>كود التجربة: <code class="language-plaintext highlighter-rouge">scripts/experiments/minimal-guarded-agent-loop/agent_loop.py</code> (هذا المستودع)</li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="ai-agent" /><category term="react" /><category term="guardrails" /><category term="python" /><category term="kubernetes" /><summary type="html"><![CDATA[تقتصر معظم أدلة المبتدئين في وكلاء الذكاء الاصطناعي على شرح أربعة مكونات: دماغ نموذج اللغة الكبير، والذاكرة، والأدوات، وحلقة الوكيل. غير أن نقطة الانهيار الفعلية في بيئات الإنتاج هي ضوابط الإيقاف. يشغّل هذا المقال حلقة ReAct دنيا مع ضوابط حماية بلغة Python الصرفة دون الحاجة إلى أي نموذج لغوي خارجي، ويثبت بأرقام حقيقية كيف تمنع حدود الخطوات وكشف التكرار الانفلات. ويربط ذلك بمنظور عمليات Kueue في ThakiCloud.]]></summary></entry><entry xml:lang="ar"><title type="html">vLLM مقابل Ollama - استدلال LLM المحلي: متى تختار أيهما</title><link href="https://thakicloud.github.io/ar/dev/vllm-vs-ollama-local-inference/" rel="alternate" type="text/html" title="vLLM مقابل Ollama - استدلال LLM المحلي: متى تختار أيهما" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/dev/vllm-vs-ollama-local-inference</id><content type="html" xml:base="https://thakicloud.github.io/ar/dev/vllm-vs-ollama-local-inference/"><![CDATA[<p>حين تبحث عن كيفية تشغيل نموذج لغوي كبير محلياً، يظهر اسمان في الغالب: Ollama وvLLM. وكثيراً ما تقرأ حججاً قاطعة من قبيل “إن كنت تريد الأداء فلا تستخدم Ollama، استخدم vLLM”. هل هذا صحيح؟ الإجابة المختصرة: نصفه فقط. الجهاز المحمول الذي يستخدمه شخص واحد بطلب واحد في كل مرة مشكلة مختلفة تماماً عن خادم يخدم عشرات المستخدمين المتزامنين. يستند هذا المقال إلى أرقام معايير أداء RTX 4090 المنشورة عام 2026 لدراسة أين تتباين الأداتان، وما دلالة ذلك التباين لمنصة ThakiCloud المستندة إلى Kubernetes.</p>

<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>كلتا الأداتين محرك استدلال لتشغيل نماذج لغوية كبيرة محلياً أو على بنية تحتية خاصة، غير أن أهدافهما التصميمية تختلف. Ollama مصنوع ليتيح لشخص واحد سحب نموذج بسرعة وتشغيله بأدنى احتكاك. التثبيت بسيط وإدارة النماذج مدمجة فيه، والخادم الخفيف المكتوب بـGo يبدأ سريعاً. أما vLLM فهو محرك خدمة إنتاجي مصمم من الأساس لإشباع GPU واحد بطلبات متزامنة متعددة وتعظيم الإنتاجية، وأبرز أسلحته PagedAttention والتجميع المستمر (continuous batching).</p>

<p>لماذا يعود هذا التمييز إلى الواجهة الآن؟ خضعت كلتا الأداتين لتغييرات معمارية جوهرية بعد عام 2024. حسّن Ollama تحسينات نواة llama.cpp ومسارات الاستدلال بالتكميم لرفع أداء التدفق الواحد، بينما بسّط vLLM تجربة التثبيت مع مواصلة تطوير PagedAttention والتشفير التخميني. معايير الأداء القديمة لم تعد تعكس الواقع الحالي، لذا يستحق الأمر مراجعة بأرقام حديثة.</p>

<p>تعالج ThakiCloud طلبات استدلال من عملاء متعددين على مجمع GPU مشترك في بيئة متعددة المستأجرين. في هذا السياق، سؤال “هل هو سريع لمستخدم واحد؟” شبه عديم المعنى؛ ما يهم هو “هل يصمد حين يتدفق المستخدمون في آن واحد؟”. من هذه الزاوية نستعرض منحنيات التوسع لكلتا الأداتين.</p>

<h2 id="ماهية-كل-أداة">ماهية كل أداة</h2>

<p>الفارق الحاسم بين المحركين يكمن في طريقة إدارة ذاكرة تخزين KV المؤقتة. خلال التوليد، يتراكم في المحول مفاتيح وقيم الرموز السابقة في ذاكرة مؤقتة. هذه الذاكرة هي المستهلك الأكبر لذاكرة GPU. يخصص Ollama وllama.cpp كتلة ذاكرة متجاورة لكل طلب مسبقاً. التنفيذ بسيط، لكن مع تزايد الطلبات المتزامنة يتراكم التشرذم وتصطدم القدرة على المعالجة الموازية بسقف سريع.</p>

<p>يعامل PagedAttention في vLLM ذاكرة KV المؤقتة كصفحات ذاكرة افتراضية في نظام تشغيل. التخصيص في كتل صغيرة غير متجاورة عند الحاجة يعني أن نفس VRAM يستوعب تسلسلات متزامنة أكثر بكثير. يضاف إلى ذلك التجميع المستمر: حين يصل طلب جديد يُدرج في الدفعة النشطة فوراً دون انتظار انتهاء الطلبات السابقة. هذان العاملان معاً يفسران لماذا يرسم vLLM منحنى مختلفاً تحت ضغط التزامن.</p>

<p>يوضح المخطط أدناه الفارق في كيفية معالجة كل محرك للطلبات المتزامنة.</p>

<pre><code class="language-mermaid">flowchart TB
    subgraph OLLAMA["Ollama / llama.cpp - FIFO Queue"]
      Q1["Request 1"] --&gt; EXEC1["Sequential Execution"]
      Q2["Request 2"] --&gt; WAIT["Queue Wait"]
      Q3["Request N"] --&gt; WAIT
      WAIT --&gt; EXEC1
      EXEC1 --&gt; KVC["Contiguous KV Cache (fixed block per request)"]
    end
    subgraph VLLM["vLLM - Continuous Batching + PagedAttention"]
      R1["Request 1"] --&gt; BATCH["Unified Batch"]
      R2["Request 2"] --&gt; BATCH
      R3["Request N"] --&gt; BATCH
      BATCH --&gt; PAGED["PagedAttention KV Pages (dynamic allocation)"]
      PAGED --&gt; GPU["Merged into Single GPU Compute"]
    end
</code></pre>

<p>باختصار، Ollama محسّن لمعالجة طلب واحد بشكل نظيف في كل مرة؛ vLLM محسّن لدمج طلبات متعددة في عملية GPU واحدة. هذا الفارق التصميمي يظهر مباشرة في أرقام معايير الأداء.</p>

<h2 id="التثبيت-والتكامل">التثبيت والتكامل</h2>

<p>تشغيل كلتا الأداتين عبر Docker هو الأسلوب الأنظف من حيث قابلية الإعادة. Ollama يبدأ هكذا:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">-d</span> <span class="nt">--gpus</span><span class="o">=</span>all <span class="nt">-v</span> ollama:/root/.ollama <span class="se">\</span>
  <span class="nt">-p</span> 11434:11434 <span class="nt">--name</span> ollama ollama/ollama
docker <span class="nb">exec</span> <span class="nt">-it</span> ollama ollama run llama3.1:8b
</code></pre></div></div>

<p>يمكن تشغيل vLLM مباشرة من صورة الخادم المتوافقة مع OpenAI:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>docker run <span class="nt">--gpus</span> all <span class="nt">-p</span> 8000:8000 <span class="se">\</span>
  <span class="nt">--ipc</span><span class="o">=</span>host vllm/vllm-openai:latest <span class="se">\</span>
  <span class="nt">--model</span> meta-llama/Llama-3.1-8B-Instruct <span class="se">\</span>
  <span class="nt">--dtype</span> auto
</code></pre></div></div>

<p>كلا الخادمين يكشفان واجهة برمجية متوافقة مع OpenAI، فيمكن الإبقاء على كود العميل متطابقاً لكليهما:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl http://localhost:8000/v1/completions <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{"model":"meta-llama/Llama-3.1-8B-Instruct","prompt":"مرحباً","max_tokens":64}'</span>
</code></pre></div></div>

<p>لضمان قابلية الإعادة، يُنصح بتثبيت digests الصور. توصي معايير الأداء العامة بتسجيل RepoDigest عبر <code class="language-plaintext highlighter-rouge">docker inspect ollama/ollama:&lt;tag&gt;</code> و<code class="language-plaintext highlighter-rouge">docker inspect vllm/vllm-openai:&lt;tag&gt;</code>، وحفظ مخرجات <code class="language-plaintext highlighter-rouge">ollama --version</code> و<code class="language-plaintext highlighter-rouge">pip show vllm</code> جنباً إلى جنب مع النتائج. حتى تغيير إصدار واحد قد يزعزع الأرقام.</p>

<p>إفصاح ضروري: كُتب هذا المقال على Apple Silicon (macOS, MPS)، لذا لم يكن بالإمكان إعادة إنتاج معايير أداء vLLM المستندة إلى CUDA مباشرة. الأرقام أدناه مستشهد بها من معيار أداء عام على نفس العتاد (SitePoint، مارس 2026، RTX 4090). المصدر مذكور في نهاية المقال. الأرقام المأخوذة من قياسات الآخرين تُبقى متمايزة عن أي ادعاء بأنها قياساتنا.</p>

<h2 id="نتائج-معايير-الأداء-استشهاد-بمعيار-أداء-عام">نتائج معايير الأداء (استشهاد بمعيار أداء عام)</h2>

<p>بيئة معيار الأداء المستشهد به: GPU - NVIDIA RTX 4090 (24GB)، CPU - AMD Ryzen 9 7950X، ذاكرة عشوائية 64GB DDR5، Ubuntu 24.04، CUDA 12.6، Python 3.12. النماذج المقارنة هي Llama 3.1 8B وDeepSeek-R1-Distill-Llama-8B بموجّهات متطابقة.</p>

<p>أولاً، إنتاجية المستخدم الواحد التسلسلية. خلافاً للاعتقاد الشائع، لا يتفوق vLLM تفوقاً ساحقاً. لنموذج Llama 3.1 8B، أنتج Ollama (Q4_K_M) نحو 62 رمزاً/ث، وأنتج vLLM (FP16) نحو 71 رمزاً/ث، وvLLM AWQ نحو 68 رمزاً/ث. الفجوة البالغة نحو 13% تأتي من اختلافات التكميم أكثر مما تأتي من المزايا المعمارية. مع مستخدم واحد، يعوّض انخفاض حمل خادم Ollama وتحسينات نواة التكميم المزايا البنيوية لـvLLM.</p>

<p>تتغير الصورة كلياً تحت ضغط التزامن. الجدول أدناه يُظهر إجمالي إنتاجية الرموز (رمز/ث) بحسب عدد المستخدمين المتزامنين.</p>

<table>
  <thead>
    <tr>
      <th>التكوين</th>
      <th>Ollama</th>
      <th>vLLM FP16</th>
      <th>vLLM AWQ</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Llama 3.1 8B، مستخدم واحد</td>
      <td>62</td>
      <td>71</td>
      <td>68</td>
    </tr>
    <tr>
      <td>Llama 3.1 8B، 10 مستخدمين</td>
      <td>148</td>
      <td>485</td>
      <td>452</td>
    </tr>
    <tr>
      <td>Llama 3.1 8B، 50 مستخدماً</td>
      <td>155</td>
      <td>920</td>
      <td>875</td>
    </tr>
    <tr>
      <td>DeepSeek-R1 8B، مستخدم واحد</td>
      <td>58</td>
      <td>67</td>
      <td>63</td>
    </tr>
    <tr>
      <td>DeepSeek-R1 8B، 10 مستخدمين</td>
      <td>135</td>
      <td>445</td>
      <td>418</td>
    </tr>
    <tr>
      <td>DeepSeek-R1 8B، 50 مستخدماً</td>
      <td>142</td>
      <td>840</td>
      <td>795</td>
    </tr>
  </tbody>
</table>

<p>عند 10 مستخدمين متزامنين يتقدم vLLM بنحو 3.3 أضعاف، وعند 50 مستخدماً يصل التقدم إلى نحو 6 أضعاف. Ollama يعالج عبر قائمة انتظار FIFO - أي بشكل تسلسلي فعلياً - لذا يكاد إجمالي الإنتاجية يبقى ثابتاً مع ازدياد التزامن. في المقابل، يمتص vLLM الطلبات المتزامنة بالتجميع المستمر ويتوسع قريباً من التناسب الخطي.</p>

<p><img src="/assets/images/vllm-vs-ollama-local-inference-results.png" alt="مخطط مقارنة إجمالي إنتاجية الرموز بحسب عدد المستخدمين المتزامنين - Ollama مقابل vLLM" /></p>

<p>الكمون يروي القصة ذاتها من زاوية مختلفة. عند مستخدم واحد، يبلغ زمن الاستجابة الأولى (TTFR) نحو 45 مللي ثانية لـOllama ونحو 82 مللي ثانية لـvLLM، أي Ollama أسرع. عند 50 مستخدماً متزامناً تنعكس الأدوار. يقفز TTFR الخاص بـOllama إلى نحو 3200 مللي ثانية مع تكدس الطلبات في الانتظار، بينما يحافظ vLLM على نحو 145 مللي ثانية بفضل التجميع المستمر. الأداة الأسرع في العزل تصبح الأبطأ تحت الحمل.</p>

<p>استهلاك الموارد يجلّي المفاضلة بوضوح. في وضع الخمول مع Llama 3.1 8B، يستخدم Ollama نحو 5.2GB VRAM ويستخدم vLLM FP16 نحو 16.1GB. عند 50 مستخدماً متزامناً يبقى Ollama قرب 5.4GB بينما يرتفع vLLM FP16 إلى نحو 21.8GB بسبب التخصيص الديناميكي للصفحات لذاكرة KV المؤقتة للتسلسلات النشطة. النسخة AWQ أكثر تحفظاً عند نحو 12.4GB تحت نفس الحمل. استهلاك ذاكرة النظام ووحدة المعالجة المركزية أيضاً أقل لـOllama (نحو 1.8GB مقابل 4.6GB في الخمول). الإنتاجية الأعلى لـvLLM ليست مجانية بل تُدفع ثمناً من VRAM وذاكرة نظام أكبر.</p>

<h2 id="تجربة-المطور-والنظام-البيئي">تجربة المطور والنظام البيئي</h2>

<p>إلى جانب الأداء، تجربة المطور تحكم التكلفة التشغيلية. Ollama يُثبَّت بأمر واحد، و<code class="language-plaintext highlighter-rouge">ollama run</code> يشغّل نموذجاً مع إدارة تحميل وتكميم مدمجة. انخفاض حاجز الدخول جعله يبدو أداة هواة في البداية، غير أنه يظهر اليوم على نطاق واسع في خطوط CI لموجّهات مراجعة الكود وعمليات النشر على الحافة كـJetson Orin وسلاسل أدوات المطورين الداخلية.</p>

<p>كان vLLM يستلزم في السابق إلماماً بأدوات ML بـPython، لكن تجربة التثبيت تبسّطت كثيراً في الإصدارات الأخيرة. سحب صورة الخادم المتوافقة مع OpenAI وتشغيلها يتيح ربط كود عميل OpenAI الحالي بتغييرات طفيفة. الميزات الإنتاجية الثرية - التوازي التنسوري، والتشفير التخميني، ومحولات LoRA القابلة للتبادل السريع - تمثّل ميزة بيئية واضحة. وبما أن كلتا الأداتين تتشاركان واجهة OpenAI المتوافقة، يكون الانتقال من Ollama في التطوير إلى vLLM في الإنتاج سلساً نسبياً.</p>

<h2 id="منصة-thakicloud-k8s-aiml-saas---التطبيق-والاستخلاصات">منصة ThakiCloud K8s AI/ML SaaS - التطبيق والاستخلاصات</h2>

<p>هذه المقارنة تشرح بدقة لماذا تعتمد ThakiCloud محركات عائلة vLLM معياراً للخدمة متعددة المستأجرين. منصتنا ليست مستخدماً واحداً يحتكر نموذجاً واحداً. طلبات عملاء متعددين تتدفق بشكل متزامن عبر مجمع GPU مشترك. في هذا السياق، المهم ليس سرعة التدفق الواحد بل منحنى توسع التزامن واستقرار الكمون تحت الحمل. عند 50 مستخدماً متزامناً، 6 أضعاف الإنتاجية وكمون أقل بأكثر من 20 مرة يُترجمان مباشرة إلى عدد المستأجرين الذين يمكن لـGPU واحد خدمتهم، أي تكلفة الوحدة.</p>

<p>تشغيلياً، نشر ThakiCloud حاويات خدمة vLLM على Kubernetes ويُنظّم أحمال عمل GPU بـKueue. حمل عمل الخدمة يبدو تقريباً هكذا:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="na">apiVersion</span><span class="pi">:</span> <span class="s">apps/v1</span>
<span class="na">kind</span><span class="pi">:</span> <span class="s">Deployment</span>
<span class="na">metadata</span><span class="pi">:</span>
  <span class="na">name</span><span class="pi">:</span> <span class="s">vllm-llama31-8b</span>
<span class="na">spec</span><span class="pi">:</span>
  <span class="na">replicas</span><span class="pi">:</span> <span class="m">1</span>
  <span class="na">template</span><span class="pi">:</span>
    <span class="na">spec</span><span class="pi">:</span>
      <span class="na">containers</span><span class="pi">:</span>
        <span class="pi">-</span> <span class="na">name</span><span class="pi">:</span> <span class="s">vllm</span>
          <span class="na">image</span><span class="pi">:</span> <span class="s">vllm/vllm-openai:latest</span>
          <span class="na">args</span><span class="pi">:</span>
            <span class="pi">-</span> <span class="s2">"</span><span class="s">--model=meta-llama/Llama-3.1-8B-Instruct"</span>
            <span class="pi">-</span> <span class="s2">"</span><span class="s">--max-num-seqs=64"</span>
            <span class="pi">-</span> <span class="s2">"</span><span class="s">--gpu-memory-utilization=0.90"</span>
          <span class="na">resources</span><span class="pi">:</span>
            <span class="na">limits</span><span class="pi">:</span>
              <span class="na">nvidia.com/gpu</span><span class="pi">:</span> <span class="s2">"</span><span class="s">1"</span>
          <span class="na">ports</span><span class="pi">:</span>
            <span class="pi">-</span> <span class="na">containerPort</span><span class="pi">:</span> <span class="m">8000</span>
</code></pre></div></div>

<p><code class="language-plaintext highlighter-rouge">--max-num-seqs</code> و<code class="language-plaintext highlighter-rouge">--gpu-memory-utilization</code> هما مقبضا الضبط الرئيسيان. التغير الديناميكي في VRAM الخاص بـPagedAttention متغير لا بد من حسابه عند تصميم حدود ذاكرة الحاوية وسياسة تقسيم GPU. كما تُظهر الأرقام أعلاه، ينتقل VRAM من 16GB إلى 22GB مع ارتفاع التزامن، لذا التخصيص الثابت يُوقعك إما في نفاد الذاكرة أو الاستغلال الناقص. لذلك نقيس الحد الأقصى للتسلسلات المتزامنة وسقف ذاكرة KV المؤقتة لكل نموذج ونحدد موارد الحاوية وفقاً لذلك. Kueue يُبقي المهام في الانتظار حتى تتوفر طاقة GPU ويُوزّعها عند الإفراج، مما يمنع الاشتراك الزائد في GPU حتى حين يتدفق مستأجرون كثيرون في آن واحد.</p>

<p>هذا لا يجعل Ollama عديم الجدوى. لاختبار النماذج الأولية محلياً من قِبل المطورين الداخليين، وبيئات العرض التجريبي للمستخدم الواحد، وموجّهات مراجعة الكود الخفيفة في خطوط CI، تُعدّ سرعة بدء Ollama وانخفاض حد موارده ميزة حقيقية. بالنسبة لـThakiCloud الحد واضح: الاستدلال الإنتاجي المتعدد المستأجرين الموجّه للعملاء يستخدم vLLM؛ سير عمل المطور الفردي وعروض الحافة تستخدم Ollama. للعملاء الذين يشترطون الاستضافة الذاتية داخل مقارّهم حيث لا يمكن نقل البيانات خارجها (متطلبات أمنية حكومية وما شابهها)، حقيقة أن كلا المحركين يمكن تشغيلهما على GPU خاص بهم تُعدّ في حد ذاتها جوهر عرض القيمة.</p>

<h2 id="القيود-والتحفظات">القيود والتحفظات</h2>

<p>بعض النقاط الجديرة بالتوضيح. أولاً، معايير الأداء المستشهد بها مبنية على RTX 4090 واحدة. إعدادات متعددة GPU أو نماذج أكبر من 70B أو تكوينات التوازي التنسوري قد تُنتج منحنيات مختلفة. في تلك السيناريوهات يكاد vLLM يكون الخيار الوحيد العملي، لكن الأرقام الدقيقة تستلزم قياساً على العتاد ذي الصلة.</p>

<p>ثانياً، ضعف Ollama في التزامن يعكس الإصدار المختبر. Ollama يحسّن آليات التجميع بنشاط، وقد تتقلص الفجوة في إصدارات مستقبلية. معاملة “Ollama ضعيف في التزامن” باعتبارها حقيقة دائمة خطأ. الأدوات تتغير بسرعة.</p>

<p>ثالثاً، الإنتاجية العالية لـvLLM لها تكلفة حقيقية: VRAM وذاكرة نظام أكثر، وتعقيد تشغيلي أعلى، وحمل إضافي من وقت تشغيل Python. نشر vLLM لأحمال عمل تكاد لا تحوي طلبات متزامنة هو إفراط في التصميم. اختيار الأداة لا ينبغي أن ينطلق من “أيهما أسرع” بل من “أين يقع ملف تزامن حمل العمل لديّ”.</p>

<p>أخيراً، الأرقام الجوهرية في هذا المقال مستشهد بها من معيار أداء عام وليست من قياساتنا. قياسات إعادة الإنتاج في بيئة GPU الفعلية لدينا مخططة في مقال لاحق منفصل. تفضّل بقراءة المقال مع مراعاة أن الأرقام المأخوذة من قياسات جهة أخرى لا ينبغي تعميمها باعتبارها استنتاجاتنا الخاصة.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li>SitePoint، “Ollama vs vLLM: Performance Benchmark 2026” (2026-03-05): <a href="https://www.sitepoint.com/ollama-vs-vllm-performance-benchmark-2026/">https://www.sitepoint.com/ollama-vs-vllm-performance-benchmark-2026/</a></li>
  <li>التوثيق الرسمي لـvLLM: <a href="https://docs.vllm.ai">https://docs.vllm.ai</a></li>
  <li>Ollama: <a href="https://ollama.com">https://ollama.com</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="vllm" /><category term="ollama" /><category term="llm-serving" /><category term="kubernetes" /><category term="inference" /><summary type="html"><![CDATA[نعيد اختبار المفهوم الشائع بأن Ollama سهل وvLLM سريع، باستخدام معايير أداء RTX 4090 المنشورة عام 2026. الفجوة لا تتجاوز 13% عند مستخدم واحد، غير أنها تبلغ نحو ستة أضعاف في الإنتاجية عند 50 مستخدماً متزامناً. نستعرض منحنيات التوسع التي يصنعها PagedAttention والتجميع المستمر، إضافة إلى دلالات ذلك لخدمة ThakiCloud على Kubernetes.]]></summary></entry><entry xml:lang="ar"><title type="html">نموذج يفكر بـ 220 ألف رمز: كيف يقلب GLM-5.2 حسابات الاستضافة الذاتية</title><link href="https://thakicloud.github.io/ar/llmops/glm-5-2-reasoning-token-economics/" rel="alternate" type="text/html" title="نموذج يفكر بـ 220 ألف رمز: كيف يقلب GLM-5.2 حسابات الاستضافة الذاتية" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/llmops/glm-5-2-reasoning-token-economics</id><content type="html" xml:base="https://thakicloud.github.io/ar/llmops/glm-5-2-reasoning-token-economics/"><![CDATA[<p>إذا احتاج نموذج إلى 220 ألف رمز ليحل مكعب روبيك واحداً، فمن يدفع تلك التكلفة؟ هذا بالضبط ما يطرحه Matt Pocock (@mattpocockuk)، صانع أدوات المطورين، حين جعل GLM-5.2 يحل مكعب روبيك عبر مهارة <code class="language-plaintext highlighter-rouge">/teach</code> الخاصة به. وقد رصد في أدنى مستويات الجهد (High) نحو 220 ألف رمز من آثار التفكير في ثلاث جولات فحسب. أن يكون نموذج الاستدلال أقوى يعني حتماً أنه يستهلك رموزاً أكثر، وأن يستهلك رموزاً أكثر يعني أن شخصاً ما يتلقى فاتورة بذلك الحجم.</p>

<p>هذا المقال ليس عرضاً لنموذج GLM-5.2 ذاته. موضوع التكميم إلى بت واحد لتشغيل النموذج على أجهزة أصغر قد تناولناه في <a href="https://thakicloud.github.io/ko/llmops/unsloth-glm-5-2-1bit-gguf/">مقال مستقل</a>. ما يعنينا هنا مستوى أعلى من ذلك: <strong>كيف تتباين حسابات التكلفة بين واجهات برمجية سحابية تُحاسب على الرمز وبين استضافة ذاتية داخل المقر تستهلك وقت المعالج الرسومي بشكل ثابت</strong>، حين يظهر نموذج استدلال بأوزان مفتوحة يفكر بإسهاب. والخلاصة المختصرة: كلما طال الاستدلال، كان ثمة نقطة واضحة تصبح عندها الاستضافة الذاتية الأوفر تكلفة، وهذا تحديداً ما تُوليه ThakiCloud اهتماماً في منصتها متعددة المستأجرين القائمة على K8s.</p>

<p>جميع الأرقام الواردة في هذا المقال مستقاة من قياسات نشرتها Z.ai ووسائل إعلام متعددة، أو محسوبة رياضياً من عدد المعاملات المُعلنة. لم يتسن لنا تشغيل نموذج 744B مباشرة في بيئتنا، لذا نستشهد بالأرقام العلنية بدلاً من معايير ذاتية، وأي تقدير رياضي نشير إليه بـ <code class="language-plaintext highlighter-rouge">[تقديري]</code>.</p>

<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>GLM-5.2 نموذج لغوي ضخم بأوزان مفتوحة، أطلقته Z.ai (المعروفة سابقاً بـ Zhipu AI، مؤسسة تأسست عام 2019 انبثقت من مختبر الهندسة المعرفية بجامعة تسينغهوا في بكين) في 13 يونيو 2026. يعتمد النموذج بنية Mixture-of-Experts (MoE) بإجمالي نحو 744B معامل، يُفعَّل منها نحو 40B معامل لكل رمز، مع دعم لسياق يصل إلى مليون رمز وإخراج يبلغ 128 ألف رمز كحد أقصى. الأوزان منشورة بموجب رخصة MIT، مما يتيح لأي جهة تحميلها وتشغيلها تجارياً على بنيتها التحتية الخاصة.</p>

<p>للتوقيت دلالة بالغة. أفادت وسائل إعلام عديدة بأن GLM-5.2 صدر بعد يومين فقط من أمر أمريكي يقضي بمنع Anthropic من إتاحة نموذجَي Fable 5 وMythos 5 للوصول الدولي. بمعنى آخر، تزامنت في الأسبوع ذاته موجة تقييد وصول النماذج الحدودية المغلقة بقيود التصدير، مع ظهور نموذج مفتوح قوي قابل للاستضافة الذاتية برخصة MIT. بالنسبة للمنظمات التي تفكر في سيادة البيانات والنماذج معاً، هذا التناقض ليس قضية سياسية مجردة، بل خيار معماري آني.</p>

<p>الأداء أيضاً موضع تقدير عالٍ. وفقاً للمعايير المستقلة التي أوردها The Decoder وغيره، فضلاً عن بطاقة التقنية الصادرة عن Z.ai، اقترب GLM-5.2 من الصدارة في مهام الترميز الطويلة:</p>

<table>
  <thead>
    <tr>
      <th>المعيار</th>
      <th>GLM-5.2</th>
      <th>Claude Opus 4.8</th>
      <th>GPT-5.5</th>
      <th>GLM-5.1</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>SWE-bench Pro (ترميز)</td>
      <td>62.1</td>
      <td>69.2</td>
      <td>58.6</td>
      <td>58.4</td>
    </tr>
    <tr>
      <td>Terminal-Bench 2.1 (عامل)</td>
      <td>81.0</td>
      <td>~84</td>
      <td>n/a</td>
      <td>63.5</td>
    </tr>
    <tr>
      <td>FrontierSWE (ترميز طويل)</td>
      <td>74.4%</td>
      <td>75.4%</td>
      <td>~73%</td>
      <td>n/a</td>
    </tr>
    <tr>
      <td>AIME 2026 (رياضيات)</td>
      <td>99.2%</td>
      <td>-</td>
      <td>-</td>
      <td>-</td>
    </tr>
  </tbody>
</table>

<p>حقق GLM-5.2 نتيجة 62.1 في SWE-bench Pro، متفوقاً على GPT-5.5 (58.6) وعلى الجيل السابق GLM-5.1 (58.4)، فيما قفز أداؤه في Terminal-Bench 2.1 من 63.5 إلى 81.0. يحتل بذلك المرتبة الأولى بين النماذج المفتوحة في جميع هذه البنود. (تتفاوت نتيجة FrontierSWE بين المصادر المختلفة في نطاق 73 إلى 75%.)</p>

<h2 id="كيف-يسعى-glm-52-إلى-تقليص-استهلاك-الرموز">كيف يسعى GLM-5.2 إلى تقليص استهلاك الرموز</h2>

<p>اللافت أن تصميم GLM-5.2 يواجه مباشرة مسألة “كيف نعالج سياقاً طويلاً ورموزاً كثيرة بتكلفة أقل”. كل نموذج يتبنى سياقاً بمليون رمز يصطدم بالعائق الهندسي ذاته: حين يمتد السياق، ينتقل عنق الزجاجة من الحساب الخالص إلى سعة ذاكرة التخزين المؤقتة للمفاتيح والقيم (KV cache) ومصاريف النواة. تعالج Z.ai هذا بآليتين.</p>

<p>الأولى هي IndexShare. في آلية DeepSeek Sparse Attention (DSA) القياسية، تشغّل كل طبقة محول مفهرساً مستقلاً لتحديد الرموز التي تستحق الاهتمام، وهو ما يُكلّف كثيراً عند التوسع. يحل IndexShare هذه المشكلة بتشغيل المفهرس في الطبقة الأولى من كل مجموعة رباعية فقط، ثم تُعيد الطبقات الثلاث التالية استخدام مؤشرات top-k ذاتها. النتيجة: انخفاض تكلفة الفهرسة الداخلية بنسبة 75% في تلك الطبقات، وتراجع عمليات الحساب لكل رمز بمقدار 2.9 مرة عند طول السياق مليون رمز. الثانية هي الجمع بين KVShare والتنبؤ بعدة رموز في آنٍ واحد (MTP)، مما يرفع سرعة فك التشفير بالتنبؤ بعدة رموز دفعة واحدة خلال تمريرة أمامية واحدة.</p>

<p>أما الرافعة التي يتحكم بها المستخدم مباشرة فهي إعداد مستوى الجهد. يوفر GLM-5.2 مستويَين: High وMax، وتوصي Z.ai باستخدام Max في مهام الترميز. القيمة الافتراضية لجلسة جديدة هي High. وفق القياسات المنشورة، يستهلك مستوى Max نحو 85 ألف رمز إخراج للمهمة الواحدة لاستخلاص أعلى جودة، فيما يتنازل مستوى High عن نقاط قليلة في الأداء مقابل خفض يبلغ فعلياً النصف في رموز الإخراج. بعبارة أخرى، استهلاك الرموز ليس قراراً داخلياً تلقائياً للنموذج، بل هو متغير يمكن للمشغّل ضبطه صراحةً. وهذا المتغير هو المفتاح المحوري في حسابات التكلفة التي نناقشها لاحقاً.</p>

<p><img src="/assets/images/glm-5-2-reasoning-token-economics-diagram.png" alt="مقارنة هيكل التكلفة بين مسار واجهة السحابة المغلقة ومسار الاستضافة الذاتية داخل المقر لدى ThakiCloud" /></p>

<h2 id="ما-كشفته-teach-الاستدلال-يلتهم-الرموز">ما كشفته /teach: الاستدلال يلتهم الرموز</h2>

<p>لنعد إلى ملاحظة Matt Pocock. في أدنى مستوى جهد، استغرق حل مكعب روبيك واحد ثلاث جولات وما يقارب 220 ألف رمز. ولو رُفع مستوى الجهد إلى Max، لارتفع هذا العدد أكثر. هذا ليس قصوراً في النموذج، بل هو طبيعة نماذج الاستدلال. كلما “فكر” النموذج أطول قبل الوصول إلى إجابة، ارتفعت جودة المخرجات، وكل ذلك التفكير يُحاسَب عليه كرموز إخراج.</p>

<p>المسألة هي: أين تُسوَّى تكلفة هذه الرموز؟ الـ220 ألف رمز ذاتها تُكلّف بأسعار مختلفة جذرياً بحسب هيكل المحاسبة. سعر إخراج واجهة Z.ai هو 4.40 دولار لكل مليون رمز (و1.40 دولار للإدخال، و0.26 دولار للإدخال المخزَّن مؤقتاً). النماذج الأمريكية الحدودية المغلقة تبلغ تكلفة الإخراج فيها نحو 50 دولاراً لكل مليون رمز. حين نحوّل هذين السعرين إلى تكلفة لكل مهمة وفق مستويات الجهد، يتضح الفارق:</p>

<table>
  <thead>
    <tr>
      <th>رموز الإخراج للمهمة</th>
      <th>GLM-5.2 API (4.40 دولار/1M)</th>
      <th>نموذج مغلق (50 دولار/1M)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>نحو 8.5k (مهمة قصيرة)</td>
      <td>0.037 دولار</td>
      <td>0.425 دولار</td>
    </tr>
    <tr>
      <td>نحو 42k (تقدير High [تقديري])</td>
      <td>0.185 دولار</td>
      <td>2.10 دولار</td>
    </tr>
    <tr>
      <td>85k (مستوى Max)</td>
      <td>0.374 دولار</td>
      <td>4.25 دولار</td>
    </tr>
    <tr>
      <td>220k (ملاحظة /teach)</td>
      <td>0.968 دولار</td>
      <td>11.00 دولار</td>
    </tr>
  </tbody>
</table>

<p>يلفت النظر أولاً أن النموذج ذا الأوزان المفتوحة أرخص بستة أضعاف حتى عبر واجهة برمجية. لكن الدلالة الأعمق في مكان آخر: <strong>كلا الخيارين يُحاسبان على الرمز</strong>. كلما طال الاستدلال، ارتفعت الفاتورة بصورة خطية. إن كانت الأعباء تستهلك 220 ألف رمز في كل استدعاء وتُشغَّل عشرات الآلاف من المرات يومياً، فإن الكميّة ذاتها هي ما يتحكم في التكلفة، مهما انخفض سعر الرمز. وعند هذه النقطة تحديداً ترسم الاستضافة الذاتية منحنى مختلفاً تماماً.</p>

<h2 id="نموذج-تكلفة-الخدمة-الاستضافة-الذاتية-تعكس-المعادلة">نموذج تكلفة الخدمة: الاستضافة الذاتية تعكس المعادلة</h2>

<p>في الاستضافة الذاتية، هيكل التكلفة يُحاسَب على الوقت لا على الرمز. منذ لحظة توفير عقدة المعالج الرسومي، تصبح التكلفة شبه ثابتة سواء أُنتج رمز واحد أو مليارات الرموز. لذا تتحول آثار الاستدلال الطويلة من “مشكلة محاسبة رموز” إلى “مشكلة إنتاجية وزمن استجابة”، وتغدو مسألة هندسية: كيف نحشد أكبر قدر ممكن من الاستدلال في وقت معالج رسومي ثابت؟</p>

<p>غير أن الاستضافة الذاتية تنطوي على حاجز دخول. لا بد من تحميل أوزان 744B في مكان ما. فيما يخص بصمة الذاكرة المحسوبة رياضياً من عدد المعاملات المُعلن (مع استثناء ذاكرة KV cache، وهي حسابات رياضية خالصة [تقديري]):</p>

<p><img src="/assets/images/glm-5-2-reasoning-token-economics-results.png" alt="بصمة الذاكرة لأوزان 744B وفق الدقة، ومنحنى تكلفة الإخراج للمهمة" /></p>

<p>تبلغ البصمة نحو 1,488 جيجابايت بدقة BF16، ونحو 744 جيجابايت بدقة FP8، ونحو 372 جيجابايت بدقة FP4/NVFP4. ربط ثمانية معالجات H100 (80 جيجابايت) يوفر 640 جيجابايت، وربط ثمانية معالجات H200 (141 جيجابايت) يوفر 1,128 جيجابايت. بمعنى أن أوزان FP8 تدخل في عقدة H200 واحدة بارتياح، بينما تكون الأمور حرجة في عقدة H100 حين نأخذ بالاعتبار احتياطي ذاكرة KV cache. بالنزول إلى FP4 تُصبح عقدة H100 الواحدة كافية بمرونة. بمعنى آخر، استضافة نموذج استدلال على مستوى الحدود في عقدة معالج رسومي واحدة لم تعد فكرة بعيدة المنال.</p>

<p>هنا تنقلب المعادلة. حين تُضمَن عقدة مُقدَّمة عبر vLLM وتُستهلك تكلفة المعالج الرسومي بالكامل، فإن التكلفة الهامشية لعبء عمل يستهلك 220 ألف رمز تُحدَّد لا بعدد الرموز، بل بمدى إشغال إنتاجية تلك العقدة. كلما كان الاستدلال أكثر إسهاباً وكلما كانت الاستدعاءات أكثر تكراراً، كبُرت قاعدة استهلاك التكلفة الثابتة وانخفض التكلفة الفعلية لكل رمز. إن الحالة التي تكون فيها واجهات برمجية المحاسبة على الرمز في أسوأ أحوالها (آثار طويلة في استدعاءات متكررة) هي بالضبط الحالة التي تكون فيها الاستضافة الذاتية في أفضل أحوالها. وبما أن ذراع مستوى الجهد بيد المشغّل، يمكن خفض رموز مهام غير حساسة للجودة إلى النصف بمستوى High، والاحتفاظ بمستوى Max فقط للمهام بالغة الأهمية، مما يتيح ضبطاً دقيقاً بين التكلفة والجودة.</p>

<h2 id="التطبيق-على-منصة-thakicloud-للذكاء-الاصطناعي-والتعلم-الآلي-على-k8s-والدلالات">التطبيق على منصة ThakiCloud للذكاء الاصطناعي والتعلم الآلي على K8s والدلالات</h2>

<p>تشغّل ThakiCloud منصة SaaS للذكاء الاصطناعي والتعلم الآلي متعددة المستأجرين قائمة على K8s، وتتولى خدمة النماذج داخل المقر وفي البيئات المعزولة (VPC) دون إخراج بيانات العملاء إلى الخارج. نماذج الاستدلال ذات الأوزان المفتوحة القوية كـGLM-5.2 تتوافق تماماً مع هذه القيمة المقدَّمة.</p>

<p>أولاً، <strong>الأمر يتعلق بتحقيق السيادة لا بالتحايل على قيود التصدير</strong>. حين تُغلَق نماذج أمريكية مغلقة أمام الوصول الدولي بقرار سياسي، فإن خدمة أوزان برخصة MIT مباشرة داخل مجموعة العميل تضمن سيادة على النموذج لا تتأثر بتغيرات السياسات الخارجية. البيانات والنموذج كلاهما يبقى داخل حدود المستأجر.</p>

<p>ثانياً، <strong>قوائم انتظار المعالج الرسومي القائمة على Kueue تلتقي باقتصاديات الرموز</strong>. نُدير أعباء عمل المعالج الرسومي متعددة المستأجرين عبر Kueue لتحديد الأولويات وتنسيق الطابور. وبما أن أعباء ذات آثار استدلال أطول تشغل العقدة وقتاً أطول، فإن ربط مستوى الجهد بأولوية الطابور يُمكّن من تحقيق الكفاءة الاقتصادية وهدف زمن الاستجابة معاً من مجمع معالجات رسومية واحد. مهام المستأجرين ذوي الأولوية العالية تعمل بمستوى Max وطابور متقدم، بينما تُعالَج الأعباء الدُّفعية بمستوى High لتعظيم الإنتاجية.</p>

<p>ثالثاً، <strong>يتكامل بسلاسة مع مكدّس خدمة vLLM</strong>. يوفر GLM-5.2 نقطة نهاية متوافقة مع Anthropic (<code class="language-plaintext highlighter-rouge">https://api.z.ai/api/coding/paas/v4</code>) تتصل بها أدوات كـClaude Code وOpenClaw وCline فوراً، لكن الأهم من ذلك إمكانية تلقّي الأوزان مباشرة وتشغيلها عبر vLLM بالتوازي الموتري لـFP8. هذا النمط ذاته الذي نطبقه بالفعل على النماذج المفتوحة الأخرى في منصتنا.</p>

<p>وفي مرحلة النضج، يصبح متاحاً تشغيل عوامل متخصصة بمجال معين باستخدام نماذج استدلال مفتوحة بمستوى GLM-5.2 داخلياً، مما يجمع بين انخفاض تكلفة الخدمة وعدم مغادرة البيانات للبيئة. الرسالة لعملاء المؤسسات الذين يوازنون بين التكلفة والامتثال التنظيمي: التحكم في تكلفة الاستدلال عبر استهلاك المعالج الرسومي لا عبر فاتورة الرموز ميزة تمييز واضحة.</p>

<h2 id="القيود-والاعتراضات">القيود والاعتراضات</h2>

<p>ثمة نقاط ضعف ينبغي الإفصاح عنها بصدق.</p>

<p>الاستضافة الذاتية ليست دائماً الأرخص. المعادلة تنقلب فقط عند “آثار طويلة واستدعاءات متكررة”، لا عند أعباء عمل صغيرة متفرقة الاستدعاء. حين تكون الاستدعاءات نادرة، يصبح القسط الثابت لعقدة المعالج الرسومي كبيراً نسبياً، وتغدو واجهة برمجية بالمحاسبة على الرمز أرخص فعلاً. لا يوجد ما هو أكثر تكلفة من إبقاء ثمانية معالجات رسومية في حالة خمول. نقطة التعادل تتوقف كلياً على ملف تعريف عبء العمل.</p>

<p>أرقام الذاكرة السابقة حسابات رياضية خالصة لعدد المعاملات، مستثنيةً ذاكرة KV cache. عند استخدام السياق الكامل البالغ مليون رمز فعلياً، تستنزف ذاكرة KV cache عشرات إلى مئات الجيجابايتات إضافية، مما قد يُضيّق هامش العقدة المنفردة بسرعة. إجمالي التزامن الممكن في الخدمة لا يمكن الجزم به من الأرقام العلنية وحدها، ولم يتسنَّ لنا تشغيل نموذج 744B مباشرة في بيئتنا. أرقام الإنتاجية والتزامن تحتاج إلى قياس فعلي.</p>

<p>نتائج المعايير تحتاج إلى سياق أيضاً. تتباين نتيجة FrontierSWE بين 73 و75% بحسب المصدر، وتفوق معيار واحد لا يضمن التفوق في مهام مجال محدد. أخيراً، أرقام استهلاك الرموز وفق مستوى الجهد (8.5k و85k وغيرها) تتفاوت تفاوتاً كبيراً بحسب نوع المهمة، لذا الصحيح قراءة اتجاه المنحنى “كلما طال الاستدلال كلما كانت محاسبة الرمز أشد وطأة” لا الاستناد إلى القيم المطلقة في الجدول.</p>

<p>ومع ذلك تظل الحجة المحورية صلبة. في حقبة تستهلك فيها نماذج الاستدلال ذات الأوزان المفتوحة القوية رموزاً كثيرة، ينتقل مفتاح التحكم في التكلفة من التفاوض على سعر الرمز إلى اختيار هيكل المحاسبة. محاسبة على الرمز أم على الوقت، وهل تمتلك البنية التحتية التي تجعل هذا الاختيار ممكناً، ذلك هو الفيصل.</p>

<h2 id="المصادر-sources">المصادر (Sources)</h2>

<ul>
  <li>التغريدة الأصلية (مصدر الملخص): <a href="https://x.com/hjguyhan/status/2068959372911444418">@hjguyhan, 2026-06-22</a></li>
  <li>تحليل GLM-5.2: <a href="https://felloai.com/glm-5-2/">felloai: GLM 5.2: Zhipu’s 1M-Context Open-Source Model Explained</a></li>
  <li>معايير وأسعار GLM-5.2: <a href="https://www.labellerr.com/blog/glm-5-2-open-weight-ai-model/">labellerr: GLM-5.2 Just Beat GPT-5.5 at a Sixth of the Cost</a></li>
  <li>الأوزان الرسمية: <a href="https://github.com/zai-org/GLM-5">GitHub: zai-org/GLM-5</a></li>
  <li>مقال ذو صلة (التكميم): <a href="https://thakicloud.github.io/ko/llmops/unsloth-glm-5-2-1bit-gguf/">Unsloth GLM-5.2 1بت Dynamic GGUF تحليل داخل المقر</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="llmops" /><category term="glm-5" /><category term="reasoning-model" /><category term="token-economics" /><category term="on-premise" /><category term="vllm" /><category term="kueue" /><category term="inference-cost" /><category term="sovereign-ai" /><summary type="html"><![CDATA[حين جعل Matt Pocock النموذجَ GLM-5.2 يحل مكعب روبيك باستخدام مهارة /teach الخاصة به، أسفر ذلك في أدنى مستوى جهد (High) عن نحو 220 ألف رمز في ثلاث جولات فقط. نماذج الاستدلال ذات الأوزان المفتوحة قوية، لكنها تستهلك رموزاً كثيرة. في واجهات برمجية تُحاسب على الرمز، يعني ذلك فاتورة ضخمة. أما في الاستضافة الذاتية داخل المقر حيث يُستهلك وقت المعالج الرسومي كاملاً بصرف النظر عن الاستخدام، فإن المعادلة تنقلب رأساً على عقب. نستعرض ذلك بالأرقام المعلنة لـ GLM-5.2 (744B MoE، MIT).]]></summary></entry><entry xml:lang="ar"><title type="html">NVIDIA Qwen3.6-35B-A3B-NVFP4: تشغيل نموذج 35B بسرعة 3B عبر تكميم FP4</title><link href="https://thakicloud.github.io/ar/llmops/nvidia-qwen36-nvfp4/" rel="alternate" type="text/html" title="NVIDIA Qwen3.6-35B-A3B-NVFP4: تشغيل نموذج 35B بسرعة 3B عبر تكميم FP4" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/llmops/nvidia-qwen36-nvfp4</id><content type="html" xml:base="https://thakicloud.github.io/ar/llmops/nvidia-qwen36-nvfp4/"><![CDATA[<p>بالنسبة لأي فريق يحاول خدمة النماذج الكبيرة على بنيته التحتية الخاصة، فإن أكبر عائق هو ذاكرة GPU. إن وضع نموذج أكبر على نفس وحدة GPU، أو نفس النموذج على وحدة GPU أرخص، ينعكس مباشرة على تكلفة الخدمة. النموذج <code class="language-plaintext highlighter-rouge">nvidia/Qwen3.6-35B-A3B-NVFP4</code> الذي نشرته NVIDIA على Hugging Face في 28 مايو 2026 هو محاولة لخفض هذا العائق عبر التكميم بأربع بتات. أرقام الدقة والذاكرة في هذه المقالة هي قياسات رسمية من بطاقة نموذج NVIDIA، وقد كمّمت ThakiCloud النموذج الأساسي نفسه إلى NVFP4 على وحدات GPU في RunPod وتعرض نتيجة إعادة الإنتاج هذه في قسم «نتائج تجريبية حقيقية» أدناه.</p>

<h2 id="نظرة-عامة">نظرة عامة</h2>

<p><code class="language-plaintext highlighter-rouge">nvidia/Qwen3.6-35B-A3B-NVFP4</code> هو نموذج <code class="language-plaintext highlighter-rouge">Qwen/Qwen3.6-35B-A3B</code> من Alibaba بعد تكميمه باستخدام NVIDIA Model Optimizer (ModelOpt). النموذج الأساسي بنية خليط الخبراء (MoE) بإجمالي 35B معامل و3B فقط نشطة، وطول سياق يصل إلى 262K، ورخصة Apache-2.0 تتيح الاستخدام التجاري وغير التجاري. وتوضّح NVIDIA صراحةً في بطاقة النموذج أن هذا ليس نموذجاً أساسياً من بناء NVIDIA بل نسخة مكمَّمة من نموذج طرف ثالث.</p>

<p>تتلخّص القيمة الجوهرية في فكرتين. <strong>بنية MoE تتكفّل بالسرعة، وتكميم NVFP4 يتكفّل بالذاكرة.</strong> بفضل بنية MoE، فإن توليد رمز واحد يشغّل فقط 3B من الخبراء النشطين بدلاً من كامل الـ35B، فيعمل نموذج 35B بحِمل حسابي قريب من نموذج كثيف بحجم 3B. أضف إلى ذلك تكميم NVFP4 الذي يخفض الأوزان من 16 بت إلى 4 بت، فتنخفض متطلبات القرص وذاكرة GPU بنحو 3.06 ضعف وفق بطاقة النموذج. هذا المزيج يشغّل “ذكاء بمستوى 35B بسرعة 3B وبذاكرة أقل بكثير.”</p>

<p>تدير ThakiCloud منصة SaaS متعددة المستأجرين للذكاء الاصطناعي والتعلم الآلي مبنية على Kubernetes، وتخدم النماذج عبر بيئات عملاء متنوعة. القدرة على أخذ نقطة تحقّق مكمَّمة مسبقاً وتحميلها مباشرة في vLLM تعني خفض تكلفة الخدمة دون إعادة تشغيل خط تكميم في كل مرة. وفي الواقع، تشغّل ThakiCloud بالفعل خط أنابيب داخلياً يكمّم العائلة نفسها Qwen3-MoE إلى NVFP4، ونشارك هذه التجربة لاحقاً في المقالة.</p>

<h2 id="ما-هذه-التقنية">ما هذه التقنية</h2>

<p>NVFP4 صيغة فاصلة عائمة بأربع بتات عرّفتها NVIDIA. وهي لا تسحق كل قيمة إلى 4 بتات ببساطة، بل تطبّق التكميم تحديداً على <strong>أوزان وتنشيطات</strong> المعاملات الخطية داخل كتل محوّل MoE. ونقتبس من بطاقة النموذج مباشرةً: “تم الحصول على هذا النموذج بتكميم أوزان Qwen3.6-35B-A3B إلى صيغة بيانات NVFP4. تُكمَّم فقط أوزان وتنشيطات المعاملات الخطية داخل كتل المحوّل في MoE. يخفض هذا التحسين عدد البتات لكل معامل من 16 إلى 4، ما يقلّل حجم القرص ومتطلبات ذاكرة GPU بنحو 3.06 ضعف.”</p>

<p>المفتاح هو إدراك أن MoE والتكميم يعملان على محورين مختلفين. ويوضّح المخطط أدناه كلا المحورين.</p>

<pre><code class="language-mermaid">flowchart TB
    subgraph QUANT["محور التكميم (الذاكرة)"]
      A["Qwen3.6-35B-A3B&lt;br/&gt;أوزان BF16"] --&gt;|"ModelOpt PTQ&lt;br/&gt;معايرة NVFP4"| B["نقطة تحقّق NVFP4&lt;br/&gt;16→4 بت، توفير ~3.06×"]
    end
    subgraph SERVE["محور الخدمة (السرعة)"]
      C["رمز الإدخال"] --&gt; D["الموجّه"]
      D --&gt;|"اختيار 3B من 35B"| E["الخبراء النشطون&lt;br/&gt;(حساب 3B)"]
      E --&gt; F["رمز الإخراج"]
    end
    B --&gt;|"vLLM --quantization modelopt"| G["Blackwell / Hopper&lt;br/&gt;Tensor Core"]
    G --&gt; D
</code></pre>

<p>على محور التكميم، تُحوَّل أوزان BF16 إلى نقطة تحقّق NVFP4 عبر التكميم بعد التدريب (PTQ) في ModelOpt. وعلى محور الخدمة، يختار الموجّه لكل رمز إدخال مجموعة فرعية فقط من خبراء الـ35B ويجري نحو 3B من الحساب. يلتقي المحوران عند عملية Tensor Core فوق vLLM، وهنا بالضبط تظهر تبعية NVFP4 للعتاد. تُسرَّع عمليات NVFP4 فقط على معماريتي NVIDIA Hopper وBlackwell. وتُدرج بطاقة النموذج NVIDIA GB300 كعتاد اختبار.</p>

<p>سرّ تقليل فقدان الدقة هو التكميم “بانتقائية لا شمولية.” تُترك المسارات الحساسة بما فيها الانتباه دون مساس، ويتركّز الجهد على الأوزان الخطية لـMoE التي تستهلك أكبر قدر من الذاكرة، فيبقى توفير الذاكرة كبيراً ويبقى تدهور الجودة صغيراً.</p>

<h2 id="التثبيت-والتكامل">التثبيت والتكامل</h2>

<p>أمر الخدمة الأساسي في vLLM الذي توفّره NVIDIA في بطاقة النموذج أدناه. تشغّل صورة دوكر <code class="language-plaintext highlighter-rouge">vllm/vllm-openai:nightly</code> ثم تنفّذه.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vllm serve nvidia/Qwen3.6-35B-A3B-NVFP4 <span class="se">\</span>
  <span class="nt">--port</span> 8000 <span class="se">\</span>
  <span class="nt">--quantization</span> modelopt <span class="se">\</span>
  <span class="nt">--max-model-len</span> 262144 <span class="se">\</span>
  <span class="nt">--reasoning-parser</span> qwen3
</code></pre></div></div>

<p>الراية <code class="language-plaintext highlighter-rouge">--quantization modelopt</code> هي ما يجعل المحرّك يتعرّف على نقطة تحقّق NVFP4. إذا كانت ذاكرة GPU ضيقة، فإن خفض <code class="language-plaintext highlighter-rouge">--max-model-len</code> أولاً ثم رفعه تدريجياً نهج آمن، لأن الحفاظ على كامل سياق 262K يتطلّب ذاكرة كبيرة لمخبأ KV.</p>

<p>للبيئات محدودة الذاكرة مثل NVIDIA DGX Spark، توفّر بطاقة النموذج أمراً موصى به منفصلاً.</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vllm serve nvidia/Qwen3.6-35B-A3B-NVFP4 <span class="se">\</span>
  <span class="nt">--host</span> 0.0.0.0 <span class="se">\</span>
  <span class="nt">--port</span> 8000 <span class="se">\</span>
  <span class="nt">--tensor-parallel-size</span> 1 <span class="se">\</span>
  <span class="nt">--trust-remote-code</span> <span class="se">\</span>
  <span class="nt">--kv-cache-dtype</span> fp8 <span class="se">\</span>
  <span class="nt">--attention-backend</span> flashinfer <span class="se">\</span>
  <span class="nt">--moe-backend</span> marlin <span class="se">\</span>
  <span class="nt">--gpu-memory-utilization</span> 0.4 <span class="se">\</span>
  <span class="nt">--max-model-len</span> 262144 <span class="se">\</span>
  <span class="nt">--max-num-seqs</span> 4 <span class="se">\</span>
  <span class="nt">--max-num-batched-tokens</span> 8192 <span class="se">\</span>
  <span class="nt">--enable-chunked-prefill</span> <span class="se">\</span>
  <span class="nt">--async-scheduling</span> <span class="se">\</span>
  <span class="nt">--enable-prefix-caching</span> <span class="se">\</span>
  <span class="nt">--speculative-config</span> <span class="s1">'{"method":"mtp","num_speculative_tokens":3,"moe_backend":"triton"}'</span> <span class="se">\</span>
  <span class="nt">--load-format</span> fastsafetensors <span class="se">\</span>
  <span class="nt">--reasoning-parser</span> qwen3 <span class="se">\</span>
  <span class="nt">--tool-call-parser</span> qwen3_xml <span class="se">\</span>
  <span class="nt">--enable-auto-tool-choice</span>
</code></pre></div></div>

<p>يحتوي هذا الأمر على عدة خيارات مفيدة تشغيلياً. تُصغّر <code class="language-plaintext highlighter-rouge">--kv-cache-dtype fp8</code> حتى مخبأ KV إلى 8 بت، وتُبقي <code class="language-plaintext highlighter-rouge">--gpu-memory-utilization 0.4</code> بصمة الذاكرة منخفضة، وتفعّل <code class="language-plaintext highlighter-rouge">--speculative-config</code> الفك التخميني القائم على MTP (التنبؤ متعدد الرموز). وتجعل <code class="language-plaintext highlighter-rouge">--tool-call-parser qwen3_xml</code> و<code class="language-plaintext highlighter-rouge">--enable-auto-tool-choice</code> استدعاء الأدوات قابلاً للاستخدام فوراً في سيناريوهات الوكلاء وRAG. وحالة الاستخدام التي تذكرها NVIDIA هي بالضبط “المطوّرون الباحثون عن نماذج جاهزة مكمَّمة مسبقاً للنشر في أنظمة وكلاء الذكاء الاصطناعي وروبوتات المحادثة وأنظمة RAG”، وتعكس مجموعة الخيارات هذه ذلك الغرض مباشرةً.</p>

<h2 id="نتائج-تجريبية-حقيقية">نتائج تجريبية حقيقية</h2>

<h3 id="إعادة-إنتاج-thakicloud-تشغيل-مسار-تكميم-nvfp4-على-runpod-h100">إعادة إنتاج ThakiCloud: تشغيل مسار تكميم NVFP4 على RunPod H100</h3>

<p>بدلاً من مجرد إعادة سرد أرقام بطاقة النموذج، كمّمت ThakiCloud النموذج الأساسي نفسه <code class="language-plaintext highlighter-rouge">Qwen/Qwen3.6-35B-A3B</code> إلى NVFP4 مباشرةً، على <strong>وحدتي NVIDIA H100 NVL (Hopper، بإجمالي 191 جيجابايت)</strong> في RunPod، باستخدام NVIDIA Model Optimizer. ولأن حسابات المعايرة (calibration) تجري بدقة BF16، فإن مسار التكميم نفسه يُعاد إنتاجه على Hopper أيضاً. الحقائق المقاسة كالتالي:</p>

<table>
  <thead>
    <tr>
      <th>البند</th>
      <th>القيمة المقاسة</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>أداة التكميم</td>
      <td><code class="language-plaintext highlighter-rouge">nvidia-modelopt[hf]</code> 0.44.0 (الأحدث حالياً)</td>
    </tr>
    <tr>
      <td>تحميل النموذج الأساسي</td>
      <td>34.66 مليار معامل، موزّعة تلقائياً على وحدتي H100 عبر device_map</td>
    </tr>
    <tr>
      <td>إعداد المعايرة</td>
      <td><code class="language-plaintext highlighter-rouge">NVFP4_DEFAULT_CFG</code>، اختبار سريع بـ 8 عينات</td>
    </tr>
    <tr>
      <td>التسجيل التلقائي للبنية الجديدة</td>
      <td><code class="language-plaintext highlighter-rouge">Qwen3_5MoeExperts</code> → <code class="language-plaintext highlighter-rouge">_QuantFusedExperts</code> (MoE مدمج)، <code class="language-plaintext highlighter-rouge">Qwen3_5MoeAttention</code> → <code class="language-plaintext highlighter-rouge">_QuantAttention</code> (ذاكرة KV)</td>
    </tr>
    <tr>
      <td>المُكمِّمات المُدرَجة</td>
      <td><strong>21,743</strong></td>
    </tr>
    <tr>
      <td>زمن PTQ</td>
      <td><strong>148 ثانية</strong></td>
    </tr>
  </tbody>
</table>

<p>النقطة الجوهرية هي أن <strong>modelopt 0.44 تعرّف تلقائياً على بنية جديدة كلياً صدرت في أواخر مايو 2026 (Qwen3.6، الاسم الداخلي <code class="language-plaintext highlighter-rouge">qwen3_5_moe</code>، عائلة Gated DeltaNet) وأكمل مسار التكميم بنجاح</strong>. سُجِّلت كتل خبراء MoE المدمجة وذاكرة KV للانتباه تلقائياً كأهداف للتكميم، وأُدرِج 21,743 مُكمِّماً.</p>

<p>لكن بكل صدق، ثمة أمر واحد: نجح مسار التكميم، إلا أن خطوة كتابة نقطة التحقّق المعبّأة بأربع بتات إلى القرص، أي <code class="language-plaintext highlighter-rouge">export_hf_checkpoint</code>، اصطدمت حالياً بـ<strong>فجوة توافق بين modelopt 0.44 و transformers 5.x</strong> (<code class="language-plaintext highlighter-rouge">transformers&gt;=5.0 support is experimental</code>). إذ يتطلّب <code class="language-plaintext highlighter-rouge">qwen3_5_moe</code> الإصدار transformers 5.x، وفي هذا المزيج لا يعمل تصدير HF الموحّد بعد، فتراجع الأمر إلى BF16. وهذا تأخّر في سلسلة الأدوات شائع لبنية عمرها أقل من شهر. لذلك نستشهد بنقطة التحقّق المنشورة من NVIDIA لحجم النموذج المعبّأ (توفير نحو 3.06×، نحو 18.7 مليار) ولأرقام الدقة.</p>

<p>جدول الدقة أدناه هو <strong>التقييم الرسمي من NVIDIA المنشور في بطاقة النموذج</strong>. قارنت NVIDIA النسخة المكمَّمة NVFP4 بالنموذج الأساسي <code class="language-plaintext highlighter-rouge">Qwen3.6-35B-A3B</code> (BF16) على معايير الاستدلال النصي والبرمجة.</p>

<table>
  <thead>
    <tr>
      <th>المعيار</th>
      <th>BF16 (الأساس)</th>
      <th>NVFP4</th>
      <th>Δ</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>MMLU Pro</td>
      <td>85.6</td>
      <td>85.0</td>
      <td>-0.6</td>
    </tr>
    <tr>
      <td>GPQA Diamond</td>
      <td>84.9</td>
      <td>84.8</td>
      <td>-0.1</td>
    </tr>
    <tr>
      <td>τ²-Bench Telecom</td>
      <td>95.5</td>
      <td>94.7</td>
      <td>-0.8</td>
    </tr>
    <tr>
      <td>SciCode</td>
      <td>40.8</td>
      <td>40.6</td>
      <td>-0.2</td>
    </tr>
    <tr>
      <td>AIME 2025</td>
      <td>89.2</td>
      <td>88.8</td>
      <td>-0.4</td>
    </tr>
    <tr>
      <td>AA-LCR</td>
      <td>62.0</td>
      <td>62.0</td>
      <td>0.0</td>
    </tr>
    <tr>
      <td>IFBench</td>
      <td>62.3</td>
      <td>62.8</td>
      <td>+0.5</td>
    </tr>
    <tr>
      <td>MMMU PRO</td>
      <td>74.1</td>
      <td>74.5</td>
      <td>+0.4</td>
    </tr>
  </tbody>
</table>

<p><img src="/assets/images/nvidia-qwen36-nvfp4-results.png" alt="مخطط أعمدة يقارن دقة NVFP4 بـ BF16" /></p>

<p>تمثيل بصري للأرقام المنشورة في بطاقة النموذج (تسميات المحاور بالكورية). حتى بعد التكميم بأربع بتات، تبقى معظم فروق الدقة دون نقطة واحدة.</p>

<p>مفتاح قراءة الجدول هو حجم الخسارة. أكبر انخفاض عبر المعايير الثمانية هو -0.8 على τ²-Bench Telecom، أما GPQA Diamond فهو -0.1، وAA-LCR متعادل. بل إن IFBench وMMMU PRO يتقدّم فيهما NVFP4 قليلاً على BF16. حدث التحوّل الطفيف في التوزيع الناتج عن التكميم بشكل مواتٍ في بعض المهام مصادفةً، لكن لا ينبغي تعميم ذلك إلى “التكميم يحسّن الأداء.” إجمالاً، رسالة الجدول أن خفض 16 بت إلى الربع عند 4 بتات حافظ على قدرات الاستدلال والرياضيات والبرمجة واستخدام أدوات الوكلاء بشكل شبه كامل. وكانت شروط التقييم لـSciCode عند temperature=0.6 وtop_p=0.95 وبحد أقصى 131072 رمزاً، والبقية عند temperature=1.0 وtop_p=0.95 وبحد أقصى 131072 رمزاً.</p>

<p>أما من ناحية الذاكرة، فتذكر بطاقة النموذج توفيراً بنحو 3.06 ضعف. ووفق مستودع Hugging Face، يُبلَّغ عن حجم المعاملات المحزومة لنقطة تحقّق NVFP4 بنحو 18.7B، وهو شكل مخفّض كثيراً للنموذج 35B مقارنةً بـ BF16 الأصلي. ويجب التحقق من حجم الملف الدقيق مباشرةً في الشريط الجانبي للمستودع، وتحذّر بطاقة النموذج من الخلط بين إحصاءات ملفات الشريط الجانبي ومعاملات بنية النموذج الأساسي.</p>

<h2 id="التطبيق-والدلالات-لمنصة-thakicloud-للذكاء-الاصطناعي-والتعلم-الآلي-على-kubernetes">التطبيق والدلالات لمنصة ThakiCloud للذكاء الاصطناعي والتعلم الآلي على Kubernetes</h2>

<p>من منظور منصة ThakiCloud، جاذبية هذا النموذج واضحة. في بيئة متعددة المستأجرين، تكون GPU أغلى مورد مشترك، وكلما تمكّنّا من تحميل مزيد من نماذج المستأجرين على نفس GPU في آنٍ واحد، انخفضت تكلفة الاستدلال للوحدة. خفض NVFP4 للذاكرة بنحو 3.06 ضعف يعني، بصيغة مبسّطة، مساحة لاستيعاب نموذج أكبر أو جلسات متزامنة أكثر في نفس ذاكرة GPU. أضف خاصية MoE المتمثّلة في تشغيل MoE بحجم 35B بحساب نحو 3B، فتصبح قيمة “نماذج عالية الجودة بتكلفة خدمة منخفضة” المحلية أكثر تجسيداً بكثير.</p>

<p>تعكس ThakiCloud هذا بالفعل في التشغيل. نحافظ على خط أنابيب داخلي يكمّم <code class="language-plaintext highlighter-rouge">Qwen/Qwen3-30B-A3B</code>، من عائلة Qwen3-MoE نفسها، إلى NVFP4 (W4A4، group_size=16) على RunPod B200 (Blackwell SM100). وفي تشغيل تحقّق في 1 مايو 2026، <strong>أنتج نقطة تحقّق بحجم 17.1GB بـ137 ثانية من حساب PTQ.</strong> بلغ إجمالي الوقت الفعلي نحو 25 دقيقة، والتكلفة نحو 3.48 دولار على B200 عند الطلب. وأثناء إعداد هذه المقالة طبّقنا خط الأنابيب نفسه على النموذج الجديد <code class="language-plaintext highlighter-rouge">Qwen3.6-35B-A3B</code>، فأعدنا إنتاج مسار تكميم NVFP4 على وحدتي H100 NVL في RunPod (modelopt 0.44، إدراج 21,743 مُكمِّماً، تسجيل تلقائي للـ MoE المدمج الجديد، 148 ثانية). يترتّب على هذه التجربة أمران. أولاً، تكميم NVFP4 نفسه مهمة لمرة واحدة تنتهي في وقت قصير بتكلفة منخفضة. ثانياً، عند نشر نقطة تحقّق مكمَّمة مسبقاً كما فعلت NVIDIA هنا، يمكنك تخطّي حتى تلك المهمة لمرة واحدة والانتقال مباشرةً إلى الخدمة. بعبارة أخرى، نقطة تحقّق NVIDIA العامة مدخل أشمل لخط أنابيبنا.</p>

<p>أما من ناحية تشغيل K8s، فيتوافق كما يلي. تُصفّ أحمال GPU وتُجدول عبر Kueue، وتُشغّل الخدمة كحُجيرات vLLM مع الراية <code class="language-plaintext highlighter-rouge">--quantization modelopt</code> للتعرّف على نقطة تحقّق NVFP4، ويُعالَج عزل المستأجرين بمساحات الأسماء وتقسيم GPU، مع تعديل التخصيص لكل مستأجر بقدر الذاكرة الموفَّرة. لكن يرافق ذلك شرط عتاد واحد. تسريع NVFP4 يعمل فقط على Blackwell وHopper، لذا لا يمكن لمجمّعات العقد القائمة على A100 التمتّع بفائدة الأربع بتات لهذا النموذج كما هي. وهذا قرار تشغيلي مرتبط مباشرةً بتكوين مجمّع العقد، ونشير إليه كقيد في القسم التالي.</p>

<h2 id="القيود-والحجج-المضادة">القيود والحجج المضادة</h2>

<p>أولاً، <strong>تبعية العتاد قوية.</strong> توجد نوى Tensor Core الخاصة بـNVFP4 فقط على Blackwell وHopper. على وحدات GPU من الأجيال السابقة مثل A100 أو V100، لا يُسرَّع NVFP4، فلا يمكن توقّع نفس توفير الذاكرة ويجب سلوك مسار آخر مثل INT8 أو FP8. وإذا كانت أصول GPU الحالية لعميل محلي من جيل سابق، فإن جني فائدة هذا النموذج يستلزم تكلفة إضافية لاستبدال العقد.</p>

<p>ثانياً، <strong>توفير الذاكرة ومكاسب الإنتاجية أمران مختلفان.</strong> تذكر بطاقة النموذج توفيراً للقرص والذاكرة بنحو 3.06 ضعف، لكنها لا تقدّم مباشرةً أرقام إنتاجية مثل الرموز/الثانية أو زمن الاستجابة. ومع أن الأوزان بأربع بتات تساعد عادةً في فك التشفير بتخفيف ضغط عرض النطاق للذاكرة، فإن الإنتاجية الفعلية تعتمد على حجم الدفعة وطول السياق وإعدادات مخبأ KV. والجزم بأنه “أسرع بـN ضعفاً” دون معيار خدمة خاص بـThakiCloud سيكون غير دقيق. كما أن تسريع NVFP4 الأصلي لا يعمل إلا على Blackwell، ولم نتمكّن وقت إعادة الإنتاج هذه من تأمين مخزون B200 على RunPod، لذا تحقّقنا من مسار التكميم على Hopper (وحدتا H100 NVL) وتركنا إنتاجية خدمة NVFP4 الأصلية مهمة قياس منفصلة بعد توفّر Blackwell.</p>

<p>ثالثاً، <strong>يرث التكميم قيود النموذج الأساسي كما هي.</strong> كما تذكر بطاقة النموذج مباشرةً، دُرّب النموذج الأساسي على بيانات مسحوبة من الإنترنت تحتوي على لغة سامّة وتحيّزات مجتمعية، وقد يولّد إجابات غير دقيقة أو يحذف معلومات أساسية أو ينتج نصاً غير ذي صلة. التكميم يحسّن الذاكرة والسرعة فقط، ولا يحلّ مشكلات الأمان والدقة هذه. ولا تزال الخدمة متعددة المستأجرين تتطلّب ترشيحاً ومراقبةً منفصلين للمخرجات.</p>

<p>رابعاً، <strong>فقدان الدقة لا يتقارب إلى الصفر.</strong> رغم أن معظم المعايير تُظهر خسارة دون نقطة واحدة، فإن السيناريوهات التي يكون فيها استخدام أدوات الوكلاء والالتزام بالسياسات محورياً، مثل -0.8 في τ²-Bench Telecom، تُظهر خسارة أكبر نسبياً. وفي مجالات مثل المالية والرعاية الصحية حيث تنعكس فروق الدقة الصغيرة مباشرةً على التكلفة، تحتاج إلى سياسة توازن بين اقتصاديات توفير الأربع بتات وفقدان الدقة لكل مستأجر، وتختار بين BF16 وFP8 وNVFP4.</p>

<p>إجمالاً، <code class="language-plaintext highlighter-rouge">nvidia/Qwen3.6-35B-A3B-NVFP4</code> خيار عملي للغاية للفرق التي تمتلك بنية تحتية قائمة على Blackwell/Hopper لـ”خفض الذاكرة إلى الربع تقريباً دون خسارة تُذكر.” لكن هذه الفائدة لا تصمد إلا فوق شرط العتاد والتحقق من الدقة الخاص بكل مجال، وتعتزم ThakiCloud تأكيد الإنتاجية وملاءمة كل مستأجر بمعيار خدمة خاص بها قبل عكسه في سياسة مجمّع العقد.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li>بطاقة النموذج: <a href="https://huggingface.co/nvidia/Qwen3.6-35B-A3B-NVFP4">nvidia/Qwen3.6-35B-A3B-NVFP4 · Hugging Face</a></li>
  <li>النموذج الأساسي: <a href="https://huggingface.co/Qwen/Qwen3.6-35B-A3B">Qwen/Qwen3.6-35B-A3B · Hugging Face</a></li>
  <li>أداة التكميم: <a href="https://github.com/NVIDIA/Model-Optimizer">NVIDIA Model Optimizer (GitHub)</a></li>
  <li>محرّك الاستدلال: <a href="https://github.com/vllm-project/vllm">vLLM (GitHub)</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="llmops" /><category term="nvfp4" /><category term="quantization" /><category term="vllm" /><category term="qwen3" /><category term="moe" /><category term="inference-optimization" /><category term="model-optimizer" /><summary type="html"><![CDATA[أصدرت NVIDIA نسخة مكمَّمة بصيغة NVFP4 (4 بت) من نموذج Qwen3.6-35B-A3B من Alibaba. خفض الأوزان من 16 بت إلى 4 بت يقلّل مساحة القرص وذاكرة GPU بنحو 3.06 ضعف، بينما يبقى فقدان الدقة مقابل BF16 في حدود 0.1 إلى 0.8 نقطة وفق الأرقام المنشورة في بطاقة النموذج. نحلّل كيف تتكامل بنية MoE (إجمالي 35B، 3B نشطة) مع تكميم NVFP4، وأوامر النشر في vLLM، وما يعنيه ذلك للخدمة المحلية لدى ThakiCloud.]]></summary></entry><entry xml:lang="ar"><title type="html">‏744B في بِت واحد: السؤال المحلي الذي يطرحه Unsloth GLM-5.2 Dynamic GGUF</title><link href="https://thakicloud.github.io/ar/llmops/unsloth-glm-5-2-1bit-gguf/" rel="alternate" type="text/html" title="‏744B في بِت واحد: السؤال المحلي الذي يطرحه Unsloth GLM-5.2 Dynamic GGUF" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/llmops/unsloth-glm-5-2-1bit-gguf</id><content type="html" xml:base="https://thakicloud.github.io/ar/llmops/unsloth-glm-5-2-1bit-gguf/"><![CDATA[<p>أول جدار يصطدم به أي فريق يخدم نموذجًا كبيرًا على بنيته الخاصة هو الذاكرة دائمًا. استدعاء نموذج رائد عبر واجهة برمجية خارجية يُخرج بياناتك من الشركة، واستضافته داخليًا تعني وضع مئات الجيجابايت — وغالبًا أكثر من تيرابايت — من الأوزان في مكانٍ ما. يمثّل <code class="language-plaintext highlighter-rouge">unsloth/GLM-5.2-GGUF</code> الذي أصدره Unsloth في يونيو 2026 دراسة حالة لخفض هذا الجدار عبر التكميم. فهو يأخذ GLM-5.2، وهو نموذج MoE مفتوح بنحو 744 مليار معامل، ويضغط أوزانه البالغة 1.51 تيرابايت بدقة BF16 إلى 176 جيجابايت عبر GGUF ديناميكي بِبِت واحد. كل رقم في هذه المقالة هو رقم منشور من Unsloth أو Hugging Face. لا يمكن استضافة نموذج 744B في بيئة التحليل هذه، لذا بدلًا من إعادة إنتاج القياسات ذاتيًا نستشهد بالأرقام العامة ونوضّح حدودها بصراحة.</p>

<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>‏GLM-5.2 نموذج لغوي كبير مفتوح الأوزان من Z.ai (Zhipu). وهو نموذج Mixture-of-Experts (MoE) بنحو 744 مليار معامل إجمالي مع نافذة سياق تصل إلى مليون رمز. ووفق وثائق Unsloth وتقارير متعددة، يسجّل نتائج موازية لـ Claude 4.8 Opus و GPT-5.5 و Gemini 3.1 Pro عبر القياسات المجمّعة بما فيها Artificial Analysis — ولهذا يوصَف بأنه أقوى نموذج مفتوح حتى الآن.</p>

<p>المشكلة هي الحجم. نقطة التحقق الأصلية بدقة BF16 تبلغ نحو 1.51 تيرابايت، يصعب وضعها على خادم واحد. ما فعله Unsloth هو تكميم هذه الأوزان بطريقة Dynamic 2.0 GGUF، منتجًا نسخًا من بِت واحد حتى أربعة بتات. وتنزل نسخة البِت الواحد إلى 176 جيجابايت — صغيرة بما يكفي لتحميلها على جهاز Mac Studio واحد بذاكرة موحّدة سعتها 256 جيجابايت، أو صندوق GPU واحد متعدد البطاقات. نموذج مصنّف من الفئة الرائدة بات يعمل على عتاد مكتبي بدلًا من خزانة مركز بيانات.</p>

<p>تشغّل ThakiCloud منصة SaaS متعددة المستأجرين للذكاء الاصطناعي وتعلّم الآلة على Kubernetes، وتتعامل مع الخدمة المحلية وداخل VPC ليستخدم العملاء نماذج قوية دون إخراج البيانات. لذا فإن سؤال «إلى أي حجم صغير يمكن تشغيل نموذج مفتوح من الفئة الرائدة» يرتبط مباشرة بتكلفة الخدمة وسيادة البيانات لدى عملائنا. لكن الخلاصة مقدمًا: تكميم GGUF قوي في السيناريوهات المحلية وأحادية المستخدم، لكنه يتصرّف بشكل مختلف تحت الخدمة متعددة المستأجرين عالية التزامن. هذه المقالة تتناول هذا الحد.</p>

<h2 id="ما-هذه-التقنية">ما هذه التقنية</h2>

<p>‏GGUF هي صيغة ملف النموذج المستخدمة في منظومة llama.cpp، والتكميم يمثّل أوزان الفاصلة العائمة 16 بت بعدد أقل من البتات لتقليل الحجم والذاكرة. والمفتاح هنا هو طريقة <strong>Dynamic 2.0</strong> من Unsloth. فبدلًا من تقليص كل طبقة إلى بِت واحد بشكل موحّد، تحافظ على الطبقات الأكثر حساسية لفقدان المعلومات بعرض بتات أعلى وتضغط الطبقات غير الحساسة بقوة فقط. حتى عندما تُسمّى «بِت واحد»، فإن عرض البت فعليًا مختلط لكل طبقة، ولهذا تفقد دقة أقل من التكميم الساذج عند المتوسط نفسه من البتات.</p>

<p>كون GLM-5.2 نموذج MoE يجعل هذا المزج ذا معنى خاص. فـ MoE يفعّل فقط الخبراء الذين يختارهم الموجّه لكل رمز، وليس كامل الـ 744B، فيتناسب الحساب مع عدد المعاملات النشطة. بعبارة أخرى، <strong>‏MoE يتولّى الحساب، و Dynamic GGUF يتولّى الذاكرة.</strong> يوضّح المخطط أدناه المحورين ومسارات الخدمة المتفرّعة من منظور ThakiCloud.</p>

<pre><code class="language-mermaid">flowchart TB
    subgraph QUANT["محور التكميم (الذاكرة)"]
      A["GLM-5.2 BF16&lt;br/&gt;نحو 1.51 تيرابايت"] --&gt;|"Unsloth Dynamic 2.0&lt;br/&gt;توزيع البتات لكل طبقة"| B["GGUF ديناميكي بِبِت واحد&lt;br/&gt;UD-TQ1_0 176 جيجابايت"]
    end
    subgraph SERVE["محور الخدمة (السرعة)"]
      C["رمز الإدخال"] --&gt; D["موجّه MoE"]
      D --&gt;|"بعض خبراء 744B فقط"| E["الخبراء النشطون"]
      E --&gt; F["رمز الإخراج"]
    end
    B --&gt; R{سيناريو الخدمة}
    R --&gt;|"مستخدم واحد، محلي، إثبات مفهوم محلي"| L["llama.cpp&lt;br/&gt;Mac 256 جيجابايت / متعدد GPU&lt;br/&gt;نحو 21.6 رمز/ث"]
    R --&gt;|"متعدد المستأجرين عالي التزامن"| V["vLLM + FP8/FP4&lt;br/&gt;تجميع مستمر، K8s/Kueue"]
    L --&gt; D
    V --&gt; D
</code></pre>

<p>على محور التكميم، تمر أوزان BF16 عبر معايرة Unsloth Dynamic 2.0 لتصبح GGUF بِبِت واحد. وعلى محور الخدمة، يفعّل موجّه MoE بعض الخبراء فقط لكل رمز. وحيث يلتقي المحوران يتفرّع السيناريو: llama.cpp + GGUF للتحقق المحلي أحادي المستخدم؛ و vLLM + تكميم GPU للخدمة عالية التزامن. نعود إلى هذا التفرّع لاحقًا.</p>

<h2 id="التثبيت-والتكامل">التثبيت والتكامل</h2>

<p>ميزة GGUF هي انخفاض حاجز الدخول — تحتاج فقط إلى llama.cpp أو غلاف له. المسار القياسي من وثائق Unsloth كالتالي.</p>

<p>نزّل فقط المستوى الذي تريده من Hugging Face. لنسخة البِت الواحد <code class="language-plaintext highlighter-rouge">UD-TQ1_0</code>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># تنزيل شظايا GGUF بِبِت واحد فقط عبر huggingface_hub</span>
pip <span class="nb">install</span> <span class="nt">-U</span> huggingface_hub hf_transfer
<span class="nv">HF_HUB_ENABLE_HF_TRANSFER</span><span class="o">=</span>1 <span class="se">\</span>
huggingface-cli download unsloth/GLM-5.2-GGUF <span class="se">\</span>
  <span class="nt">--include</span> <span class="s2">"*UD-TQ1_0*"</span> <span class="se">\</span>
  <span class="nt">--local-dir</span> GLM-5.2-GGUF
</code></pre></div></div>

<p>ثم شغّل خادمًا بـ llama.cpp. وبما أنه نموذج MoE، اضبط <code class="language-plaintext highlighter-rouge">--n-gpu-layers</code> وطول السياق وفق بيئتك.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># خادم llama.cpp (نقطة نهاية متوافقة مع OpenAI)</span>
./llama-server <span class="se">\</span>
  <span class="nt">--model</span> GLM-5.2-GGUF/GLM-5.2-UD-TQ1_0-00001-of-<span class="k">*</span>.gguf <span class="se">\</span>
  <span class="nt">--ctx-size</span> 16384 <span class="se">\</span>
  <span class="nt">--n-gpu-layers</span> 999 <span class="se">\</span>
  <span class="nt">--jinja</span> <span class="se">\</span>
  <span class="nt">--host</span> 0.0.0.0 <span class="nt">--port</span> 8080
</code></pre></div></div>

<p>على جهاز Mac Studio (M3 Ultra) بذاكرة موحّدة 256 جيجابايت، يستطيع خلفية Metal الاحتفاظ بكل الطبقات في الذاكرة؛ وعلى إعدادات x86 متعددة الـ GPU توزّع الطبقات بين GPU و CPU/RAM. كلما ارتفع مستوى التكميم زادت حاجته للذاكرة، فتصبح سعة عتادك عمليًا السقف لاختيار مستوى التكميم.</p>

<h2 id="النتائج-الفعلية">النتائج الفعلية</h2>

<p>من هنا فصاعدًا هذه أرقام منشورة من Unsloth و Hugging Face. لا يمكن استضافة نموذج 744B في بيئة التحليل هذه، فهذه أرقام عامة موثّقة وليست مُعاد إنتاجها ذاتيًا. أدناه جدول حجم الملف لكل مستوى تكميم.</p>

<table>
  <thead>
    <tr>
      <th>التكميم</th>
      <th>النسخة الممثِّلة</th>
      <th>حجم الملف</th>
      <th>مقابل BF16 (1.51 تيرابايت)</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>بِت واحد</td>
      <td>UD-TQ1_0</td>
      <td>176 جيجابايت</td>
      <td>أصغر بنحو 88%</td>
    </tr>
    <tr>
      <td>بِت واحد</td>
      <td>UD-IQ1_S</td>
      <td>204 جيجابايت</td>
      <td>أصغر بنحو 86%</td>
    </tr>
    <tr>
      <td>بِتان</td>
      <td>UD-IQ2_M</td>
      <td>255 جيجابايت</td>
      <td>أصغر بنحو 83%</td>
    </tr>
    <tr>
      <td>ثلاثة بتات</td>
      <td>UD-Q3_K_XL</td>
      <td>332 جيجابايت</td>
      <td>أصغر بنحو 78%</td>
    </tr>
    <tr>
      <td>أربعة بتات</td>
      <td>Q4_K_M</td>
      <td>456 جيجابايت</td>
      <td>أصغر بنحو 70%</td>
    </tr>
  </tbody>
</table>

<p><img src="/assets/images/unsloth-glm-5-2-1bit-gguf-results.png" alt="حجم ملف GLM-5.2 لكل مستوى تكميم ونسبة الضغط مقابل BF16" /></p>

<p>أما الدقة، فيذكر Unsloth أن التكميم الديناميكي يفقد أقل من التكميم الساذج عند المتوسط نفسه من البتات. وتشير المواد العامة إلى أن نسخة البِت الواحد الديناميكية تحتفظ بنحو 76% [تقديري] على مقياس دقتها الداخلي، ونسخة البِتين بنحو 82%، مع كونها أصغر بأكثر من 80% من الأصل. يختلف المقياس الدقيق ومجموعة البيانات حسب النسخة ومجموعة التقييم، لذا اقرأ هذه الأرقام كاتجاه أكثر من كونها قيمًا مطلقة: يزداد الفقد تدريجيًا مع انخفاض البتات، لكن حتى البِت الواحد يبقى في نطاق قابل للاستخدام. كما ينشر Unsloth نتائج GGUF الديناميكي على معيار Aider Polyglot للبرمجة، ما يتيح التحقق المتقاطع لجودة كل مستوى في مهام البرمجة.</p>

<p>تعتمد السرعة بشدة على العتاد. وفق التقارير العامة، عملت نسخة البِت الواحد بنحو 21.6 رمز/ث على جهاز Mac Studio بذاكرة 256 جيجابايت (M3 Ultra). هذا كافٍ لمستخدم واحد في الاستخدام الحواري، لكن الصورة تتغيّر تحت حمل الخادم مع عشرات الطلبات المتزامنة. هذا الفرق هو جوهر القسم التالي.</p>

<h2 id="التطبيق-على-منصة-thakicloud-للذكاء-الاصطناعي-على-kubernetes">التطبيق على منصة ThakiCloud للذكاء الاصطناعي على Kubernetes</h2>

<p>تخدم ThakiCloud النماذج عبر بيئات عملاء متنوعة، وعدد لا بأس به منها يحمل قيد «لا يمكن إخراج البيانات». ففي القطاعات المالية والعامة والصحية، حيث سيادة البيانات أساسية، يكون استدعاء نموذج رائد عبر واجهة خارجية ببساطة خارج الطاولة. وهنا يصبح GLM-5.2 Dynamic GGUF ورقة قوية: فهو يحوّل نموذجًا مفتوحًا من الفئة الرائدة بحجم 1.51 تيرابايت إلى شيء قابل للتشغيل على عقدة واحدة بسعة 256 جيجابايت تقريبًا.</p>

<p>هناك ثلاث زوايا ملموسة. أولًا، <strong>إثبات المفهوم والتقييم محليًا</strong>. قبل الدخول إلى مركز بيانات العميل، يكون تشغيل GGUF محليًا أرخص طريقة للتحقق مما إذا كان النموذج جيدًا بما يكفي في ذلك المجال — على جهاز واحد، دون حجز عنقود GPU. ثانيًا، <strong>الأحمال منخفضة التكرار وعالية الحساسية</strong>. للتحليل الداخلي ومعالجة المستندات حيث المستخدمون المتزامنون قليلون لكن البيانات يجب ألا تخرج أبدًا، تحقّق الخدمة أحادية العقدة بصيغة GGUF التكلفة والأمان معًا. ثالثًا، <strong>استيعاب تنوّع العتاد</strong>. يدعم llama.cpp واجهة Metal على Mac، وبطاقات x86 GPU، وإزاحة الحساب إلى CPU، ما يمنح مرونة لاستخدام أي عتاد مختلط يملكه العميل أصلًا.</p>

<p>تصفّ منصة ThakiCloud القياسية وحدات GPU عبر Kueue على Kubernetes وتشغّل النماذج على vLLM. وإضافة مسار GGUF تتيح تقديم قائمة خدمة من مستويين تتناسب مع وضع العميل: «vLLM + FP8/FP4 للخدمة متعددة المستأجرين عالية التزامن، و llama.cpp + Dynamic GGUF للخدمة المحلية أحادية العقدة». ضمن عائلة GLM-5.2 نفسها، نبدّل طريقة التكميم وزمن التشغيل حسب طبيعة الحمل. والفرق بين مزوّد يملك هذا الخيار وآخر لا يملكه يظهر لحظة يقول العميل «هذا لن ينجح في بيئتنا».</p>

<h2 id="القيود-والاعتراضات">القيود والاعتراضات</h2>

<p>لتجنّب المبالغة في تقدير هذه التقنية، يجب توضيح بضعة أمور.</p>

<p>أولًا، <strong>البِت الواحد ليس مجانيًا.</strong> حتى مع تقليل التكميم الديناميكي للفقد، فإن نسخة البِت الواحد أقل دقة بوضوح من الأصل. في الاستدلال المعقّد والبرمجة الطويلة حيث تتراكم الأخطاء، تُلمَس الفجوة مقابل نسخ البِتين إلى الأربعة بتات. عبارة «نموذج رائد بِبِت واحد» جذّابة، لكن التبنّي الفعلي يتطلب قياس نقطة التعادل في الجودة لكل مهمة على حدة.</p>

<p>ثانيًا، <strong>‏GGUF ليست صيغة للخدمة متعددة المستأجرين.</strong> رقم 21.6 رمز/ث أحادي التدفّق. يجمّع التجميع المستمر في vLLM الطلبات المتزامنة لرفع الإنتاجية، و llama.cpp ضعيف في هذا المجال. للخدمة متعددة المستأجرين بنمط SaaS مع عشرات إلى مئات المستخدمين المتزامنين، عادةً ما يتفوّق تكميم GPU بصيغة FP8/FP4 + vLLM على GGUF بِبِت واحد في الإنتاجية لكل وحدة تكلفة. مكان GGUF هو «بأمان في بيئة واحدة»، لا «لكثيرين في آن واحد».</p>

<p>ثالثًا، <strong>العتاد لم يصبح رخيصًا.</strong> جهاز Mac Studio بذاكرة موحّدة 256 جيجابايت أرخص بكثير من وحدات GPU لمراكز البيانات مثل 8×H100، لكنه ليس جهازًا اقتصاديًا بأي حال. «يعمل على المكتب» لا تعني «في متناول الجميع».</p>

<p>رابعًا، <strong>معظم الأرقام العامة هي تقارير Unsloth الذاتية.</strong> تتغيّر الدقة والسرعة لكل مستوى حسب مجموعة التقييم والعتاد وإعدادات التشغيل. وينبغي أن ترتكز قرارات التبنّي على نتائج مُعاد إنتاجها ببياناتك، لا على إعلانات المزوّد. ولهذا بالضبط تستشهد هذه المقالة بالمصادر بدلًا من إعادة الإنتاج الذاتي.</p>

<p>باختصار، يُقيَّم Unsloth GLM-5.2 Dynamic GGUF على أفضل وجه بأنه «أداة تخفض حاجز الدخول المحلي لنموذج مفتوح من الفئة الرائدة بدرجة واحدة». ليس حلًا سحريًا يستبدل كل الخدمة، بل خيار قوي في السيناريوهات التي تهمّ فيها سيادة البيانات وتكلفة العقدة الواحدة. ولمنصة مثل ThakiCloud قادرة على تبديل أزمنة التشغيل حسب الحمل، إنها ورقة إضافية لتحويل «لا نستطيع» لدى العميل إلى «إليك الطريقة».</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li><a href="https://huggingface.co/unsloth/GLM-5.2-GGUF">unsloth/GLM-5.2-GGUF · Hugging Face</a></li>
  <li>
    <table>
      <tbody>
        <tr>
          <td>[GLM-5.2 - How to Run Locally</td>
          <td>Unsloth Documentation](https://unsloth.ai/docs/models/glm-5.2)</td>
        </tr>
      </tbody>
    </table>
  </li>
  <li>
    <table>
      <tbody>
        <tr>
          <td>[Unsloth Dynamic 2.0 GGUFs</td>
          <td>Unsloth Documentation](https://unsloth.ai/docs/basics/unsloth-dynamic-2.0-ggufs)</td>
        </tr>
      </tbody>
    </table>
  </li>
  <li><a href="https://huggingface.co/unsloth/GLM-5.2-GGUF/discussions/3">unsloth/GLM-5.2-GGUF · GLM-5.2 GGUF Benchmarks! (Discussion)</a></li>
  <li>
    <table>
      <tbody>
        <tr>
          <td>[Unsloth Quantizes GLM-5.2’s 1.51TB to 217GB for Local Inference</td>
          <td>AI Weekly](https://aiweekly.co/alerts/unsloth-quantizes-glm-52s-151tb-to-217gb-for-local-inference)</td>
        </tr>
      </tbody>
    </table>
  </li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="llmops" /><category term="gguf" /><category term="quantization" /><category term="unsloth" /><category term="glm-5" /><category term="llama-cpp" /><category term="on-premise" /><category term="moe" /><category term="inference-optimization" /><summary type="html"><![CDATA[قلّص Unsloth أوزان GLM-5.2 (نحو 744B بصيغة MoE) من 1.51 تيرابايت بدقة BF16 إلى 176 جيجابايت عبر GGUF ديناميكي بِبِت واحد. أصبح نموذج مفتوح من الفئة الرائدة يعمل على جهاز Mac واحد بذاكرة 256 جيجابايت أو صندوق GPU واحد متعدد البطاقات. نستعرض الأرقام المنشورة لحجم ودقة كل مستوى تكميم، وأين تناسب الخدمة المحلية بصيغة GGUF منصة Kubernetes متعددة المستأجرين مثل ThakiCloud وأين تختلف.]]></summary></entry><entry xml:lang="ar"><title type="html">وكيل يتخيّل البيئة أولاً: تحليل معمّق لنموذج عالم اللغة Qwen-AgentWorld</title><link href="https://thakicloud.github.io/ar/research/qwen-agentworld-language-world-models/" rel="alternate" type="text/html" title="وكيل يتخيّل البيئة أولاً: تحليل معمّق لنموذج عالم اللغة Qwen-AgentWorld" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/research/qwen-agentworld-language-world-models</id><content type="html" xml:base="https://thakicloud.github.io/ar/research/qwen-agentworld-language-world-models/"><![CDATA[<p>⏱️ <strong>وقت القراءة المتوقع</strong>: 14 دقيقة</p>

<blockquote>
  <p>📄 <strong>المراجعة المتعمقة الكاملة (DOCX)</strong>: <a href="https://drive.google.com/file/d/1eOyoAEHaPPwUReV7qy5QcYJtLhEsA1hh/view">نزّل المراجعة التفصيلية من Google Drive</a>.</p>
</blockquote>

<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>تعمل معظم الوكلاء اليوم وفق أسلوب موحّد: تتلقى مهمة، تحاول تنفيذها، ثم تصحّح أخطاءها. إنها بنية تقوم على التجربة والخطأ في البيئة الحقيقية. هذا الأسلوب بديهي، لكنه مكلف. فإن كانت البيئة طرفية حقيقية أو متصفحاً حقيقياً أو جهاز Android فعلياً، فإن كل محاولة تستتبع تكاليف حقيقية ومخاطر حقيقية.</p>

<p>في الرابع والعشرين من يونيو 2026، كشف فريق Qwen في Alibaba عن <strong>Qwen-AgentWorld</strong>، وهو نهج يقلب هذه المعادلة رأساً على عقب. بدلاً من تدريب الوكيل على “أداء أفضل”، يُدرَّب النموذج على <strong>التنبؤ بالبيئة ذاتها</strong>؛ أي أنه يرسم في ذهنه ما ستؤول إليه حالة البيئة التالية انطلاقاً من الملاحظة الراهنة والفعل المُتّخذ، تماماً كلاعب الشطرنج الذي يقرأ ثلاثة أشواط مقبلة قبل أن يحرك قطعة. هذا هو نموذج عالم اللغة (Language World Model — LWM).</p>

<p>نحن في ThakiCloud ندير عبء عمل وكلاء متعدد المستأجرين على منصة AI/ML-SaaS المبنية على Kubernetes. ولأن الوكلاء تعمل فوق بيئات وأدوات وقيود مختلفة لكل عميل، فإن “كيفية التعامل مع البيئة” ليست موضوعاً بحثياً مجرداً بالنسبة لنا، بل إشكالية تمسّ تكاليف التشغيل مباشرة. لذا حللنا هذا النموذج اعتماداً على التقرير التقني الرسمي (arXiv 2606.24597) والمواد المنشورة على GitHub، ورصدنا أين يناسب منصتنا وما ينبغي أخذه بحذر.</p>

<h2 id="ما-هو-qwen-agentworld">ما هو Qwen-AgentWorld؟</h2>

<p>نموذج العالم هو نموذج يتنبأ بديناميات البيئة انطلاقاً من الملاحظة الراهنة والفعل المُتّخذ. وهو مفهوم آلية معرفية جوهرية للاستدلال والتخطيط درسه الباحثون منذ أمد بعيد، غير أنه ظل في الغالب حبيس بيئات بصرية ومادية كالروبوتات والألعاب. أما Qwen-AgentWorld فيختلف في كونه يُجسّد نموذج العالم <strong>فوق نموذج لغوي، عبر استدلال سلسلة التفكير (chain-of-thought)</strong>.</p>

<p>السمة الجوهرية هي <strong>محاكاة 7 نطاقات بنموذج واحد</strong>: MCP، وSearch، وTerminal، وSWE، وWeb، وOS، وAndroid — سبع بيئات تفاعل للوكلاء يعالجها نموذج واحد. فإذا أُعطي النموذج موجّهاً للنظام يقول “محاكاة بيئة طرفية Linux” وأمراً من المستخدم، فإنه يتنبأ بالمخرجات التي ستنتجها الطرفية دون تنفيذ الأمر فعلياً.</p>

<p>تصميم جوهري آخر هو كون النموذج <strong>نموذج عالم أصيل (Native World Model)</strong>. فنمذجة البيئة ليست ميزة أُلحقت في نهاية التدريب، بل كانت هدفاً تدريبياً منذ المرحلة الأولى (CPT). اعتمد النموذج على أكثر من عشرة ملايين مسار تفاعل من العالم الحقيقي لغرس “قدرة نمذجة البيئة” من الصفر. بعبارة المؤلفين: دُرِّبت النماذج اللغوية الكبيرة على التصرف الجيد في البيئات، لكنها لم تُدرَّب قط على نمذجة البيئات ذاتها — وهذا هو الفراغ الذي يسعى Qwen-AgentWorld إلى ملئه.</p>

<p><img src="/assets/images/qwen-agentworld-language-world-models-diagram.png" alt="مخطط هيكلي يوضح خط أنابيب تدريب Qwen-AgentWorld ومساري الاستخدام" />
<em>مخطط يلخّص خط أنابيب التدريب ثلاثي المراحل (CPT/SFT/RL) ومساري الاستخدام اللاحق لـ Qwen-AgentWorld.</em></p>

<h2 id="خط-أنابيب-التدريب-ثلاثي-المراحل">خط أنابيب التدريب ثلاثي المراحل</h2>

<p>يُبنى Qwen-AgentWorld عبر ثلاث مراحل تدريب ذات أدوار متمايزة بوضوح:</p>

<ul>
  <li><strong>CPT (Continual Pre-Training)</strong>: يغرس قدرة النمذجة العالمية العامة من ديناميات انتقال الحالة وكوربوس متخصص معزَّز. هذه هي المرحلة التي تُزرع فيها المعرفة الأساسية بكيفية استجابة البيئة للأفعال.</li>
  <li><strong>SFT (Supervised Fine-Tuning)</strong>: يُفعِّل استدلال التنبؤ بالحالة التالية (next-state-prediction). لا يقتصر الأمر على إصابة الحالة التالية، بل يجعل النموذج يكشف عن سبب تلك الحالة عبر سلسلة التفكير.</li>
  <li><strong>RL (Reinforcement Learning)</strong>: يرفع دقة المحاكاة عبر مكافآت هجينة قائمة على مسطرة تقييم وقواعد. يُضبط النموذج باستخدام إشارات مكافأة تراعي التنسيق والواقعية والاتساق.</li>
</ul>

<p>النموذج المنشور هو <strong>Qwen-AgentWorld-35B-A3B</strong>، بنية MoE (Mixture-of-Experts) تُنشَّط منها 3 مليارات معامل من أصل 35 مليار، مع نافذة سياق تبلغ 256K. يرد في التقرير التقني أيضاً <strong>Qwen-AgentWorld-397B-A17B</strong> الأكبر حجماً، غير أن أوزان 397B لم تُنشر. لتحديد نطاق ما هو متاح بدقة: <strong>أوزان النموذج 35B-A3B ومعيار AgentWorldBench متاحان بموجب رخصة Apache-2.0</strong>، أما 397B فيحضر في النتائج داخل التقرير فحسب. وهو تمييز ينبغي استحضاره حين تُقرأ تصريحات من قبيل “جرّبه الآن محلياً”.</p>

<h2 id="المعيار-agentworldbench">المعيار: AgentWorldBench</h2>

<p>كيف يُقيَّم نموذج عالم اللغة؟ أطلق فريق Qwen معياراً مخصصاً هو <strong>AgentWorldBench</strong>. يضم تفاعلات حقيقية أنتجتها خمسة نماذج حدودية عبر تسعة معايير قائمة، ويُقيّم الملاحظات البيئية المتنبَّأ بها على خمسة محاور: <strong>Format (التنسيق)، وFactuality (الواقعية)، وConsistency (الاتساق)، وRealism (المصداقية)، وQuality (الجودة)</strong>. يستعين التقييم بنموذج حكم منفصل (gpt-5.2).</p>

<p>فيما يلي نتائج الدرجة الإجمالية (Overall) وهي متوسط درجات المحاور الخمسة الموحَّدة (0-100) عبر النطاقات، كما نُشرت في المستودع الرسمي على GitHub:</p>

<p><img src="/assets/images/qwen-agentworld-language-world-models-results.png" alt="مخطط أعمدة يقارن درجات Qwen-AgentWorld والنماذج الحدودية في AgentWorldBench" />
<em>الدرجة الإجمالية في AgentWorldBench. تقيس دقة محاكاة البيئة، وهي مؤشر مختلف عن معدل نجاح الوكيل في إنجاز المهام. المصدر: QwenLM/Qwen-AgentWorld README الرسمي.</em></p>

<p>إليك الأرقام:</p>

<ul>
  <li><strong>Qwen-AgentWorld-397B-A17B: 58.71</strong>، المرتبة الأولى عالمياً، متجاوزاً GPT-5.4 (58.25) وClaude Opus 4.8 (56.59) وGemini 3.1 Pro (54.57).</li>
  <li><strong>Qwen-AgentWorld-35B-A3B: 56.39</strong>، يتفوق على نموذج الأساس Qwen3.5-35B-A3B (47.73) بفارق <strong>+8.66</strong>. هذا تحسّن يزيد على ثماني نقاط بفضل تدريب نموذج العالم وحده.</li>
</ul>

<p>ثمة نقطتان ينبغي التوضيح بشأنهما. أولاً: ما يقيسه هذا المعيار ليس “قدرة الوكيل على حل المهام” بل “دقة تنبؤ النموذج بالحالة البيئية التالية”، أي دقته بوصفه محاكياً. ثانياً: الذي تجاوز النماذج الحدودية هو 397B غير المنشور، أما 35B المتاح للتنزيل فدرجته 56.39، أي أدنى قليلاً من GPT-5.4 وClaude Opus 4.8. التحسّن لافت، لكن تبسيط القول بأن “النموذج المفتوح تغلّب على جميع النماذج المغلقة” غير دقيق.</p>

<h2 id="مساران-لجعل-نموذج-العالم-يُقوّي-الوكلاء">مساران لجعل نموذج العالم يُقوّي الوكلاء</h2>

<p>لا يقف Qwen-AgentWorld عند حد المحاكاة؛ فهو يقترح <strong>مساريْن لجعل نموذج العالم يُقوّي الوكلاء</strong>.</p>

<p><strong>المسار الأول: محاكي البيئة المنفصل (Controllable Sim RL).</strong> يستخدم نموذج العالم بديلاً عن البيئة لتدريب الوكلاء بالتعلم التعزيزي. بدلاً من تشغيل آلاف البيئات الحقيقية، يُنشئ النموذج بيئات محاكاة قابلة للضبط والتوسع. وفق التقرير، حين طُبِّق Sim RL على 4000 بيئة خارج التوزيع (OOD) من OpenClaw، ارتفعت النتائج من الخط الأساسي (65.4 / 47.9) إلى <strong>69.7 / 55.0</strong> باستخدام Qwen-AgentWorld-397B-A17B بيئةً محاكِية. والأجدر بالاهتمام أن المحاكاة “المضبوطة” تفوّقت على غير المضبوطة؛ ففي أحد الإعدادات سجّل Sim RL المضبوط تحسناً <strong>+16.29 / +10.49</strong> قياساً بخط أساس SFT، أي نتائج أفضل من التدريب على البيئة الحقيقية وحدها.</p>

<p><strong>المسار الثاني: أساس الوكيل الموحّد (LWM Warmup).</strong> يستخدم تدريب نموذج العالم نوعاً من الإحماء. نموذج أُجري له LWM RL Warmup على مسارات أحادية الدور وغير وكيلية ينتقل تلقائياً إلى مهام الوكلاء متعددة الأدوار ومتعددة مكالمات الأدوات، دون تدريب وكيلي منفصل. الادعاء الجوهري هو أن معرفة التنبؤ تنتقل ذاتياً. حين أُضيف LWM RL إلى Qwen3.5-35B-A3B-SFT، تحسّنت النتائج عبر سبعة معايير:</p>

<table>
  <thead>
    <tr>
      <th>المعيار</th>
      <th>خط أساس SFT</th>
      <th>+ LWM RL</th>
      <th>التحسّن</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Terminal-Bench 2.0</td>
      <td>33.25</td>
      <td>39.55</td>
      <td>+6.30</td>
    </tr>
    <tr>
      <td>SWE-Bench Verified</td>
      <td>64.47</td>
      <td>67.86</td>
      <td>+3.39</td>
    </tr>
    <tr>
      <td>SWE-Bench Pro</td>
      <td>42.18</td>
      <td>47.42</td>
      <td>+5.24</td>
    </tr>
    <tr>
      <td>WideSearch F1 Item</td>
      <td>33.38</td>
      <td>46.17</td>
      <td>+12.79</td>
    </tr>
    <tr>
      <td>Claw-Eval</td>
      <td>53.60</td>
      <td>64.88</td>
      <td>+11.28</td>
    </tr>
    <tr>
      <td>QwenClawBench</td>
      <td>39.76</td>
      <td>49.43</td>
      <td>+9.67</td>
    </tr>
    <tr>
      <td>BFCL v4</td>
      <td>62.29</td>
      <td>71.25</td>
      <td>+8.96</td>
    </tr>
  </tbody>
</table>

<p>ظهر التحسّن في ثلاثة معايير خارج النطاق تماماً. تعلّم التنبؤ بالبيئة يُعين على تعلّم التصرف فيها — نتيجة تبدو مضادة للحدس بعض الشيء.</p>

<h2 id="كيف-تشغّله-فعلياً">كيف تشغّله فعلياً؟</h2>

<p>يمكن خدمة النموذج 35B-A3B المنشور مباشرة عبر أطر استدلال كـ SGLang وvLLM. الأوامر التي يقترحها المستودع الرسمي:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># الخدمة عبر vLLM</span>
vllm serve Qwen/Qwen-AgentWorld-35B-A3B

<span class="c"># أو عبر SGLang</span>
python <span class="nt">-m</span> sglang.launch_server <span class="nt">--model-path</span> Qwen/Qwen-AgentWorld-35B-A3B
</code></pre></div></div>

<p>يتبنى النموذج واجهة OpenAI المتوافقة كنماذج الدردشة المعتادة، مع ميزة تمييزية: يُحدَّد الموجّه النظامي بـ”أي بيئة يُراد محاكاتها”.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">model_name</span> <span class="o">=</span> <span class="sh">"</span><span class="s">Qwen/Qwen-AgentWorld-35B-A3B</span><span class="sh">"</span>
<span class="n">messages</span> <span class="o">=</span> <span class="p">[</span>
    <span class="p">{</span>
        <span class="sh">"</span><span class="s">role</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">system</span><span class="sh">"</span><span class="p">,</span>
        <span class="sh">"</span><span class="s">content</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">You are a language world model simulating a Linux terminal environment. </span><span class="sh">"</span>
                   <span class="sh">"</span><span class="s">Given the user</span><span class="sh">'</span><span class="s">s command, predict the terminal output.</span><span class="sh">"</span><span class="p">,</span>
    <span class="p">},</span>
    <span class="p">{</span><span class="sh">"</span><span class="s">role</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">user</span><span class="sh">"</span><span class="p">,</span> <span class="sh">"</span><span class="s">content</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">ls -la /var/log</span><span class="sh">"</span><span class="p">},</span>
<span class="p">]</span>
</code></pre></div></div>

<p>تقييم AgentWorldBench متاح أيضاً؛ يمكن تنزيل ملفات JSONL الخاصة بكل نطاق (<code class="language-plaintext highlighter-rouge">mcp_test.jsonl</code>، <code class="language-plaintext highlighter-rouge">terminal_test.jsonl</code>، إلخ) وإعادة إنتاج التقييم الخماسي المحاور بشكل مستقل. لكن تجدر الإشارة إلى أن 35B-A3B، رغم بنيته MoE، يتطلب ذاكرة GPU غير يسيرة، مما يستدعي تسريعاً ملائماً وتوازي تنسوري لبيئة الإنتاج. في هذا التحليل لم نُجرِ استدلالاً على GPU خاصة بنا؛ اقتصرنا على الأرقام المنشورة رسمياً في التقرير والمستودع دون قياسات ذاتية.</p>

<h2 id="التطبيق-على-منصة-thakicloud-aiml-saas-لـ-kubernetes">التطبيق على منصة ThakiCloud AI/ML SaaS لـ Kubernetes</h2>

<p>نُجدوِل في ThakiCloud أعباء عمل GPU عبر Kueue فوق Kubernetes، ونُقدّم استدلالاً متعدد المستأجرين عبر vLLM، وندير وكلاء معزولة لكل عميل. من هذه الزاوية، يطرح Qwen-AgentWorld ثلاثة دلالات:</p>

<p><strong>أولاً: محاكاة البيئة قد تُعيد رسم هيكلة تكاليف تدريب الوكلاء.</strong> لتطبيق التعلم التعزيزي على وكلاء في بيئات العملاء يستلزم تشغيل آلاف البيئات الحقيقية، مما يعني إدارة بنية تحتية بيئية كاملة: حشود متصفحات، وطرفيات محمية بحاوية رمل، ومحاكيات موبايل — فضلاً عن وحدات GPU. إذا حلّ نموذج العالم محل تلك البيئات، أمكن ضغط حلقة التعلم التعزيزي إلى نوع واحد من خدمات النماذج. Sim RL المضبوط عبر قائمة انتظار Kueue يُخفّض تعقيد التشغيل كثيراً في بيئة متعددة المستأجرين.</p>

<p><strong>ثانياً: التوافق مع الاستضافة الذاتية وبيئات الاستخدام الداخلي.</strong> ترخيص Apache-2.0 لنموذج 35B-A3B يُجيز الاستخدام التجاري والاستضافة الذاتية دون قيود. بالنسبة لعملاء في القطاعين الحكومي والمالي حيث لا تستطيع البيانات مغادرة الحدود، يتيح هذا خيار إسكان محاكي البيئة الخاص بالعميل داخل مجموعتنا بدلاً من الاعتماد على واجهات API خارجية. تغليف البيئة في نموذج يُتيح تدريب الوكلاء وتقييمهم دون كشف البيئات التشغيلية الحساسة للخارج.</p>

<p><strong>ثالثاً: القيمة بوصفه بنية تحتية تقييمية.</strong> التقييم الخماسي المحاور لـ AgentWorldBench (التنسيق، الواقعية، الاتساق، المصداقية، الجودة) يُشكّل بحد ذاته إطاراً جيداً لبوابة جودة وكلاء متعددي المستأجرين. يوفر محاور قابلة للقياس الكمي لتصفية الوكلاء قبل نشرها لدى العملاء بناءً على مدى دقة فهمهم للبيئة. حتى من دون خدمة 397B محلياً، يُعدّ تصميم التقييم هذا ونموذج المحاكاة 35B المتاح أصولاً قابلة للدمج فوراً في خطوط تحقق داخلية.</p>

<p>بالطبع، هذا خارطة طريق تدريجية لا حلاً جاهزاً. استبدال بيئات جميع العملاء بنماذج عالم ليس أمراً يتم بين يوم وليلة، وفي النطاقات التي تقل فيها دقة المحاكاة ستبقى الحاجة إلى التدريب على بيئات حقيقية قائمة. غير أن منطق “نموذج يُنشئ البيئة” يُلامس بدقة إشكاليات التكلفة والعزل في منصة وكلاء متعددة المستأجرين، مما يستحق متابعتنا الدائمة.</p>

<h2 id="القيود-والحجج-المضادة">القيود والحجج المضادة</h2>

<p>أول ما ينبغي الإشارة إليه هو <strong>الفجوة بين التصريحات الترويجية ونطاق ما هو منشور فعلاً</strong>. تناقلت وسائل التواصل الاجتماعي عبارات من قبيل “أطلقت Alibaba نموذجاً يتفوق على جميع النماذج المغلقة، جرّبه الآن محلياً”. لكن الذي تفوّق على النماذج الحدودية هو 397B غير المنشور، أما 35B القابل للتنزيل فأداؤه أدنى قليلاً من GPT-5.4 وClaude Opus 4.8. “التفوّق” و”النشر” لا يشيران إلى نفس النموذج — ينبغي توضيح ذلك بجلاء.</p>

<p>ثانياً: <strong>طبيعة المعيار</strong>. يقيس AgentWorldBench دقة التنبؤ البيئي لا معدل نجاح الوكيل في إنجاز المهام. التنبؤ الدقيق بالبيئة لا يضمن مباشرةً حل المهام بكفاءة في تلك البيئة. نتائج انتقال المسار الثاني تقدّم بعض الدليل على هذه الصلة، لكن مدى التعميم يستدعي مزيداً من التحقق.</p>

<p>ثالثاً: <strong>قيود التقييم الذاتي التصميم والتحكيم الذاتي</strong>. فريق البحث الذي أنشأ المعيار هو ذاته من صمّم محاور التقييم واختار نموذج الحكم (gpt-5.2). هذا ليس عيباً بالضرورة، لكن الحكمة تقتضي قراءة الأرقام المطلقة بحذر حتى تتراكم عمليات إعادة الإنتاج المستقلة من أطراف ثالثة.</p>

<p>رابعاً: <strong>مخاطر الهلوسة في المحاكي</strong>. إذا أنتج نموذج العالم حالة بيئية قابلة للتصديق لكنها خاطئة، فإن الوكيل المُدرَّب عليها يتعلم قواعد لا وجود لها. القابلية للضبط ميزة وخطر في آنٍ واحد. التدريب الذي يعتمد حصراً على المحاكاة دون معايرة دورية مع بيئات حقيقية قد يُصبح هشاً أمام انزياح التوزيع.</p>

<p>بعد كل هذا، يبقى التوجّه القاضي بـ”جعل النموذج يفهم البيئة قبل أن يتصرف فيها” توجهاً جديداً وواعداً. والأهم أن نموذج 35B والمعيار مفتوحان بموجب Apache-2.0، فباب التحقق والتجريب ليس موصداً. اقتلع العناوين المبالغ فيها جانباً، وما تبقى هو بحث عملي تماماً لمنصات وكلاء متعددة المستأجرين.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li>التقرير التقني لـ Qwen-AgentWorld (arXiv): <a href="https://arxiv.org/abs/2606.24597">arxiv.org/abs/2606.24597</a></li>
  <li>المدونة الرسمية: <a href="https://qwen.ai/blog?id=qwen-agentworld">qwen.ai/blog?id=qwen-agentworld</a></li>
  <li>GitHub: <a href="https://github.com/QwenLM/Qwen-AgentWorld">github.com/QwenLM/Qwen-AgentWorld</a></li>
  <li>النموذج والمعيار على Hugging Face: <a href="https://huggingface.co/collections/Qwen/qwen-agentworld">huggingface.co/collections/Qwen/qwen-agentworld</a></li>
  <li>الإعلان الرسمي لـ Alibaba Qwen على X: <a href="https://x.com/Alibaba_Qwen/status/2069720365442719867">x.com/Alibaba_Qwen/status/2069720365442719867</a></li>
</ul>

<blockquote>
  <p>📄 <strong>المراجعة المتعمقة الكاملة (DOCX)</strong>: <a href="https://drive.google.com/file/d/1eOyoAEHaPPwUReV7qy5QcYJtLhEsA1hh/view">نزّل المراجعة التفصيلية من Google Drive</a>.</p>
</blockquote>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="research" /><category term="qwen-agentworld" /><category term="world-model" /><category term="llm-agent" /><category term="reinforcement-learning" /><category term="agent-environment" /><category term="alibaba-qwen" /><category term="on-premise" /><summary type="html"><![CDATA[Qwen-AgentWorld الذي أطلقه فريق Alibaba Qwen هو نموذج عالم لغوي (Language World Model) تدرّب على التنبؤ بالبيئة ذاتها بدلاً من تعلّم الأفعال. نحلّل هنا الأفكار الجوهرية والأرقام الفعلية ودلالاتها من منظور منصة ThakiCloud للوكلاء، استناداً إلى التقرير التقني على arXiv والمعايير الرسمية المعلنة.]]></summary></entry><entry xml:lang="ar"><title type="html">قراءة كتاب كامل في تمريرة واحدة: سر ذاكرة KV الثابتة في Unlimited OCR من Baidu</title><link href="https://thakicloud.github.io/ar/research/unlimited-ocr-rswa/" rel="alternate" type="text/html" title="قراءة كتاب كامل في تمريرة واحدة: سر ذاكرة KV الثابتة في Unlimited OCR من Baidu" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/research/unlimited-ocr-rswa</id><content type="html" xml:base="https://thakicloud.github.io/ar/research/unlimited-ocr-rswa/"><![CDATA[<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>عاد تحويل المستندات إلى بنية قابلة للقراءة آليًا ليكون محوريًا في عصر RAG والوكلاء. قد يمتد عقد واحد إلى عشرات الصفحات، وتحمل التقارير المالية أو الأبحاث جداول ومعادلات وتخطيطات متعددة الأعمدة تتدفق عبر حدود الصفحات. تحتاج هذه المستندات الطويلة إلى تحليلها بالترتيب الصحيح للقراءة، دفعة واحدة، قبل أن يتمكن نموذج اللغة الكبير من استخدامها جيدًا.</p>

<p>المشكلة هي التكلفة. عندما يحلل نموذج اللغة البصري مستندًا، يولّد فك التشفير رموز الإخراج واحدًا تلو الآخر بشكل انحداري ذاتي، ويجعل الانتباه الكامل في المحوّل القياسي ذاكرة KV تنمو خطيًا مع طول التسلسل. ومع تراكم الصفحات تتضخم الذاكرة، ويظهر سقف لطول المستند الذي يمكن معالجته دفعة واحدة. لهذا تقسّم معظم الأدوات الحالية المستندات صفحة بصفحة وتعالجها منفصلة ثم تعيد تجميع النتائج، فتكسر استمرارية الجداول والفقرات التي تعبر حدود الصفحات.</p>

<p>يزيل <strong>Unlimited OCR</strong> من Baidu (arXiv 2606.23050) هذا السقف بطريقة مختلفة. فهو يستبدل كل طبقة انتباه في فك التشفير بآلية Reference Sliding Window Attention (R-SWA)، محافظًا على حجم ذاكرة KV ثابتًا طوال فك التشفير. ونتيجة لذلك يمكنه نسخ عشرات الصفحات من مستند في تمريرة أمامية واحدة ضمن سياق 32K. وعبارة الورقة “التحليل أحادي اللقطة طويل الأفق” ليست مبالغة.</p>

<p>في ThakiCloud نشغّل أحمال الاستدلال متعدد المستأجرين ومعالجة المستندات مباشرة على منصة SaaS للذكاء الاصطناعي والتعلّم الآلي قائمة على كوبرنيتس. في بيئة تأتي فيها حصة كبيرة من تكلفة الاستدلال من ذاكرة KV، فإن “ذاكرة ثابتة بصرف النظر عن الطول” ليست فضولًا أكاديميًا بل موضوعًا يمس اقتصاديات الخدمة مباشرة. يشرح هذا المنشور ما هي R-SWA، ولماذا تبقى ذاكرة KV ثابتة، وأين تناسب من منظور منصتنا.</p>

<h2 id="ما-هو-unlimited-ocr">ما هو Unlimited OCR</h2>

<p>ليس Unlimited OCR نموذجًا بُني من الصفر بل نموذج يدفع DeepSeek-OCR خطوة أبعد. فهو يحتفظ بـ<strong>DeepEncoder</strong> القوي من DeepSeek-OCR كمشفّر له ويستبدل انتباه فك التشفير فقط بـ R-SWA.</p>

<p><img src="/assets/images/unlimited-ocr-rswa-diagram.png" alt="مخطط مشفّر DeepEncoder وفك تشفير R-SWA في Unlimited OCR" />
<em>يقلّص مشفّر عالي الضغط الصفحة إلى عدد قليل من الرموز البصرية، ويولّد فك تشفير R-SWA مخرجات طويلة بذاكرة KV ثابتة.</em></p>

<p><strong>المشفّر (DeepEncoder)</strong>: يُربط SAM-ViT وCLIP-ViT على التوالي مع تطبيق ضغط رموز بمقدار 16 ضعفًا. تُضغط صفحة PDF واحدة بدقة 1024×1024 إلى 256 رمزًا بصريًا فقط. ولأن عدد الرموز مُقلّص بشدة على جانب الإدخال، تكون كمية المعلومات البصرية التي يجب على فك التشفير الرجوع إليها صغيرة. ويعمل هذا التصميم عالي الضغط مع ذاكرة KV الثابتة المذكورة أدناه لتمكين معالجة المستندات الطويلة.</p>

<p><strong>فك التشفير (نموذج لغوي بـ R-SWA)</strong>: فك التشفير نموذج خليط خبراء (MoE) بحجم 3 مليار معامل مع نحو 500 مليون معامل مُفعّل. وبما أن مجموعة فرعية فقط من الخبراء تُفعّل لكل رمز بدلًا من الـ 3 مليار كاملة، فإن الحوسبة لكل رمز خفيفة نسبةً إلى عدد المعاملات. وعلاوة على ذلك، يُعد استبدال جميع طبقات الانتباه بـ R-SWA هو الميزة الجوهرية للنموذج.</p>

<p>النموذج الكامل نحو ثلاثة مليارات معامل، صدر بأوزان BF16 تحت رخصة MIT المسموح بها تجاريًا. تتوفر الأوزان على Hugging Face في <code class="language-plaintext highlighter-rouge">baidu/Unlimited-OCR</code> وعلى ModelScope، منشورة مع الكود على GitHub. وعند الإصدار يعمل وفق التقارير على وحدة معالجة رسوميات NVIDIA متوسطة المدى واحدة.</p>

<p>هذا النموذج من سلالة Baidu نفسها مثل PaddleOCR-VL الذي تناولناه سابقًا، لكن النهج يختلف. يقسم PaddleOCR-VL تحليل التخطيط والتعرف على العناصر إلى مرحلتين لتأمين الاستقرار بنماذج صغيرة، بينما يحتفظ Unlimited OCR بنموذج واحد من طرف إلى طرف لكنه يغيّر آلية الانتباه لملاحقة معالجة المستندات الطويلة دفعة واحدة. ومن الممتع مقارنة فلسفتي تصميم تحلّان المشكلة نفسها.</p>

<h2 id="الآلية-الجوهرية-reference-sliding-window-attention">الآلية الجوهرية: Reference Sliding Window Attention</h2>

<p>لفهم R-SWA انظر أولًا إلى نقاط ضعف نهجين قائمين.</p>

<p><strong>الانتباه الكامل</strong> يجعل كل رمز إخراج يرى كل رمز سابق. إنه دقيق، لكن ذاكرة KV تنمو بتناسب مع طول التسلسل. ومع زيادة الصفحات تنمو الذاكرة خطيًا وتصطدم بسقف.</p>

<p><strong>انتباه النافذة المنزلقة العادي (SWA)</strong> يرى فقط آخر W رمزًا. تُثبَّت ذاكرة KV على حجم النافذة فتصبح الذاكرة ثابتة، لكن المعلومات التي تُدفع خارج النافذة تُنسى. ينفع هذا في توليد النص العام، لكنه قاتل في OCR حيث يجب “النظر إلى المصدر ونسخه بأمانة”. فبمجرد أن تتجاوز النافذة، تفقد دليل أي صفحة كنت تنسخها.</p>

<p>تجمع R-SWA بين الأمرين. وفكرتها الأساسية تأتي من طريقة نسخ البشر لمستند طويل. يكتب الشخص وهو ينظر إلى آخر بضع جمل كتبها (الذاكرة العاملة قصيرة المدى) وإلى المستند الأصلي المنشور أمامه (المرجع). و”Reference” في R-SWA هي بالضبط هذا المرجع الأصلي. فهي تحتفظ بالرموز البصرية عالية الضغط التي ينتجها المشفّر كمرساة يمكن الوصول إليها دائمًا، مع تطبيق نافذة منزلقة على رموز النص المولّد.</p>

<p>بعبارة أخرى، ينظر الانتباه إلى مجموعتين. الأولى رموز المرجع البصري ثابتة الحجم (مخرجات المشفّر)، والثانية نافذة منزلقة على النص المولّد حديثًا. وكلتا المجموعتين محدودتان في الطول، لذا مهما طال الإخراج تبقى ذاكرة KV الإجمالية ثابتة. إنه انتباه يحاكي الذاكرة العاملة بالمعنى الحرفي: لا ينسى المصدر أبدًا، ومع ذلك يبقي الذاكرة مستقرة.</p>

<p>تؤكد الورقة أن R-SWA ليست حيلة خاصة بـ OCR بل انتباه تحليل عام الغرض. ينطبق الهيكل نفسه على المهام التي تقرأ مدخلًا طويلًا وتنتج مخرجًا طويلًا، مثل التعرف على الكلام (ASR) أو الترجمة. وقد يتعمم نمط تثبيت المدخل كمرجع مرساة وتطبيق نافذة منزلقة على المخرج عبر مسائل التسلسل إلى التسلسل.</p>

<h2 id="نتائج-القياس">نتائج القياس</h2>

<p>تُبلَّغ الأداء على OmniDocBench، وهو معيار لتحليل المستندات يقيّم بشمولية النص الأساسي والجداول والمعادلات وترتيب القراءة.</p>

<ul>
  <li><strong>النتيجة الإجمالية على OmniDocBench v1.5 بنسبة 93.23%</strong>: تحسّن بمقدار 6.22 نقطة مئوية عن خط أساس DeepSeek-OCR.</li>
  <li><strong>النتيجة الإجمالية على OmniDocBench v1.6 بنسبة 93.92%</strong>: مُبلَّغ عنها كأحدث ما توصلت إليه التقنية من طرف إلى طرف.</li>
</ul>

<p>ما يبرز هو تحقيق مكاسب الدقة وكفاءة الذاكرة في آنٍ واحد. عادةً يخلق تضييق النافذة لتوفير الذاكرة مقايضة في الدقة، لكن R-SWA تبلغ ذاكرة KV ثابتة دون خسارة في الدقة بالاحتفاظ بالمرجع البصري كمرساة ثابتة. والقدرة على بثّ مستند متصل دفعة واحدة، دون تقطيع الصفحات ومعالجتها منفصلة، تُحدث فرقًا عمليًا كبيرًا، لأنها تحافظ على استمرارية الجداول والحواشي والنص متعدد الأعمدة التي تنكسر عند حدود الصفحات.</p>

<p>ومع ذلك، فإن جميع الأرقام أعلاه قيم بلّغتها الورقة وبطاقة النموذج، وليست أرقامًا أعدنا إنتاجها بأنفسنا. فـ Unlimited OCR نموذج MoE بحجم 3 مليار، لذا يتطلب التحقق ذو المعنى وحدة معالجة رسوميات وتنزيل النموذج، ويركّز هذا المنشور على تحليل التصميم. ونخطط لتناول إعادة الإنتاج العملي في تجربة منفصلة.</p>

<h2 id="تطبيقه-على-منصة-thakicloud-لـ-k8s-aiml-saas">تطبيقه على منصة ThakiCloud لـ K8s AI/ML SaaS</h2>

<p>من منظور منصتنا، سبب أهمية هذا النموذج واضح: أصعب مورد في خدمة الاستدلال متعدد المستأجرين هو بالضبط ذاكرة KV.</p>

<p><strong>اقتصاديات الخدمة</strong>: في محركات الخدمة مثل vLLM، يعتمد عدد الطلبات المتزامنة، أي حجم الدفعة، على مقدار ما تشغله ذاكرة KV من ذاكرة وحدة المعالجة الرسومية. يدع نموذج الانتباه الكامل طلب مستند طويل واحد يلتهم ذاكرة KV كبيرة، فيخفض الإنتاجية المتزامنة. أما نموذج ذاكرة KV الثابتة فلديه ذاكرة لكل طلب يمكن التنبؤ بها بصرف النظر عن طول المستند. وسواء كان فاتورة من صفحة واحدة أو عقدًا من 200 صفحة، تُعالَج ببصمة الذاكرة نفسها، فيمكنك تخطيط حجم الدفعة باستقرار دون أن يهزّك توزيع أطوال الحمل. وفي بيئة متعددة المستأجرين، يصبح عزل الموارد لكل مستأجر وتخطيط السعة أبسط بكثير.</p>

<p><strong>في الموقع وكفاءة التكلفة</strong>: الأوزان المفتوحة تحت رخصة MIT والتشغيل على وحدة معالجة رسوميات متوسطة المدى واحدة عاملان حاسمان للعملاء الذين لا يمكنهم إرسال البيانات إلى الخارج. ففي مجالات تكون فيها المستندات نفسها حساسة، مثل المال والقطاع العام والرعاية الصحية، قد يكون رفع عقد إلى واجهة OCR سحابية انتهاكًا للامتثال بحد ذاته. وإذا أتاح تصميم الذاكرة الثابتة إقامة خط أنابيب للمستندات الطويلة في الموقع بوحدة معالجة رسوميات معقولة واحدة، فإنه يجلس بطبيعته فوق مكدّسنا حيث نجدول وحدات المعالجة الرسومية بـ Kueue ونخدم بـ vLLM.</p>

<p><strong>خارطة طريق التطبيق</strong>: على منصتنا، تدخل أحمال ذكاء المستندات كمعالجة مسبقة لفهرسة RAG وكأدوات مستندات للوكلاء. ويمكن لـ OCR ذي ذاكرة KV الثابتة أن يكون البوابة الأولى في كلا المسارين، محلّلًا مستندًا طويلًا بدقة وبالكامل قبل تقطيعه. وخاصة للمستندات الحكومية الكورية والمستندات المالية ذات الجداول العابرة للصفحات والتخطيطات متعددة الأعمدة، تساهم القدرة على المعالجة المستمرة دون تقسيم الصفحات مباشرة في جودة RAG اللاحقة. وتتمثل استراتيجية تشغيل واقعية في نشر استقرار المراحل المنفصلة في PaddleOCR-VL ومعالجة Unlimited OCR للمستندات الطويلة دفعة واحدة بشكل انتقائي وفق خصائص الحمل.</p>

<h2 id="القيود-والحجج-المضادة">القيود والحجج المضادة</h2>

<p>التصميم الأنيق لا يعني أنه يناسب كل حالة.</p>

<p><strong>الحدود المتأصلة للنافذة المنزلقة</strong>: رغم احتفاظ R-SWA بالمرجع البصري كمرساة، يظل جانب النص المولّد نافذة منزلقة. فالاعتماديات بعيدة المدى جدًا بين رموز الإخراج، مثل التوسيع المتسق لاختصار عُرّف في الصفحة 1 عبر الصفحة 180، قد لا تكون مضمونة بالدرجة نفسها كالانتباه الكامل حتى مع تعزيز المرجع البصري لها. وهذه نقطة يجب تأكيدها عبر إعادة الإنتاج العملي.</p>

<p><strong>العبء التشغيلي لـ MoE</strong>: نموذج MoE بحجم 3 مليار خفيف في الحوسبة لكل رمز، لكن مجموعة الخبراء الكاملة يجب أن تكون في الذاكرة، فيتجاوز شغل الذاكرة الفعلي المعاملات النشطة (500 مليون). ولـ MoE أيضًا خاصية أن الإنتاجية تتذبذب عندما يصبح توجيه الخبراء عبر الرموز في دفعة غير متوازن، فيعتمد الأداء على نضج محرك الخدمة في دعم MoE.</p>

<p><strong>الفجوة بين القياس والاستخدام الحقيقي</strong>: النتيجة العالية على OmniDocBench لا تضمن المستوى نفسه على المدخلات الصعبة في التشغيل الحقيقي، مثل الكتابات غير اللاتينية كالكورية والعربية، والخط اليدوي، والمسوحات منخفضة الجودة، أو المستندات الحكومية المغطاة بالأختام. وOCR المستندات مجال تكون فيه الفجوة بين القياس والميدان كبيرة بشكل خاص، وتقييم منفصل على توزيع مستنداتك الخاص أمر أساسي قبل الاعتماد.</p>

<p><strong>الحاجة إلى التحقق</strong>: كل رقم في هذا المنشور قيمة بلّغتها الورقة وبطاقة النموذج. وما إذا كانت ذاكرة KV الثابتة تقدّم مكسب الإنتاجية الذي تَعِد به في الخدمة الحقيقية، وما إذا كانت تملأ 32K دون خسارة في الدقة، لا يمكن تأكيده إلا بقياسه بأنفسنا.</p>

<p>ومع ذلك، فإن فكرة “تثبيت المرجع وتطبيق نافذة منزلقة على التوليد” حركة نظيفة للتعامل مع سقف الذاكرة لمهام التسلسل إلى التسلسل الطويلة. وإذا صحّ الادعاء بأنها تتعمم إلى ما بعد OCR لتشمل ASR والترجمة، فإنها جديرة بالمتابعة من منظور تشغيل منصة استدلال متعددة المستأجرين.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li><a href="https://arxiv.org/abs/2606.23050">Unlimited OCR Works: Welcome the Era of One-shot Long-horizon Parsing (arXiv 2606.23050)</a></li>
  <li><a href="https://huggingface.co/papers/2606.23050">صفحة الورقة على Hugging Face</a></li>
  <li><a href="https://huggingface.co/baidu/Unlimited-OCR">baidu/Unlimited-OCR (نموذج وأوزان Hugging Face)</a></li>
  <li><a href="https://github.com/baidu/Unlimited-OCR">baidu/Unlimited-OCR (كود GitHub)</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="research" /><category term="unlimited-ocr" /><category term="document-parsing" /><category term="sliding-window-attention" /><category term="kv-cache" /><category term="long-context" /><category term="on-premise" /><summary type="html"><![CDATA[يستبدل نموذج Unlimited OCR من Baidu انتباه فك التشفير بآلية Reference Sliding Window Attention للحفاظ على ذاكرة KV ثابتة. نشرح كيف يحلل عشرات الصفحات في تمريرة أمامية واحدة وماذا يعني ذلك للاستدلال متعدد المستأجرين في ThakiCloud.]]></summary></entry><entry xml:lang="ar"><title type="html">كيف تمنح وكلاء الذكاء الاصطناعي ذاكرة حقيقية - 4 تقنيات في هندسة السياق</title><link href="https://thakicloud.github.io/ar/technique/ai-agent-memory-context-engineering/" rel="alternate" type="text/html" title="كيف تمنح وكلاء الذكاء الاصطناعي ذاكرة حقيقية - 4 تقنيات في هندسة السياق" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/technique/ai-agent-memory-context-engineering</id><content type="html" xml:base="https://thakicloud.github.io/ar/technique/ai-agent-memory-context-engineering/"><![CDATA[<p>كل من شغّل وكلاء نماذج اللغة الكبيرة لفترات طويلة يصطدم بالعقبة ذاتها: كلما امتد الحوار، بدأ الوكيل ينسى التزاماته السابقة ويتجاهل القواعد التي حُددت في البداية. الحل الشائع هو “نافذة سياق أكبر تحل المشكلة”، لكن هذا التشخيص خاطئ. المشكلة الحقيقية ليست في حجم النافذة، بل في كيفية إدارة الرموز داخلها - وهذا هو جوهر هندسة السياق. يستعرض هذا المقال أربع تقنيات مُثبتة تساعد الوكلاء طويلي الأمد على تجاوز حدود السياق، مع توضيح كيف دمجتها ThakiCloud في تشغيل وكلائها الفعلي.</p>

<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>هندسة السياق هي الخطوة التالية بعد هندسة التلقين. إذا ركزت هندسة التلقين على ما يُكتب، فإن هندسة السياق تُعنى بتحديد أي الرموز ينبغي ملء ميزانية الانتباه المحدودة للنموذج بها لحظة الاستدلال. يشمل ذلك كل شيء: تعليمات النظام، وتعريفات الأدوات، وبروتوكول MCP، والبيانات الخارجية، وسجل الرسائل بأكمله. يولّد الوكيل بيانات جديدة في كل تكرار للحلقة، وتلك المعلومات تحتاج إلى تنقية دورية.</p>

<p>لماذا نوفر الرموز؟ تماما كالإنسان، يفقد النموذج اللغوي الكبير تركيزه بعد نقطة معينة. ويُسمى التراجع في قدرة النموذج على الاسترجاع الدقيق مع زيادة عدد الرموز بـ”تلف السياق”، وهو يظهر في جميع النماذج بدرجات متفاوتة. السبب الجذري هو بنية المحول: كل رمز ينتبه إلى كل رمز آخر، فتكون العلاقات بين n رمزاً بمقدار n تربيع. كلما طال السياق، تمددت ميزانية الانتباه وخفّت. لهذا يجب التعامل مع السياق باعتباره موردا محدودا لا مستودعا لا نهائيا. الهدف هو إيجاد الحد الأدنى من الرموز عالية الإشارة الأكثر قدرة على إنتاج النتيجة المطلوبة.</p>

<h2 id="بنية-مشكلة-ذاكرة-الوكيل">بنية مشكلة ذاكرة الوكيل</h2>

<p>تتطلب المهام طويلة الأمد الحفاظ على التماسك والتوجه نحو الهدف عبر سلسلة من الإجراءات تتجاوز بكثير نافذة السياق - كترحيل قواعد الكود الضخمة أو جلسات البحث الممتدة لساعات. مجرد تكديس كل شيء في النافذة ينهار تحت وطأة تلف السياق. الحل هو نقل المعلومات خارج النافذة واسترجاعها فقط عند الحاجة. يوضح المخطط التالي هيكل هذا النهج.</p>

<pre><code class="language-mermaid">flowchart LR
    LOOP["Agent Loop"] --&gt; FULL{"Context limit near?"}
    FULL --&gt;|Yes| COMPACT["Compaction: summarize and restart in new window"]
    FULL --&gt;|No| NOTE["Structured notes: write key facts to file"]
    NOTE --&gt; STORE[("File-based memory (outside window)")]
    COMPACT --&gt; STORE
    LOOP --&gt; SUB["Sub-agent delegation"]
    SUB --&gt; DISTILL["Return 1,000-2,000 token summary only"]
    DISTILL --&gt; LOOP
    STORE --&gt;|Reload after reset| LOOP
</code></pre>

<p>هدف هذا الهيكل بسيط: عزل سياق العمل التفصيلي خارج النافذة، والإبقاء داخل نافذة الوكيل الرئيسي فقط على الرموز عالية الإشارة اللازمة لاتخاذ القرارات.</p>

<h2 id="التقنيات-الأربع">التقنيات الأربع</h2>

<h3 id="الضغط">الضغط</h3>

<p>الضغط هو تلخيص نافذة السياق حين تقترب من حدودها، ثم إعادة تشغيل نافذة جديدة بدءا من ذلك الملخص. هذا هو الرافعة الأولى لتحسين التماسك على المدى البعيد. المفتاح هو الملخص عالي الدقة: الضغط الكثيف لمحتوى النافذة يتيح للوكيل مواصلة العمل بأدنى قدر من تدهور الأداء. يطبّق Claude Code هذا النهج مثلا بتمرير سجل الرسائل إلى النموذج لتلخيص أهم التفاصيل وضغطها. إذا تم الضغط بصورة صحيحة، يواصل الوكيل عمله دون انقطاع يُذكر.</p>

<h3 id="تدوين-الملاحظات-المنظم">تدوين الملاحظات المنظم</h3>

<p>يعني تدوين الملاحظات المنظم أن يكتب الوكيل المعلومات الجوهرية في ملف خارج نافذة السياق أثناء العمل، ثم يعود لقراءتها لاحقا. حتى بعد إعادة ضبط السياق، يقرأ الوكيل ملاحظاته ويستأنف مهمة استغرقت ساعات من حيث توقفت. هذا التماسك العابر لعمليات إعادة الضبط يجعل الاستراتيجيات طويلة المدى ممكنة دون الحاجة إلى الاحتفاظ بكل شيء في النافذة في آن واحد. المبدأ مشابه لتدوين شخص ملاحظات خلال اجتماع، ثم استرجاع السياق منها في الاجتماع التالي.</p>

<h3 id="معمارية-الوكلاء-الفرعيين">معمارية الوكلاء الفرعيين</h3>

<p>الوكلاء الفرعيون هم مسار آخر للتحايل على حدود السياق. بدلا من أن يحمل وكيل واحد حالة المشروع بأكملها، يتولى وكلاء فرعيون متخصصون مهاما ضيقة بنوافذ سياق نظيفة. يتولى الوكيل الرئيسي التنسيق على مستوى عالٍ، بينما ينفذ الوكلاء الفرعيون العمل التقني العميق أو الاستكشاف. يمكن لكل وكيل فرعي استخدام عشرات الآلاف من الرموز في استكشاف واسع النطاق، لكنه لا يعيد إلى الوكيل الرئيسي إلا ملخصا منقحا يتراوح بين 1,000 و 2,000 رمز. يبقى سياق الاستكشاف التفصيلي معزولا داخل الوكيل الفرعي، وتظل نافذة الوكيل الرئيسي نظيفة ومركزة على اتخاذ القرارات.</p>

<h3 id="أدوات-الذاكرة-المستندة-إلى-الملفات">أدوات الذاكرة المستندة إلى الملفات</h3>

<p>بالتزامن مع إطلاق Sonnet 4.5، أتاحت Anthropic أدوات ذاكرة مستندة إلى الملفات بوصفها نسخة تجريبية عامة على منصة Claude للمطورين. تستخدم هذه الأدوات نظام الملفات لتخزين المعلومات خارج نافذة السياق واسترجاعها بسهولة لاحقا. بفضلها، يستطيع الوكيل بناء قاعدة معرفية بمرور الوقت، والحفاظ على حالة المشروع عبر جلسات متعددة، والرجوع إلى العمل السابق دون الاحتفاظ بكل شيء في النافذة. إن كانت التقنيات الثلاث السابقة مبادئ، فهذه الأداة هي تنفيذ تلك المبادئ في واجهة موحدة.</p>

<h2 id="المقارنة-مع-الأساليب-الأبسط">المقارنة مع الأساليب الأبسط</h2>

<p>لإدراك قيمة هذه التقنيات، من المفيد مقارنتها بالبدائل الشائعة. البديل الأول هو حشو كل شيء في نافذة سياق كبيرة: بسيط، لكنه ينهار تحت تلف السياق، وإعادة قراءة السجل الضخم كاملا في كل دورة يجعل التكاليف تنمو بصورة خطية. البديل الثاني هو RAG المبني على البحث الاتجاهي: قوي في جلب المعرفة الخارجية، لكنه غير ملائم لمعالجة الحالة التي ينشئها الوكيل ذاته أثناء العمل - القرارات الوسيطة، والتقدم المحرز، والملاحظات الذاتية. RAG مُحسَّن للقراءة لا للكتابة والتحديث.</p>

<p>تسد الذاكرة المستندة إلى الملفات والملاحظات المنظمة هذه الثغرة، لأنها توفر مخزنا للحالة يستطيع الوكيل الكتابة فيه والتحديث منه والقراءة منه بعد إعادة الضبط. مبدأ مكمل هو الاسترجاع في الوقت المناسب: بدلا من تحميل كل المعلومات في النافذة مسبقا، يحتفظ الوكيل بمعرّفات خفيفة فقط - مسارات الملفات، وإدخالات الفهرس - ولا يقرأ المحتوى الكامل إلا عند الحاجة الفعلية. الضغط والملاحظات والوكلاء الفرعيون والاسترجاع في الوقت المناسب لا تتعارض بل تتعاضد وتتقوى معا.</p>

<h2 id="كيف-تطبّق-thakicloud-هذه-التقنيات">كيف تطبّق ThakiCloud هذه التقنيات</h2>

<p>هذه التقنيات الأربع ليست نظرية مجردة؛ فهي تشكل العمود الفقري للعمليات اليومية لوكلاء ThakiCloud. تنفذ منصتنا الداخلية معمارية ذاكرة مستندة إلى الملفات بثلاث طبقات: فهرس <code class="language-plaintext highlighter-rouge">MEMORY.md</code> يُحمَّل في كل جلسة ويحتوي على مؤشرات من سطر واحد، وتفاصيل الوقائع في <code class="language-plaintext highlighter-rouge">memory/topics/</code>، وسجلات العمل الطويلة في <code class="language-plaintext highlighter-rouge">memory/sessions/</code>. تحميل الفهرس وحده في السياق وسحب التفاصيل عند الطلب هو بالضبط دمج تدوين الملاحظات المنظم والذاكرة المستندة إلى الملفات والاسترجاع في الوقت المناسب.</p>

<p>يبدو الفهرس تقريبا كمجموعة مؤشرات أحادية السطر:</p>

<div class="language-markdown highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">-</span> <span class="p">[</span><span class="nv">Model Routing</span><span class="p">](</span><span class="sx">feedback_model_routing.md</span><span class="p">)</span> - sub-agent model stacking: low-cost for exploration, mid-tier for implementation, high-cost for architecture
<span class="p">-</span> <span class="p">[</span><span class="nv">Hermes Ecosystem</span><span class="p">](</span><span class="sx">project_hermes_ecosystem.md</span><span class="p">)</span> - installation record for the standalone agent framework
</code></pre></div></div>

<p>يحتوي كل إدخال على حقيقة واحدة في ملف واحد، مع روابط إلى ملفات ذاكرة أخرى داخل المحتوى. تقرأ الجلسة هذا الفهرس فقط، وتفتح محتوى أي إدخال ذي صلة في اللحظة التي يصبح فيها ضروريا. عند ظهور حقائق جديدة، تُحدَّث الملفات الموجودة. تُحذف الذكريات التي يتبين خطؤها. هذه الصيانة الدورية تمنع الملاحظات الفاسدة من الانتشار.</p>

<p>التفويض إلى وكلاء فرعيين يسير بالمنهج ذاته. المسح الشامل لقواعد الكود أو عمليات البحث الضخمة لا تُنفَّذ في السياق الرئيسي؛ بل تُفوَّض إلى وكيل فرعي بنموذج منخفض التكلفة يعيد ملخصا للاستنتاجات فحسب. عدم إغراق السياق الرئيسي بالمخرجات الخام يتطابق تماما مع ما أوصت به Anthropic: “يعيد الوكيل الفرعي ملخصا من 1,000 إلى 2,000 رمز فقط.” هذا يمنع تكاليف إعادة قراءة ذاكرة التخزين المؤقت من النمو الخطي.</p>

<p>الضغط متأصل أيضا في الانضباط التشغيلي. نحافظ على استخدام السياق أقل من 40% ونوصي بتشغيل الضغط اليدوي قبل بلوغ 60%. الضغط بتركيز مقصود قبل تفعيل الضغط التلقائي يُنتج دقة أعلى. في بيئة متعددة المستأجرين، هذه ليست مسألة جودة فحسب بل مسألة تكلفة أيضا. إعادة قراءة سياق ضخم في كل دورة تجعل رموز ذاكرة التخزين المؤقت تشكل جزءا كبيرا من إجمالي التكلفة. التعامل مع السياق كمورد محدود هو الطريق إلى خفض تكلفة الاستدلال لكل وحدة.</p>

<p>من منظور المنصة، تُعد ذاكرة الوكيل كفاءة أساسية تحتاجها ThakiCloud لتشغيل وكلاء طويلي الأمد لعملاء متعددين بشكل موثوق على بنية تحتية مشتركة. الوكيل الذي يحافظ على حالته عبر جلسات مع إبقاء سياقه خفيفا هو في حد ذاته منتج قابل للنشر. القدرة على عزل طبقة الذاكرة هذه لكل مستأجر على منصة Kubernetes متعددة المستأجرين تمثل ميزة تنافسية محورية في ما نقدمه.</p>

<h2 id="القيود-والاعتراضات">القيود والاعتراضات</h2>

<p>لكل تقنية تكاليفها. الضغط يفقد معلومات في مرحلة التلخيص؛ اختيار ما يُحذف بصورة خاطئة قد يُعطل العمل اللاحق. التلخيص عالي الدقة مشكلة صعبة في حد ذاتها، وتعتمد النتائج اعتمادا كبيرا على جودة تلقين التلخيص.</p>

<p>الملاحظات المنظمة والذاكرة المستندة إلى الملفات تنشر الفساد حين تكون الملاحظات خاطئة. حقيقة مكتوبة بصورة غلط في ملف تُعامَل كحقيقة من قِبل كل جلسة لاحقة. لهذا يلزم وجود بوابة لما يُكتب في الذاكرة، مع صيانة دورية لحذف الوقائع القديمة.</p>

<p>تصبح الوكلاء الفرعيون عبئا حين تُرسم حدود التفويض بصورة خاطئة. تفويض تعديلات الملف الواحد أو الاستعلامات البسيطة إلى وكيل فرعي يضيف تكاليف إرسال بدلا من توفير السياق. التفويض أداة لنظافة السياق الرئيسي، لا الخيار الافتراضي لكل مهمة.</p>

<p>أخيرا، يجب الاعتراف بصدق بأن تحسن النماذج يقلل الحاجة إلى هذه الوصفات. النماذج الأقوى أصلا تُظهر قدرا أكبر من الاستقلالية مع هندسة أقل تقييدا. ومع ذلك، سيبقى مبدأ التعامل مع السياق كمورد محدود حتى مع تطور القدرات. قد تتغير التقنيات، لكن توجه الحفاظ على ميزانية الانتباه يظل صالحا.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li>Anthropic، “الهندسة الفعّالة للسياق في وكلاء الذكاء الاصطناعي” (2025-09-29): <a href="https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents">https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents</a></li>
  <li>Anthropic، كتيب إدارة الذاكرة والسياق: <a href="https://platform.claude.com/cookbook/tool-use-memory-cookbook">https://platform.claude.com/cookbook/tool-use-memory-cookbook</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="technique" /><category term="ai-agent" /><category term="context-engineering" /><category term="memory" /><category term="llm" /><category term="agent-architecture" /><summary type="html"><![CDATA[النافذة السياقية الأوسع لا تعني بالضرورة أداءً أفضل. مع ازدياد عدد الرموز، تتراجع دقة استرجاع النموذج في ظاهرة تُعرف بتلف السياق. يستعرض هذا المقال أربع تقنيات أوصى بها Anthropic - الضغط، وتدوين الملاحظات المنظم، والوكلاء الفرعيون، وأدوات الذاكرة المستندة إلى الملفات - مع توضيح كيف تطبقها ThakiCloud في تشغيل الوكلاء الفعلي.]]></summary></entry><entry xml:lang="ar"><title type="html">وكلاء دائمون داخل Slack: قراءة Claude Tag من منظور المنصة</title><link href="https://thakicloud.github.io/ar/technique/claude-tag-slack-agentic-collaboration/" rel="alternate" type="text/html" title="وكلاء دائمون داخل Slack: قراءة Claude Tag من منظور المنصة" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/technique/claude-tag-slack-agentic-collaboration</id><content type="html" xml:base="https://thakicloud.github.io/ar/technique/claude-tag-slack-agentic-collaboration/"><![CDATA[<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>في الثالث والعشرين من يونيو 2026، أعلنت Anthropic عن Claude Tag. حين يكتب المستخدم طلباً موجهاً إلى <code class="language-plaintext highlighter-rouge">@Claude</code> داخل قناة Slack ويكلّفه بمهمة، يقوم الوكيل بتقسيم الطلب إلى خطوات، ثم ينفّذ كل خطوة مستعيناً بالأدوات والبيانات المتصلة، ويعود بالنتائج ضمن نفس الخيط. المنتج متاح حالياً في مرحلة تجريبية لعملاء Claude Enterprise وClaude Team عبر Slack، مع الإعلان عن إطلاق أوسع لاحقاً.</p>

<p>قد يبدو الأمر للوهلة الأولى مجرد بوت Slack آخر، لكن قراءة الإعلان بتمعّن تكشف فلسفة تصميم مختلفة عن برامج الدردشة التقليدية. بدلاً من تبادل محادثة يُنجز في خطوة واحدة ثم ينتهي، يُعدّ Claude Tag وكيلاً دائماً يقطن القناة، ويتشارك السياق مع الجميع، ويعمل بصورة غير متزامنة، ويتابع الإجراءات اللاحقة من تلقاء نفسه وفق الإعدادات المحددة. وقد أوضحت Anthropic أن فرقها كانت تستخدم نسخة داخلية من هذا الوكيل طوال عام كامل، وأن 65% من كود فريق المنتجات كُتب باستخدامه، بما يشمل معظم الكود الذي بنى Claude Tag نفسه [تقدير: وفق تصريح الشركة].</p>

<p>تُشغّل ThakiCloud منصة SaaS للذكاء الاصطناعي وتعلم الآلة مبنية على Kubernetes، وتُدير داخلياً فرق وكلاء بهيكلية المحور والأذرع، مع إرسال نتائج العمل إلى قنوات التقارير على Slack. لذا فإن فكرة وكيل يقيم داخل أداة التعاون ليست مجردة بالنسبة لنا، بل هي نمط نُشغّله فعلاً. يتناول هذا المقال ما الجديد حقاً في Claude Tag، وكيفية قراءة رقم الـ65%، وما يعنيه هذا النمط لمنصات الذكاء الاصطناعي متعددة المستأجرين المُشغَّلة محلياً.</p>

<h2 id="ما-هو-claude-tag">ما هو Claude Tag</h2>

<p>باختصار، Claude Tag وكيل تنفيذ مهام يعيش داخل Slack. يكتب المستخدم طلباً بلغة طبيعية موجهاً لـ<code class="language-plaintext highlighter-rouge">@Claude</code>، فيقسّم الوكيل العمل إلى خطوات، وينجز كلاً منها باستخدام الأدوات والبيانات المتاحة، ثم يسلّم النتائج داخل الخيط. إنه ليس أداة مساعدة تعمل على الهامش كالاقتراح التلقائي، بل يتولى مهمة كاملة ويقودها حتى نهايتها.</p>

<p>اختيار Slack ساحةً للعمل ليس قراراً عشوائياً. Slack هو المكان الذي يتركّز فيه سياق العمل في كثير من المؤسسات: نقاشات الهندسة، واستفسارات مقاييس المنتج، وتذاكر الدعم، ومحادثات التصحيح البرمجي، كلها مُنظَّمة في قنوات. توضح Anthropic أن فرقها استخدمت النسخة الداخلية يومياً لهذه الأغراض بالضبط. بدلاً من تشغيل الوكيل كأداة منفصلة، أقاموه في المكان الذي يسري فيه السياق أصلاً.</p>

<h2 id="ما-الجديد-الديمومة-والتعددية-والمبادرة">ما الجديد: الديمومة والتعددية والمبادرة</h2>

<p>ثمة ثلاث خصائص يُركّز عليها الإعلان وتُشكّل جوهر المنتج.</p>

<p>الأولى هي الديمومة. يبقى الوكيل في القناة؛ لا يُجيب ثم يختفي، بل يعمل بصورة غير متزامنة. يستطيع المستخدم إسناد مهمة والانصراف، ثم العودة لاحقاً ليجد النتائج في انتظاره. يمكن إتمام مهام مطوّلة دون أن يضطر الإنسان إلى الانتظار أمام الشاشة.</p>

<p>الثانية هي التعددية. وكيل واحد يتفاعل مع كل أعضاء القناة. يمكن للفريق متابعة ما يفعله الوكيل معاً، ويستطيع أحدهم استكمال محادثة بدأها زميله. على خلاف الدردشة التقليدية بين مستخدم وبوت على انفراد، يصبح سياق العمل مرئياً للفريق بأسره، مما يُغيّر وحدة التعاون.</p>

<p>الثالثة هي المبادرة. حين يُفعَّل الوضع المحيطي، يُبرز الوكيل المعلومات ذات الصلة من تلقاء نفسه، ويتابع الخيوط غير المحسومة، ويُخطر المستخدمين بالمستجدات. ينتقل بذلك من أداة سلبية تتحرك بالاستدعاء فحسب، إلى زميل فاعل يلاحظ السياق ويتدخل.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[ الدردشة التقليدية ]                    [ Claude Tag ]
  مستخدم واحد -- محادثة خاصة 1:1          القناة (مجموعة) -- سياق مشترك
    |  يرد عند الاستدعاء ثم يختفي           |  مقيم، يعمل بشكل غير متزامن
    |  سلبي: يتحرك بالطلب فقط              +-- متعدد اللاعبين: أي عضو يكمل المهمة
                                           +-- مبادر: يتابع الخيوط غير المحسومة
</code></pre></div></div>

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

<h2 id="كيف-نقرأ-رقم-الـ65">كيف نقرأ رقم الـ65%</h2>

<p>أبرز ما في الإعلان هو أن 65% من كود فريق المنتجات كُتب بالنسخة الداخلية. الرقم لافت، لكن ينبغي الفصل بين الوقائع والتفسير.</p>

<p>الوقائع هي التالية: هذا رقم تُفصح عنه الشركة عن فريقها الداخلي ذاته، ومنهجية القياس لم تُعلَن، أي ما الذي يُحسب “كتابةً”، وكيف تُعالَج المراجعات والتعديلات البشرية. لذا لا يمكن تعميم هذا الـ65% على صعيد الصناعة كلها أو افتراض أنه سيتكرر بالطريقة ذاتها في مؤسسات أخرى [تقدير: وفق تصريح الشركة].</p>

<p>ومع ذلك، الاتجاه الذي يشير إليه الرقم واضح: في البيئة الداخلية لشركة تطوير نماذج حدودية، بلغت الوكلاء مرحلة تتولى فيها الجانب الأكبر من إنتاج الكود. الأهم من النسبة ذاتها هو ما الذي يجب أن يكون موجوداً حتى تصبح هذه النسبة ممكنة. لكي يكتب وكيل معظم الكود، لا بد من وجود بوابات تتحقق من المخرجات، ونقاط تدخل بشري تُحدد الاتجاه، وآليات أمان تتيح التراجع عن التغييرات الخاطئة. الـ65% ليست نتيجة قدرة النموذج وحده، بل نتيجة التصميم التشغيلي المحيط به. هذه في الواقع النقطة الأهم.</p>

<h2 id="التطبيق-على-منصة-thakicloud-k8s-للذكاء-الاصطناعي-وتعلم-الآلة">التطبيق على منصة ThakiCloud K8s للذكاء الاصطناعي وتعلم الآلة</h2>

<p>Claude Tag منتج SaaS سحابي مرتبط بـSlack للمؤسسات. هنا بالضبط يجد مشغّلو المنصات متعددة المستأجرين المُشغَّلة محلياً مدخلهم. كثير من المؤسسات، ولا سيما العاملة في القطاع العام والمالي والدفاعي ذات المتطلبات الأمنية الصارمة، لا تستطيع إرسال سياق أعمالها وكودها وبياناتها إلى SaaS خارجي. ما يحتاجه هؤلاء هو القدرة على تشغيل النمط ذاته، لكن داخل بنيتهم التحتية الخاصة.</p>

<p>تُشغّل ThakiCloud بنية تعتمد على Kueue لجدولة أحمال عمل GPU فوق Kubernetes، مع عزل خدمة تقديم النماذج لكل مستأجر على حدة. عند تصميم وكيل دائم على هذا الأساس، تبرز ثلاثة تحديات محورية. الأول هو العزل: الوكيل المقيم في القناة والذي يصل إلى الأدوات والبيانات يجب ألا يتجاوز حدود المستأجر في أي حال. في بيئة متعددة المستأجرين، وصول وكيل عميل إلى سياق عميل آخر حادثة أمنية فورية. الثاني هو الصلاحيات: كلما كان الوكيل أكثر مبادرة، زادت الحاجة إلى فرض ما يحق له قراءته وكتابته عبر الكود لا بالسياسات وحدها. الثالث هو التكلفة: وكيل مقيم يتابع الإجراءات اللاحقة بصورة استباقية قد يستهلك رموزاً حتى في أوقات الخمول، لذا يتطلب التصميم التحكم في وتيرة الاستطلاع والنشاط المحيطي.</p>

<p>في عملياتنا الداخلية نتعامل بالفعل مع أنماط مشابهة. حين نُوجّه نتائج وكلاء المهام إلى قنوات التقارير على Slack، لا نعتمد على بوابة موصّل خارجية وحيدة، بل نحتفظ بمسار احتياطي يعتمد على نصوص برمجية ذاتية تكتب مباشرة في القناة باستخدام رموز مخزّنة في مستودعنا. الهدف إبقاء التقارير قائمة حتى حين تتعطل البوابة. كلما غدا الوكيل الدائم جزءاً من سير العمل، أصبح القضاء على نقاط الفشل الفردية وتصميم الأداء المتدهور بأناقة ضرورة لا ميزة إضافية.</p>

<p>من منظور أعمال المنصة، هذه فرصة واضحة. ما يُظهره Claude Tag هو أن المستقبل الذي تقيم فيه الوكلاء داخل أدوات التعاون قد بدأ فعلاً. تقديم التجربة ذاتها للعملاء الذين لا يستطيعون الاعتماد على SaaS، أي من يحتاجون إلى نشر محلي وإدارة ذاتية وسيادة على البيانات، هو المكان الذي نقف فيه. ما يُميّزنا ليس عروض توضيحية مبهرة، بل تصميم تشغيلي يُفرض فيه العزل والصلاحيات والتكلفة عبر الكود.</p>

<h2 id="القيود-والاعتراضات">القيود والاعتراضات</h2>

<p>أول ما يمكن إشارة إليه هو الطابع التجريبي للمنتج حالياً. Claude Tag بيتا مقتصرة على فئات بعينها من العملاء عبر Slack، ولم يُختبر على نطاق واسع مدى موثوقية السلوك المحيطي في بيئات العمل الفعلية. ثمة دائماً مسافة بين القدرات المُعلنة والاستقرار في الميدان.</p>

<p>الاعتراض الثاني هو أن الوكلاء الدائمين والمبادرين لا يُفيدون دائماً. وكيل حاضر باستمرار في القناة يمكنه توليد ضوضاء، والتدخلات الاستباقية سيئة الضبط تسرق انتباه الإنسان. أدوات التعاون هي أماكن يتركز فيها تركيز البشر؛ الوكيل الذي يُشتّت ذلك التركيز يُضر بالإنتاجية بدلاً من دعمها. المبادرة خيار يُفعَّل بعناية، لا إعداد افتراضي.</p>

<p>الثالث هو التبعية. حين يتشابك سياق العمل وسير العمليات بعمق مع وكيل تعاون تابع لمورّد بعينه، يُصبح الانتقال إلى بيئة مختلفة لاحقاً عسيراً. هذا بالمفارقة يرفع قيمة النهج المحلي القائم على معايير مفتوحة. إن استطاعت مؤسسة إعادة إنتاج النمط ذاته على بنيتها التحتية دون الارتباط بـSaaS بعينه، فإنها تكسب القدرة وتتجنب التبعية في آن.</p>

<p>Claude Tag النموذج الأوضح حتى الآن على وكلاء ينتقلون من المحادثة اللحظية إلى مقعد الزميل الدائم. لكن تحقيق تلك القيمة بأمان داخل المؤسسات الفعلية يستلزم أكثر من قدرة النموذج: يستلزم تصميماً تشغيلياً يضمن العزل والصلاحيات والتكلفة والقدرة على التراجع. تقديم ذلك التصميم فوق بنية تحتية ذاتية هو ما تختص به منصات الذكاء الاصطناعي متعددة المستأجرين المُشغَّلة محلياً.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li><a href="https://x.com/ClaudeDevs/status/2069468900216234010">تغريدة الإعلان الرسمي من ClaudeDevs</a></li>
  <li><a href="https://techcrunch.com/2026/06/23/anthropics-claude-tag-is-learning-your-company-one-slack-message-at-a-time/">TechCrunch, “Anthropic’s Claude Tag is learning your company, one Slack message at a time”</a></li>
  <li><a href="https://the-decoder.com/claude-tag-embeds-anthropics-ai-in-slack-already-writes-65-percent-of-internal-code-company-says/">The Decoder, “Claude Tag embeds Anthropic’s AI in Slack, already writes 65 percent of internal code”</a></li>
  <li><a href="https://x.com/hjguyhan/status/2069529226412445796">تغريدة المصدر الأصلي (إعادة تغريد)</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="technique" /><category term="agentic" /><category term="claude-tag" /><category term="slack" /><category term="llmops" /><category term="multi-tenant" /><category term="platform-engineering" /><summary type="html"><![CDATA[أطلقت Anthropic ميزة Claude Tag التي تتيح لأعضاء الفريق استدعاء @Claude داخل قناة Slack وإسناد المهام إليه. الجوهر هنا أن هذا ليس بوتاً للمحادثة اللحظية، بل وكيل دائم ومتعدد اللاعبين يقيم في القناة، ويشارك السياق مع الفريق بأكمله، ويتابع الإجراءات اللاحقة من تلقاء نفسه. نستعرض هنا كيفية تفسير رقم الـ 65% الذي أعلنته الشركة عن كود فريق منتجاتها، وما الذي يعنيه هذا النمط لمنصات الذكاء الاصطناعي متعددة المستأجرين المُشغَّلة محلياً.]]></summary></entry><entry xml:lang="ar"><title type="html">صمِّم الحلقة قبل أن تُشغِّلها: هندسة حلقات الوكلاء دون إهدار الرموز</title><link href="https://thakicloud.github.io/ar/technique/loop-engineering-design-before-run/" rel="alternate" type="text/html" title="صمِّم الحلقة قبل أن تُشغِّلها: هندسة حلقات الوكلاء دون إهدار الرموز" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/technique/loop-engineering-design-before-run</id><content type="html" xml:base="https://thakicloud.github.io/ar/technique/loop-engineering-design-before-run/"><![CDATA[<h2 id="نظرة-عامة">نظرة عامة</h2>

<p>تنتشر في مجتمعات المطورين نصيحة تقول: “صمِّم الحلقة قبل أن تُشغِّلها.” الفكرة في جوهرها بسيطة: الحلقة سيئة التصميم تحرق الرموز وتُسلِّم نتائج لا نفع منها. كتابة توجيه جيد لمرة واحدة شيء، وتصميم نظام يُغذِّي ذلك التوجيه لوكيل بصورة متكررة شيء مختلف تماماً.</p>

<p>خلاصة هذا التحول جملة واحدة: كان الإنسان يُقدِّم التوجيه للنموذج مباشرة، أما الآن فيصمِّم الإنسان الحلقة وتتولى الحلقة تقديم التوجيهات للنموذج. تبني نظاماً صغيراً يبحث عن العمل ويوزِّعه على الوكيل ويتحقق من النتائج ويسجِّل ما أُنجز ويحدد الخطوة التالية، ثم يترك هذا النظام مهمة إيقاظ الوكيل بدلاً منك.</p>

<p>تدير ThakiCloud عشرات الحلقات غير المراقبة ومهام الوكلاء المتكررة في منصة SaaS للذكاء الاصطناعي والتعلم الآلي على Kubernetes. في هذه العملية واجهنا حادثة بلغت تكلفتها 700 دولار في يوم واحد، وحوَّلنا كل ما تعلَّمناه منها مباشرة إلى حواجز أمان تعمل في بيئة الإنتاج اليوم. هذا الموضوع ليس توجهاً نظرياً بالنسبة لنا؛ إنه تحدٍّ تشغيلي نواجهه كل يوم. يستعرض هذا المقال ما يجب تصميمه قبل تشغيل الحلقة وكيف طبَّقنا هذه الدروس على منصة حقيقية.</p>

<h2 id="ما-هي-هندسة-الحلقات">ما هي هندسة الحلقات</h2>

<p>هندسة الحلقات تعني بناء النظام الذي يُوجِّه الوكلاء بدلاً من توجيههم بنفسك في كل مرة. عندما يبقى الإنسان داخل الحلقة، عليه إدخال التعليمات التالية في كل مرة ينهي فيها الوكيل خطوة. هندسة الحلقات تضع أتمتة صغيرة في هذا الموضع: النظام يبحث عن العمل ويُسنده إلى الوكيل المناسب ويتحقق من النتيجة ويسجِّل التقدم ويحدد الإجراء التالي.</p>

<p>النقطة المحورية هنا أن الإنسان يحدد مستوى الاستقلالية بوعي ومقصد. الاستقلالية الكاملة تُفضي إلى خسارة الرموز والسيطرة معاً، والتأكيد البشري عند كل خطوة يُلغي قيمة الأتمتة. الحلقة الجيدة توزِّع نقاط الاستقلالية والتحقق توزيعاً صريحاً بين هذين الطرفين: تحدد في مرحلة التصميم إلى أي حد يعمل الوكيل باستقلالية، وأين يتدخل إنسان أو مُتحقِّق منفصل.</p>

<p>افتراض آخر ضروري: يجب أن تعرف الحلقة كيف تتقارب أو تتوقف. حلقة بلا شرط انتهاء ليست أتمتة؛ إنها تسرُّب. نصف تصميم الحلقة هو تعريف “متى تتوقف.”</p>

<h2 id="أربعة-أشياء-تُصمَّم-قبل-التشغيل">أربعة أشياء تُصمَّم قبل التشغيل</h2>

<p>البدء بحلقة بلا تصميم هو النمط الأكثر شيوعاً للفشل. تحديد الأمور الأربعة التالية بصراحة قبل التشغيل يمنع معظم تسرُّب الرموز وانهيار الجودة.</p>

<p><strong>أولاً:</strong> حدِّد الهدف كمُخرَج قابل للتحقق. هدف مبهم مثل “حسِّن هذا الكود” لا يمنح الحلقة معياراً للتقارب. ضع شرط إنهاء قابلاً للتحقق مثل “حتى ينجح أمر الاختبار هذا.” شرط الانتهاء هو نقطة نهاية الحلقة.</p>

<p><strong>ثانياً:</strong> اكتب ملف الذاكرة قبل تشغيل الحلقة. احتفظ بملف markdown واحد أو لوحة تسجِّل ما أُنجز وما هو التالي وما جُرِّب وفشل. هذا الملف هو العمود الفقري للحلقة. إذا قرأ الوكيل هذا الملف وحدَّثه في كل تكرار، لن تضيع الحالة حتى مع امتداد السياق.</p>

<p><strong>ثالثاً:</strong> افصل بين الوكيل المُنتِج والوكيل المُتحقِّق. لا تدع الوكيل الذي أنجز العمل يحكم بنفسه أن الأمر تم. ضع بوابة منفصلة ذات شرط قابل للتحقق، أو دع وكيلاً ثانياً بتعليماته الخاصة يراجع النتيجة. الحلقة بلا مرحلة تحقق تراكم الهلوسات.</p>

<p><strong>رابعاً:</strong> ضع حدوداً قصوى للحلقة بعدد أقصى من التكرارات وميزانية للرموز ومرحلة إغلاق. ثم شغِّلها مرة واحدة حتى النهاية واقرأ كل سطر من المُخرَجات. لا يمكنك معرفة هل تسير الحلقة كما قصدتَ إلا بقراءتها كاملة مرة واحدة. تخطِّي هذه المراجعة يسمح لحلقة سيئة التصميم بأن تحرق الرموز بهدوء لأيام.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>[ 1. تعريف الهدف ]  شرط انتهاء قابل للتحقق (مثال: اجتياز الاختبارات)
        |
        v
[ 2. ملف الذاكرة ]  العمود الفقري: منجَز / تالٍ / جُرِّب وفشل
        |
        v
[ 3. تشغيل الحلقة ] --- إيجاد عمل -&gt; إرسال الوكيل -&gt; نتيجة ---+
        ^                                                        |
        |                                                        v
[ 4. فصل المُتحقِّق ]  وكيل إنتاج ≠ وكيل حكم -------&gt; [ اجتياز البوابة؟ ]
        |                                                        |
        |  فشل -&gt; التكرار التالي                                 | نجاح
        +--------------------------------------------------------+
        |
        v
[ 5. الحد الأقصى ]  أقصى تكرار · ميزانية الرموز · الإغلاق -&gt; توقف
</code></pre></div></div>

<p>الخليتان الأكثر غياباً من هذا المخطط هما 4 (فصل المُتحقِّق) و5 (الحد الأقصى). بدونهما إما تدور الحلقة إلى ما لا نهاية، أو تجمع نتائج مقنعة لكن خاطئة وتُسلِّمها لك.</p>

<h2 id="تكلفتان-الرموز-والانتباه">تكلفتان: الرموز والانتباه</h2>

<p>تصل فاتورة الحلقة بعملتين: الرموز وانتباه الإنسان. تشغيل واحد غير مراقب قد يحرق ملايين الرموز، والحالة الوحيدة التي يُبرِّر فيها ذلك هي حين تشتري تلك الرموز شيئاً أكثر قيمة من تكلفتها.</p>

<p>الإدراك الجوهري هنا أن تشغيل الاستطلاع أو المراقبة على نموذج غالي هو إهدار شبه مؤكد. مهام مثل أخذ لقطة سعر أو مقارنة حالة أو إجراء فحص صحة لا تستدعي تقريباً أي حكم. دفع سعر النموذج الأعلى في كل نبضة لنتيجة مقارنة من سطر واحد مسار سريع نحو تضخم التكاليف مع مردود لا يُذكر.</p>

<p>لذا فإن أول سؤال يجب طرحه عند تصميم الحلقة هو: “هل يحتاج هذا فعلاً إلى حكم النموذج في كل نبضة؟” إذا كانت الإجابة لا، شغِّل تلك الحلقة بسكريبت ومجدوِّل بلا نموذج، واستدعِ النموذج فقط حين يُحفِّز ذلك إنسان أو حدث. إذا كان النموذج ضرورياً حقاً في كل تكرار، استخدم مستوى نموذج أدنى واحفظ الحالة في ملف واجعل كل إيقاظ يبدأ بأقل قدر من السياق.</p>

<h2 id="ما-تعلَّمته-thakicloud-من-حادثة-الـ-700-دولار">ما تعلَّمته ThakiCloud من حادثة الـ 700 دولار</h2>

<p>لم تصلنا هذه المبادئ كمنهج دراسي؛ وصلت كفاتورة. في يوم واحد عملت تسع جلسات كلها على النموذج الأعلى تكلفة، وجلسة مراقبة واحدة منها وحدها استمرت أكثر من تسع ساعات بأكثر من 1100 تكرار وابتلعت نصف إجمالي التكلفة. تحليل الأرقام كشف أن سياقاً ضخماً يُعاد قراءته في كل تكرار كان يلتهم جزءاً كبيراً من الإجمالي عبر تكاليف قراءة الكاش. السبب لم يكن فشل الكاش؛ كان حاصل ضرب سياق ضخم وعدد تكرارات مرتفع وسعر وحدة باهظ.</p>

<p>حوَّلنا ما تعلمناه مباشرة إلى حواجز أمان. أولاً: أخرجنا المراقبة المتكررة من الحلقة الساخنة للنموذج ونقلناها إلى مجدوِّل (cron, launchd). مراقبو الأسعار ومقارنات الحالة يعملون الآن كسكريبتات بلا نموذج، ولا يُرسلون إشعاراً لقناة التقارير إلا عند اكتشاف شيء غير معتاد. تكلفة النموذج لهذه الأعمال أصبحت صفراً.</p>

<p>ثانياً: الحلقات التي تستدعي النموذج فعلاً تُبقَى قصيرة وبلا حالة مخزَّنة. الحالة في ملف، وكل إيقاظ يبدأ بأدنى سياق، ويُعاد ضبط السياق قبل أن تتراكم التكرارات. السبب أنه كلما تضخَّم سياق الجلسة زادت تكلفة قراءة الكاش في كل تكرار بصورة خطية.</p>

<p>ثالثاً: الجلسة الرئيسية المسؤولة عن التنسيق تعمل على نموذج متوسط المستوى، والمراحل التي تستدعي حقاً استدلالاً معقداً تُعزَل إلى وكيل فرعي من النموذج الأعلى. مشكلة يوم الحادثة كانت أن الجلسة الرئيسية ذاتها كانت النموذج الغالي لا الوكلاء الفرعية. “العمال رخيصاً والبوابات بتكلفة أعلى” هو المبدأ الذي نشأ من هذه التجربة.</p>

<h2 id="اختيار-الأداة-فرِّق-بين-الهدف-والحلقة-والجدول">اختيار الأداة: فرِّق بين الهدف والحلقة والجدول</h2>

<p>أكثر ما نؤكد عليه عند تصميم الحلقات هو أنه حين يأتي طلب “كرِّر / آلِّم / استمر”، ابدأ باختيار الأداة المناسبة. الثلاثة آليات مختلفة.</p>

<p>العمل الذي يسعى باستقلالية نحو هدف حتى تحقُّق شرط الإنجاز وينتهي بحالة “تم” يذهب إلى وضع الهدف، ويعمل بصورة تقاربية مع بوابة أمر تحقق وميزانية وملف حالة. التطوير المتكرر للكود حتى اجتياز الاختبارات يُشغَّل كحلقة تطوير مع أمر الاختبار كبوابة انتهاء. العمل الذي يستدعي استطلاع حالة خارجية دورياً أثناء الجلسة يُشغَّل كحلقة بفاصل زمني مع مراعاة عمر الكاش في تحديد الفاصل. العمل الذي يتكرر بلا إشراف في أوقات محددة يُشغَّل بمجدوِّل، وهذا النمط الرئيسي في بيئتنا، وبما أن النموذج لا يُستدعى في كل نبضة تتقارب التكلفة من الصفر.</p>

<p>تجاهل هذه الفروق يُفضي إلى حوادث. تراكم مراقبة 24 ساعة في حلقة بفاصل زمني يُفجِّر التكاليف. وضع التكرار في أوقات محددة ضمن وضع الهدف يتركه بلا معيار تقارب فيتخبَّط. لذا قبل البدء نطلب إجابة لـ: “هل هذا هدف أم حلقة أم جدول؟”</p>

<h2 id="التطبيق-على-منصة-thakicloud-للذكاء-الاصطناعي-والتعلم-الآلي-على-k8s">التطبيق على منصة ThakiCloud للذكاء الاصطناعي والتعلم الآلي على K8s</h2>

<p>هندسة الحلقات تتجاوز كونها نصيحة إنتاجية لمطور واحد؛ إنها كفاءة تشغيلية أساسية لإدارة منصة متعددة المستأجرين. ThakiCloud تُشغِّل وكلاء وخطوط أنابيب في بيئات معزولة لكل عميل، وإذا أحرق أي مستأجر رموزاً بلا قيود في حلقاته غير المراقبة يتحول ذلك مباشرة إلى مشكلة تكلفة تشغيلية واستقرار.</p>

<p>ندير الحلقات غير المراقبة عبر سجل مركزي وناقل إشارات قياسي. نُعلِن في مكان واحد ما يقرأه كل حلقة وما تكتبه، وعند الحاجة إلى ربط الحلقات ببعضها يكون ذلك حصراً عبر موضوعات إشارة مُعلَنة لا ملفات مشتركة عشوائية. الحلقة غير المسجَّلة في السجل غير مرئية، وغير المرئية تُهمَل وتصبح بذرة لحادثة تكلفة. لذا نُلزِم بتسجيل كل حلقة جديدة.</p>

<p>من منظور المنصة، هذا قدرة تنافسية. في بنية تُصفِّف أعباء GPU عبر Kueue على Kubernetes وتعزل خدمة النماذج لكل مستأجر، القدرة على فرض تكاليف الحلقات وشروط انتهائها في الكود هي الأساس الذي يُمكِّن العملاء في بيئاتهم الداخلية من تشغيل الوكلاء بأمان. الوكيل المستقل الذي لا تُسيطر على تكاليفه مثير للإعجاب في العروض التوضيحية ومصدر خطر في الإنتاج. ما نبيعه هو التصميم التشغيلي الذي يحوِّل ذلك الخطر إلى حواجز أمان.</p>

<p>للممارسين الميدانيين الرسالة واضحة بالقدر ذاته. حين يُشغِّل عالم بيانات أو مهندس تعلم آلي تجارب دُفعية ليلية أو يؤتمت خط أنابيب بيانات، يكفي تغطية ثلاثة أشياء لمنع معظم حوادث التكلفة: فصل المُتحقِّق، وضع حد أقصى للرموز، والاحتفاظ بملف ذاكرة. هذا النمط لا يرتبط بأي مزوِّد بعينه ويعمل مع أي إطار عمل للوكلاء.</p>

<h2 id="القيود-والاعتراضات">القيود والاعتراضات</h2>

<p>هندسة الحلقات ليست حلاً شاملاً. أقوى اعتراض هو أن ليس كل مهمة مسألة حلقة. إدخال سؤال آني أو تعديل ملف واحد قسراً في حلقة يُضيف تكاليف تصميم دون أي مكسب. الحلقات ذات قيمة فقط للعمل المتكرر والقابل للتحقق.</p>

<p>اعتراض آخر هو أن فصل المُتحقِّق ليس مجانياً. الوكيل المُتحقِّق المنفصل يكلِّف رموزاً إضافية، والمُتحقِّق نفسه قد يُخطئ. إذا لم يُرشِّح المُتحقِّق أي شيء قط، فذلك ربما إشارة إلى أن التحقق لا يعمل بصورة صحيحة. لذا يجب تصميم مراحل التحقق بمنظور مختلف عن الوكيل المُنتِج، ويفضَّل أن يكون منظوراً نقدياً.</p>

<p>أخيراً، احذر من إغراء الأتمتة ذاتها. حين تبدو الحلقة تسير بسلاسة يُهمل الناس مراجعتها. غير أن العملة الثانية في الفاتورة، الانتباه، لا تختفي بالأتمتة. إذا غاب انضباط قراءة المُخرَجات مرة كاملة والتحقق الدوري من عينات النتائج، حتى الحلقة جيدة التصميم ستراكم نتائج لا نفع منها بهدوء.</p>

<p>في نهاية المطاف، جوهر هندسة الحلقات ليس توسيع الاستقلالية بل رسم حدودها بوضوح. الانضباط في تحديد ما تُفوِّضه وأين تتوقف وبماذا تتحقق قبل التشغيل هو ما يُميِّز الحلقة التي لا تحرق الرموز عن تلك التي تتحول إلى عبء.</p>

<h2 id="المصادر">المصادر</h2>

<ul>
  <li><a href="https://x.com/hjguyhan/status/2069532808507429264">التغريدة الأصلية (التصميم قبل تشغيل الحلقة)</a></li>
  <li><a href="https://addyosmani.com/blog/loop-engineering/">Addy Osmani, “Loop Engineering”</a></li>
  <li><a href="https://github.com/ksimback/looper">looper: أداة لتصميم حلقات الوكلاء مع بوابات مراجعة بصرية قبل التنفيذ</a></li>
  <li><a href="https://github.com/serenakeyitan/awesome-agent-loops">awesome-agent-loops: مجموعة حالات استخدام /loop و/goal و/schedule</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="technique" /><category term="agentic" /><category term="loop-engineering" /><category term="claude-code" /><category term="llmops" /><category term="cost-optimization" /><category term="platform-engineering" /><summary type="html"><![CDATA[نتجاوز عصر كتابة التوجيهات الجيدة إلى عصر تصميم الحلقات الجيدة. حلقة الوكيل التي تنطلق بلا تصميم تحرق الرموز وتُسلِّم نتائج لا يمكن الاستفادة منها. هذا المقال يشرح كيف تُصمِّم النظام الصغير الذي يبحث عن العمل ويوزِّعه ويتحقق منه ويسجِّله ويحدد الخطوة التالية، مع حواجز الأمان التي بنتها ThakiCloud بعد حادثة كلَّفت 700 دولار في يوم واحد.]]></summary></entry></feed>