<?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-07-22T04:27:34+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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><entry xml:lang="ar"><title type="html">كيف يبقى vLLM متيناً عند 2000 التزام شهرياً: ثلاث آليات في CI والقياس والإصدارات</title><link href="https://thakicloud.github.io/ar/dev/vllm-production-quality-ci-release/" rel="alternate" type="text/html" title="كيف يبقى vLLM متيناً عند 2000 التزام شهرياً: ثلاث آليات في CI والقياس والإصدارات" /><published>2026-07-22T00:00:00+09:00</published><updated>2026-07-22T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/dev/vllm-production-quality-ci-release</id><content type="html" xml:base="https://thakicloud.github.io/ar/dev/vllm-production-quality-ci-release/"><![CDATA[<p><img src="/assets/images/vllm-production-quality-ci-release-hero.png" alt="صورة تجريدية لآلاف التدفقات تتقارب عبر بوابة ضيقة واحدة وتصطف في مسارات مدارية مستقرة" /></p>

<h2 id="لماذا-تقرأ-هذا">لماذا تقرأ هذا</h2>

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

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

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

<p>في 16 يوليو 2026، نشر فريق صيانة vLLM مقالة بعنوان “Keeping vLLM Production Quality”. الأرقام وحدها مذهلة. خلال يونيو 2026، دمج vLLM <strong>1918 التزاماً</strong> في main. أي نحو 64 يومياً، على قدم المساواة مع مشاريع مفتوحة كبيرة مثل PyTorch أو Kubernetes. في الشهر نفسه، استهلك CI <strong>13 مليون دقيقة تشغيل</strong>، مع <strong>1400 مشغّل متزامن</strong> في الذروة.</p>

<p>لماذا تخلق هذه السرعة مشكلة؟ ذلك نابع من طبيعة محرك الاستدلال. في خدمة ويب اعتيادية تصح فرضية “إذا نجحت الاختبارات فالوضع آمن غالباً”. لكن في محرك استدلال LLM، <strong>قد يجتاز تغيير كل الاختبارات ويجعل مع ذلك نموذجاً بعينه أبطأ أو يفسد مخرجاته بشكل خفي.</strong> استبدل نواة (kernel) واحدة وقد ينخفض معدل المعالجة إلى النصف على معمارية GPU معينة، ومثل هذا التراجع لا يظهر أبداً في اختبار وحدة بنجاح/فشل.</p>

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

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

<p>ينقسم نظام جودة vLLM إلى ثلاث طبقات. كل طبقة توقف نوعاً مختلفاً من الفشل.</p>

<p><strong>أولاً، CI وظيفي واسع.</strong> تشغّل مجموعة CI في vLLM <strong>37 مجموعة اختبار و266 مهمة</strong>. تغطي المكونات والميزات الرئيسية من نوى مختلفة إلى speculative decoding إلى LoRA. تتحقق هذه الطبقة من “هل يعمل الكود؟”.</p>

<p><strong>ثانياً، القياس المستمر (continuous benchmarking).</strong> تمسك هذه الطبقة تراجعات الأداء التي يفوّتها CI الوظيفي. تقيس الأداء تلقائياً عبر نماذج وأجهزة GPU متعددة، وتتتبعه عبر الزمن لإبراز التراجعات أو التحسينات. تتحقق هذه الطبقة من “هل ما زال الكود سريعاً، وهل ما زال المخرج صحيحاً؟”.</p>

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

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

<pre><code class="language-mermaid">flowchart TB
    A[فرع main&lt;br/&gt;1918 التزام/شهر] --&gt; B{PR CI&lt;br/&gt;37 مجموعة اختبار، 266 مهمة}
    B --&gt;|ينجح| C[الدمج في main]
    B --&gt;|يفشل| A
    C --&gt; D[وسم perf-benchmarks + ready&lt;br/&gt;قياس عند كل التزام]
    D --&gt; E[لوحة الأداء&lt;br/&gt;تتبع التراجع لكل نموذج/GPU]
    C --&gt; F[عجلات wheel لكل التزام&lt;br/&gt;للتنصيف]
    E --&gt; G{كل يوم اثنين بالتناوب&lt;br/&gt;أسبوع الإصدار}
    G --&gt; H[اختيار أخضر التزام في full-CI]
    H --&gt; I[تثبيت فرع الإصدار]
    F -.عند التراجع.-&gt; J[تنصيف حسب تجزئة الالتزام]
    J -.عزل الالتزام المسبِّب.-&gt; A
</code></pre>

<h2 id="ما-الذي-انكسر-وكيف-أُصلح">ما الذي انكسر وكيف أُصلح</h2>

<p>لم يكن هذا النظام مكتملاً منذ البداية. في مايو 2026، بعد أيام من إصدار v0.20.0، اضطر vLLM لإطلاق رقعتين طارئتين. مشكلتان مرّتا عبر CI مباشرة إلى المستخدمين.</p>

<p>إحداهما <strong>كسرت gpt-oss على معالجات Blackwell عند تقسيمه على عدة GPU</strong>؛ والأخرى <strong>أهبطت معدل معالجة DeepSeek V4 على GB200</strong>. في ذلك الوقت لم يكن لدى vLLM خط قياس أداء. اجتازت المشكلتان الاختبارات الوظيفية بنظافة، لكن لم يكن أحد يقيس تلقائياً الأداء والصحة الفعليين على العتاد الحقيقي.</p>

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

<h2 id="الأوامر-التي-يستخدمها-المصلحون-فعلاً">الأوامر التي يستخدمها المصلحون فعلاً</h2>

<p>هذا النظام مكشوف لا كمفهوم فقط بل كأدوات يمكن للمستخدم تشغيلها. أداتان عمليتان لتتبع تراجعات الأداء مفيدتان بشكل خاص.</p>

<p>تُحدَّث لوحة الأداء تلقائياً على طلبات الدمج ذات وسوم معينة. عند كل التزام يحمل وسمَي <code class="language-plaintext highlighter-rouge">perf-benchmarks</code> و<code class="language-plaintext highlighter-rouge">ready</code> معاً، وكلما دُمج طلب دمج في main، يُشغَّل القياس ويُنشَر إلى اللوحة العامة.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># الوسوم التي تُطلق قياسات الأداء (سير عمل PR في vLLM)
perf-benchmarks + ready
# ← تشغيل القياس على نماذج/GPU عديدة لكل التزام ← نشر إلى لوحة الأداء العامة
</code></pre></div></div>

<p>الأكثر إثارة هو <strong>التنصيف حسب الالتزام (bisection)</strong>. ينشر vLLM عجلات wheel للالتزامات السابقة، لذا فإن تحديد تجزئة التزام في رابط التثبيت يثبّت vLLM كما كان بالضبط عند ذلك الالتزام.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># تثبيت عجلة vLLM عند تجزئة التزام محددة (لتنصيف تراجعات السلوك/الأداء)</span>
pip <span class="nb">install </span>https://wheels.vllm.ai/&lt;commit-hash&gt;/vllm-&lt;version&gt;-cp38-abi3-manylinux1_x86_64.whl

<span class="c"># تضييق "متى صار أبطأ؟" بالتنصيف:</span>
<span class="c">#   التزام جيد A ── ؟ ── التزام سيئ B</span>
<span class="c">#   ← ثبّت نقطة وسطى لإعادة الإنتاج ← اقسم النطاق إلى النصف</span>
</code></pre></div></div>

<p>هنا تظهر القيمة الحقيقية لهندسة الإصدار. يبدأ vLLM أسبوع الإصدار كل يوم اثنين بالتناوب. يراجع مدير الإصدار عمليات full-CI الأخيرة على main ذلك اليوم ويختار <strong>أخضر التزام</strong>. هذا يؤمّن أصح نقطة انطلاق قبل إضافة أي تغييرات خاصة بالإصدار. ولقطع فروع الإصدار بشكل متكرر فائدة خفية: <strong>تتبع التراجع أسهل بكثير حين يكون لديك نحو 500 التزام للتنصيف بدل بضعة آلاف.</strong> إيقاع الإصدار نفسه آلية تخفض كلفة تصحيح الأخطاء.</p>

<h2 id="أرقام-الحجم-التي-نشرها-vllm">أرقام الحجم التي نشرها vLLM</h2>

<p>فيما يلي الأرقام الفعلية التي نشرتها المقالة اعتباراً من يونيو 2026. هذه ليست إعادة إنتاج منّا؛ إنها قيم أبلغ عنها المصلحون، منقولة حرفياً.</p>

<table>
  <thead>
    <tr>
      <th>المؤشر</th>
      <th>القيمة</th>
      <th>المعنى</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>التزامات مدموجة في main</td>
      <td>1918/شهر (~64/يوم)</td>
      <td>معدل تغيير بمستوى PyTorch/Kubernetes</td>
    </tr>
    <tr>
      <td>وقت CI المستهلك</td>
      <td>13 مليون دقيقة/شهر</td>
      <td>كلفة تحقق هائلة</td>
    </tr>
    <tr>
      <td>ذروة المشغّلين المتزامنين</td>
      <td>1400</td>
      <td>حجم التحقق المتوازي</td>
    </tr>
    <tr>
      <td>مجموعات اختبار CI</td>
      <td>37</td>
      <td>نوى، spec decoding، LoRA، إلخ</td>
    </tr>
    <tr>
      <td>مهام CI</td>
      <td>266</td>
      <td>تفصيل لكل مكون</td>
    </tr>
    <tr>
      <td>إيقاع الإصدار</td>
      <td>كل اثنين بالتناوب</td>
      <td>يبقي نطاق التنصيف عند ~500 التزام</td>
    </tr>
  </tbody>
</table>

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

<h2 id="دلالات-على-منتجات-thakicloud">دلالات على منتجات ThakiCloud</h2>

<p>تخدم <strong>ai-platform</strong> من ThakiCloud النماذج لبيئات عملاء متنوعة فوق Kubernetes وجدولة Kueue لوحدات GPU. vLLM هو المحرك الأساسي على مسار الخدمة هذا، لذا فإن كيفية حفاظ vLLM على الجودة تصبّ مباشرة في تصميم سياسة إصداراتنا.</p>

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

<p>ثانياً، <strong>ثبّت إصدار vLLM صراحةً في الطرح المبني على GitOps عبر ArgoCD.</strong> بدل ملاحقة أحدث التزام على main، نعامل وسم الإصدار الذي تحقق منه vLLM وقطعه بنفسه كمرجع، ونثبّت ذلك الوسم في قيم كل عنقود. الطرح أولاً لعدد قليل من المستأجرين كـ canary، ثم التوسع للجميع فقط حين تكون لوحة القياس خضراء، يعيد إنتاج مبدأ vLLM “اختر أصح التزام” على طبقة النشر.</p>

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

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

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

<p>لا يُنقَل نهج vLLM بنظافة إلى كل منظمة. هناك قيود واقعية.</p>

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

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

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

<h2 id="الخلاصة">الخلاصة</h2>

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

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

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

<ul>
  <li>vLLM Blog, “Keeping vLLM Production Quality: A Look Inside CI, Benchmarking, and the Release Process” (2026-07-16): <a href="https://vllm.ai/blog/2026-07-16-keeping-vllm-production-quality">https://vllm.ai/blog/2026-07-16-keeping-vllm-production-quality</a></li>
  <li>vLLM Performance Dashboard (docs): <a href="https://docs.vllm.ai/en/latest/benchmarking/dashboard/">https://docs.vllm.ai/en/latest/benchmarking/dashboard/</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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="vLLM" /><category term="CI" /><category term="MLOps" /><category term="ModelServing" /><category term="ReleaseEngineering" /><category term="PerformanceRegression" /><category term="Benchmarking" /><category term="ai-platform" /><summary type="html"><![CDATA[يدمج vLLM نحو 2000 التزام في main كل شهر ويحافظ مع ذلك على جودة الإنتاج. السر ليس 'مزيداً من الاختبارات' بل ثلاث آليات حتمية: بوابة قياس أداء، وتثبيت فرع الإصدار، والتنصيف حسب الالتزام. نحلل مقالة فريق صيانة vLLM من منظور خدمة ThakiCloud.]]></summary></entry><entry xml:lang="en"><title type="html">How vLLM Stays Solid at 2,000 Commits a Month: Three Devices in CI, Benchmarking, and Releases</title><link href="https://thakicloud.github.io/en/dev/vllm-production-quality-ci-release/" rel="alternate" type="text/html" title="How vLLM Stays Solid at 2,000 Commits a Month: Three Devices in CI, Benchmarking, and Releases" /><published>2026-07-22T00:00:00+09:00</published><updated>2026-07-22T00:00:00+09:00</updated><id>https://thakicloud.github.io/en/dev/vllm-production-quality-ci-release</id><content type="html" xml:base="https://thakicloud.github.io/en/dev/vllm-production-quality-ci-release/"><![CDATA[<p><img src="/assets/images/vllm-production-quality-ci-release-hero.png" alt="Abstract image of thousands of streams converging through a single narrow gate and aligning into stable orbital tracks" /></p>

<h2 id="why-read-this">Why Read This</h2>

<p>This post is for platform engineers and MLOps practitioners who serve LLMs with vLLM, or whose production depends on fast-moving open source. It is for the person who has to decide: “The inference engine we run changes hundreds of times a week. Which version do we upgrade to, and when, without breaking?”</p>

<p>The conclusion first. The key to holding production quality at 2,000 commits a month is not adding tests without limit. It is <strong>three deterministic devices: a benchmark gate that catches performance regressions, release-branch pinning to the healthiest commit, and per-commit bisection to isolate a regression when one appears.</strong> These are the same operational patterns ThakiCloud can adopt directly when serving vLLM in a multi-tenant setup on Kubernetes.</p>

<h2 id="overview">Overview</h2>

<p>On July 16, 2026, the vLLM maintainers published a write-up titled “Keeping vLLM Production Quality.” The numbers alone are staggering. In June 2026, vLLM merged <strong>1,918 commits</strong> into main. That is about 64 a day, on par with large open-source projects like PyTorch or Kubernetes. In the same month, CI consumed <strong>13 million job minutes</strong>, with <strong>1,400 concurrent runners</strong> at peak.</p>

<p>Why does this speed create a problem? It comes from the nature of an inference engine. For a typical web service, “if the tests pass, it is mostly safe” holds. But in an LLM inference engine, <strong>a change can pass every test and still make a specific model slower or subtly corrupt its output.</strong> Swap one kernel and throughput can halve on a specific GPU architecture, and a regression like that never shows up in a pass/fail unit test.</p>

<p>For an organization like ThakiCloud that depends on vLLM as a core serving dependency, this write-up is not someone else’s story. Every vLLM version we ship governs the latency and throughput of customer workloads. So understanding how vLLM protects itself tells us what we should gate on top of it.</p>

<h2 id="what-it-actually-is">What It Actually Is</h2>

<p>vLLM’s quality system splits into three layers. Each layer stops a different kind of failure.</p>

<p><strong>First, broad functional CI.</strong> The vLLM CI suite runs <strong>37 test groups and 266 jobs</strong>. It covers major components and features from different kernels to speculative decoding to LoRA. This layer verifies “does the code work?”</p>

<p><strong>Second, continuous benchmarking.</strong> This layer catches the performance regressions that functional CI misses. It measures performance automatically across many models and GPU devices, and tracks it over time to surface regressions or improvements. This layer verifies “is the code still fast, is the output still correct?”</p>

<p><strong>Third, release engineering.</strong> No matter how good CI and benchmarks are, deciding which commit to release to users is a separate call. vLLM entrusts that decision to repeatable rules rather than human intuition.</p>

<p>The diagram below shows how the three layers interlock. Read top to bottom, it is the path a single commit travels to reach a user.</p>

<pre><code class="language-mermaid">flowchart TB
    A[main branch&lt;br/&gt;1,918 commits/month] --&gt; B{PR CI&lt;br/&gt;37 test groups, 266 jobs}
    B --&gt;|pass| C[merge to main]
    B --&gt;|fail| A
    C --&gt; D[perf-benchmarks + ready labels&lt;br/&gt;benchmark on every commit]
    D --&gt; E[Performance Dashboard&lt;br/&gt;track regressions per model/GPU]
    C --&gt; F[per-commit wheels&lt;br/&gt;for bisection]
    E --&gt; G{every other Monday&lt;br/&gt;release week}
    G --&gt; H[pick greenest full-CI commit]
    H --&gt; I[pin release branch]
    F -.on regression.-&gt; J[bisect by commit hash]
    J -.isolate the culprit commit.-&gt; A
</code></pre>

<h2 id="what-broke-and-how-they-fixed-it">What Broke, and How They Fixed It</h2>

<p>This system was not complete from the start. In May 2026, days after releasing v0.20.0, vLLM had to cut two emergency patches. Two problems had sailed straight through CI to users.</p>

<p>One <strong>broke gpt-oss on Blackwell GPUs when split across multiple GPUs</strong>; the other <strong>tanked DeepSeek V4 throughput on GB200</strong>. At the time vLLM had no benchmarking pipeline. Both problems passed the functional tests cleanly, but nobody was automatically measuring actual performance and correctness on real hardware.</p>

<p>That incident is the direct reason the continuous benchmarking layer exists. The lesson is clear. <strong>The equation “tests pass = safe” does not hold for an inference engine.</strong> Functional correctness and performance are separate axes, and each must be gated independently.</p>

<h2 id="the-commands-maintainers-actually-use">The Commands Maintainers Actually Use</h2>

<p>This system is exposed not only as a concept but as tooling users can run. Two practical tools for tracking performance regressions are especially useful.</p>

<p>The performance dashboard updates automatically on PRs with specific labels. On every commit that carries both the <code class="language-plaintext highlighter-rouge">perf-benchmarks</code> and <code class="language-plaintext highlighter-rouge">ready</code> labels, and whenever a PR merges into main, benchmarks run and publish to the public dashboard.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Labels that trigger performance benchmarks (vLLM PR workflow)
perf-benchmarks + ready
# → run benchmarks on many models/GPUs per commit → publish to public performance dashboard
</code></pre></div></div>

<p>More interesting is <strong>per-commit bisection</strong>. vLLM publishes wheels for previous commits, so specifying a commit hash in the install URL installs vLLM exactly as it was at that commit.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install a vLLM wheel at a specific commit hash (to bisect behavior/perf regressions)</span>
pip <span class="nb">install </span>https://wheels.vllm.ai/&lt;commit-hash&gt;/vllm-&lt;version&gt;-cp38-abi3-manylinux1_x86_64.whl

<span class="c"># Narrow "when did it get slower?" by bisection:</span>
<span class="c">#   good commit A ── ? ── bad commit B</span>
<span class="c">#   → install a midpoint to reproduce → halve the range</span>
</code></pre></div></div>

<p>Here the real value of release engineering shows. vLLM kicks off release week every other Monday. The release manager reviews the recent full-CI runs on main that day and picks the <strong>greenest commit</strong>. That secures the healthiest starting point before any release-specific changes are added. Cutting release branches frequently has a hidden benefit: <strong>tracing a regression is far easier when you have about 500 commits to bisect rather than a few thousand.</strong> The release cadence itself is a device that lowers debugging cost.</p>

<h2 id="the-scale-numbers-vllm-published">The Scale Numbers vLLM Published</h2>

<p>Below are the actual figures the write-up published as of June 2026. These are not our reproduction; they are the maintainers’ reported values, quoted verbatim.</p>

<table>
  <thead>
    <tr>
      <th>Metric</th>
      <th>Value</th>
      <th>Meaning</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Commits merged to main</td>
      <td>1,918/month (~64/day)</td>
      <td>PyTorch/Kubernetes-class change rate</td>
    </tr>
    <tr>
      <td>CI time consumed</td>
      <td>13M minutes/month</td>
      <td>Enormous verification cost</td>
    </tr>
    <tr>
      <td>Peak concurrent runners</td>
      <td>1,400</td>
      <td>Scale of parallel verification</td>
    </tr>
    <tr>
      <td>CI test groups</td>
      <td>37</td>
      <td>Kernels, spec decoding, LoRA, etc.</td>
    </tr>
    <tr>
      <td>CI jobs</td>
      <td>266</td>
      <td>Per-component granularity</td>
    </tr>
    <tr>
      <td>Release cadence</td>
      <td>every other Monday</td>
      <td>Keeps bisect range at ~500 commits</td>
    </tr>
  </tbody>
</table>

<p>What these numbers say is simple. To hold quality at this speed, verification <strong>cannot rely on human review</strong> and must be replaced by deterministic gates and automated measurement.</p>

<h2 id="implications-for-thakicloud-products">Implications for ThakiCloud Products</h2>

<p>ThakiCloud’s <strong>ai-platform</strong> serves models to diverse customer environments on top of Kubernetes and Kueue GPU scheduling. vLLM is the core engine on that serving path, so how vLLM maintains quality feeds directly into our release policy design.</p>

<p>First, <strong>separate version pinning from the benchmark gate.</strong> Per vLLM’s lesson, we do not promote a new version to production on functional test passes alone. We automatically run throughput and latency benchmarks on representative customer workloads (model/GPU combinations) before rollout, and place a gate that blocks promotion when a regression is detected. This moves vLLM’s continuous benchmarking layer into a gate on our deployment pipeline.</p>

<p>Second, <strong>pin the vLLM release explicitly in the ArgoCD-based GitOps rollout.</strong> Rather than tracking the latest commit on main, we treat the release tag vLLM has itself verified and cut as canonical, and pin that tag in per-cluster values. Rolling out first to a few tenants as a canary, then expanding to all only when the benchmark dashboard is green, reproduces vLLM’s “pick the healthiest commit” principle at the deployment layer.</p>

<p>Third, <strong>use per-commit wheels for in-house regression tracing.</strong> When a specific customer signals “it got slower than last week,” we can bisect with vLLM’s per-commit wheels to isolate the culprit commit. Quickly narrowing where a regression’s responsibility lies in a multi-tenant environment is central to operational trust.</p>

<p>These three converge on one principle. <strong>To operate production on top of a fast-moving upstream dependency, you must delegate quality judgment to automated gates, not human intuition.</strong></p>

<h2 id="limits-and-counterarguments">Limits and Counterarguments</h2>

<p>vLLM’s approach does not transplant cleanly to every organization. There are real constraints.</p>

<p>The biggest is <strong>cost.</strong> 13 million CI minutes a month and 1,400 concurrent runners presume a substantial infrastructure budget. It is unrealistic for a small team to clone a benchmark farm at this scale. So what we need is not a replica of the scale but <strong>a representative benchmark narrowed to core workloads.</strong> Gating only the top few combinations of actual customer traffic, rather than the full model/GPU matrix, pays off far better per dollar.</p>

<p>Second, a benchmark’s <strong>coverage is its limit.</strong> Regressions in models, sequence lengths, or batch combinations that are not in the benchmark still leak through. vLLM’s May incident was missed precisely because there was no benchmark, and even after adding one, combinations absent from the dashboard remain blind spots. Never forget that a gate protects only “what you measured.”</p>

<p>Third, the biweekly release cadence is a <strong>trade-off between stability and freshness.</strong> Cutting releases frequently makes bisection easier, but slows how fast new features reach production. If a customer urgently needs the latest kernel optimization, a policy that insists on stable releases only can itself become the bottleneck. That balance point differs by organization.</p>

<h2 id="wrap-up">Wrap-Up</h2>

<p>Back to the problem of protecting production on top of fast-moving open source. vLLM does not collapse at 2,000 commits a month not because it adds tests without limit, but because it has <strong>three deterministic devices: a benchmark gate that stops performance regressions, release-branch pinning that picks the healthiest commit, and per-commit bisection that narrows the cause.</strong></p>

<p>For an organization like ThakiCloud that runs vLLM as a serving core, the action to take today is clear. When you upgrade to a new vLLM version, do not rely on functional test passes alone; stand up a benchmark on representative customer workloads as a rollout gate. And instead of tracking main, pin the release tag vLLM has verified into your GitOps values. Putting just these two into your deployment pipeline lets you absorb the upstream’s speed while protecting the downstream’s stability. Quality comes not from more tests, but from a gate placed in the right spot.</p>

<h2 id="sources">Sources</h2>

<ul>
  <li>vLLM Blog, “Keeping vLLM Production Quality: A Look Inside CI, Benchmarking, and the Release Process” (2026-07-16): <a href="https://vllm.ai/blog/2026-07-16-keeping-vllm-production-quality">https://vllm.ai/blog/2026-07-16-keeping-vllm-production-quality</a></li>
  <li>vLLM Performance Dashboard (docs): <a href="https://docs.vllm.ai/en/latest/benchmarking/dashboard/">https://docs.vllm.ai/en/latest/benchmarking/dashboard/</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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="vLLM" /><category term="CI" /><category term="MLOps" /><category term="ModelServing" /><category term="ReleaseEngineering" /><category term="PerformanceRegression" /><category term="Benchmarking" /><category term="ai-platform" /><summary type="html"><![CDATA[vLLM merges roughly 2,000 commits into main every month and still holds production quality. The secret is not 'more tests' but three deterministic devices: a benchmark gate, release-branch pinning, and per-commit bisection. We break down the vLLM maintainers' write-up through a ThakiCloud serving lens.]]></summary></entry><entry xml:lang="ko"><title type="html">월 2,000 커밋에도 vLLM이 무너지지 않는 법: CI·벤치마크·릴리스의 세 가지 장치</title><link href="https://thakicloud.github.io/ko/dev/vllm-production-quality-ci-release/" rel="alternate" type="text/html" title="월 2,000 커밋에도 vLLM이 무너지지 않는 법: CI·벤치마크·릴리스의 세 가지 장치" /><published>2026-07-22T00:00:00+09:00</published><updated>2026-07-22T00:00:00+09:00</updated><id>https://thakicloud.github.io/ko/dev/vllm-production-quality-ci-release</id><content type="html" xml:base="https://thakicloud.github.io/ko/dev/vllm-production-quality-ci-release/"><![CDATA[<p><img src="/assets/images/vllm-production-quality-ci-release-hero.png" alt="수천 개의 흐름이 하나의 좁은 게이트를 통과해 안정된 궤도로 정렬되는 모습을 형상화한 추상 이미지" /></p>

<h2 id="왜-읽어야-하나">왜 읽어야 하나</h2>

<p>이 글은 vLLM으로 LLM을 서빙하거나, 빠르게 움직이는 오픈소스에 프로덕션을 의존하는 플랫폼 엔지니어와 MLOps 실무자를 위해 씁니다. “우리가 쓰는 추론 엔진이 매주 수백 개씩 바뀌는데, 어느 버전을 언제 올려야 안전한가”를 결정해야 하는 사람이 읽을 글입니다.</p>

<p>핵심 결론을 먼저 말씀드리겠습니다. 월 2,000 커밋이라는 속도에서도 프로덕션 품질을 지키는 열쇠는 테스트를 무한정 늘리는 것이 아닙니다. <strong>벤치마크 게이트로 성능 회귀를 막고, 릴리스 브랜치를 가장 건강한 커밋에 고정하며, 회귀가 생기면 커밋 단위로 이등분해 원인을 특정하는</strong> 세 가지 결정론적 장치입니다. 이 셋은 타키클라우드가 vLLM을 K8s 위에서 멀티테넌트로 서빙할 때 그대로 차용할 수 있는 운영 패턴이기도 합니다.</p>

<h2 id="개요">개요</h2>

<p>2026년 7월 16일, vLLM 유지관리팀은 「Keeping vLLM Production Quality」라는 운영기를 공개했습니다. 숫자부터가 압도적입니다. 2026년 6월 한 달 동안 vLLM은 main 브랜치에 <strong>1,918개의 커밋</strong>을 병합했습니다. 하루 평균 약 64개로, PyTorch나 Kubernetes 같은 대형 오픈소스와 맞먹는 속도입니다. 같은 달 CI는 <strong>1,300만 분(job minutes)</strong>을 소비했고, 피크 시점에는 <strong>1,400개의 러너</strong>가 동시에 돌았습니다.</p>

<p>이 속도가 왜 문제가 되는지는 추론 엔진의 특성에서 나옵니다. 일반적인 웹 서비스라면 “테스트가 통과하면 대체로 안전하다”는 가정이 통합니다. 그러나 LLM 추론 엔진에서는 <strong>모든 테스트를 통과하고도 특정 모델이 느려지거나, 출력이 미묘하게 틀어지는</strong> 일이 벌어집니다. 커널 하나가 바뀌면 특정 GPU 아키텍처에서만 처리량이 절반으로 떨어질 수 있고, 그런 회귀는 단위 테스트의 통과/실패로는 절대 잡히지 않습니다.</p>

<p>타키클라우드처럼 vLLM을 프로덕션 서빙의 핵심 의존성으로 쓰는 조직에게 이 운영기는 단순한 남의 집 이야기가 아닙니다. 우리가 올리는 vLLM 버전 하나하나가 고객 워크로드의 지연 시간과 처리량을 좌우하기 때문입니다. 그래서 vLLM이 스스로를 어떻게 지키는지 이해하면, 우리가 그 위에서 무엇을 게이트로 삼아야 하는지가 보입니다.</p>

<h2 id="이-기술은-무엇인가">이 기술은 무엇인가</h2>

<p>vLLM의 품질 유지 체계는 세 개의 층으로 나뉩니다. 각 층이 서로 다른 종류의 실패를 막습니다.</p>

<p><strong>첫째, 광범위한 기능 CI입니다.</strong> vLLM의 CI 스위트는 <strong>37개의 테스트 그룹, 266개의 잡</strong>으로 구성됩니다. 서로 다른 커널부터 스페큘러티브 디코딩(speculative decoding), LoRA에 이르기까지 주요 컴포넌트와 기능을 모두 덮습니다. 이 층은 “코드가 동작하는가”를 검증합니다.</p>

<p><strong>둘째, 연속 벤치마킹(continuous benchmarking)입니다.</strong> 기능 CI가 놓치는 성능 회귀를 잡기 위한 층입니다. 여러 모델과 GPU 디바이스에 걸쳐 성능을 자동으로 측정하고, 시간에 따라 추적해 회귀나 개선을 드러냅니다. 이 층은 “코드가 여전히 빠른가, 출력이 여전히 옳은가”를 검증합니다.</p>

<p><strong>셋째, 릴리스 엔지니어링입니다.</strong> 아무리 좋은 CI와 벤치마크가 있어도, 어느 커밋을 사용자에게 릴리스로 내보낼지는 별도의 결정입니다. vLLM은 이 결정을 사람의 직관이 아니라 반복 가능한 규칙에 맡깁니다.</p>

<p>아래 다이어그램이 세 층이 어떻게 맞물리는지 보여줍니다. 세로로 읽으면 커밋 하나가 사용자에게 도달하기까지의 흐름이 됩니다.</p>

<pre><code class="language-mermaid">flowchart TB
    A[main 브랜치&lt;br/&gt;월 1,918 커밋] --&gt; B{PR CI&lt;br/&gt;37개 테스트 그룹 · 266 잡}
    B --&gt;|통과| C[main 병합]
    B --&gt;|실패| A
    C --&gt; D[perf-benchmarks + ready 라벨&lt;br/&gt;커밋마다 벤치마크 실행]
    D --&gt; E[퍼포먼스 대시보드&lt;br/&gt;모델·GPU별 회귀 추적]
    C --&gt; F[커밋별 wheel 발행&lt;br/&gt;이등분용]
    E --&gt; G{격주 월요일&lt;br/&gt;릴리스 주간}
    G --&gt; H[가장 초록빛 full-CI 커밋 선택]
    H --&gt; I[릴리스 브랜치 고정]
    F -.회귀 발생 시.-&gt; J[커밋 해시로 이등분]
    J -.원인 커밋 특정.-&gt; A
</code></pre>

<h2 id="무엇이-실패했고-어떻게-고쳤나">무엇이 실패했고, 어떻게 고쳤나</h2>

<p>이 체계는 처음부터 완성돼 있던 것이 아닙니다. 2026년 5월, vLLM은 v0.20.0을 릴리스한 뒤 며칠 만에 두 개의 긴급 패치를 잘라내야 했습니다. 두 가지 문제가 CI를 그대로 통과해 사용자에게 도달했기 때문입니다.</p>

<p>하나는 <strong>gpt-oss 모델이 Blackwell GPU에서 여러 장으로 분할될 때 깨지는</strong> 문제였고, 다른 하나는 <strong>DeepSeek V4의 처리량이 GB200에서 급락하는</strong> 문제였습니다. 당시 vLLM에는 벤치마킹 파이프라인이 없었습니다. 두 문제 모두 기능 테스트는 멀쩡히 통과했지만, 실제 하드웨어에서의 성능과 정확성은 아무도 자동으로 측정하지 않았습니다.</p>

<p>이 사건이 연속 벤치마킹 층을 만든 직접적 계기입니다. 여기서 얻을 수 있는 교훈은 명확합니다. <strong>“테스트 통과 = 안전”이라는 등식은 추론 엔진에서 성립하지 않습니다.</strong> 기능적 정확성과 성능은 별개의 축이며, 각각을 독립적으로 게이트해야 합니다.</p>

<h2 id="유지관리팀이-실제로-쓰는-명령">유지관리팀이 실제로 쓰는 명령</h2>

<p>이 체계는 개념만이 아니라 사용자가 직접 쓸 수 있는 도구로 노출돼 있습니다. 특히 성능 회귀를 추적하는 두 가지 실무 도구가 유용합니다.</p>

<p>성능 대시보드는 특정 라벨이 붙은 PR에서 자동으로 갱신됩니다. <code class="language-plaintext highlighter-rouge">perf-benchmarks</code>와 <code class="language-plaintext highlighter-rouge">ready</code> 라벨이 함께 붙은 커밋마다, 그리고 PR이 main에 병합될 때마다 벤치마크가 실행되어 공개 대시보드에 게시됩니다.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 성능 벤치마크를 트리거하는 라벨 (vLLM PR 워크플로)
perf-benchmarks + ready
# → 커밋마다 여러 모델·GPU에서 벤치마크 실행 → 공개 퍼포먼스 대시보드에 게시
</code></pre></div></div>

<p>더 흥미로운 것은 <strong>커밋 단위 이등분(bisect)</strong>입니다. vLLM은 이전 커밋들에 대한 wheel을 발행하기 때문에, 설치 URL에 커밋 해시를 지정하면 특정 커밋 시점의 vLLM을 그대로 설치할 수 있습니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 특정 커밋 해시의 vLLM wheel 설치 (동작·성능 회귀 이등분용)</span>
pip <span class="nb">install </span>https://wheels.vllm.ai/&lt;commit-hash&gt;/vllm-&lt;version&gt;-cp38-abi3-manylinux1_x86_64.whl

<span class="c"># "언제부터 느려졌나"를 이등분으로 좁힌다:</span>
<span class="c">#   좋은 커밋 A ── ? ── 나쁜 커밋 B</span>
<span class="c">#   → 중간 커밋을 설치해 재현 → 범위를 절반으로</span>
</code></pre></div></div>

<p>여기서 릴리스 엔지니어링의 진짜 가치가 드러납니다. vLLM은 격주 월요일에 릴리스 주간을 시작합니다. 릴리스 매니저는 그날 main 브랜치의 최근 full-CI 실행들을 검토해 <strong>가장 초록빛(greenest) 커밋</strong>을 고릅니다. 이렇게 하면 릴리스 특화 변경을 더하기 전에 가장 건강한 출발점을 확보하게 됩니다. 그리고 릴리스 브랜치를 자주 자르는 데에는 숨은 이득이 있습니다. <strong>이등분할 커밋이 수천 개가 아니라 500개 정도일 때 회귀 추적이 훨씬 쉬워진다</strong>는 점입니다. 릴리스 케이던스 자체가 디버깅 비용을 낮추는 장치인 셈입니다.</p>

<h2 id="vllm이-공개한-규모-지표">vLLM이 공개한 규모 지표</h2>

<p>아래는 vLLM 운영기가 공개한 2026년 6월 기준 실측 수치입니다. 재현 실험이 아니라 유지관리팀이 발표한 값을 그대로 인용합니다.</p>

<table>
  <thead>
    <tr>
      <th>지표</th>
      <th>값</th>
      <th>의미</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>main 병합 커밋</td>
      <td>월 1,918개 (하루 ~64개)</td>
      <td>PyTorch·Kubernetes급 변경 속도</td>
    </tr>
    <tr>
      <td>CI 소비 시간</td>
      <td>월 1,300만 분</td>
      <td>방대한 검증 비용</td>
    </tr>
    <tr>
      <td>동시 러너 피크</td>
      <td>1,400개</td>
      <td>병렬 검증 규모</td>
    </tr>
    <tr>
      <td>CI 테스트 그룹</td>
      <td>37개</td>
      <td>커널·spec decoding·LoRA 등</td>
    </tr>
    <tr>
      <td>CI 잡</td>
      <td>266개</td>
      <td>컴포넌트별 세분화</td>
    </tr>
    <tr>
      <td>릴리스 케이던스</td>
      <td>격주 월요일</td>
      <td>이등분 범위를 ~500 커밋으로</td>
    </tr>
  </tbody>
</table>

<p>이 수치가 말하는 바는 단순합니다. 이 정도 속도에서 품질을 지키려면 검증을 <strong>사람의 리뷰에 의존해서는 안 되며</strong>, 결정론적 게이트와 자동 측정으로 대체해야 한다는 것입니다.</p>

<h2 id="타키클라우드-제품-적용-시사점">타키클라우드 제품 적용 시사점</h2>

<p>타키클라우드의 <strong>ai-platform</strong>은 K8s와 Kueue GPU 스케줄링 위에서 다양한 고객 환경에 모델을 서빙합니다. vLLM은 그 서빙 경로의 핵심 엔진이며, 따라서 vLLM의 품질 유지 방식은 곧 우리의 릴리스 정책 설계에 직접 반영됩니다.</p>

<p>첫째, <strong>버전 고정과 벤치마크 게이트를 분리</strong>합니다. vLLM의 교훈대로 기능 테스트 통과만으로 새 버전을 프로덕션에 올리지 않습니다. 대표 고객 워크로드(모델·GPU 조합)에 대한 처리량·지연 시간 벤치마크를 롤아웃 전에 자동으로 돌리고, 회귀가 감지되면 승격을 차단하는 게이트를 둡니다. 이것은 vLLM의 연속 벤치마킹 층을 우리 배포 파이프라인의 게이트로 옮겨 오는 것입니다.</p>

<p>둘째, <strong>ArgoCD 기반 GitOps 롤아웃에 vLLM 릴리스 핀을 명시</strong>합니다. main의 최신 커밋을 따라가는 대신, vLLM이 스스로 검증해 잘라낸 릴리스 태그를 정본으로 삼고, 그 태그를 클러스터별 values에 고정합니다. 카나리(canary)로 소수 테넌트에 먼저 올린 뒤 벤치마크 대시보드가 초록빛일 때만 전체로 확장하는 흐름은 vLLM의 “가장 건강한 커밋 선택” 원칙을 배포 층에서 재현하는 것입니다.</p>

<p>셋째, <strong>커밋 단위 wheel을 사내 회귀 추적에 활용</strong>합니다. 특정 고객에게서 “지난주보다 느려졌다”는 신호가 오면, vLLM의 커밋별 wheel로 이등분해 원인 커밋을 특정할 수 있습니다. 멀티테넌트 환경에서 회귀의 책임 소재를 빠르게 좁히는 것은 운영 신뢰도의 핵심입니다.</p>

<p>이 세 가지는 결국 하나의 원칙으로 수렴합니다. <strong>빠르게 움직이는 상류(upstream) 의존성 위에서 프로덕션을 운영하려면, 품질 판단을 사람의 감이 아니라 자동 게이트에 위임해야 한다</strong>는 것입니다.</p>

<h2 id="한계-및-반론">한계 및 반론</h2>

<p>vLLM의 접근이 모든 조직에 그대로 이식되지는 않습니다. 몇 가지 현실적 제약이 있습니다.</p>

<p>가장 큰 것은 <strong>비용</strong>입니다. 월 1,300만 CI 분과 1,400개 동시 러너는 상당한 인프라 예산을 전제합니다. 소규모 팀이 이 규모의 벤치마크 팜을 그대로 복제하는 것은 비현실적입니다. 따라서 우리에게 필요한 것은 규모의 복제가 아니라 <strong>핵심 워크로드로 좁힌 대표 벤치마크</strong>입니다. 전체 모델·GPU 매트릭스가 아니라, 실제 고객 트래픽의 상위 몇 개 조합만 게이트하는 편이 비용 대비 효과가 큽니다.</p>

<p>둘째, 벤치마크는 <strong>커버리지가 곧 한계</strong>입니다. 벤치마크에 없는 모델·시퀀스 길이·배치 조합에서의 회귀는 여전히 새어 나갑니다. vLLM의 5월 사건도 벤치마크가 없어서 놓친 것이며, 벤치마크를 추가한 뒤에도 대시보드에 없는 조합은 사각지대로 남습니다. 게이트는 “측정한 것”만 지켜 준다는 점을 잊으면 안 됩니다.</p>

<p>셋째, 격주 릴리스 케이던스는 <strong>안정성과 최신성의 트레이드오프</strong>입니다. 릴리스를 자주 자르면 이등분은 쉬워지지만, 최신 기능을 프로덕션에 반영하는 속도는 느려집니다. 최신 커널 최적화가 급히 필요한 고객이 있다면, 안정 릴리스만 고집하는 정책이 오히려 병목이 될 수 있습니다. 이 균형점은 조직마다 다릅니다.</p>

<h2 id="정리">정리</h2>

<p>빠르게 움직이는 오픈소스 위에서 프로덕션을 지키는 문제로 돌아오겠습니다. vLLM이 월 2,000 커밋 속도에서도 무너지지 않는 이유는 테스트를 무한정 늘려서가 아니라, <strong>성능 회귀를 막는 벤치마크 게이트, 가장 건강한 커밋을 고르는 릴리스 브랜치 고정, 원인을 좁히는 커밋 단위 이등분</strong>이라는 세 가지 결정론적 장치를 갖췄기 때문입니다.</p>

<p>타키클라우드처럼 vLLM을 서빙 핵심으로 쓰는 조직이 오늘 당장 할 수 있는 행동은 분명합니다. 새 vLLM 버전을 올릴 때 기능 테스트 통과에만 의존하지 말고, 대표 고객 워크로드에 대한 벤치마크를 롤아웃 게이트로 세우십시오. 그리고 main을 따라가는 대신 vLLM이 검증한 릴리스 태그를 GitOps values에 고정하십시오. 이 두 가지만 배포 파이프라인에 넣어도, 상류의 속도를 그대로 흡수하면서 하류의 안정성을 지킬 수 있습니다. 품질은 더 많은 테스트가 아니라, 옳은 곳에 놓인 게이트에서 나옵니다.</p>

<h2 id="관련-슬라이드">관련 슬라이드</h2>

<p>본문 내용을 NotebookLM(<code class="language-plaintext highlighter-rouge">architectural_mono</code> 스타일)으로 요약한 슬라이드입니다.</p>

<p><img src="/assets/images/vllm-production-quality-ci-release-slide-01.png" alt="vllm-production-quality-ci-release 슬라이드 1" /></p>

<p><img src="/assets/images/vllm-production-quality-ci-release-slide-02.png" alt="vllm-production-quality-ci-release 슬라이드 2" /></p>

<p><img src="/assets/images/vllm-production-quality-ci-release-slide-03.png" alt="vllm-production-quality-ci-release 슬라이드 3" /></p>

<p><img src="/assets/images/vllm-production-quality-ci-release-slide-04.png" alt="vllm-production-quality-ci-release 슬라이드 4" /></p>

<h2 id="출처">출처</h2>

<ul>
  <li>vLLM Blog, “Keeping vLLM Production Quality: A Look Inside CI, Benchmarking, and the Release Process” (2026-07-16): <a href="https://vllm.ai/blog/2026-07-16-keeping-vllm-production-quality">https://vllm.ai/blog/2026-07-16-keeping-vllm-production-quality</a></li>
  <li>vLLM Performance Dashboard (docs): <a href="https://docs.vllm.ai/en/latest/benchmarking/dashboard/">https://docs.vllm.ai/en/latest/benchmarking/dashboard/</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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="vLLM" /><category term="CI" /><category term="MLOps" /><category term="모델서빙" /><category term="릴리스엔지니어링" /><category term="성능회귀" /><category term="벤치마크" /><category term="ai-platform" /><summary type="html"><![CDATA[vLLM은 매달 약 2,000개의 커밋을 main에 병합하면서도 프로덕션 품질을 지킵니다. 그 비결은 '더 많은 테스트'가 아니라 벤치마크 게이트, 릴리스 브랜치 고정, 커밋 단위 이등분이라는 세 가지 결정론적 장치입니다. vLLM 유지관리팀이 공개한 운영기를 타키클라우드 서빙 관점에서 뜯어봤습니다.]]></summary></entry><entry xml:lang="ar"><title type="html">سرب من الوكلاء أعاد كتابة SQLite بلغة Rust: اقتصاديات الوكلاء المتعددين من Cursor</title><link href="https://thakicloud.github.io/ar/agentops/cursor-agent-swarm-sqlite-rust/" rel="alternate" type="text/html" title="سرب من الوكلاء أعاد كتابة SQLite بلغة Rust: اقتصاديات الوكلاء المتعددين من Cursor" /><published>2026-07-21T00:00:00+09:00</published><updated>2026-07-21T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/agentops/cursor-agent-swarm-sqlite-rust</id><content type="html" xml:base="https://thakicloud.github.io/ar/agentops/cursor-agent-swarm-sqlite-rust/"><![CDATA[<p>نشرت Cursor نهاية الأسبوع عرضًا لافتًا. أعطت سربًا من الوكلاء مهمة إعادة بناء SQLite من الصفر. لا شيفرة مصدرية، ولا مجموعة اختبارات قائمة، ولا إنترنت. كان المُدخل الوحيد هو دليل SQLite الرسمي المؤلف من 835 صفحة. قرأ السرب هذا المستند وكتب نسخة من SQLite بلغة Rust، واجتازت تلك النسخة مجموعة اختبارات محجوزة بشكل منفصل (sqllogictest) بنسبة 100%.</p>

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

<p><img src="/assets/images/cursor-agent-swarm-sqlite-rust-hero.png" alt="صورة تجريدية لسرب من الوكلاء تتجمع فيه عقد مستقلة في بنية شجرية متفرعة واحدة" /></p>

<h2 id="ماذا-حدث">ماذا حدث</h2>

<p>كانت المهمة التي استخدمتها Cursor للتحقق هي “تنفيذ SQLite بلغة Rust من الصفر باستخدام الوثائق فقط”. هذه المهمة سبق أن هزمت سربًا سابقًا مرة واحدة، فصارت بمثابة اختبار حاسم لما إذا كان النظام قد تحسّن فعلًا. بالأرقام الرسمية:</p>

<ul>
  <li><strong>الصحة</strong>: اجتازت نسخة Rust التي أنتجها السرب الجديد مجموعة sqllogictest المحجوزة بنسبة 100%. تتألف هذه المجموعة من ملايين الاستعلامات.</li>
  <li><strong>سرعة التقدّم</strong>: بتركيبة Grok 4.5 بلغ نقطة 80% خلال أربع ساعات. أما السرب السابق فقد انهار تقدّمه في المهمة نفسها ووجب إيقافه قبل الساعة الثانية.</li>
  <li><strong>تفاوت التكلفة</strong>: بلغ فرق تكلفة تحقيق الهدف نفسه تمامًا <strong>15 ضعفًا</strong> حسب مزيج النماذج. كلّفت أرخص تركيبة، وهي مخطِّط Opus 4.8 مع عمّال Composer 2.5، مبلغ 1339 دولارًا، بينما كلّف تشغيل جميع الأدوار على GPT-5.5 مبلغ 10565 دولارًا.</li>
</ul>

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

<h2 id="كيف-يبدو-هذا-السرب">كيف يبدو هذا السرب</h2>

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

<p>حتى هنا الصورة مألوفة. الجزء الذي يتضمن هندسة حقيقية يأتي بعده: <strong>التحكم بالإصدارات ومعالجة تعارض الدمج</strong>.</p>

<pre><code class="language-mermaid">flowchart TB
    GOAL["الهدف: تنفيذ SQLite بلغة Rust&lt;br/&gt;(المُدخل: دليل من 835 صفحة فقط)"]
    PLANNER["وكيل المخطِّط&lt;br/&gt;نموذج حدودي · يقسّم الهدف إلى شجرة"]
    subgraph WORKERS["مجمّع وكلاء العامل (نماذج سريعة ورخيصة)"]
        W1["عامل: المُحلّل"]
        W2["عامل: محرّك التخزين"]
        W3["عامل: منفّذ SQL"]
    end
    VCS["نظام VCS جديد&lt;br/&gt;يتحمّل نحو 1000 التزام في الثانية"]
    MERGE["وكيل دمج محايد&lt;br/&gt;يحلّ التعارضات بإنصاف"]
    TEST["sqllogictest محجوز&lt;br/&gt;ملايين الاستعلامات · نجاح 100%"]

    GOAL --&gt; PLANNER
    PLANNER --&gt; W1
    PLANNER --&gt; W2
    PLANNER --&gt; W3
    W1 --&gt; VCS
    W2 --&gt; VCS
    W3 --&gt; VCS
    VCS -.تعارض ظهر.-&gt; MERGE
    MERGE -.التزام محلول.-&gt; VCS
    VCS --&gt; TEST
</code></pre>

<h2 id="لماذا-بناء-نظام-تحكم-بالإصدارات-جديد">لماذا بناء نظام تحكم بالإصدارات جديد</h2>

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

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

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

<h2 id="ما-الذي-جرى-التحقق-منه-فعلًا">ما الذي جرى التحقق منه فعلًا</h2>

<p>من الأمانة الفصل بين ما أكّده الإعلان وما لم يؤكّده.</p>

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

<p>في الوقت نفسه، ثمة حذر مبرَّر. جملة “أعاد كتابة SQLite” صحيحة ضمن نطاق دلالات SQL التي تغطيها sqllogictest. لا تعني أن السرب أعاد إنتاج كل ما عالجه SQLite الحقيقي عبر عقود: توافق صيغة الملفات، والتعافي من الأعطال، والتزامن المتطرّف، ومسارات الأداء الدقيقة. هذا العرض دليل على أن السرب يستطيع ملء مواصفة قابلة للتعبير عنها باختبارات، لا دليلًا على بديل مطابق 1:1 لـ SQLite الإنتاجي. وقد قدّمته Cursor نفسها كمهمة مرجعية لا كإطلاق منتج.</p>

<h2 id="دلالات-ذلك-على-thakicloud">دلالات ذلك على ThakiCloud</h2>

<p>تكاد هذه الحالة تؤكّد افتراضات التصميم خلف <strong>Paxis</strong> (السحابة الأصيلة للوكلاء) التي نبنيها. كما تتشابك مع منطق الجدوى الاقتصادية لـ <strong>ai-platform</strong> (بنيتنا التحتية للذكاء الاصطناعي والتعلّم الآلي المبنية على K8s) الكامنة تحتها.</p>

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

<p><strong>عدسة ai-platform: الـ15 ضعفًا مسألة تموضع.</strong> كون التكلفة تأرجحت 15 ضعفًا بحسب مزيج النماذج يعني أن اقتصاديات الوكلاء المتعددين تعود في النهاية إلى <strong>أين تضع أي نموذج</strong>. نموذج حدودي على المخطِّط ونموذج رخيص على العمّال يكلّف 1339 دولارًا؛ ودفع كل دور إلى أغلى نموذج يكلّف 10565 دولارًا. يستهدف ai-platform من ThakiCloud تحديدًا جعل هذا التموضع رخيصًا على مستوى البنية التحتية. جدولة GPU المبنية على Kueue تحشد طبقة العمّال بكثافة وبتكلفة منخفضة، وخدمة vLLM والعزل متعدد المستأجرين يخفّضان سعر الوحدة للاستدلال المتوازي واسع النطاق للنماذج الرخيصة، والنشر داخل المؤسسة والسيادي يؤمّن جدوى الاستضافة الذاتية بدل الفوترة بالاستخدام لواجهات API. فإذا خفّضت Cursor الـ15 ضعفًا بمزيج من واجهات API سحابية، فإن مؤسسة تملك بنيتها التحتية تستطيع دفع هذا المنحنى للأسفل مرة أخرى بنقل طبقة العمّال إلى الاستضافة الذاتية. الخدمة منخفضة التكلفة (ai-platform) هي ما يصنع اقتصاديات الوكلاء (Paxis).</p>

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

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

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

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

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

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

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

<ul>
  <li><a href="https://cursor.com/blog/agent-swarm-model-economics">Agent swarms and the new model economics (مدونة Cursor الرسمية)</a></li>
  <li><a href="https://x.com/cursor_ai/status/2079256614238814551">إعلان Cursor الرسمي (X)</a></li>
  <li><a href="https://alphasignal.ai/news/cursor-s-ai-swarm-rebuilt-sqlite-from-scratch-at-15x-lower-cost">Cursor’s AI Swarm Rebuilt SQLite From Scratch at 15x Lower Cost (AlphaSignal)</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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="agentops" /><category term="agentops" /><category term="cursor" /><category term="agent-swarm" /><category term="multi-agent" /><category term="model-economics" /><category term="orchestration" /><category term="paxis" /><category term="thakicloud" /><summary type="html"><![CDATA[عرضت Cursor سربًا من الوكلاء أعاد بناء SQLite بلغة Rust اعتمادًا على دليلها المؤلف من 835 صفحة فقط. اجتاز 100% من مجموعة اختبارات محجوزة، وتفاوتت التكلفة 15 ضعفًا حسب مزيج النماذج، ودفع معدل الإنتاج Cursor إلى بناء نظام تحكم بالإصدارات جديد. نتحقق من الأرقام الرسمية لا من الضجيج، ونقرأه بعدسة السحابة الأصيلة للوكلاء.]]></summary></entry><entry xml:lang="ar"><title type="html">158 مهارة و24 وكيلًا في مكوّن إضافي واحد: كيف يروّض هيكل حتمي انفجار الوكلاء</title><link href="https://thakicloud.github.io/ar/dev/agentops/agent-plugin-158-skills-deterministic-flow/" rel="alternate" type="text/html" title="158 مهارة و24 وكيلًا في مكوّن إضافي واحد: كيف يروّض هيكل حتمي انفجار الوكلاء" /><published>2026-07-21T00:00:00+09:00</published><updated>2026-07-21T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/dev/agentops/agent-plugin-158-skills-deterministic-flow</id><content type="html" xml:base="https://thakicloud.github.io/ar/dev/agentops/agent-plugin-158-skills-deterministic-flow/"><![CDATA[<p><img src="/assets/images/agent-plugin-158-skills-deterministic-flow-hero.png" alt="تصور تجريدي لوحدات مهارات عديدة تتقارب في خط أنابيب عمودي مرتّب واحد" /></p>

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

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

<p>يُعدّ المكوّن الإضافي مفتوح المصدر <strong>Digital Marketing Pro</strong> حالة مثيرة تتصدى لهذه المفارقة مباشرة. فهو يجمع بين 158 مهارة و24 وكيلًا متخصصًا (وثائق المستودع تذكر 25، والتغريدة الأصلية قالت 24) ويحافظ مع ذلك على اتساق إنتاج الملفات نفسها بالترتيب نفسه في كل مرة. السر ليس نموذجًا أذكى بل تدفّق استراتيجية مثبّت في 12 جزءًا، أي هيكل حتمي. يحلّل هذا المقال ليس أداة التسويق نفسها بل تصميم هندسة الوكلاء بداخلها. ما البنية التي تصمد حتى حين تنفجر المهارات عددًا، وكيف يتصل ذلك المبدأ بمنصة الوكلاء التي تبنيها ThakiCloud.</p>

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

<h2 id="ما-هو-هذا-المكوّن-الإضافي">ما هو هذا المكوّن الإضافي</h2>

<p>Digital Marketing Pro مكوّن إضافي تسويقي مفتوح المصدر صادر برخصة MIT. غرضه الظاهري مساعدة الوكالات والفرق التسويقية الداخلية على إنتاج مستندات تسويقية باتساق عبر علامات تجارية عديدة. ووفقًا لوصف المستودع، يستهدف الوكالات التي تتعامل مع ما بين 50 و200 علامة تجارية للعملاء، مُمرّرًا كل علامة عبر التدفّق نفسه المكوّن من 12 جزءًا لإنتاج الملفات نفسها بالترتيب نفسه.</p>

<p>من حيث الأرقام، المكوّن كبير نسبيًا. لديه 158 مهارة و24 وكيلًا متخصصًا، وتدفّق استراتيجية من 12 جزءًا مُوسّع إلى 61 خطوة تفصيلية. وفوق ذلك يقع الاستعداد للمادة 50 من قانون الذكاء الاصطناعي الأوروبي، وميزات AEO/GEO (تحسين محرّكات الإجابة) لست منصّات بما فيها Google AI Mode، ودعم Cowork الذي يحفظ الحالة على مستوى الفريق.</p>

<p>ما يستحق الملاحظة هو هدف التثبيت. فالمكوّن ليس مقيّدًا بـ Claude Code وحده؛ إنه يُثبَّت عبر عدة أوقات تشغيل للوكلاء منها Cowork وCodex وCursor وCopilot CLI وAntigravity. بعبارة أخرى، صُمّمت حزمة واحدة من المهارات والوكلاء لتعمل عبر عدة أطر (harnesses). وهذا قرار تصميمي مهم بما يكفي لتناوله على حدة أدناه.</p>

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

<h2 id="هيكل-حتمي-يروّض-انفجار-المهارات">هيكل حتمي يروّض انفجار المهارات</h2>

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

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

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

<pre><code class="language-mermaid">flowchart TB
    A[طلب مهمة&lt;br/&gt;علامة X] --&gt; B[دخول التدفّق الثابت&lt;br/&gt;من 12 جزءًا]
    B --&gt; C[كل جزء: مخرج محدّد&lt;br/&gt;بترتيب محدّد]
    C --&gt; D{اختيار المهارة المناسبة للجزء&lt;br/&gt;من بين 158}
    D --&gt; E{إسناد دور&lt;br/&gt;من بين 24 وكيلًا}
    E --&gt; F[تطبيق قواعد الاعتماد&lt;br/&gt;الصريحة بين الأجزاء]
    F --&gt; G[الملفات نفسها بالترتيب نفسه&lt;br/&gt;اتساق مستقل عن العلامة]
    G --&gt; H[محفظة مستندات&lt;br/&gt;قابلة للتدقيق]
</code></pre>

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

<h2 id="ماذا-يعني-التثبيت-عبر-ست-أوقات-تشغيل">ماذا يعني التثبيت عبر ست أوقات تشغيل</h2>

<p>تصميم آخر يستحق الملاحظة هو أن هذا المكوّن يُثبَّت عبر عدة أوقات تشغيل للوكلاء. Claude Code وCursor وCodex وCopilot CLI كلٌّ منها إطار مختلف. مُطالبات النظام لديها مختلفة، وأساليب تعريف الأدوات مختلفة، ونماذج الأذونات مختلفة. وأن تُصمَّم حزمة المهارات والوكلاء نفسها لتعمل فوقها جميعًا يعني أن القدرة تراكمت في المهارات، لا في الإطار.</p>

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

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

<h2 id="الأثر-على-منتجات-thakicloud">الأثر على منتجات ThakiCloud</h2>

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

<p>المشكلة نفسها التي حلّها Digital Marketing Pro بترويض 158 مهارة عبر تدفّق من 12 جزءًا، تحلّها Paxis على نطاق أكبر. فبمجرد تجاوز المهارات 960، يصل سؤال “أي مهارة ومتى” إلى نطاق لا يستطيع إنسان تحديده يدويًا، فيحلّ اختيار المهارات المعتمد على BM25 محلّ ذلك الهيكل. فبدلًا من استدعاء أي مهارة بحرية، تُطرح فقط المهارات الأوثق صلة بالطلب كمرشّحين، ما يقلّل درجات الحرية. هذا المبدأ نفسه الذي منع به التدفّق من 12 جزءًا الترتيب الحر، لكن بدل تدفّق ثابت يتحكم في الحرية عبر اختيار قائم على الاسترجاع.</p>

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

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

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

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

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

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

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

<ul>
  <li>المستودع: <a href="https://github.com/indranilbanerjee/digital-marketing-pro">github.com/indranilbanerjee/digital-marketing-pro</a></li>
  <li>المصدر الأصلي: <a href="https://x.com/hjguyhan/status/2079315207579660557">تغريدة @tom_doerr</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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="agentops" /><category term="AgentOps" /><category term="Skills" /><category term="MultiAgent" /><category term="ClaudeCode" /><category term="Plugins" /><category term="Determinism" /><category term="Paxis" /><category term="AIAgents" /><summary type="html"><![CDATA[يجمع المكوّن الإضافي مفتوح المصدر Digital Marketing Pro بين 158 مهارة و24 وكيلًا متخصصًا دون أن ينهار. السر هيكل حتمي: تدفّق ثابت من 12 جزءًا. نحلّل التصميم ونبيّن كيف تحوّل Paxis من ThakiCloud المبدأ نفسه إلى منتج.]]></summary></entry><entry xml:lang="ar"><title type="html">وضع قارئ الشاشة في Claude Code: سطر واحد يفتح البرمجة الطرفية بالذكاء الاصطناعي للجميع</title><link href="https://thakicloud.github.io/ar/dev/claude-code-screen-reader-accessibility/" rel="alternate" type="text/html" title="وضع قارئ الشاشة في Claude Code: سطر واحد يفتح البرمجة الطرفية بالذكاء الاصطناعي للجميع" /><published>2026-07-21T00:00:00+09:00</published><updated>2026-07-21T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/dev/claude-code-screen-reader-accessibility</id><content type="html" xml:base="https://thakicloud.github.io/ar/dev/claude-code-screen-reader-accessibility/"><![CDATA[<p><img src="/assets/images/claude-code-screen-reader-accessibility-hero.png" alt="تصور تجريدي لطرفية أُعيد تنظيمها إلى تدفق خطي نظيف من النص" /></p>

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

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

<p>يتصدى Claude Code الآن لهذه المشكلة مباشرة بوضع قارئ شاشة. سطر واحد، <code class="language-plaintext highlighter-rouge">claude --ax-screen-reader</code>، يحوّل واجهة الطرفية البصرية إلى نص خطي بسيط. فبدلًا من العرض المزخرف، يطبع أسطرًا موسومة بالترتيب حتى تستطيع قارئات الشاشة مثل VoiceOver وNVDA وJAWS القراءة من الأعلى إلى الأسفل بشكل طبيعي. يستعرض هذا المقال بالضبط ما يغيّره الوضع، وكيف يعمل، ولماذا تُعدّ إمكانية الوصول لواجهات الوكلاء مشكلة يجب أن تتبنّاها منظومة التطوير بأكملها الآن.</p>

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

<h2 id="ما-هو-وضع-قارئ-الشاشة">ما هو وضع قارئ الشاشة</h2>

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

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

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

<pre><code class="language-mermaid">flowchart TB
    A[بدء جلسة Claude Code] --&gt; B{هل وضع قارئ الشاشة&lt;br/&gt;مُفعّل؟}
    B --&gt;|الوضع العادي| C[إعادة رسم اللوحة&lt;br/&gt;حركة المؤشر والعرض]
    B --&gt;|--ax-screen-reader| D[مخرجات نص خطي&lt;br/&gt;إلحاق أسطر موسومة]
    C --&gt; E[معلومات عالية الكثافة&lt;br/&gt;للمستخدمين المبصرين]
    D --&gt; F[قارئ الشاشة يقرأ&lt;br/&gt;من الأعلى للأسفل]
    F --&gt; G[محادثة وموافقات ومراجعة&lt;br/&gt;تكتمل بالصوت]
    D --&gt; H[جرس الطرفية&lt;br/&gt;عند الحاجة للانتباه]
</code></pre>

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

<h2 id="كيفية-التفعيل-وطريقة-العمل">كيفية التفعيل وطريقة العمل</h2>

<p>هناك طريقتان لتشغيل وضع قارئ الشاشة. لتفعيله لجلسة واحدة، مرّر العلم عند الإطلاق.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>claude <span class="nt">--ax-screen-reader</span>
</code></pre></div></div>

<p>هذا العلم موجود فعلًا في Claude Code المثبّت. يُظهره فحص مخرجات المساعدة:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>claude <span class="nt">--help</span> | <span class="nb">grep </span>ax-screen
  <span class="nt">--ax-screen-reader</span>                    Render screen-reader friendly output
</code></pre></div></div>

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

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">CLAUDE_AX_SCREEN_READER</span><span class="o">=</span>1
</code></pre></div></div>

<p>الآن تستخدم أي جلسة Claude Code تُفتح في تلك الصدفة مخرجات ملائمة لقارئ الشاشة دون علم منفصل. وفقًا للوثائق الرسمية، يعمل هذا الوضع على Claude Code الإصدار v2.1.181 وما بعده، وترفض الإصدارات الأقدم العلم <code class="language-plaintext highlighter-rouge">--ax-screen-reader</code> بخطأ.</p>

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

<p>هناك إعداد منفصل للمستخدمين ضعاف البصر الذين يعتمدون على مكبّر شاشة.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">CLAUDE_CODE_ACCESSIBILITY</span><span class="o">=</span>1
</code></pre></div></div>

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

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

<h2 id="لماذا-يهمّ-الآن">لماذا يهمّ الآن</h2>

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

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

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

<h2 id="الأثر-على-منتجات-thakicloud">الأثر على منتجات ThakiCloud</h2>

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

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

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

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

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

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

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

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

<ul>
  <li>وثائق إمكانية الوصول في Claude Code: <a href="https://code.claude.com/docs/en/accessibility">code.claude.com/docs/en/accessibility</a></li>
  <li>قضية طلب الميزة (NVDA/JAWS): <a href="https://github.com/anthropics/claude-code/issues/11002">anthropics/claude-code #11002</a></li>
  <li>المصدر الأصلي: <a href="https://x.com/hjguyhan/status/2079435394727416168">تغريدة @ClaudeDevs</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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="ClaudeCode" /><category term="Accessibility" /><category term="ScreenReader" /><category term="AICoding" /><category term="DeveloperProductivity" /><category term="Paxis" /><category term="InclusiveDev" /><summary type="html"><![CDATA[أضاف Claude Code وضع قارئ الشاشة الذي يستبدل واجهة الطرفية البصرية بنص خطي بسيط. إليك ما يغيّره الأمر `claude --ax-screen-reader` فعليًا، وكيف يعمل، ولماذا تهمّ إمكانية الوصول لواجهات الوكلاء منصات مثل ThakiCloud.]]></summary></entry><entry xml:lang="ar"><title type="html">استبدل واجهة OpenAI Realtime بسطر واحد: hugging-voice، حزمة صوتية مفتوحة تشغّلها بنفسك</title><link href="https://thakicloud.github.io/ar/llmops/hugging-voice-open-realtime-voice-self-hosted/" rel="alternate" type="text/html" title="استبدل واجهة OpenAI Realtime بسطر واحد: hugging-voice، حزمة صوتية مفتوحة تشغّلها بنفسك" /><published>2026-07-21T00:00:00+09:00</published><updated>2026-07-21T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/llmops/hugging-voice-open-realtime-voice-self-hosted</id><content type="html" xml:base="https://thakicloud.github.io/ar/llmops/hugging-voice-open-realtime-voice-self-hosted/"><![CDATA[<p><img src="/assets/images/hugging-voice-open-realtime-voice-self-hosted-hero.png" alt="خط معالجة صوتي لحظي مفتوح تشغّله بنفسك" /></p>

<p>كُتب هذا المقال للمهندسين الذين أرادوا إضافة وكيل صوتي لكنهم ترددوا أمام الارتباط بمزوّد واحد وتكلفة واجهة OpenAI Realtime، ولمسؤولي البنية التحتية الذين يوازنون ما إذا كان الصوت الحواري قابلاً للتشغيل على حزمتهم الخاصة. باختصار، إن تصميم العرض التجريبي <a href="https://huggingface.co/spaces/HuggingFaceM4/hugging-voice">hugging-voice</a> من Hugging Face والمكتبة التي تعمل تحته، <a href="https://github.com/huggingface/speech-to-speech">speech-to-speech</a>، بسيط وعملي في آن معاً. فهو يفتح خط المعالجة الصوتي اللحظي بمراحله الأربع كمصدر مفتوح، بينما يغلّف الطرف الخارجي بالواجهة نفسها التي يقدمها OpenAI Realtime. لذا إن كان لديك بالفعل كود مكتوب لعميل OpenAI اللحظي، فيمكنك الانتقال إلى حزمتك الخاصة بتغيير سطر واحد فقط: العنوان الذي يشير إليه الخادم. لا نستشهد بأرقام الأداء إلا ضمن النطاق الذي نشره المشروع، ونوضّح مسبقاً أنها ليست أرقاماً قسناها بأنفسنا.</p>

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

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

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

<h2 id="ما-هو-hugging-voice-وما-هو-speech-to-speech">ما هو hugging-voice وما هو speech-to-speech</h2>

<p>لنحدد المصطلحات أولاً: hugging-voice هو العرض التجريبي (Space) الذي يمكنك التحدث إليه مباشرة في المتصفح، والمحرك الذي يعالج الصوت داخله فعلياً هو مكتبة speech-to-speech. تقسّم المكتبة الوكيل الصوتي اللحظي إلى أربع مراحل: كشف النشاط الصوتي (VAD)، وتحويل الكلام إلى نص (STT)، ونموذج لغوي (LLM)، وتحويل النص إلى كلام (TTS). تعمل كل مرحلة في خيط منفصل وتُوصل بطوابير، بحيث يتدفق خرج مرحلة إلى المرحلة التالية بثاً حياً. يظهر نص جزئي قبل أن ينهي المستخدم كلامه، ويبدأ توليد الكلام على الكلمات الأولى قبل أن يكمل النموذج الجملة، ما يقلّص زمن الاستجابة المُدرَك.</p>

<div class="mermaid">
flowchart TB
    A["دخل الميكروفون<br />تدفق صوتي لحظي"] --&gt; B["كشف الكلام VAD<br />Silero VAD v5"]
    B --&gt; C["التعرّف على الكلام STT<br />Parakeet TDT · Whisper"]
    C --&gt; D["توليد الرد LLM<br />OpenAI-compatible API · vLLM · llama.cpp"]
    D --&gt; E["تركيب الكلام TTS<br />Qwen3-TTS · Kokoro"]
    E --&gt; F["خرج السماعة<br />تشغيل ببثّ حي"]
    G["خادم WebSocket<br />متوافق مع OpenAI Realtime"] -.- B
    G -.- C
    G -.- D
    G -.- E
</div>

<p>في هذا المخطط، خادم WebSocket على اليمين هو سلاح المشروع الحقيقي. مجرد لصق أربع مراحل معاً ليس جديداً. ما يميّز speech-to-speech هو أنه يغلّف خط المعالجة بأكمله بنقطة نهاية WebSocket متوافقة مع بروتوكول OpenAI Realtime. هذا يتيح لعميل OpenAI لحظي قائم أن يتصل بهذا الخادم كأنه OpenAI نفسه. ويجدر بالذكر أن هذه الحزمة ليست لعبة تجريبية: فهي تشغّل البنية التحتية الصوتية اللحظية لروبوتات Reachy Mini من Hugging Face في الإنتاج.</p>

<h2 id="الانتقال-بسطر-واحد">الانتقال بسطر واحد</h2>

<p>هذا هو الجزء الذي يسمّيه المشروع نفسه “الترحيل بسطر واحد”. الشيء الوحيد الذي على عميل كان يستخدم OpenAI Realtime تغييره هو عنوان الاتصال. في ما يلي مثال عميل Python الذي توثّقه وثائق المشروع.</p>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="n">openai</span> <span class="kn">import</span> <span class="n">OpenAI</span>

<span class="n">client</span> <span class="o">=</span> <span class="nc">OpenAI</span><span class="p">(</span>
    <span class="n">base_url</span><span class="o">=</span><span class="sh">"</span><span class="s">http://localhost:8765/v1</span><span class="sh">"</span><span class="p">,</span>
    <span class="n">websocket_base_url</span><span class="o">=</span><span class="sh">"</span><span class="s">ws://localhost:8765/v1</span><span class="sh">"</span><span class="p">,</span>
    <span class="n">api_key</span><span class="o">=</span><span class="sh">"</span><span class="s">not-needed</span><span class="sh">"</span><span class="p">,</span>
<span class="p">)</span>

<span class="k">with</span> <span class="n">client</span><span class="p">.</span><span class="n">realtime</span><span class="p">.</span><span class="nf">connect</span><span class="p">(</span><span class="n">model</span><span class="o">=</span><span class="sh">"</span><span class="s">local</span><span class="sh">"</span><span class="p">)</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
    <span class="n">conn</span><span class="p">.</span><span class="nf">send</span><span class="p">({</span>
        <span class="sh">"</span><span class="s">type</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">session.update</span><span class="sh">"</span><span class="p">,</span>
        <span class="sh">"</span><span class="s">session</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span>
            <span class="sh">"</span><span class="s">type</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">realtime</span><span class="sh">"</span><span class="p">,</span>
            <span class="sh">"</span><span class="s">instructions</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">You are a helpful assistant.</span><span class="sh">"</span><span class="p">,</span>
            <span class="sh">"</span><span class="s">audio</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span>
                <span class="sh">"</span><span class="s">input</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span>
                    <span class="sh">"</span><span class="s">turn_detection</span><span class="sh">"</span><span class="p">:</span> <span class="p">{</span>
                        <span class="sh">"</span><span class="s">type</span><span class="sh">"</span><span class="p">:</span> <span class="sh">"</span><span class="s">server_vad</span><span class="sh">"</span><span class="p">,</span>
                        <span class="sh">"</span><span class="s">interrupt_response</span><span class="sh">"</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
                    <span class="p">}</span>
                <span class="p">}</span>
            <span class="p">},</span>
        <span class="p">}</span>
    <span class="p">})</span>

    <span class="k">for</span> <span class="n">event</span> <span class="ow">in</span> <span class="n">conn</span><span class="p">:</span>
        <span class="nf">print</span><span class="p">(</span><span class="n">event</span><span class="p">.</span><span class="nb">type</span><span class="p">)</span>
</code></pre></div></div>

<p>ما يستحق الانتباه هو أن <code class="language-plaintext highlighter-rouge">base_url</code> و<code class="language-plaintext highlighter-rouge">websocket_base_url</code> يشيران إلى خادم محلي، وأن <code class="language-plaintext highlighter-rouge">api_key</code> غير مطلوب فعلياً. أما التعليمات المُمرَّرة عبر <code class="language-plaintext highlighter-rouge">session.update</code>، وكشف الأدوار المعتمد على VAD في جهة الخادم، ومقاطعة الرد أثناء بثّه، فكلها تتبع المخطط نفسه الذي يتبعه OpenAI Realtime. بعبارة أخرى، يكاد كود التطبيق لا يتغير، ولا ينتقل سوى الخلفية من واجهة خارجية إلى خادمك الخاص. وللفرق التي تقلق من الارتباط بمزوّد واحد، فإن توافق الواجهة هذا يمثّل بمفرده أكبر قيمة عملية.</p>

<h2 id="التثبيت-والتشغيل">التثبيت والتشغيل</h2>

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

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install </span>speech-to-speech
</code></pre></div></div>

<p>يستخدم الإعداد الافتراضي Parakeet TDT لـ STT، وواجهة متوافقة مع OpenAI لـ LLM، وQwen3-TTS لـ TTS. وإن احتجت خلفية محددة، فثبّتها بالإضافات.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install</span> <span class="s2">"speech-to-speech[kokoro]"</span>
pip <span class="nb">install</span> <span class="s2">"speech-to-speech[faster-whisper]"</span>
</code></pre></div></div>

<p>يبدو تشغيل الخادم هكذا. يطلق هذا الأمر خادماً متوافقاً مع OpenAI Realtime عبر WebSocket محلي.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">OPENAI_API_KEY</span><span class="o">=</span>...
speech-to-speech
</code></pre></div></div>

<p>النقطة المثيرة هنا هي أن مرحلة LLM يمكن أن تعمل محلياً بالكامل. في ما يلي مثال يقيم نموذجاً من فئة Gemma 4 بواسطة llama.cpp، ويجعل speech-to-speech يشير إلى تلك النقطة المحلية.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>llama-server <span class="nt">-hf</span> ggml-org/gemma-4-E4B-it-GGUF <span class="nt">-np</span> 2 <span class="nt">-c</span> 65536

speech-to-speech <span class="se">\</span>
    <span class="nt">--model_name</span> <span class="s2">"ggml-org/gemma-4-E4B-it-GGUF"</span> <span class="se">\</span>
    <span class="nt">--responses_api_base_url</span> <span class="s2">"http://127.0.0.1:8080/v1"</span> <span class="se">\</span>
    <span class="nt">--responses_api_api_key</span> <span class="s2">""</span>
</code></pre></div></div>

<p>على أجهزة Mac بمعالج Apple Silicon يمكنك تفعيل الإعدادات المحسّنة وربط نموذج mlx، وعلى العكس، إن نقص عتاد GPU المحلي، يمكنك توجيه خلفية LLM إلى Hugging Face Inference Providers.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>speech-to-speech <span class="se">\</span>
    <span class="nt">--local_mac_optimal_settings</span> <span class="se">\</span>
    <span class="nt">--model_name</span> <span class="s2">"mlx-community/Qwen3-4B-Instruct-2507-bf16"</span>
</code></pre></div></div>

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

<h2 id="استبدال-الوحدات-خلفيات-stt-وllm-وtts">استبدال الوحدات: خلفيات STT وLLM وTTS</h2>

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

<table>
  <thead>
    <tr>
      <th>المرحلة</th>
      <th>الخلفية الافتراضية</th>
      <th>البدائل</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>VAD</td>
      <td>Silero VAD v5</td>
      <td>مدمجة فقط</td>
    </tr>
    <tr>
      <td>STT</td>
      <td>Parakeet TDT</td>
      <td>Whisper, Faster Whisper, Paraformer</td>
    </tr>
    <tr>
      <td>LLM</td>
      <td>واجهة متوافقة مع OpenAI</td>
      <td>Transformers, mlx-lm, vLLM, llama.cpp</td>
    </tr>
    <tr>
      <td>TTS</td>
      <td>Qwen3-TTS</td>
      <td>Kokoro, Pocket TTS, ChatTTS, MMS</td>
    </tr>
  </tbody>
</table>

<p>وهناك أيضاً أربعة أوضاع تشغيل. الوضع الافتراضي realtime هو WebSocket الذي يتكلم بروتوكول OpenAI Realtime؛ ويرتبط local مباشرة بالميكروفون والسماعة؛ ويتبادل الوضعان websocket وsocket صوت PCM الخام عبر WebSocket وTCP على التوالي. ويمكن تحديد اللغة أو تركها للكشف التلقائي. إن القدرة على مزج دقة STT، وجودة LLM وتكلفته، وطابع TTS وزمن استجابته بما يناسب متطلباتك، هي بالضبط درجة الحرية التي لا تمنحها واجهة مغلقة.</p>

<h2 id="زمن-الاستجابة-وحالة-واقعية">زمن الاستجابة، وحالة واقعية</h2>

<p>في الوكيل الصوتي، يهمّ زمن الاستجابة بقدر ما تهمّ الدقة. يشعر الناس بانقطاع الحوار إذا تأخر الرد بضع مئات من الأجزاء من الثانية فقط. يستهدف <a href="https://huggingface.co/blog/cerebras-gemma4-voice-ai">العرض التجريبي للصوت اللحظي</a> الذي نشرته Hugging Face بالتعاون مع Cerebras مشكلة زمن الاستجابة مباشرة. يستخدم الإعداد Parakeet من Nvidia لـ STT، ونموذج Gemma 4 من Google DeepMind يعمل على استدلال Cerebras للنموذج اللغوي، وQwen3-TTS من Alibaba لـ TTS. والهدف هو خفض زمن استجابة مرحلة LLM باستدلال Cerebras فائق السرعة كي يتدفق الحوار بطبيعية تضاهي التحدث إلى إنسان. غير أنه، ضمن ما استطاع هذا المقال التحقق منه، لم تُنشر أرقام محددة بالأجزاء من الثانية، لذا نتحفظ عن مقارنة كمية.</p>

<p>وهناك دليل إنتاجي أيضاً. تشغّل هذه الحزمة روبوتات Reachy Mini المذكورة آنفاً، وتذكر Hugging Face أن أكثر من 9,000 روبوت منتشرة بالفعل في الميدان. وسبب هوس المشروع بزمن الاستجابة هو أن سرعة الاستجابة في البيئات المدمجة هي ما يجعل التفاعل “يبدو حياً”. وقد تناولنا سابقاً ميزانية زمن الاستجابة للوكلاء الصوتيين من زاوية خدمة GPU، فإن كنت تفكر في كيفية توزيع زمن الاستجابة عبر كل مرحلة من خط المعالجة، نقترح قراءة <a href="/ar/llmops/voice-agent-latency-budget-gpu-serving/">ميزانية زمن استجابة الوكيل الصوتي وخدمة GPU</a> إلى جانب هذا المقال.</p>

<h2 id="دلالات-على-منتجات-thakicloud">دلالات على منتجات ThakiCloud</h2>

<p>يتشابك خط المعالجة هذا بطبيعية مع منتجينا كليهما.</p>

<p>من منظور ai-platform، فإن مرحلة LLM في speech-to-speech لا تستهلك في النهاية سوى نقطة نهاية متوافقة مع OpenAI، لذا يمكنك وضع خدمة vLLM من ThakiCloud مباشرة في ذلك المكان. ويصبح نموذجا STT وTTS حِملين منفصلين يشغلان GPU، وقوّتنا تكمن بالضبط في تحميل مثل هذه الأحمال الاستدلالية غير المتجانسة على مجموعة واحدة معاً، بجدولة GPU عبر Kueue وعزلها بين المستأجرين. وحركة الصوت تميل إلى تراكم التكلفة بالثانية، لذا تعمل تنافسية تكلفة الوحدة للخدمة الذاتية بقوة خاصة، وتلائم هذه الحزمة المفتوحة المتطلبات المحلية والسيادية حيث يجب ألا تغادر البيانات المبنى. وللعملاء الذين تمثّل لهم واجهة صوتية مغلقة عبئاً، يمكننا أن نقدّم خيار “تشغيلها على مجموعتك الخاصة عبر الواجهة نفسها”.</p>

<p>ومن منظور Paxis، الصوت قناة دخل وخرج جديدة تُلحق بالوكيل. Paxis هو مستوى تحكّم Agent-Native Cloud يعمل فوق ai-platform ويتعامل مع Skills وTools وPolicies وAudit Logs كموارد من الدرجة الأولى، وواجهة speech-to-speech المتوافقة مع OpenAI Realtime تسهّل إضافة قناة الصوت هذه إلى تنسيق الوكلاء القائم. فيمكن تكوين مسار يصبح فيه أمر منطوق دخلاً للوكيل، وتعود فيه نتيجة تنفيذ مهارة صوتاً، مع مرورها عبر بوابات السياسات وسجلات التدقيق. الخدمة الذاتية منخفضة التكلفة (ai-platform) تصنع اقتصاديات الوكلاء الصوتيين، وفوقها يتعامل مستوى التحكّم Agent-Native (Paxis) مع الصوت كقناة بأمان.</p>

<h2 id="خاتمة">خاتمة</h2>

<p>الرسالة التي يبعثها hugging-voice واضحة. لم يعد الصوت اللحظي مضطراً للاتكاء وحده على واجهات مغلقة لبضعة مزوّدين؛ وعند الحاجة، يمكنك إبقاء الواجهة كما هي ونقل الخلفية وحدها إلى بنيتك التحتية الخاصة. هذا التصميم، باختيار كل مرحلة من VAD إلى TTS وتغيير سطر واحد فقط لدى العميل، يخفض بشدة الحاجز أمام الفرق التي تدرس الخدمة الذاتية. وإن أردت رؤيته بنفسك، فتحدّث إليه مباشرة في <a href="https://huggingface.co/spaces/HuggingFaceM4/hugging-voice">العرض التجريبي (Space)</a>، أو ابدأ بـ <code class="language-plaintext highlighter-rouge">pip install speech-to-speech</code> من <a href="https://github.com/huggingface/speech-to-speech">مستودع GitHub</a>.</p>]]></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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="llmops" /><category term="speech-to-speech" /><category term="realtime-voice" /><category term="VoiceAI" /><category term="OpenAIRealtime" /><category term="STT" /><category term="TTS" /><category term="LLM-serving" /><category term="LLMOps" /><category term="on-prem" /><category term="self-hosting" /><summary type="html"><![CDATA[يغلّف مشروع hugging-voice من Hugging Face ومحركه speech-to-speech خط معالجة صوتي لحظي كامل، من كشف النشاط الصوتي إلى STT وLLM وTTS، خلف واجهة WebSocket متوافقة مع OpenAI Realtime. غيّر سطراً واحداً في عنوان الخادم لدى عميلك لتنتقل إلى بنيتك التحتية الخاصة. فككنا التصميم من منظور التشغيل والخدمة.]]></summary></entry><entry xml:lang="ar"><title type="html">لم يخترق Hugging Face بشرٌ بل وكيل ذكاء اصطناعي ذاتي: عندما صار خط معالجة البيانات سطح الهجوم</title><link href="https://thakicloud.github.io/ar/news/huggingface-agentic-ai-breach/" rel="alternate" type="text/html" title="لم يخترق Hugging Face بشرٌ بل وكيل ذكاء اصطناعي ذاتي: عندما صار خط معالجة البيانات سطح الهجوم" /><published>2026-07-21T00:00:00+09:00</published><updated>2026-07-21T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/news/huggingface-agentic-ai-breach</id><content type="html" xml:base="https://thakicloud.github.io/ar/news/huggingface-agentic-ai-breach/"><![CDATA[<p><img src="/assets/images/huggingface-agentic-ai-breach-hero.png" alt="صورة تجريدية لسرب من الوكلاء الذاتيين يتسلل إلى خط بيانات" /></p>

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

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

<h2 id="ماذا-حدث">ماذا حدث</h2>

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

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

<h2 id="مسار-الهجوم-خط-معالجة-البيانات-كان-سطح-الهجوم">مسار الهجوم: خط معالجة البيانات كان سطح الهجوم</h2>

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

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

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

<pre><code class="language-mermaid">flowchart TB
    A[المهاجم: يرفع مجموعة بيانات خبيثة] --&gt; B[خط معالجة مجموعات البيانات]
    B --&gt; C1["الثغرة 1&lt;br/&gt;remote-code dataset loader"]
    B --&gt; C2["الثغرة 2&lt;br/&gt;dataset config template injection"]
    C1 --&gt; D[تنفيذ تعليمات برمجية اعتباطية RCE]
    C2 --&gt; D
    D --&gt; E[الحصول على وصول بمستوى العقدة]
    E --&gt; F[جمع بيانات اعتماد السحابة والعناقيد]
    F --&gt; G[تحرك أفقي إلى العناقيد الداخلية]
    G --&gt; H["إطار وكيل ذاتي&lt;br/&gt;آلاف الإجراءات عبر سرب من الصناديق الرملية قصيرة العمر"]
</code></pre>

<h2 id="وزن-القول-إن-وكيلًا-ذاتيًا-قاد-الهجوم">وزن القول إن وكيلًا ذاتيًا قاد الهجوم</h2>

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

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

<p>دار هامش مثير للاهتمام في التقارير الثانوية. فمع تطور الاستجابة، عندما حاول الفريق تسليم التحليل الجنائي إلى نماذج تجارية متقدمة (GPT، Claude)، يُقال إن حواجز الأمان اعتبرت حمولات الاستغلال وآثار القيادة والتحكم هجمات ورفضت التعاون، فواصل الفريق الاكتشاف والتحليل بنموذج من فئة GLM 5.2 [تقديري]. تأتي هذه التفصيلة من بعض المنصات لا من الإشعار الرسمي لـ Hugging Face، لذا من الأسلم عدم قراءتها كحقيقة مؤكدة. لكن بصرف النظر عن دقتها، فإن التوتر نفسه، حيث لا يستطيع المدافع استخدام أداة بسبب سياسة أمانها، جدير بالتسجيل بوصفه أمرًا قد يتكرر.</p>

<h2 id="ما-الذي-كان-آمنًا-وما-لا-يزال-قيد-التحقيق">ما الذي كان آمنًا وما لا يزال قيد التحقيق</h2>

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

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

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

<h2 id="منظور-thakicloud-التعامل-مع-معالجة-البيانات-بوصفها-حدّ-ثقة">منظور ThakiCloud: التعامل مع معالجة البيانات بوصفها حدّ ثقة</h2>

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

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

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

<p>تتكامل العدستان. تضيّق ai-platform نطاق الانفجار في طبقة البنية التحتية لمعالجة البيانات، بينما تفحص Paxis كل إجراء في طبقة التحكم لسلوك الوكيل. في هجوم كهذا، حيث الدخول خط بيانات والانتشار وكيل ذاتي، يلزم الدفاع في الطبقتين لكسر السلسلة.</p>

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

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

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

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

<p>سيبقى احتواء Hugging Face السريع وكشفه الشفاف مثالًا جيدًا على الاستجابة. وما يبقى من واجب علينا بسيط: التعامل مع مجموعات البيانات بوصفها شيفرة لا ملفات، وجعل كل إجراء للوكيل موضوعًا للفحص والتدقيق.</p>

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

<ul>
  <li><a href="https://huggingface.co/blog/security-incident-july-2026">Security incident disclosure, July 2026 (مدونة Hugging Face الرسمية)</a></li>
  <li><a href="https://www.helpnetsecurity.com/2026/07/20/hugging-face-breached-by-autonomous-ai-agent/">Hugging Face breached by autonomous AI agent (Help Net Security)</a></li>
  <li><a href="https://www.bleepingcomputer.com/news/security/hugging-face-breach-autonomous-ai-agent-system-internal-datasets-credentials/">Hugging Face warns an autonomous AI agent hacked its network (BleepingComputer)</a></li>
  <li><a href="https://thehackernews.com/2026/07/worlds-largest-ai-model-repository.html">World’s Largest AI Model Repository Hugging Face Breached by Autonomous AI Agent (The Hacker News)</a></li>
  <li>تقارير ثانوية (العدد الدقيق للإجراءات وحكاية رفض النموذج تقارير منقولة لا حقائق مؤكدة): Cryptobriefing, Undercode Testing</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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="news" /><category term="security" /><category term="huggingface" /><category term="ai-agent" /><category term="supply-chain" /><category term="sandbox" /><category term="dataset-security" /><category term="news" /><category term="thakicloud" /><summary type="html"><![CDATA[في يوليو 2026 كشف Hugging Face عن اختراق داخلي قاده وكيل ذكاء اصطناعي ذاتي. كانت نقطة الدخول مجموعة بيانات خبيثة واحدة، وأدت ثغرتان في خط معالجة مجموعات البيانات إلى تنفيذ التعليمات البرمجية. نفصل ما تأكد عمّا لا يزال قيد التحقيق، ونشرح لماذا يجب التعامل مع معالجة البيانات بوصفها حدّ ثقة.]]></summary></entry><entry xml:lang="ar"><title type="html">الإعلان عن Qwen-Image-3.0: نموذج الصور من الجيل الثالث الذي يرفع شعار ‘الحقيقي (实)’، والأوزان لم تُنشر بعد</title><link href="https://thakicloud.github.io/ar/news/qwen-image-3-0-preview/" rel="alternate" type="text/html" title="الإعلان عن Qwen-Image-3.0: نموذج الصور من الجيل الثالث الذي يرفع شعار ‘الحقيقي (实)’، والأوزان لم تُنشر بعد" /><published>2026-07-21T00:00:00+09:00</published><updated>2026-07-21T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/news/qwen-image-3-0-preview</id><content type="html" xml:base="https://thakicloud.github.io/ar/news/qwen-image-3-0-preview/"><![CDATA[<p>صباح يوم الثلاثاء، نشر فريق Qwen على مدونته إعلان الجيل الثالث من نموذج توليد الصور. اسم النموذج هو Qwen-Image-3.0، وقد اختصر الفريق مرة أخرى الكلمات المفتاحية التي كان يطلقها مع كل جيل في عبارة واحدة. إذا كان الجيل 1.0 يحمل شعار “الدقة”، والجيل 2.0 شعار “الدقة والتنوع والاكتمال والجمالية والأصالة”، فإن جوهر الجيل 3.0 يتلخص في كلمة واحدة: “الحقيقي (实، Real)”.</p>

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

<h2 id="ما-الذي-أُعلن-عنه-في-qwen-image-30">ما الذي أُعلن عنه في Qwen-Image-3.0</h2>

<p>لنبدأ بالحقائق المؤكدة. أعلن فريق Qwen في 21 يوليو 2026 عن Qwen-Image-3.0، ووصف توجّه هذا النموذج عبر ثلاثة محاور رئيسية.</p>

<p>المحور الأول هو “المحتوى الغني (Rich Content)”. يستوعب النموذج مدخلات تعليمات (instructions) بطول يصل إلى 4.5 ألف رمز، ما يسمح له برسم تخطيطات عالية الكثافة المعلوماتية دفعة واحدة، مثل الصحف أو لوحات القصة المصورة (storyboard) أو أوراق الاختبارات. وأبرز مثال في الإعلان كان شبكة صور بتنسيق 3×3، حيث تمثل كل خانة إنفوغرافيك مختلف: كوميكس عن السلامة في الأنفاق، ومحاضرة في الهندسة الفراغية، وحركة القذائف في الفيزياء، ومقارنة بنية الحمض النووي للخلايا. وأُنتجت هذه الشبكة بالكامل من تعليمة واحدة بطول 3.7 ألف رمز. وشدّد الفريق على أن هذا لم يكن عبارة عن دمج صور متعددة، بل توليد واحد فقط. إلى جانب ذلك، عُرض مثال على رسم “شاشة داخل شاشة داخل شاشة” متداخل: شاشة VSCode تحتوي على Qwen Chat، وداخله شاشة WeChat، وداخلها ملصق (بوستر).</p>

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

<p>المحور الثالث هو “المعرفة العميقة (Deep Knowledge)”. يرسم النموذج نصوصًا أصلية بأكثر من 12 لغة، ويستحضر أكثر من 100 أسلوب فني ومختلف واجهات المستخدم استنادًا إلى معرفة عالمية واسعة. وتضمّن الإعلان أمثلة على رسم نصوص دقيقة باليابانية والكورية والإسبانية، مع الإشارة إلى أن النموذج متصل بالإنترنت ما يتيح له استحضار معلومات حديثة. ومن الأمثلة على توليد شخصيات معروفة تحديدًا، عُرض مشهد يظهر فيه تشي بايشي وفان جوخ وهما يقدّمان Qwen-Image-3.0 في بث مباشر.</p>

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

<h2 id="ما-الذي-لم-يُعلن-عنه-بعد">ما الذي لم يُعلن عنه بعد</h2>

<p>هنا يبدأ الجزء الذي يستوجب قراءة حذرة. يفتقر منشور الإعلان هذا إلى معلومة أساسية يجب التحقق منها أولًا قبل أي تبنٍّ فعلي لنموذج توليد صور.</p>

<p>لا توجد أوزان (weights). الإعلان بمثابة عرض توضيحي للقدرات، ولا يُحيل إلى نقاط تفتيش (checkpoints) قابلة للتنزيل على Hugging Face أو ModelScope. حتى الموقع الخارجي غير الرسمي الذي يقدّم مولّدًا مجتمعيًا للنموذج ما يزال يضع بجانب 3.0 عبارة “الوصول قيد الانتظار (access pending)”. كذلك لم يُذكر في منشور الإعلان عدد المعاملات (parameters) ولا بنية النموذج (architecture) ولا الترخيص. وبالمقارنة مع الإعلان السابق عن أن الجيل 1.0 كان بمعمارية MMDiT بحجم 20 مليار معامل، وأن الجيل 2.0 خفّض عدد المعاملات إلى 7 مليارات، لا توجد في 3.0 حتى الآن أي إشارة تسمح بتقدير بنيته.</p>

<p>كذلك لا توجد معايير قياسية (benchmarks) معتمدة. قدرات مثل استيعاب مدخلات بطول 4.5 ألف رمز أو رسم نصوص بحجم 10 بكسل عُرضت فقط عبر أمثلة اختارها فريق الإعلان بعناية، ولم تُرفق بجداول تقييم قابلة لإعادة الإنتاج مثل DPG أو GenEval. لذلك، فإن عبارات مثل “أفضل من الجيل السابق” أو “قابل للاستخدام كأداة إنتاجية” ينبغي قراءتها لا كأرقام موثّقة بل كادّعاء من الجهة المعلنة [غير مؤكد]. والعروض التوضيحية عادة ما تنتقي أفضل النتائج، لذا فإن نسبة الإخفاق أو مدى الاتساق يحتاجان إلى تحقق مستقل.</p>

<p>نلخّص ذلك في الجدول التالي:</p>

<table>
  <thead>
    <tr>
      <th>البند</th>
      <th>الحالة</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>الإعلان عن النموذج من الجيل الثالث</td>
      <td>مؤكد</td>
    </tr>
    <tr>
      <td>استيعاب مدخلات بطول 4.5 ألف رمز · تخطيطات معقدة</td>
      <td>مؤكد (عرض توضيحي)</td>
    </tr>
    <tr>
      <td>نصوص بحجم 10 بكسل · رسم بـ12 لغة</td>
      <td>مؤكد (عرض توضيحي)</td>
    </tr>
    <tr>
      <td>التوفر عبر Qwen Chat</td>
      <td>مؤكد (استضافة)</td>
    </tr>
    <tr>
      <td>الأوزان المفتوحة (Hugging Face / ModelScope)</td>
      <td>غير معلن</td>
    </tr>
    <tr>
      <td>عدد المعاملات · البنية · الترخيص</td>
      <td>غير معلن</td>
    </tr>
    <tr>
      <td>المعايير القياسية</td>
      <td>غير معلنة</td>
    </tr>
    <tr>
      <td>الأداء بمستوى “أداة إنتاجية”</td>
      <td>ادعاء غير مؤكد [غير مؤكد]</td>
    </tr>
  </tbody>
</table>

<h2 id="توليد-الصور-من-رسم-جميل-إلى-أداة-إنتاجية">توليد الصور: من “رسم جميل” إلى “أداة إنتاجية”</h2>

<p>العبارة المتكررة في الإعلان هي الانتقال من “جيد المظهر (good-looking)” إلى “مفيد (useful)”. هذا الإطار يلخّص جيدًا الوجهة التي يستهدفها هذا الجيل من النموذج. فالهدف ليس إنتاج لوحة فنية واحدة جميلة، بل استهداف مخرجات يمكن استخدامها مباشرة في العمل، مثل ملفات PDF لصفحات صحفية، أو لوحات قصة مصورة لمسلسل قصير، أو نماذج أولية معقدة لواجهات المستخدم (UI mockups).</p>

<pre><code class="language-mermaid">flowchart TB
    A[توجهات أجيال Qwen-Image] --&gt; B[1.0&lt;br/&gt;الدقة · 20B MMDiT · أوزان مفتوحة]
    A --&gt; C[2.0&lt;br/&gt;الدقة والتنوع والاكتمال · 7B · أوزان مفتوحة]
    A --&gt; D[3.0&lt;br/&gt;'الحقيقي' · عدد المعاملات غير معلن · الأوزان غير معلنة]
    D --&gt; E[محتوى غني&lt;br/&gt;4.5 ألف رمز · تخطيطات معقدة]
    D --&gt; F[تفاصيل واقعية&lt;br/&gt;نص 10 بكسل · ملمس بجودة فوتوغرافية]
    D --&gt; G[معرفة عميقة&lt;br/&gt;12 لغة · واجهات مستخدم · معرفة عالمية]
    E --&gt; H[مخرجات إنتاجية&lt;br/&gt;PDF صحفي · لوحة قصة مصورة · نموذج واجهة أولي]
    F --&gt; H
    G --&gt; H
    H -.عند نشر الأوزان.-&gt; I[إمكانية دراسة الخدمة داخل البنية التحتية الخاصة]
</code></pre>

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

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

<h2 id="من-منظور-thakicloud-ماذا-يعني-تقديم-خدمة-نموذج-توليد-صور-داخل-البنية-التحتية-الخاصة-on-prem">من منظور ThakiCloud: ماذا يعني تقديم خدمة نموذج توليد صور داخل البنية التحتية الخاصة (on-prem)</h2>

<p>لنفترض جدلًا أن Qwen-Image-3.0 سيُنشر بأوزان مفتوحة كما حصل مع الأجيال السابقة. عندها ستصبح مهمة تقديم خدمة نموذج توليد صور قائم على الانتشار (diffusion) داخل بيئة العميل التحتية الخاصة أمرًا واقعيًا. وفي هذه الحالة، لن يكون عنق الزجاجة قدرة النموذج التعبيرية، بل ذاكرة وحدة معالجة الرسوميات (GPU)، وكفاءة المعالجة الدفعية (batch processing)، وضبط إعدادات الخدمة لتحقيق التوازن بين زمن الاستجابة والإنتاجية. وبما أن عدد المعاملات والبنية غير معلنَين حاليًا، لا يمكننا حساب هذه التكلفة بدقة، ولذلك لا نبني خارطة طريق الخدمة استنادًا إلى الإعلان وحده.</p>

<p>توفّر منصة ai-platform التابعة لـThakiCloud الأساس اللازم لنشر مثل هذه النماذج في بيئة العميل. فجدولة وحدات معالجة الرسوميات القائمة على K8s وKueue، والعزل متعدد المستأجرين (multi-tenant isolation)، تتيح لنا الشروع سريعًا في التحقق من النموذج فور إعلان توفره فعليًا. وبما أن أحمال عمل توليد الصور تختلف في خصائصها عن أحمال عمل النماذج اللغوية، فإن تعديل حجم الدفعة (batch size) وتوزيع وحدات معالجة الرسوميات وفقًا لهذه الخصائص هو ما يحدد تكلفة الخدمة. وميزتا انخفاض تكلفة الخدمة وسيادة البيانات داخل البنية التحتية الخاصة لا تُثبتان قيمتهما إلا حين يصبح النموذج المفتوح متاحًا فعليًا بين أيدينا.</p>

<p>وثمة زاوية أخرى تتعلق بالاستخدام الفعلي. فالقدرة على رسم المستندات والإنفوغرافيك ونماذج واجهات المستخدم بدقة تجعل من هذه القدرة أداة يمكن للوكيل الذكي (agent) استخدامها. ومن منظور Paxis، السحابة الأصيلة للوكلاء الذكية (Agent-Native Cloud) التابعة لـThakiCloud، يمكن تغليف قدرة التوليد هذه كمهارة (skill) وإخضاعها للتنفيذ المعزول الذي يمر عبر بوابات السياسات (policy gates) وسجلات التدقيق (audit logs). غير أن هذه الزاوية أيضًا لن تكون واقعية إلا بعد أن يصبح النموذج متاحًا فعلًا بين أيدينا.</p>

<h2 id="الحدود-والرأي-المضاد">الحدود والرأي المضاد</h2>

<p>لا يهدف هذا المقال إلى التقليل من شأن Qwen-Image-3.0. فالتوجه نحو رسم تخطيطات معقدة بطول 4.5 ألف رمز دفعة واحدة، ورسم نصوص بحجم 10 بكسل قابلة للقراءة، إذا تحقق فعليًا، سيرفع من الجدوى العملية لتوليد الصور خطوة إضافية. كما أن إمكانية تجربته فعليًا الآن عبر Qwen Chat ليست أمرًا بلا قيمة.</p>

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

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

<ul>
  <li><a href="https://qwen.ai/blog?id=qwen-image-3.0">Qwen-Image-3.0: Rich Content, Authentic Details, Deep Knowledge - Qwen Team Blog</a></li>
  <li><a href="https://qwenimage3.com/">Qwen Image 3 Generator (third-party, يُظهر access pending)</a></li>
  <li><a href="https://github.com/QwenLM/Qwen-Image">Qwen-Image 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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="news" /><category term="qwen" /><category term="image-generation" /><category term="text-to-image" /><category term="multimodal" /><category term="alibaba" /><category term="on-prem-serving" /><category term="news" /><category term="thakicloud" /><summary type="html"><![CDATA[أعلن فريق Qwen التابع لعلي بابا عن Qwen-Image-3.0، الجيل الثالث من نماذج توليد الصور. طرح النموذج قدرات لافتة مثل استيعاب مدخلات بطول 4.5 ألف رمز (token)، وعرض نصوص دقيقة بحجم 10 بكسل، ورسم نصوص بـ12 لغة، لكن المسار الوحيد المتاح حاليًا للاستخدام هو الاستضافة عبر Qwen Chat، ولم تُنشر بعد لا الأوزان ولا نتائج المعايير القياسية. نستعرض هنا ما تأكد فعليًا وما لم يتأكد بعد.]]></summary></entry><entry xml:lang="ar"><title type="html">لماذا لم يتفوق ضبط حجم الدفعة (batch size) الديناميكي على الجدولة الثابتة: تحليل صادق لفشل حلقة التحكم (control loop) في خدمة vLLM متعددة المستأجرين (multi-tenant)</title><link href="https://thakicloud.github.io/ar/research/agent-dynamic-batch-tuning-vllm/" rel="alternate" type="text/html" title="لماذا لم يتفوق ضبط حجم الدفعة (batch size) الديناميكي على الجدولة الثابتة: تحليل صادق لفشل حلقة التحكم (control loop) في خدمة vLLM متعددة المستأجرين (multi-tenant)" /><published>2026-07-21T00:00:00+09:00</published><updated>2026-07-21T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/research/agent-dynamic-batch-tuning-vllm</id><content type="html" xml:base="https://thakicloud.github.io/ar/research/agent-dynamic-batch-tuning-vllm/"><![CDATA[<p>إذا كنت تدير مجموعة (cluster) لخدمة vLLM على Kubernetes تتقاسم فيها عدة جهات مستأجرة (tenants) وحدات معالجة رسوميات (GPU) عالية الأداء مثل H200، وكنت تعتقد أن التحكم الثابت في القبول (static admission control) الخاص بـ Kueue “كافٍ”، فهذا المقال موجه إليك. بل يستحق القراءة أكثر إذا كنت تفترض أن “قيام عميل نموذج لغوي كبير (LLM agent) بضبط معاملات الخدمة (serving parameters) في الوقت الفعلي أمر أفضل دائماً بلا شك.” فهذه الورقة البحثية تُظهر أن هذا الافتراض ليس صحيحاً دائماً، وتفعل ذلك بأسباب محددة تماماً.</p>

<h2 id="الإشكالية-القبول-ثابت-بينما-الحمل-فعلي-في-الوقت-الحقيقي">الإشكالية: القبول ثابت بينما الحمل فعلي في الوقت الحقيقي</h2>

<p>أصبحت مشكلة خدمة الاستدلال (inference) لنماذج لغوية كبيرة لعدة مستأجرين على وحدات معالجة رسوميات مشتركة تحدياً تشغيلياً شائعاً الآن. تتقاسم عدة جهات مستأجرة، تختلف فيما بينها من حيث تقطّع حركة المرور (traffic burstiness) وطول التسلسلات (sequence length) ومستويات اتفاقية مستوى الخدمة (SLO)، مسرّعاً واحداً عالي السعة مثل H200 في الوقت ذاته. في المنصات القائمة على Kubernetes، عادة ما يقرر مجدوِل قائم على الحصص والطوابير (quota and queue based scheduler) مثل Kueue أي الأعمال يُسمح لها بالدخول إلى المجمع (pool)، لكن المعاملات الخاصة بزمن الخدمة، مثل حجم الدفعة (batch size) والعدد الأقصى للتسلسلات المتزامنة (max concurrent sequences)، وهي التي تحدد كيفية تقاسم الطلبات التي دخلت بالفعل لسعة المحرك المحدودة، تظل عادة مثبتة بشكل ثابت وقت النشر (deployment).</p>

<p>تطرح هذه الورقة البحثية السؤال الذي يترتب طبيعياً على ذلك. في مجمع H200 متعدد المستأجرين تديره Kueue، حين تتشارك عدة جهات مستأجرة خادم استدلال vLLM واحداً، هل يستطيع عميل نموذج لغوي كبير يراقب قياسات ذاكرة وحدة معالجة الرسوميات وزمن الاستجابة عن بعد (telemetry) في الوقت الفعلي، ويعيد ضبط حجم الدفعة والعدد الأقصى للتسلسلات المتزامنة لكل مستأجر عبر الإنترنت (online)، أن يحسّن فعلياً جبهة باريتو (Pareto frontier) للإنتاجية (throughput) وزمن الاستجابة عند المئين 99 (p99 latency) والتكلفة، مقارنة بالتحكم الثابت في القبول لدى Kueue؟ ولكي يجيب المؤلفون عن هذا السؤال، صمموا بروتوكولاً تجريبياً كاملاً يُفترض تشغيله على وحدة H200 واحدة، لكنهم يوضحون منذ البداية أن التنفيذ نفسه لم يتم لعدم توفر الوصول إلى سياق مجموعة Kubernetes المستهدفة. لذلك، لا يظهر في هذه الورقة أي رقم واحد لمعدل إنتاجية أو زمن استجابة قِيس على عتاد حقيقي. وبدلاً من ذلك، تقدم الورقة ثلاثة أشياء: صياغة رياضية لحلقة التحكم (control loop) الخاصة بمسألة الضبط الديناميكي لحجم الدفعة والتزامن (concurrency) عبر الإنترنت، وبروتوكولاً قابلاً للتكرار (reproducible) يمكن تنفيذه فور استعادة الوصول إلى المجموعة، ومحاكاة قائمة انتظار (queuing simulation) حتمية تختبر بنية ثلاث سياسات تحكم مختلفة تحت الضغط.</p>

<h2 id="صياغة-مسألة-الضبط-كحلقة-تحكم">صياغة مسألة الضبط كحلقة تحكم</h2>

<p>تصوغ الورقة مسألة الضبط الديناميكي عبر الإنترنت لحجم الدفعة والتزامن الخاصين بكل مستأجر باعتبارها مسألة تحكم مغلقة الحلقة (closed loop control) في زمن منفصل (discrete time)، ذات بنية شبيهة بعملية قرار ماركوف (Markov decision process). تتكون الحالة (state) من عمق طابور كل مستأجر، ونسبة استخدام ذاكرة وحدة معالجة الرسوميات، ومئينات زمن الاستجابة الأخيرة (p50/p95/p99)، والحد الأقصى الحالي للتزامن. أما الفعل (action) فهو زيادة أو نقصان محدودة النطاق في تزامن كل مستأجر. وتُصاغ دالة المكافأة (reward function) بطرح عقوبة على تجاوز زمن الاستجابة عند المئين 99 لاتفاقية مستوى الخدمة، وبند التكلفة، من الإنتاجية، بحيث تُحسَّن الإنتاجية وزمن الاستجابة والتكلفة معاً ضمن نطاق آمن. وبناءً على هذه الصياغة، يقترح المؤلفون أيضاً طريقة دمج العميل في عملية النشر الفعلية. فالعميل لا يحل محل قبول المهام (job admission) الخاص بـ Kueue، بل يعمل كعامل جانبي (sidecar) داخله، ويضبط فقط طريقة تقاسم الأعمال التي قُبلت بالفعل لسعة المحرك. والنقطة الجوهرية أن الرافعة التي يتم التحكم بها ليست معامل max_num_seqs الداخلي لمحرك vLLM، بل تزامن القبول (admission concurrency) الخاص بكل مستأجر من جهة العميل. ولأن إصدارات vLLM الإنتاجية لا تُعرِّض معاملات المحرك كمقبض (knob) يمكن تغييره في الوقت الفعلي دون إعادة تشغيل، فإن هذا التصميم يعكس القيد العملي القائل بأن النقطة الوحيدة القابلة فعلياً للضبط هي عدد الطلبات المتزامنة الواردة إلى الخادم.</p>

<p><img src="/assets/images/posts/research/agent-dynamic-batch-tuning-vllm/fig-control-loop.png" alt="Control Loop: Agent-Driven Tuning Architecture" />
<em>بنية حلقة التحكم التي يراقب فيها عميل نموذج لغوي كبير قياسات وحدة معالجة الرسوميات وعمق طابور كل مستأجر، وينتج قيمة ضبط محدودة النطاق للتزامن، ليعيد من خلالها ضبط تشكيلة الدفعة (batch configuration). هذا رسم تخطيطي مفاهيمي للبنية، وليس نتيجة مقيسة فعلياً على عتاد.</em></p>

<h2 id="التحذير-الذي-كشفته-المحاكاة-التحكم-الديناميكي-الساذج-كان-أسوأ-من-الثابت">التحذير الذي كشفته المحاكاة: التحكم الديناميكي الساذج كان أسوأ من الثابت</h2>

<p>لسد الفراغ الناتج عن عدم تنفيذ البروتوكول التجريبي، بنى المؤلفون محاكاة لقائمة انتظار (queuing simulation) في زمن منفصل، ثابتة البذرة (seed fixed)، مكتوبة بالكامل باستخدام مكتبة Python القياسية فقط. وعلى نموذج مبسّط يتشارك فيه مستأجران مجمعاً محدوداً من الفتحات (slots)، شغّلوا ثلاث سياسات على مدى 20 بذرة عشوائية (seed) و1800 ثانية لكل منها، وأخذوا المتوسط. تُثبّت السياسة الثابتة الحد الأقصى لتزامن كل مستأجر عند 4. أما السياسة الديناميكية الساذجة فتراقب نسبة استخدام ذاكرة وحدة معالجة الرسوميات وزمن الاستجابة عند المئين 99 ضمن نافذة مدتها 6 ثوانٍ كل 3 ثوانٍ، وتضبط المستأجرَين معاً بزيادة أو نقصان مقداره 1. أما سياسة العميل المتمايز (differentiated agent) فهي نموذج بديل (surrogate model) يحاكي استدلالاً أكثر تطوراً للعميل، من خلال مراعاة نسبة التراكم (backlog ratio) لكل مستأجر بشكل مستقل.</p>

<p>جاءت النتائج مخالفة للتوقعات. فقد كانت السياسة الثابتة الأفضل في كل من الإنتاجية (0.686 طلب/ثانية) وعدد الطلبات المُسقَطة (بمتوسط 1.9 طلب)، بينما انخفضت إنتاجية السياسة الديناميكية الساذجة إلى 0.515 طلب/ثانية مع إسقاط 309.5 طلباً في المتوسط. وكان أداء نموذج العميل المتمايز البديل أفضل من السياسة الديناميكية الساذجة (إنتاجية 0.601 طلب/ثانية، وإسقاط 154.7 طلباً)، لكنه ظل غير قادر على مجاراة السياسة الثابتة، كما ارتفع زمن الاستجابة عند المئين 99 في كلا الشكلين الديناميكيين مقارنة بالسياسة الثابتة (11.75 ثانية)، إذ بلغ 12.79 ثانية و13.25 ثانية على التوالي.</p>

<p><img src="/assets/images/posts/research/agent-dynamic-batch-tuning-vllm/fig-throughput-dropped.png" alt="Throughput vs. Dropped Requests by Policy" />
<em>سجّلت السياسة الثابتة أعلى إنتاجية وأقل عدد من الطلبات المُسقَطة، بينما كان أداء كلا الشكلين الديناميكيين ضعيفاً في المحاكاة. هذه نتائج محاكاة قائمة انتظار حتمية بمتوسط 20 بذرة عشوائية، وليست قيماً مقيسة فعلياً على وحدة معالجة رسوميات.</em></p>

<p><img src="/assets/images/posts/research/agent-dynamic-batch-tuning-vllm/fig-p99-latency.png" alt="p99 Latency by Policy" />
<em>كان زمن الاستجابة عند المئين 99 للسياسة الثابتة هو الأدنى، ولم يتمكن أي من المتحكمين الديناميكيين من تقليل زمن الاستجابة في الذيل (tail latency) ضمن نطاق هذه المحاكاة. هذه نتائج محاكاة بمتوسط 20 بذرة عشوائية، وليست قِيماً مقيسة فعلياً على عتاد.</em></p>

<p>يتحقق المؤلفون من أن هذه النتيجة تعكس الديناميكيات الفعلية للنموذج وليست مجرد خطأ برمجي (bug)، ويتتبعون السبب عبر أربع خطوات. أولاً، بما أن زمن الخدمة (service time) يتبع توزيعاً أسياً (exponential distribution)، فإن الذيل ثقيل بطبيعته أصلاً. فتوزيع أسي بمتوسط 2.5 ثانية يُنتج زمن استجابة عند المئين 99 يقارب 11.5 ثانية حتى دون أي انتظار في الطابور على الإطلاق، وهو رقم لا يختلف كثيراً عن الـ 11.75 ثانية التي سجّلتها السياسة الثابتة. أي أن معظم زمن الاستجابة في الذيل الملاحَظ لا ينبع من الازدحام، بل من تباين زمن الخدمة نفسه. ثانياً، عتبة التقييد (throttle threshold) مضبوطة عند 6 ثوانٍ، أي ضعف نافذة الـ 3 ثوانٍ، وهي أقل بكثير من زمن الاستجابة الجوهري عند المئين 99 البالغ 11.5 ثانية. وزمن الاستجابة عند المئين 99 المقدَّر ضمن نافذة قصيرة، اعتماداً على عدد قليل من الطلبات المكتملة فقط، يحمل ضوضاء (noise) كبيرة وينحاز نحو هذا الذيل الجوهري، لذا يتجاوز العتبة كثيراً حتى في حالات الحمل الخفيف فعلياً. ثالثاً، ولأن هذا التقييد الكاذب (false positive throttle) يخفض المستأجرَين معاً، فإن المستأجر غير المزدحم يُقيَّد أيضاً مع المستأجر المزدحم، وتحت مهلة زمنية صارمة (hard timeout) مدتها 3 ثوانٍ، يتحول كل تقييد غير ضروري مباشرة إلى إسقاط للطلب. رابعاً، ورغم أن قاعدة التوسّع (scaling rule) تسمح بالتعافي، فإن تكلفة التقييد والإسقاط أكبر بشكل غير متناظر من مكسب التوسّع، وبالتالي تنخفض الإنتاجية الصافية.</p>

<h2 id="متطلبات-التصميم-المستخلصة-من-الفشل">متطلبات التصميم المستخلصة من الفشل</h2>

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

<h2 id="ما-تتركه-هذه-الورقة-للشركة-والمجتمع-والعلم">ما تتركه هذه الورقة للشركة والمجتمع والعلم</h2>

<p>بالنسبة إلى ThakiCloud، ما تتركه هذه الدراسة الآن ليس توفيراً مؤكداً في التكلفة، بل بروتوكولاً تجريبياً قابلاً للتكرار وقابلاً للتطبيق مباشرة على مجموعتنا من H200 متعددة المستأجرين، وتحذيراً محدداً من أن نهجاً ساذجاً قد يؤدي في الواقع إلى خسارة. وقد اكتمل الهيكل التجريبي (harness) نفسه بالفعل، بحيث يكفي، فور استعادة الوصول إلى المجموعة، استبدال دالة قرار عميل نموذج لغوي كبير فعلية داخل هذا البروتوكول. وعلى نطاق أوسع، كلما تطورت منهجيات تقليل هدر الموارد في مجمعات وحدات معالجة الرسوميات المشتركة، انفتح مسار عملي أمام المؤسسات الصغيرة أيضاً للوفاء باتفاقيات مستوى الخدمة على مجموعات مشتركة، وهو ما يفيد كفاءة الطاقة والتكلفة في بنية الاستدلال التحتية بشكل عام. أما من الناحية العلمية، فإن الإسهام يكمن في الصياغة الصريحة لحلقة تحكم يراقب فيها عميل نموذج لغوي كبير قياسات النظام في الوقت الفعلي ويعيد ضبط معاملات الخدمة الفائقة (serving hyperparameters) عبر الإنترنت، وفي التشخيص الكمي لأنماط فشلها من خلال محاكاة قابلة للتكرار. وتُعد هذه الورقة أيضاً جزءاً من سلسلة الأبحاث التي واصلتها ThakiCloud على نفس الأساس القائم على Kueue ووحدات معالجة الرسوميات. فمقارنة بـ ABJ-Gate، التي تجدول ميزانية أخذ العينات لنموذج الحَكَم (judge model)، وبـ Attested Confidential Sovereign Inference، التي تتناول التصديق عن بعد (remote attestation) لبيئة تنفيذ موثوقة (TEE) عند لحظة القبول، وبورقة “Escalate or Act?” التي تتناول قرارات ثنائية بين التصعيد أو التحرك إزاء حوادث منفصلة نادرة، تتميز هذه الورقة عنها جميعاً بتناولها مسألة مختلفة نوعياً، وهي التحكم المتعدد الأهداف في الوقت الفعلي الذي يُعاد ضبطه باستمرار على مدى ثوانٍ.</p>

<h2 id="القيود">القيود</h2>

<p>القيود التي تكشفها هذه الورقة عن نفسها واضحة. وأهمها أنه لا يوجد أي تحقق فعلي على عتاد حقيقي بأي شكل من الأشكال، إذ لم يُنفَّذ البروتوكول التجريبي بسبب تعذر الوصول إلى سياق المجموعة المستهدفة، ولم يُقَس أي رقم في الورقة على وحدة معالجة رسوميات فعلية. كما تبسّط المحاكاة الرموز (tokens) وذاكرة التخزين المؤقت KV إلى مجرد عدد فتحات عددي واحد (single scalar slot count)، دون أن تنمذج ديناميكيات مرحلتَي التعبئة المسبقة وفك الترميز (prefill/decode) أو ضغط الذاكرة، بل إن إشارة استخدام الذاكرة نفسها ليست سوى قيمة بديلة (proxy) لإشغال الفتحات، لا قياساً فعلياً لذاكرة الجهاز. كما اقتصر اختبار أنواع المستأجرين على نمطين اصطناعيين فقط لحركة المرور، لذا قد لا تعمم أنماط الفشل المكتشفة على مزيج آخر من حركة المرور. وسياسة العميل داخل المحاكاة أيضاً نموذج بديل مكتوب يدوياً وليس نموذجاً لغوياً كبيراً فعلياً، ولأن درجة الترابط ونوع الإشارة تغيّرا معاً في آن واحد، فلا يوجد حتى الآن دليل مُتحقَّق منه على أن عميلاً فعلياً قائماً على نموذج لغوي كبير سيستوفي متطلبات التصميم المستخلصة في القسم الرابع. ويوضح المؤلفون أيضاً بصراحة أنهم اكتفوا بالإبلاغ عن المتوسط والانحراف المعياري عبر 20 بذرة عشوائية، دون إجراء أي اختبار للدلالة الإحصائية (statistical significance). ولهذه الأسباب، تضع هذه الورقة نفسها لا كنتيجة مُتحقَّق منها، بل كصياغة رياضية وبروتوكول ومحاكاة تحذيرية.</p>

<p>يمكن الاطلاع على صفحة تفاصيل الورقة البحثية من هنا: <a href="https://huggingface.co/datasets/thaki-AI/daily-paper-2026-07-21-agent-dynamic-batch-tuning-vllm">https://huggingface.co/datasets/thaki-AI/daily-paper-2026-07-21-agent-dynamic-batch-tuning-vllm</a></p>]]></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;}, {&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/company/thakicloud&quot;}, {&quot;label&quot;=&gt;&quot;X&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-x-twitter&quot;, &quot;url&quot;=&gt;&quot;https://x.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="research" /><category term="vllm" /><category term="kueue" /><category term="gpu-scheduling" /><category term="multi-tenant-serving" /><category term="llm-agents" /><category term="dynamic-batching" /><category term="inference-cost-optimization" /><category term="h200" /><category term="queuing-simulation" /><category term="control-loop" /><summary type="html"><![CDATA[هل يتفوق عميل (agent) يراقب قياسات وحدة معالجة الرسوميات (GPU telemetry) ويضبط حجم الدفعة (batch size) والتزامن (concurrency) في الوقت الفعلي على التحكم الثابت في القبول (admission control) الخاص بـ Kueue؟ أجابت المحاكاة (simulation) بالنفي، وتتبعت السبب بدقة.]]></summary></entry></feed>