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

<p><img src="/assets/images/ai-agent-research-paper-skills-hero.png" alt="صورة مجردة تُظهر وحدة معرفية مركزية تتفرع منها ثلاثة تدفقات بيانات نحو ثلاثة أدوات مختلفة" /></p>

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

<p>يقوم هذا المشروع على ملاحظات تعليمية نشرها الأستاذ بنغ سيدا (彭思达) من جامعة تشجيانغ الصينية في مستودع <a href="https://github.com/pengsida/learning_research">learning_research</a>، ويُعيد صياغة خبرة كتابة الأوراق البحثية في هيئة حزمة Agent Skill. وفق وصف المستودع، يركز المشروع على أوراق ML وCV وNLP، وقد مرّ بعمليات تنظيم وهيكلة تستهدف Codex وClaude Code وGemini. الإسهام الجوهري ليس نسخ نص الملاحظات الأصلية، بل تفكيك النصائح المتناثرة إلى وحدات عمل يمكن للوكيل استدعاؤها باعتبارها قدرات قابلة لإعادة الاستخدام.</p>

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

<h2 id="ما-هو-agent-skill">ما هو Agent Skill؟</h2>

<p>Agent Skill حزمة تُخبر الوكيل بكيفية تنفيذ مهمة بعينها. تتمحور عادةً حول ملف تعليمات <code class="language-plaintext highlighter-rouge">SKILL.md</code>، وتضم عند الحاجة وثائق مرجعية وسكريبتات وقوالب. لها ثلاث خصائص جوهرية: أولاً، تخضع لإدارة الإصدارات - يمكن تتبع تاريخ تعديلاتها في المستودع فتتراكم أصلاً لا تنتهي بانتهاء البرومبت. ثانياً، تُستدعى عند الحاجة فقط - بدلاً من حشو كل المعرفة في السياق دفعة واحدة، يُحمَّل فقط الـ Skill المرتبط بالمهمة في تلك اللحظة. ثالثاً، لا تتقيد بـ harness بعينه - الهدف أن يُشغَّل الـ Skill نفسه في Claude Code وCodex وGemini على حد سواء.</p>

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

<p><img src="/assets/images/ai-agent-research-paper-skills-diagram.png" alt="هيكل يُظهر حزمة Skill واحدة قابلة للنقل تحتوي على ملف SKILL.md ومواد مرجعية، مُدمجة بالتساوي في ثلاثة harness: Claude Code وCodex وGemini، لتنفيذ مهام كتابة الأوراق البحثية" /></p>

<p>جوهر الشكل أعلاه أن حزمة الـ Skill واحدة في الوسط. الأدوات الثلاثة لا تحمل كل منها برومبتاً مختلفاً؛ بل تتشارك نفس معرفة العمل. هنا يكمن الفارق الجوهري عن لصق سطر برومبت في نافذة دردشة.</p>

<h2 id="استعراض-research-paper-writing-skills">استعراض Research-Paper-Writing-Skills</h2>

<p>المهام التي تتناولها الحزمة تتطابق مع المراحل الفعلية لكتابة الورقة البحثية. من أمثلة الاستخدام المنشورة: استدعاء <code class="language-plaintext highlighter-rouge">$research-paper-writing</code> لتحسين المقدمة وصقل فقراتها الأولى، أو إعادة كتابة الملخص مع التحقق من توافق الادعاءات مع الأدلة. أي أن البنية لا تقدم طلباً مبهماً كـ”اكتب لي بشكل جيد”، بل تفصل المهام الفرعية المتكررة في كتابة الأوراق إلى قدرات مستقلة. وهذا ينسجم مع مبدأ التصميم الجيد للبرومبت: فعل واحد يقابله ناتج واحد.</p>

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

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

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

<p>نموذج تثبيت Agent Skill بسيط في مجمله. تنزّل الحزمة وتضعها في مسار الـ Skill الذي تتعرف عليه الأداة، فيستدعي الوكيل الـ Skill المناسب بحسب المهمة. التدفق العام كالتالي:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># استنساخ المستودع</span>
git clone https://github.com/Master-cai/Research-Paper-Writing-Skills.git

<span class="c"># نسخه إلى مجلد Skill الخاص بأداتك (راجع توثيق كل أداة للمسار الصحيح)</span>
<span class="c"># مثال: وضعه تحت .claude/skills/ في مشروع Claude Code</span>
<span class="nb">cp</span> <span class="nt">-r</span> Research-Paper-Writing-Skills/&lt;skill-dir&gt; .claude/skills/
</code></pre></div></div>

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

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

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

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

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

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

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

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

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

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

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

<ul>
  <li>Research-Paper-Writing-Skills: <a href="https://github.com/Master-cai/Research-Paper-Writing-Skills">https://github.com/Master-cai/Research-Paper-Writing-Skills</a></li>
  <li>ملاحظات المؤلف الأصلية learning_research (بنغ سيدا): <a href="https://github.com/pengsida/learning_research">https://github.com/pengsida/learning_research</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="ai-agent" /><category term="agent-skills" /><category term="claude-code" /><category term="paper-writing" /><category term="llm" /><summary type="html"><![CDATA[مشروع مفتوح المصدر يُحوّل خبرة الأستاذ في كتابة الأوراق البحثية إلى حزمة Skill قابلة للاستدعاء من Codex أو Claude Code أو Gemini. نستعرض الفارق عن مجموعات البرومبت التقليدية، وأهمية صيغة Agent Skill، ودلالة هذا الاتجاه من منظور ThakiCloud التي تُشغّل منصة وكلاء تضم مئات الـ Skills.]]></summary></entry><entry xml:lang="ar"><title type="html">لن تكتب SKILL.md بيدك بعد الآن: نظرة معمّقة على أمر /learn في Hermes Agent</title><link href="https://thakicloud.github.io/ar/technique/hermes-agent-learn-skills/" rel="alternate" type="text/html" title="لن تكتب SKILL.md بيدك بعد الآن: نظرة معمّقة على أمر /learn في Hermes Agent" /><published>2026-06-26T00:00:00+09:00</published><updated>2026-06-26T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/technique/hermes-agent-learn-skills</id><content type="html" xml:base="https://thakicloud.github.io/ar/technique/hermes-agent-learn-skills/"><![CDATA[<p><img src="/assets/images/hermes-agent-learn-skills-hero.png" alt="عملية تأليف المهارات ممثَّلة بتقارب شظايا معرفية متفرقة إلى بنية متبلورة واحدة" />
<em>مفهوم /learn مُجسَّدًا بتبلور شظايا معرفية متناثرة من اتجاهات شتى في مخرج واحد منظّم.</em></p>

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

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

<p>أمر <code class="language-plaintext highlighter-rouge">/learn</code> الذي أضافه Nous Research في 24 يونيو 2026 إلى إطار عمل Hermes Agent يُلغي هذه الخطوة اليدوية كليًا. أشِر إلى دليل، أو رابط URL، أو محادثة انتهيت منها للتو، أو ملاحظات لصقتها، فيجمع الوكيل الحيّ المواد مباشرةً ويؤلف <code class="language-plaintext highlighter-rouge">SKILL.md</code> مطابقًا للمعيار. أشعل هذا الأمر اهتمامًا واسعًا حين شارك tonbistudio مقطع عرض توضيحي على تويتر يُظهر بناء مهارة من مصادر متعددة، وبما أن ThakiCloud كانت قد ثبّتت Hermes Agent مسبقًا وتشغّله داخليًا، أجرينا التحقق بأنفسنا.</p>

<p>تُشغّل ThakiCloud وكلاء متعددي المستأجرين على منصة SaaS للذكاء الاصطناعي/تعلم الآلة مبنية على Kubernetes. البنية التي يبني فيها الوكيل ذاكرةً إجرائية بنفسه، ثم يخضع هذا البناء لمراجعة بشرية عبر بوابة مخصصة، تتقاطع تمامًا مع المبدأ الذي كنّا نصيغه تحت اسم “Thin Harness, Fat Skills - harness رفيع ومهارات ثرية”، أي أنّ القدرات تتراكم في المهارات لا في الـ harness. <code class="language-plaintext highlighter-rouge">/learn</code> أداة تخفّض حاجز الدخول لبناء تلك المهارات، مما يجعلها أكثر من مجرد ميزة مريحة.</p>

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

<p><code class="language-plaintext highlighter-rouge">/learn</code> ليس محرك استيعاب مستقلًا. جوهره أنه “يبني موجّهًا يرشد الوكيل عبر المعايير ثم يُمرره كدورة عادية واحدة.” لذلك تظل عملية جمع المصادر تعمل بالأدوات التي يمتلكها الوكيل بالفعل: الأدلة المحلية تُقرأ عبر <code class="language-plaintext highlighter-rouge">read_file</code> و<code class="language-plaintext highlighter-rouge">search_files</code>، والوثائق الإلكترونية تُجلب عبر <code class="language-plaintext highlighter-rouge">web_extract</code>، وسير العمل التي أُنجزت معًا في المحادثة تُلتقط من سياق الحوار مباشرةً.</p>

<p><img src="/assets/images/hermes-agent-learn-skills-diagram.png" alt="مسار /learn من جمع المصادر إلى تأليف SKILL.md معياري ثم العبور عبر البوابة ليصبح أمر slash" />
<em>المسار الكامل لـ /learn: من وصف المصدر، إلى الجمع بأدوات الوكيل، ثم تأليف SKILL.md معياري، ثم العبور عبر بوابة write_approval وcurator.</em></p>

<p>المصادر المقبولة أربعة أنواع. فيما يلي الأمثلة المأخوذة مباشرةً من التوثيق الرسمي:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># دليل SDK أو وثائق محلية (تُقرأ عبر read_file / search_files)
/learn the REST client in ~/projects/acme-sdk, focus on auth + pagination

# صفحة وثائق إلكترونية (تُجلب عبر web_extract)
/learn https://docs.example.com/api/quickstart

# سير عمل أنجزناها معًا في هذه المحادثة
/learn how I just deployed the staging server

# ملاحظات لُصقت أو إجراء شُرح شفهيًا
/learn filing an expense: open the portal, New &gt; Expense, attach the receipt, submit
</code></pre></div></div>

<p>يُنظّم الوكيل المواد المجموعة وفق “معيار التأليف الداخلي”: الوصف لا يتجاوز 60 حرفًا، وترتيب الأقسام ثابت، والصياغة مرجعها أدوات Hermes، وقاعدة صارمة بعدم اختراع أوامر غير موجودة. المنتج النهائي <code class="language-plaintext highlighter-rouge">SKILL.md</code> مؤلَّف من frontmatter بصيغة YAML وأقسام ثابتة في الجسم:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">my-skill</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Brief description of what this skill does</span>
<span class="na">version</span><span class="pi">:</span> <span class="s">1.0.0</span>
<span class="na">platforms</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">macos</span><span class="pi">,</span> <span class="nv">linux</span><span class="pi">]</span>
<span class="na">metadata</span><span class="pi">:</span>
  <span class="na">hermes</span><span class="pi">:</span>
    <span class="na">tags</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">python</span><span class="pi">,</span> <span class="nv">automation</span><span class="pi">]</span>
    <span class="na">category</span><span class="pi">:</span> <span class="s">devops</span>
<span class="nn">---</span>

<span class="c1"># Skill Title</span>

<span class="c1">## When to Use</span>
<span class="s">الشروط التي تُطلق هذه المهارة.</span>

<span class="c1">## Procedure</span>
<span class="s">1. الخطوة الأولى</span>
<span class="s">2. الخطوة الثانية</span>

<span class="c1">## Pitfalls</span>
<span class="pi">-</span> <span class="s">أنماط الفشل المعروفة وكيفية معالجتها</span>

<span class="c1">## Verification</span>
<span class="s">كيفية التحقق من صحة التنفيذ.</span>
</code></pre></div></div>

<p>التخزين يتولاه أداة <code class="language-plaintext highlighter-rouge">skill_manage</code>. ثمة ضمانة أمان مهمة هنا: إذا كان <code class="language-plaintext highlighter-rouge">skills.write_approval</code> مُفعَّلًا، فإن كل كتابة مهارة من الوكيل لا تُطبَّق فورًا، بل تُرحَّل إلى <code class="language-plaintext highlighter-rouge">~/.hermes/pending/skills/</code>. يرى المشغّل التغييرات المعلّقة عبر <code class="language-plaintext highlighter-rouge">/skills pending</code>، ويفحص الفرق الكامل عبر <code class="language-plaintext highlighter-rouge">/skills diff &lt;id&gt;</code>، ثم يوافق أو يرفض. تنطبق هذه البوابة على المهارات المُنشأة في الدورات الأمامية وعلى تلك التي اقترحها الوكيل في إطار مراجعة التحسين الذاتي الخلفية.</p>

<p>بفضل عدم الاعتماد على محرك استيعاب مستقل، يعمل <code class="language-plaintext highlighter-rouge">/learn</code> بالتماثل ذاته في واجهات CLI وTUI وبوابات المراسلة ولوحات التحكم. لا يُهم إذا كانت الخلفية الطرفية محلية أو ضمن Docker أو بعيدة. في لوحة التحكم، تظهر في صفحة Skills زر “Learn a skill” يعرض حقلًا للدليل وحقلًا لعنوان URL ومربع نص حر لتكوين طلب <code class="language-plaintext highlighter-rouge">/learn</code> وتشغيله.</p>

<p>سيناريوهات الاستخدام التي يقترحها التوثيق الرسمي ثلاثة. الأول: إعداد API الداخلي. تشغيل <code class="language-plaintext highlighter-rouge">/learn</code> على رابط وثائق خاص يُنتج مهارة تضم المصادقة والصفحات وأكثر الاستدعاءات استخدامًا، يستدعيها الأعضاء الجدد كأمر slash. الثاني: التقاط كتاب التشغيل. بعد إجراء نشر staging مع الوكيل، تشغيل <code class="language-plaintext highlighter-rouge">/learn how I just deployed the staging server</code> يجعل تلك الإجراءات قابلة للتكرار عبر CLI وأنظمة الدردشة. الثالث: تجميع المهام المتكررة. تقوم حزمة المهارات بتحميل مهارات المراجعة والاختبار وطلب السحب دفعةً واحدة بأمر slash واحد:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ~/.hermes/skill-bundles/backend-dev.yaml</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">backend-dev</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Backend feature work - review, test, PR workflow.</span>
<span class="na">skills</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">github-code-review</span>
  <span class="pi">-</span> <span class="s">test-driven-development</span>
  <span class="pi">-</span> <span class="s">github-pr-workflow</span>
<span class="na">instruction</span><span class="pi">:</span> <span class="pi">|</span>
  <span class="s">Always start by writing failing tests, then implement.</span>
</code></pre></div></div>

<p>يُتيح نظام المهارات نفسه البدء بحالة نظيفة. <code class="language-plaintext highlighter-rouge">hermes skills opt-out</code> يوقف بذر مهارات الحزمة، و<code class="language-plaintext highlighter-rouge">hermes skills opt-in --sync</code> يُعيده. حقل <code class="language-plaintext highlighter-rouge">platforms</code> يُخفي المهارات على أنظمة التشغيل غير المتوافقة، والحقول الشرطية تكشف المهارة فقط حين تتوفر مجموعة أدوات بعينها.</p>

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

<p>فحصنا Hermes Agent المثبّت في بيئة ThakiCloud مباشرةً. الملف الثنائي في <code class="language-plaintext highlighter-rouge">~/.local/bin/hermes</code>، ويعمل فعليًا عبر Python في <code class="language-plaintext highlighter-rouge">~/hermes-agent/venv</code>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes <span class="nt">--version</span>
Hermes Agent v0.16.0 <span class="o">(</span>2026.6.5<span class="o">)</span> · upstream 40cea4d5
Python: 3.11.13
OpenAI SDK: 2.24.0
</code></pre></div></div>

<p>تتجمع جميع المهارات في <code class="language-plaintext highlighter-rouge">~/.hermes/skills/</code>، وهو مصدر الحقيقة الوحيد. نظرًا للتوافق مع المعيار المفتوح agentskills.io، يمكن تهيئة أدوات متعددة لمسح مجلد مهارات مشترك. هذه التهيئة الخارجية هي صلب منظور المنصة الذي سنتناوله لاحقًا.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ~/.hermes/config.yaml</span>
<span class="na">skills</span><span class="pi">:</span>
  <span class="na">external_dirs</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">~/.agents/skills</span>
    <span class="pi">-</span> <span class="s">/home/shared/team-skills</span>
    <span class="pi">-</span> <span class="s">${SKILLS_REPO}/skills</span>
</code></pre></div></div>

<p>استخرجنا قائمة المهارات المثبّتة مباشرةً. يتضمن التثبيت الحالي 78 مهارة مصنّفة ضمن فئات مثل apple وautonomous-ai-agents وcreative وغيرها.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes skills list
                                Installed Skills
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓
┃ Name                ┃ Category             ┃ Source  ┃ Trust   ┃ Status  ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩
│ claude-code         │ autonomous-ai-agents │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ architecture-diagram│ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ humanizer           │ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ excalidraw          │ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
└─────────────────────┴──────────────────────┴─────────┴─────────┴─────────┘
</code></pre></div></div>

<p>كل مهارة مثبّتة تصبح تلقائيًا أمر slash. الاستدعاء بالاسم وحده كـ <code class="language-plaintext highlighter-rouge">/excalidraw</code> يُحمّل المهارة ويسأل الوكيل عمّا يمكنه مساعدتك به، والاستدعاء مع وسيطات كـ <code class="language-plaintext highlighter-rouge">/plan design a rollout for migrating our auth provider</code> يعالج الطلب فورًا. الأوامر الفرعية لإدارة المهارات وفيرة:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes skills <span class="nt">--help</span>
<span class="o">{</span>browse, search, <span class="nb">install</span>, inspect, list, check, update, audit,
 uninstall, reset, opt-out, opt-in, repair-official, publish,
 snapshot, tap, config<span class="o">}</span>
</code></pre></div></div>

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

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes curator <span class="nt">--help</span>
<span class="o">{</span>status, run, pause, resume, pin, unpin, restore,
 list-archived, archive, prune, backup, rollback<span class="o">}</span>
</code></pre></div></div>

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

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Level 0: skills_list()           → [{name, description, category}, ...]   (~3k رمزًا)
Level 1: skill_view(name)        → المحتوى الكامل + البيانات الوصفية
Level 2: skill_view(name, path)  → ملف مرجعي محدد
</code></pre></div></div>

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

<p>ثمة قيد يجب توثيقه بصدق هنا. النسخة المثبّتة لدى ThakiCloud هي <code class="language-plaintext highlighter-rouge">v0.16.0 (2026.6.5)</code>، وهي تسبق إصدار 24 يونيو 2026 الذي أضاف <code class="language-plaintext highlighter-rouge">/learn</code>. إذ يُبلّغ الملف الثنائي بأنه “محدَّث” بناءً على checkout git المحلي، فلم تنعكس الإصدارات الجديدة من المستودع الرئيسي تلقائيًا. لهذا لم نتمكن في هذا المقال من تشغيل <code class="language-plaintext highlighter-rouge">/learn</code> في بيئتنا والتقاط نتائج قابلة للقياس. قيد محاولة الاستنساخ: نسخة التثبيت تسبق إدخال <code class="language-plaintext highlighter-rouge">/learn</code> فالأمر غائب أصلًا.</p>

<p>في المقابل، تحققنا من كل ما كان ممكنًا بالقياس المباشر. الهيكل الذي يودع <code class="language-plaintext highlighter-rouge">/learn</code> نتائجه فيه - نظام المهارات - يعمل في بيئتنا كما هو متوقع. 78 مهارة مكشوفة كأوامر slash، ومسار التأليف الذاتي المعتمد على <code class="language-plaintext highlighter-rouge">skill_manage</code>، وبوابة الترحيل <code class="language-plaintext highlighter-rouge">skills.write_approval</code>، وتنظيف curator في الخلفية، وفهرسة الكشف التدريجي - كلها موجودة في النسخة المثبّتة. أي أن ما أضافه <code class="language-plaintext highlighter-rouge">/learn</code> هو نقطة دخول رفيعة تحوّل “أشر إلى مصدر فيُبنى موجّه معياري ويُمرر عبر مسار التأليف الموجود”، أما الجزء الثقيل الذي يقبع تحته فقد تحقق منه بالفعل.</p>

<p>سلوك <code class="language-plaintext highlighter-rouge">/learn</code> ذاته تحققنا منه عبر التوثيق الرسمي وتقرير MarkTechPost الصادر في 24 يونيو 2026. كلا المصدرين يُورد الحقائق ذاتها: أنواع المصادر الأربعة، وأدوات الجمع <code class="language-plaintext highlighter-rouge">read_file</code>/<code class="language-plaintext highlighter-rouge">search_files</code>/<code class="language-plaintext highlighter-rouge">web_extract</code>، وقيد الـ 60 حرفًا مع ترتيب الأقسام الثابت، والحفظ عبر <code class="language-plaintext highlighter-rouge">skill_manage</code> وبوابة <code class="language-plaintext highlighter-rouge">write_approval</code>. بدلًا من اختراع أرقام، نفصل بوضوح ما تحقق منه وما لم يتحقق.</p>

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

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

<p>ما يجعل <code class="language-plaintext highlighter-rouge">/learn</code> مثيرًا للاهتمام ليس الراحة وحدها، بل تقاطعه المباشر مع ثلاث مشكلات تواجهها منصة الوكلاء متعددة المستأجرين.</p>

<p>الأولى: تكلفة التقاط المعرفة الحقلية. لكل عميل كتاب نشر ومعايير API داخلية وإجراءات للاستجابة للحوادث مختلفة. نقلها يدويًا في كل مرة إلى <code class="language-plaintext highlighter-rouge">SKILL.md</code> يُبطئ التبني. <code class="language-plaintext highlighter-rouge">/learn</code> يحوّل “حوّل العمل الذي أنجزناه للتو إلى مهارة” جملةً واحدة تُحوّل الذاكرة الإجرائية فورًا إلى أصل قابل لإعادة الاستخدام. نشر staging أجراه مشغّل مرة واحدة يصبح أمرًا قابلًا للتكرار عبر CLI والدردشة معًا.</p>

<p>الثانية: الحوكمة. تتعامل ThakiCloud مع بيئات on-premises وself-hosting وبيئات تخضع لمتطلبات أمنية صارمة. قدرة الوكيل على كتابة مهاراته الخاصة قوية، لكنها في الوقت ذاته خطر تراكم إجراءات غير مراجَعة تلقائيًا. بنية ترحيل <code class="language-plaintext highlighter-rouge">write_approval</code> لكل عمليات كتابة المهارات إلى <code class="language-plaintext highlighter-rouge">~/.hermes/pending/skills/</code>، مع استمرارها عبر عمليات إعادة التشغيل وإتاحة <code class="language-plaintext highlighter-rouge">/skills diff</code> للمراجعة البشرية الكاملة، مناسبة لهذه البيئات. إنها تصميم يفصل بين راحة التشغيل الآلي وضبط المراجعة البشرية.</p>

<p>الثالثة: مشاركة المهارات بين الأدوات. إعداد <code class="language-plaintext highlighter-rouge">external_dirs</code> في Hermes يسمح لأدوات AI متعددة بمشاركة مجلد المهارات ذاته. تُشغّل ThakiCloud بالفعل أكثر من 1,000 مهارة داخليًا وفق معيار agentskills.io نفسه. ربط Hermes بهذا الدليل المشترك يجعل المهارة المكتوبة في مكان واحد تعمل عبر Claude Code وCursor وHermes. هذا هو تجسيد مبدأ “Thin Harness, Fat Skills” - بناء القدرات في المهارات لا في الـ harness حتى تبقى الأصول قائمة حين يتغير الـ harness.</p>

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

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

<p>أكبر قيد هو أن جودة المخرجات تستلزم في نهاية المطاف مراجعة بشرية. <code class="language-plaintext highlighter-rouge">/learn</code> يضع قاعدة “لا اختراع لأوامر غير موجودة”، لكن النماذج الصغيرة قد تُسيء فهم ما تعلّمته. يُقرّ التوثيق الرسمي بذلك ويوصي بتفعيل <code class="language-plaintext highlighter-rouge">write_approval</code> عند استخدام نماذج أصغر أو في البيئات الحساسة أمنيًا. بعبارة أخرى: <code class="language-plaintext highlighter-rouge">/learn</code> يُلغي تكلفة الكتابة لكنه لا يُلغي تكلفة المراجعة. بل مع سهولة توليد المهارات قد تتراكم مهارات رديئة بسرعة إن غابت بوابة المراجعة وعملية curator.</p>

<p>ثانيًا: مصداقية المصدر تحدد مصداقية المخرج. إذا كانت الوثيقة الخارجية المجلوبة عبر <code class="language-plaintext highlighter-rouge">web_extract</code> غير دقيقة أو قديمة، فالمهارة المبنية فوقها ترث الخطأ ذاته. سهولة “مهارة من رابط URL واحد” تعني أن مسؤولية التحقق من المصدر تنتقل إلى المستخدم.</p>

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

<p>خلاصة القول: <code class="language-plaintext highlighter-rouge">/learn</code> تصميم يُزيل احتكاك كتابة المهارات ويُحوّل المرحلة المراجعة الطبيعية التي كان الاحتكاك يؤديها نحو بوابات وcurator. من منظور تشغيل منصة وكلاء متعددة المستأجرين، قراءته كتصميم حوكمة لا كميزة راحة أدق وأوفق.</p>

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

<ul>
  <li>Hermes Agent official documentation, Skills System: <a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/skills">https://hermes-agent.nousresearch.com/docs/user-guide/features/skills</a></li>
  <li>MarkTechPost, “Nous Research Adds /learn to Hermes Agent’s Skills System” (2026-06-24): <a href="https://www.marktechpost.com/2026/06/24/nous-research-adds-learn-to-hermes-agents-skills-system-capturing-workflows-as-slash-commands-without-hand-writing-skill-md/">https://www.marktechpost.com/2026/06/24/nous-research-adds-learn-to-hermes-agents-skills-system-capturing-workflows-as-slash-commands-without-hand-writing-skill-md/</a></li>
  <li>NousResearch/hermes-agent (GitHub): <a href="https://github.com/NousResearch/hermes-agent">https://github.com/NousResearch/hermes-agent</a></li>
  <li>Original tweet (demo video, tonbistudio): <a href="https://x.com/hjguyhan/status/2070135061429854577">https://x.com/hjguyhan/status/2070135061429854577</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="technique" /><category term="ai-coding" /><category term="hermes-agent" /><category term="agent-skills" /><category term="skill-authoring" /><category term="agentskills-io" /><category term="platform-engineering" /><summary type="html"><![CDATA[أمر /learn الذي أضافه Nous Research إلى Hermes Agent يحوّل أيّ مصدر تشير إليه - دليلًا، أو رابطًا، أو محادثة انتهيت منها للتو، أو ملاحظات لصقتها - إلى مهارة قابلة لإعادة الاستخدام، دون كتابة سطر واحد في SKILL.md. قمنا بتشغيل Hermes المثبّت لدينا مباشرةً لقياس هيكل نظام المهارات، ونوضح آلية عمل /learn وما يعنيه من منظور تشغيل وكلاء متعددي المستأجرين على منصة ThakiCloud للذكاء الاصطناعي/تعلم الآلة المعتمدة على Kubernetes.]]></summary></entry><entry xml:lang="en"><title type="html">AI Agents That Write Papers - Moving Your Writing Workflow to an Open-Source Skill Package</title><link href="https://thakicloud.github.io/en/dev/ai-agent-research-paper-skills/" rel="alternate" type="text/html" title="AI Agents That Write Papers - Moving Your Writing Workflow to an Open-Source Skill Package" /><published>2026-06-26T00:00:00+09:00</published><updated>2026-06-26T00:00:00+09:00</updated><id>https://thakicloud.github.io/en/dev/ai-agent-research-paper-skills</id><content type="html" xml:base="https://thakicloud.github.io/en/dev/ai-agent-research-paper-skills/"><![CDATA[<p>As a paper deadline approaches, researchers repeat the same tasks: polish the introduction, verify that the abstract’s claims and evidence align, and preemptively fix any sentence a reviewer might target. That expertise typically lives inside an advisor’s head or scattered across notes. <a href="https://github.com/Master-cai/Research-Paper-Writing-Skills">Research-Paper-Writing-Skills</a>, a recently trending open-source project on X, packages exactly that expertise into a Skill package that AI coding agents can call directly. The key distinction is that this is not yet another collection of prompts – it is a portable format that plugs the same capability into Codex, Claude Code, and Gemini alike.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-hero.png" alt="Abstract image of a modular knowledge unit in the center sending three data streams to three different tools" /></p>

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

<p>This project is built on top of <a href="https://github.com/pengsida/learning_research">learning_research</a>, a research primer published by Professor Pengsi Da (pengsida) of Zhejiang University in China. It reframes that paper-writing knowledge as an Agent Skill package. According to the repository description, the package focuses on ML, CV, and NLP paper writing, and was curated and structured specifically for Codex, Claude Code, and Gemini. The contribution is not a copy of the original text – it takes scattered advice, breaks it into work units, and turns each unit into a reusable capability that an agent can invoke.</p>

<p>Why is this format attracting attention now? As AI coding agents have become mainstream, people have started treating not the model itself but “what to ask the model and how” as a durable asset. Well-organized task knowledge, once created, replicates across tools and teams. Tasks with clear procedures and explicit quality criteria – paper writing being a prime example – are a natural fit for this format. ThakiCloud already organizes much of its internal operations around hundreds of Skills, so we read this trend as a structural shift in how agents are run, not a passing fad.</p>

<h2 id="what-is-an-agent-skill">What is an Agent Skill</h2>

<p>An Agent Skill is a package that tells an agent how to perform a specific task. It centers on a <code class="language-plaintext highlighter-rouge">SKILL.md</code> instruction file and optionally includes reference documents, scripts, and templates. It has three defining properties. First, it is version-controlled: stored in a repository and tracked over time, it accumulates as an asset rather than a one-off prompt. Second, it is loaded on demand: instead of stuffing all knowledge into the context every time, only the Skills relevant to the current task are loaded. Third, it is harness-independent: the same Skill can be used in Claude Code, Codex, and Gemini – that is the design goal.</p>

<p>The third property best explains the value of this project. Models keep changing, and CLI tools keep changing. But “how to write a strong introduction” as task knowledge outlasts both by a wide margin. Accumulating capability in the Skill rather than in the tool means that expertise does not have to be rebuilt every time the tool changes. Internally, we call this the “thin harness, fat Skills” principle: keep the model loop, permissions, and file I/O thin; pack domain knowledge, judgment, and failure cases thickly into the Skill.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-diagram.png" alt="Diagram showing a single portable Skill package containing a SKILL.md instruction file and reference materials, plugged equally into Claude Code, Codex, and Gemini to perform paper-writing tasks" /></p>

<p>The central point of the diagram is that there is exactly one Skill package in the middle. The three tools are not each carrying separate prompts – they share the same task knowledge. That is the fundamental difference from pasting a one-liner prompt into a chat window.</p>

<h2 id="research-paper-writing-skills-in-detail">Research-Paper-Writing-Skills in Detail</h2>

<p>The tasks this package covers map directly to the actual stages of writing a paper. Published usage examples show calling <code class="language-plaintext highlighter-rouge">$research-paper-writing</code> to refine an introduction, or invoking the Skill to rewrite an abstract and verify that claims and evidence are properly paired. Rather than a vague “write this better” request, the design separates the recurring sub-tasks of paper writing into distinct, callable capabilities. This matches the principle that one verb should produce one deliverable.</p>

<p>The multi-harness orientation is also notable. A user can activate the same capability by simply copying the package to the Skill directory recognized by whichever tool they use. This direction is not unique to this project – several recently published open-source efforts, including academic Skill collections centered on Codex and general-purpose AI research Skill libraries, share the same orientation. It is a signal that a simultaneous push is underway to move the entire research workflow into a Skill ecosystem.</p>

<p>One point worth being explicit about: this post is based on the public description and usage examples from the repository. Specific counts such as star ratings, or internal file structures, can change over time and are not stated as fixed facts here. If you are evaluating adoption, check the repository directly along with the license and attribution requirements for the original author’s notes.</p>

<h2 id="installation-and-use">Installation and Use</h2>

<p>The installation model for Agent Skills is generally straightforward. Clone the package and place it in the Skill path recognized by the tool you use; the agent then loads the relevant Skill for each task. The general flow is:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Clone the repository</span>
git clone https://github.com/Master-cai/Research-Paper-Writing-Skills.git

<span class="c"># Copy to the Skill directory of your tool (check each tool's docs for the exact path)</span>
<span class="c"># Example: place under .claude/skills/ in a Claude Code project</span>
<span class="nb">cp</span> <span class="nt">-r</span> Research-Paper-Writing-Skills/&lt;skill-dir&gt; .claude/skills/
</code></pre></div></div>

<p>Once placed, invoke the Skill from an agent session to request work – ask in natural language to refine an introduction draft or check whether the abstract’s claims and evidence are consistent, and the procedures and criteria embedded in the Skill are applied. Because the Skill path and invocation convention differ slightly by tool, follow each tool’s documentation for the actual placement path. The key point is that a Skill placed once is reused across all sessions in that tool. The overhead of copying the same prompt repeatedly disappears.</p>

<h2 id="applying-it-on-the-thakicloud-k8s-aiml-saas-platform">Applying It on the ThakiCloud K8s AI/ML SaaS Platform</h2>

<p>ThakiCloud’s AI platform runs agents and batch workloads for diverse customers on top of Kubernetes. Our internal operations are already organized around Skills, so the format this project demonstrates is familiar. What matters more is that the same pattern is spreading rapidly in the broader community.</p>

<p>First, there is direct value for data scientists and researchers. Teams working on the platform write papers and technical reports regularly. Attaching proven paper-writing Skills to the standard internal toolchain lets teams apply consistent standards to error-prone areas such as introduction structure and abstract claim-evidence alignment – raising average quality without upgrading the model tier.</p>

<p>Second, harness independence pairs well with multi-tenant operations. Different customers may prefer different agent environments, but encapsulating capability in a Skill allows the same task knowledge to be reused regardless of environment. Capability is not locked to any one vendor’s tool, which makes it straightforward to port the same asset into on-premises deployments where customers have strong self-hosting requirements. That aligns with our strategy around self-hosting and cost efficiency.</p>

<p>Third, this project reinforces the lesson that Skills need to be managed as operational assets with discipline. A Skill carries a per-session context cost from the moment it is indexed. We therefore apply a question to every new Skill: “would the agent make a mistake without this?” We also document failure cases explicitly. Applying the same gate to externally sourced Skills prevents a growing Skill library from degrading retrieval accuracy – a real risk when the corpus exceeds what a retriever can distinguish cleanly.</p>

<h2 id="limitations-and-counterpoints">Limitations and Counterpoints</h2>

<p>This approach has clear weaknesses. First, there are no published objective metrics for the quality of text the package produces. Paper writing is inherently a judgment-intensive task, and whether the Skill-generated draft meets a human reader’s standard ultimately requires human review. That is why this post includes no performance figures – fabricating numbers without empirical measurement is exactly what should be avoided.</p>

<p>Second, there is the question of provenance and derivative works. This package is a repackaging of someone else’s public notes. Even though the original author is credited, organizations adopting it bear the responsibility to verify the license terms and the scope of required attribution themselves – more so when embedding it in internal standards.</p>

<p>Third, writing assistance does not replace thinking. A strong introduction comes from strong research. A Skill helps with expression and checking; it cannot transform thin results into a substantive paper. Distinguishing clearly between what the tool can supply and what the researcher must own is the prerequisite for using this format in a healthy way.</p>

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

<ul>
  <li>Research-Paper-Writing-Skills: <a href="https://github.com/Master-cai/Research-Paper-Writing-Skills">https://github.com/Master-cai/Research-Paper-Writing-Skills</a></li>
  <li>Original research primer learning_research (pengsida): <a href="https://github.com/pengsida/learning_research">https://github.com/pengsida/learning_research</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="ai-agent" /><category term="agent-skills" /><category term="claude-code" /><category term="paper-writing" /><category term="llm" /><summary type="html"><![CDATA[An open-source project bundles a professor's paper-writing expertise into a Skill package that works across Codex, Claude Code, and Gemini. We examine how it differs from a plain prompt collection, why the Agent Skill format matters, and what this trend signals for ThakiCloud -- an organization running an agent platform with hundreds of Skills.]]></summary></entry><entry xml:lang="en"><title type="html">Stop Hand-Writing SKILL.md: A Deep Dive into Hermes Agent’s /learn Command</title><link href="https://thakicloud.github.io/en/technique/hermes-agent-learn-skills/" rel="alternate" type="text/html" title="Stop Hand-Writing SKILL.md: A Deep Dive into Hermes Agent’s /learn Command" /><published>2026-06-26T00:00:00+09:00</published><updated>2026-06-26T00:00:00+09:00</updated><id>https://thakicloud.github.io/en/technique/hermes-agent-learn-skills</id><content type="html" xml:base="https://thakicloud.github.io/en/technique/hermes-agent-learn-skills/"><![CDATA[<p><img src="/assets/images/hermes-agent-learn-skills-hero.png" alt="Skill authoring process depicted as scattered document fragments converging into a single structured crystal" />
<em>The concept of /learn expressed as scattered knowledge fragments from multiple directions crystallizing into a single structured output.</em></p>

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

<p>The most common way to teach an agent a new capability has been to write a skill file by hand. A skill is ultimately just one Markdown document, but authoring it from scratch while respecting the required frontmatter and section order takes more effort than it sounds. That friction is especially real for things that live in your head but are tedious to write down - internal API usage, deployment runbooks, and repetitive procedures.</p>

<p>The <code class="language-plaintext highlighter-rouge">/learn</code> command that Nous Research added to its Hermes Agent framework on June 24, 2026, eliminates the hand-authoring step entirely. Point it at a directory, a URL, a conversation you just finished, or a pasted note, and the live agent collects the material directly using its own tools and authors a standard-compliant <code class="language-plaintext highlighter-rouge">SKILL.md</code>. The demo video shared on X by tonbistudio - showing multiple sources being combined into a skill - sparked a lot of attention, and since ThakiCloud already had Hermes Agent installed internally, we decided to verify it firsthand.</p>

<p>ThakiCloud runs multi-tenant agents on a Kubernetes-based AI/ML SaaS platform. The idea of an agent building its own procedural memory in a form that humans can gate and review maps directly onto the principle we call Thin Harness, Fat Skills: capabilities belong in skills, not in the harness. <code class="language-plaintext highlighter-rouge">/learn</code> lowers the barrier to creating those skills, which makes it more than a convenience feature.</p>

<h2 id="what-this-technology-is">What This Technology Is</h2>

<p><code class="language-plaintext highlighter-rouge">/learn</code> is not a separate ingestion engine. The key insight is that it constructs a standard-guided prompt and hands it to the agent as an ordinary single turn. Source collection therefore uses the tools the agent already has. Local directories are read with <code class="language-plaintext highlighter-rouge">read_file</code> and <code class="language-plaintext highlighter-rouge">search_files</code>; online documentation is fetched with <code class="language-plaintext highlighter-rouge">web_extract</code>; workflows carried out together in the current conversation are captured directly from conversation context.</p>

<p><img src="/assets/images/hermes-agent-learn-skills-diagram.png" alt="The full /learn path: from source description through agent tool collection, standard SKILL.md authoring, the write_approval gate, and curator" />
<em>The complete /learn path: starting from a source description, collecting via agent tools, authoring a standard SKILL.md, and passing through the write_approval gate and curator.</em></p>

<p>Four source types are accepted. The following examples are taken verbatim from the official documentation:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Local SDK or documentation directory (read via read_file / search_files)
/learn the REST client in ~/projects/acme-sdk, focus on auth + pagination

# Online documentation page (fetched via web_extract)
/learn https://docs.example.com/api/quickstart

# A workflow you just completed with the agent in this conversation
/learn how I just deployed the staging server

# A pasted note or verbally described procedure
/learn filing an expense: open the portal, New &gt; Expense, attach the receipt, submit
</code></pre></div></div>

<p>The agent organizes the collected material according to the “house authoring standard”: descriptions capped at 60 characters, a fixed section order, framing based on Hermes tools, and a rule against inventing commands that do not exist. The resulting <code class="language-plaintext highlighter-rouge">SKILL.md</code> consists of YAML frontmatter and fixed body sections:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">my-skill</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Brief description of what this skill does</span>
<span class="na">version</span><span class="pi">:</span> <span class="s">1.0.0</span>
<span class="na">platforms</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">macos</span><span class="pi">,</span> <span class="nv">linux</span><span class="pi">]</span>
<span class="na">metadata</span><span class="pi">:</span>
  <span class="na">hermes</span><span class="pi">:</span>
    <span class="na">tags</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">python</span><span class="pi">,</span> <span class="nv">automation</span><span class="pi">]</span>
    <span class="na">category</span><span class="pi">:</span> <span class="s">devops</span>
<span class="nn">---</span>

<span class="c1"># Skill Title</span>

<span class="c1">## When to Use</span>
<span class="s">Conditions that trigger this skill.</span>

<span class="c1">## Procedure</span>
<span class="s">1. First step</span>
<span class="s">2. Second step</span>

<span class="c1">## Pitfalls</span>
<span class="pi">-</span> <span class="s">Known failure modes and solutions</span>

<span class="c1">## Verification</span>
<span class="s">How to confirm the skill is working.</span>
</code></pre></div></div>

<p>Storage is handled by the <code class="language-plaintext highlighter-rouge">skill_manage</code> tool. One important safety mechanism is attached here. When <code class="language-plaintext highlighter-rouge">skills.write_approval</code> is enabled, every skill write by the agent is staged to <code class="language-plaintext highlighter-rouge">~/.hermes/pending/skills/</code> instead of being applied immediately. A human can review pending changes with <code class="language-plaintext highlighter-rouge">/skills pending</code>, inspect the full diff with <code class="language-plaintext highlighter-rouge">/skills diff &lt;id&gt;</code>, and then approve or reject. This gate applies equally to skills created in a foreground turn and to skills proposed by the background self-improvement review.</p>

<p>Because there is no separate ingestion engine, <code class="language-plaintext highlighter-rouge">/learn</code> works identically across the CLI, the TUI, messaging gateways, and the dashboard. It does not matter whether the terminal backend is local, Docker, or remote. In the dashboard, a “Learn a skill” button appears on the Skills page and assembles a <code class="language-plaintext highlighter-rouge">/learn</code> request from a directory field, a URL field, and a free-text box.</p>

<p>The official documentation identifies three usage scenarios. First, internal API onboarding: run <code class="language-plaintext highlighter-rouge">/learn</code> against a private documentation URL and it produces a skill covering authentication, pagination, and common calls; new team members then invoke it as a slash command. Second, deployment runbook capture: step through a staging deployment with the agent, then run <code class="language-plaintext highlighter-rouge">/learn how I just deployed the staging server</code> and the procedure becomes repeatable across CLI and chat platforms. Third, bundling repetitive tasks: a skill bundle lets a single slash command load the review, test, and PR skills together.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ~/.hermes/skill-bundles/backend-dev.yaml</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">backend-dev</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Backend feature work - review, test, PR workflow.</span>
<span class="na">skills</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">github-code-review</span>
  <span class="pi">-</span> <span class="s">test-driven-development</span>
  <span class="pi">-</span> <span class="s">github-pr-workflow</span>
<span class="na">instruction</span><span class="pi">:</span> <span class="pi">|</span>
  <span class="s">Always start by writing failing tests, then implement.</span>
</code></pre></div></div>

<p>The skill system also offers an opt-out path if you want to start from a clean slate. <code class="language-plaintext highlighter-rouge">hermes skills opt-out</code> stops seeding bundle skills, and <code class="language-plaintext highlighter-rouge">hermes skills opt-in --sync</code> restores them. The <code class="language-plaintext highlighter-rouge">platforms</code> field hides incompatible skills on unsupported operating systems, and conditional fields expose a skill only when a specific toolset is present, giving fine-grained control over what surfaces in any given environment.</p>

<h2 id="installation-and-integration">Installation and Integration</h2>

<p>We verified the Hermes Agent installation in our ThakiCloud environment directly. The binary lives at <code class="language-plaintext highlighter-rouge">~/.local/bin/hermes</code> and actually runs on Python from <code class="language-plaintext highlighter-rouge">~/hermes-agent/venv</code>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes <span class="nt">--version</span>
Hermes Agent v0.16.0 <span class="o">(</span>2026.6.5<span class="o">)</span> · upstream 40cea4d5
Python: 3.11.13
OpenAI SDK: 2.24.0
</code></pre></div></div>

<p>All skills are stored in <code class="language-plaintext highlighter-rouge">~/.hermes/skills/</code>, which is the single source of truth. Because Hermes is compatible with the agentskills.io open standard, you can configure multiple tools to share-scan the same skills folder:</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ~/.hermes/config.yaml</span>
<span class="na">skills</span><span class="pi">:</span>
  <span class="na">external_dirs</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">~/.agents/skills</span>
    <span class="pi">-</span> <span class="s">/home/shared/team-skills</span>
    <span class="pi">-</span> <span class="s">${SKILLS_REPO}/skills</span>
</code></pre></div></div>

<p>That <code class="language-plaintext highlighter-rouge">external_dirs</code> setting is the crux of the platform perspective we cover later. We pulled the list of installed skills directly. 78 skills are currently installed, categorized under apple, autonomous-ai-agents, creative, and others:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes skills list
                                Installed Skills
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓
┃ Name                ┃ Category             ┃ Source  ┃ Trust   ┃ Status  ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩
│ claude-code         │ autonomous-ai-agents │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ architecture-diagram│ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ humanizer           │ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ excalidraw          │ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
└─────────────────────┴──────────────────────┴─────────┴─────────┴─────────┘
</code></pre></div></div>

<p>Every installed skill automatically becomes a slash command. Typing the name alone - <code class="language-plaintext highlighter-rouge">/excalidraw</code> - loads the skill and the agent asks how it can help; supplying an argument such as <code class="language-plaintext highlighter-rouge">/plan design a rollout for migrating our auth provider</code> processes the request immediately. The skill management subcommands are extensive:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes skills <span class="nt">--help</span>
<span class="o">{</span>browse, search, <span class="nb">install</span>, inspect, list, check, update, audit,
 uninstall, reset, opt-out, opt-in, repair-official, publish,
 snapshot, tap, config<span class="o">}</span>
</code></pre></div></div>

<p>A mechanism to prevent unbounded skill accumulation is also built in. The curator runs a secondary model in the background on a schedule, reviewing agent-created skills to consolidate duplicates and archive stale ones. Bundle skills and hub-installed skills are never touched; archives are recoverable and there is no automatic deletion:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes curator <span class="nt">--help</span>
<span class="o">{</span>status, run, pause, resume, pin, unpin, restore,
 list-archived, archive, prune, backup, rollback<span class="o">}</span>
</code></pre></div></div>

<p>Progressive disclosure for token cost management is confirmed as well. At level 0, an index of roughly 3,000 tokens containing only name and description loads first; the full content loads only when the work actually requires it:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Level 0: skills_list()           -&gt; [{name, description, category}, ...]   (~3k tokens)
Level 1: skill_view(name)        -&gt; Full content + metadata
Level 2: skill_view(name, path)  -&gt; Specific reference file
</code></pre></div></div>

<h2 id="what-we-actually-tested">What We Actually Tested</h2>

<p>There is a limitation that must be stated honestly here. The version installed at ThakiCloud is <code class="language-plaintext highlighter-rouge">v0.16.0 (2026.6.5)</code>, which predates the June 24, 2026 release that introduced <code class="language-plaintext highlighter-rouge">/learn</code>. Because the binary reports “Up to date” based on the local git checkout, upstream new releases are not applied automatically. We therefore could not run <code class="language-plaintext highlighter-rouge">/learn</code> in our environment and capture output metrics. The constraint encountered during reproduction attempts: the installed version predates <code class="language-plaintext highlighter-rouge">/learn</code>, so the command itself is absent.</p>

<p>What we could verify, we measured directly. The skill system skeleton that <code class="language-plaintext highlighter-rouge">/learn</code> writes into is fully operational in our environment. All 78 skills surface as slash commands, and the <code class="language-plaintext highlighter-rouge">skill_manage</code>-based agent self-authoring path, the <code class="language-plaintext highlighter-rouge">skills.write_approval</code> staging gate, the curator background cleanup, and progressive disclosure indexing are all present in the installed version. In other words, what <code class="language-plaintext highlighter-rouge">/learn</code> adds is a thin entry point that, given a source description, constructs a standard prompt and feeds it into the existing authoring pipeline. The heavy machinery underneath has already been verified.</p>

<p>The behavior of <code class="language-plaintext highlighter-rouge">/learn</code> itself was cross-verified against the official documentation and the June 24, 2026 MarkTechPost report. Both sources describe the same facts: four source types, <code class="language-plaintext highlighter-rouge">read_file</code> / <code class="language-plaintext highlighter-rouge">search_files</code> / <code class="language-plaintext highlighter-rouge">web_extract</code> as collection tools, a 60-character description cap with fixed section order, <code class="language-plaintext highlighter-rouge">skill_manage</code> storage, and the <code class="language-plaintext highlighter-rouge">write_approval</code> gate. Rather than fabricate numbers, we clearly delineate what has been verified and what has not.</p>

<p>Updating to the upstream release would allow us to run <code class="language-plaintext highlighter-rouge">/learn</code> directly and measure output quality. However, that update could affect the running multi-tenant environment, so the safe path is to verify first in an isolated profile before rolling it in. We plan to capture actual <code class="language-plaintext highlighter-rouge">/learn</code> output in a follow-up post.</p>

<h2 id="implications-for-thakiclouds-kubernetes-aiml-saas-platform">Implications for ThakiCloud’s Kubernetes AI/ML SaaS Platform</h2>

<p><code class="language-plaintext highlighter-rouge">/learn</code> is interesting not simply because it is convenient, but because it directly addresses three problems that a multi-tenant agent platform has to solve.</p>

<p>The first is the cost of capturing domain knowledge. Every customer has different deployment runbooks, internal APIs, and incident response procedures. Having a human translate each of these into a <code class="language-plaintext highlighter-rouge">SKILL.md</code> slows onboarding. <code class="language-plaintext highlighter-rouge">/learn</code> turns “convert this work we just finished into a skill” into a single command that immediately converts procedural memory into a reusable asset. A staging deployment a operator walks through once becomes a repeatable command available across both CLI and chat.</p>

<p>The second is governance. ThakiCloud serves customers who require on-premises and self-hosted deployments, as well as environments that must meet National Intelligence Service security requirements. An agent that can write its own skills is powerful, but it also introduces the risk of unreviewed procedures accumulating automatically. The <code class="language-plaintext highlighter-rouge">write_approval</code> gate, which stages every skill write to <code class="language-plaintext highlighter-rouge">~/.hermes/pending/skills/</code>, persists across restarts, and lets a human inspect the full diff via <code class="language-plaintext highlighter-rouge">/skills diff</code> before applying it, is well-suited to these environments. The design deliberately separates the benefits of automation from the control of human review.</p>

<p>The third is cross-tool skill sharing. Hermes’s <code class="language-plaintext highlighter-rouge">external_dirs</code> configuration allows multiple AI tools to share the same skills folder. ThakiCloud already operates more than 1,000 skills internally using the same agentskills.io standard. Connecting Hermes to that shared directory means a skill authored in one place works across Claude Code, Cursor, and Hermes without duplication. This is the practical implementation of Thin Harness, Fat Skills - the principle that capabilities accumulate in skills rather than in the harness - which is how you build assets that compound in value even as harnesses change.</p>

<p>The roughly 3,000-token progressive disclosure index also matters from a serving cost perspective. Even as the skill count grows into the hundreds, only the index enters the context on every turn; full content loads on demand. For a team running multi-tenant vLLM serving and managing per-token costs, the pattern of decoupling skill count from context cost is worth adopting directly.</p>

<h2 id="limitations-and-counter-arguments">Limitations and Counter-Arguments</h2>

<p>The most significant limitation is that a human still has to review the output. <code class="language-plaintext highlighter-rouge">/learn</code> has a rule against inventing commands that do not exist, but the possibility that a small model misjudges what it has learned remains. The official documentation acknowledges this and recommends enabling <code class="language-plaintext highlighter-rouge">write_approval</code> when using a smaller model or in security-sensitive environments. In other words, <code class="language-plaintext highlighter-rouge">/learn</code> eliminates authoring cost but does not eliminate review cost. In fact, because skill creation becomes easier, the absence of a review gate and curator cleanup could accelerate the accumulation of low-quality skills.</p>

<p>Second, the trustworthiness of the source determines the trustworthiness of the output. If a document fetched with <code class="language-plaintext highlighter-rouge">web_extract</code> is inaccurate or outdated, the skill built on top of it inherits the same errors. The convenience of creating a skill from a single URL transfers the responsibility for source verification to the user.</p>

<p>Third, the clear gap in this verification is that our installed version predates <code class="language-plaintext highlighter-rouge">/learn</code>, so we could not measure actual output. The behavior is cross-verified through official documentation and press coverage, but metrics such as output quality, authoring time, and standard-compliance rate were not captured directly. We will obtain those numbers by running the upstream version in an isolated profile and publish them in a follow-up post.</p>

<p>In summary, <code class="language-plaintext highlighter-rouge">/learn</code> substantially reduces the friction of creating skills while moving the natural review step that friction used to provide into an explicit gate and a curator. For teams operating multi-tenant agent platforms, it reads more accurately as a governance design choice than as a convenience feature.</p>

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

<ul>
  <li>Hermes Agent official documentation, Skills System: <a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/skills">https://hermes-agent.nousresearch.com/docs/user-guide/features/skills</a></li>
  <li>MarkTechPost, “Nous Research Adds /learn to Hermes Agent’s Skills System” (2026-06-24): <a href="https://www.marktechpost.com/2026/06/24/nous-research-adds-learn-to-hermes-agents-skills-system-capturing-workflows-as-slash-commands-without-hand-writing-skill-md/">https://www.marktechpost.com/2026/06/24/nous-research-adds-learn-to-hermes-agents-skills-system-capturing-workflows-as-slash-commands-without-hand-writing-skill-md/</a></li>
  <li>NousResearch/hermes-agent (GitHub): <a href="https://github.com/NousResearch/hermes-agent">https://github.com/NousResearch/hermes-agent</a></li>
  <li>Original tweet (demo video, tonbistudio): <a href="https://x.com/hjguyhan/status/2070135061429854577">https://x.com/hjguyhan/status/2070135061429854577</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="technique" /><category term="ai-coding" /><category term="hermes-agent" /><category term="agent-skills" /><category term="skill-authoring" /><category term="agentskills-io" /><category term="platform-engineering" /><summary type="html"><![CDATA[The /learn command that Nous Research added to Hermes Agent can point at a directory, a URL, a just-finished conversation, or a pasted note and turn it into a reusable skill - no hand-written SKILL.md required. We ran the installed Hermes to measure the skill system skeleton directly, and here we break down how /learn works and what it means for ThakiCloud's multi-tenant agent operations on a Kubernetes AI/ML SaaS platform.]]></summary></entry><entry xml:lang="ko"><title type="html">논문 쓰는 AI 에이전트 - 오픈소스 Skill 패키지로 작성 워크플로 옮기기</title><link href="https://thakicloud.github.io/ko/dev/ai-agent-research-paper-skills/" rel="alternate" type="text/html" title="논문 쓰는 AI 에이전트 - 오픈소스 Skill 패키지로 작성 워크플로 옮기기" /><published>2026-06-26T00:00:00+09:00</published><updated>2026-06-26T00:00:00+09:00</updated><id>https://thakicloud.github.io/ko/dev/ai-agent-research-paper-skills</id><content type="html" xml:base="https://thakicloud.github.io/ko/dev/ai-agent-research-paper-skills/"><![CDATA[<p>논문 마감이 가까워지면 연구자는 같은 작업을 반복합니다. 서론을 다시 다듬고, 초록의 주장과 근거가 맞물리는지 확인하고, 리뷰어가 물고 늘어질 만한 문장을 미리 손봅니다. 이 노하우는 대개 지도교수의 머릿속이나 흩어진 메모에 있습니다. 최근 X에서 화제가 된 <a href="https://github.com/Master-cai/Research-Paper-Writing-Skills">Research-Paper-Writing-Skills</a>는 바로 이 노하우를 AI 코딩 에이전트가 그대로 불러 쓸 수 있는 Skill 패키지로 묶은 오픈소스 프로젝트입니다. 핵심은 “또 하나의 프롬프트 모음”이 아니라, Codex와 Claude Code, Gemini 어디서나 같은 능력을 끼워 넣는 이식 가능한 형식이라는 점입니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-hero.png" alt="중앙의 모듈형 지식 단위가 세 갈래 데이터 흐름을 통해 서로 다른 세 도구로 퍼져 나가는 추상 이미지" /></p>

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

<p>이 프로젝트는 중국 저장대학교 펑쓰다(彭思达) 교수가 공개한 연구 입문 노트 <a href="https://github.com/pengsida/learning_research">learning_research</a>를 바탕으로, 논문 작성 노하우를 재구성해 Agent Skill 패키지로 포장한 것입니다. 저장소 설명에 따르면 ML, CV, NLP 논문 작성에 초점을 맞췄고, Codex와 Claude Code, Gemini를 대상으로 큐레이션과 구조화 작업을 거쳤습니다. 원저작자의 글을 그대로 베낀 것이 아니라, 흩어진 조언을 작업 단위로 쪼개 에이전트가 호출할 수 있는 재사용 가능한 능력으로 만든 것이 기여의 핵심입니다.</p>

<p>왜 이런 형식이 지금 주목받을까요. AI 코딩 에이전트가 보편화되면서, 사람들은 모델 자체보다 “이 모델에게 무엇을 어떻게 시킬 것인가”를 자산으로 보기 시작했습니다. 잘 정리된 작업 지식은 한 번 만들어 두면 여러 도구와 여러 사람에게 복제됩니다. 논문 작성처럼 절차가 분명하고 품질 기준이 명확한 작업은 이 형식과 특히 잘 맞습니다. ThakiCloud 역시 내부 운영의 상당 부분을 수백 개의 Skill로 구성하고 있어, 이 흐름을 단순한 유행이 아니라 에이전트 운영의 구조적 변화로 보고 있습니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-slide-03.png" alt="단일 오픈소스 패키지 한 벌이 Codex, Claude, Gemini 세 파운데이션 모델에서 공통으로 호출되는 구조를 요약한 슬라이드" /></p>

<h2 id="agent-skill이란-무엇인가">Agent Skill이란 무엇인가</h2>

<p>Agent Skill은 에이전트에게 특정 작업을 수행하는 방법을 알려 주는 패키지입니다. 보통 <code class="language-plaintext highlighter-rouge">SKILL.md</code>라는 지시문 파일을 중심에 두고, 필요하면 참조 문서나 스크립트, 템플릿을 함께 담습니다. 핵심 성질은 세 가지입니다. 첫째, 버전 관리가 됩니다. 저장소에 두고 수정 이력을 추적할 수 있으므로 단발성 프롬프트와 달리 자산으로 축적됩니다. 둘째, 필요할 때만 불러옵니다. 모든 지식을 매번 컨텍스트에 욱여넣는 대신, 작업과 관련된 Skill만 그 순간 로드합니다. 셋째, 하네스에 종속되지 않습니다. 같은 Skill을 Claude Code에서도, Codex에서도, Gemini에서도 쓸 수 있는 것이 목표입니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-slide-04.png" alt="프롬프트 복붙과 Agent Skill 시스템을 버전 관리, 컨텍스트 로딩, 하네스 종속성 세 축으로 비교한 표 슬라이드" /></p>

<p>이 세 번째 성질이 이 프로젝트의 가치를 가장 잘 설명합니다. 모델은 계속 바뀌고 CLI 도구도 계속 바뀝니다. 그러나 “좋은 서론을 쓰는 법”이라는 작업 지식은 그보다 훨씬 오래갑니다. 능력을 도구가 아니라 Skill 쪽에 쌓아 두면, 도구를 갈아탈 때마다 노하우를 다시 만들 필요가 없습니다. 이것이 우리가 내부에서 “얇은 하네스, 두꺼운 Skill”이라고 부르는 원칙입니다. 모델 루프와 권한, 파일 입출력 같은 하네스는 얇게 유지하고, 도메인 지식과 판단, 실패 사례는 Skill에 두텁게 쌓는 것입니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-diagram.png" alt="이식 가능한 Skill 패키지가 SKILL.md 지시문과 참조 자료를 담은 채, Claude Code와 Codex, Gemini 세 하네스에 똑같이 끼워져 논문 작성 작업을 수행하는 구조" /></p>

<p>위 그림의 핵심은 가운데 Skill 패키지가 단 한 벌이라는 점입니다. 세 도구가 각자 다른 프롬프트를 들고 있는 것이 아니라, 같은 작업 지식을 공유합니다. 프롬프트 한 줄을 단톡방에 붙여 넣는 방식과 본질적으로 다른 지점이 여기입니다.</p>

<h2 id="research-paper-writing-skills-살펴보기">Research-Paper-Writing-Skills 살펴보기</h2>

<p>이 패키지가 다루는 작업은 논문 작성의 실제 단계와 맞닿아 있습니다. 공개된 사용 예시를 보면, 서론을 개선하라는 호출(<code class="language-plaintext highlighter-rouge">$research-paper-writing</code>)로 글의 도입부를 다듬거나, 초록을 다시 쓰되 주장과 근거가 짝을 이루는지 검사하는 식입니다. 즉 “글을 잘 써 줘”라는 막연한 요청이 아니라, 논문에서 반복적으로 발생하는 구체적 하위 작업을 각각의 능력으로 분리한 구조입니다. 이는 동사 하나에 결과물 하나를 대응시키는 좋은 프롬프트 설계 원칙과도 일치합니다.</p>

<p>여러 AI 코딩 도구를 함께 겨냥한 점도 눈에 띕니다. 사용자는 자신이 쓰는 환경의 Skill 디렉터리에 패키지를 복사해 넣는 것만으로 같은 능력을 활성화할 수 있습니다. 이런 다중 하네스 지향은 이 프로젝트만의 특징이 아니라, Codex 중심의 학술 Skill 모음이나 범용 AI 리서치 Skill 라이브러리 등 최근 등장한 여러 오픈소스 프로젝트가 공유하는 방향입니다. 연구 워크플로 전반을 Skill 생태계로 옮기려는 시도가 동시다발적으로 진행되고 있다는 신호입니다.</p>

<p>한 가지 분명히 해 둘 점이 있습니다. 이 글은 저장소의 공개 설명과 사용 예시를 근거로 작성했으며, 별점 수나 내부 파일 구성 같은 세부 수치는 시점에 따라 달라질 수 있어 단정하지 않았습니다. 실제 도입을 검토한다면 저장소 원문과 라이선스, 그리고 원저작자 노트의 출처 표기를 직접 확인하시기를 권합니다.</p>

<h2 id="설치-및-사용">설치 및 사용</h2>

<p>Agent Skill의 설치 모델은 대체로 단순합니다. 패키지를 내려받아 사용하는 도구가 인식하는 Skill 경로에 두면, 에이전트가 작업에 맞춰 해당 Skill을 불러옵니다. 일반적인 흐름은 다음과 같습니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 저장소를 클론합니다</span>
git clone https://github.com/Master-cai/Research-Paper-Writing-Skills.git

<span class="c"># 사용하는 도구의 Skill 디렉터리에 복사합니다 (도구별 경로는 각 문서를 확인)</span>
<span class="c"># 예: Claude Code 프로젝트의 .claude/skills/ 하위로 배치</span>
<span class="nb">cp</span> <span class="nt">-r</span> Research-Paper-Writing-Skills/&lt;skill-dir&gt; .claude/skills/
</code></pre></div></div>

<p>배치가 끝나면 에이전트 세션에서 해당 Skill을 호출해 작업을 시킵니다. 서론 초안을 손보거나, 초록의 주장과 근거 정합성을 점검하는 식의 요청을 자연어로 던지면, Skill에 담긴 절차와 점검 기준이 적용됩니다. 도구마다 Skill을 인식하는 경로와 호출 관례가 조금씩 다르므로, 실제 배치 경로는 각 도구의 문서를 따르는 것이 안전합니다. 중요한 것은 한 번 배치한 Skill이 그 도구의 모든 세션에서 재사용된다는 점입니다. 매번 같은 프롬프트를 복사해 붙이는 수고가 사라집니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-slide-06.png" alt="환경 복사, 명령어 호출, 특정 작업 지시, 결과 도출로 이어지는 4단계 사용 흐름 슬라이드" /></p>

<h2 id="thakicloud-k8s-aiml-saas-플랫폼-적용-및-시사점">ThakiCloud K8s AI/ML SaaS 플랫폼 적용 및 시사점</h2>

<p>ThakiCloud의 AI 플랫폼은 Kubernetes 위에서 다양한 고객의 에이전트와 배치 작업을 운영합니다. 우리 내부 운영 자체가 이미 Skill 중심으로 구성되어 있어, 이 프로젝트가 보여 주는 형식은 낯설지 않습니다. 오히려 외부에서 같은 패턴이 빠르게 확산되고 있다는 점이 의미가 큽니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-slide-07.png" alt="사내 표준화, 벤더 독립성, K8s 네이티브 세 가지로 정리한 ThakiCloud 멀티테넌트 플랫폼 확장 슬라이드" /></p>

<p>첫째, 데이터 과학자와 연구 인력에게 직접적인 가치가 있습니다. 플랫폼을 다루는 팀은 논문과 기술 보고서를 자주 작성합니다. 검증된 논문 작성 Skill을 사내 표준 도구에 얹어 두면, 서론 구조나 초록의 주장-근거 정합성처럼 실수하기 쉬운 부분을 일관된 기준으로 점검할 수 있습니다. 모델 등급을 올리지 않고도 평균 품질을 끌어올리는 방식입니다.</p>

<p>둘째, 하네스 독립성은 멀티테넌트 운영과 잘 맞습니다. 고객마다 선호하는 에이전트 환경이 다를 수 있는데, 능력을 Skill에 담아 두면 환경이 달라도 같은 작업 지식을 재사용할 수 있습니다. 특정 벤더의 도구에 능력이 묶이지 않으므로, 온프레미스 요구가 강한 고객 환경에도 같은 자산을 이식하기 수월합니다. 이는 자체 호스팅과 비용 효율을 중시하는 우리 전략과 결이 같습니다.</p>

<p>셋째, Skill을 운영 자산으로 다루는 규율이 함께 필요하다는 교훈도 줍니다. Skill은 색인에 올라간 순간부터 매 세션 컨텍스트 비용을 치릅니다. 그래서 우리는 새 Skill마다 “이게 없으면 에이전트가 틀리는가”라는 질문을 통과시키고, 실패 사례를 명시적으로 적어 둡니다. 외부에서 좋은 Skill을 도입할 때도 같은 게이트를 적용하면, 늘어나는 Skill이 오히려 검색 정확도를 떨어뜨리는 부작용을 줄일 수 있습니다.</p>

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

<p>이 접근에는 분명한 약점도 있습니다. 가장 먼저, 생성된 글의 품질을 객관적으로 측정한 공개 지표가 없습니다. 논문 작성은 본질적으로 판단이 개입하는 작업이라, Skill이 만든 초안이 사람 기준에 얼마나 부합하는지는 결국 사람이 검토해야 합니다. 이 글에서도 성능 수치를 제시하지 않은 이유가 여기에 있습니다. 캡처한 실측이 없는데 수치를 지어내는 것은 가장 피해야 할 일입니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-slide-08.png" alt="엄격한 게이트키핑, 인간의 최종 책임, 공개 지표의 부재 세 가지 한계를 정리한 슬라이드" /></p>

<p>다음으로, 출처와 파생 저작의 문제가 있습니다. 이 패키지는 타인의 공개 노트를 재구성한 결과물입니다. 원저작자를 명시하고 있더라도, 도입하는 쪽에서는 라이선스와 출처 표기 범위를 직접 확인할 책임이 있습니다. 사내 표준에 얹는다면 더욱 그렇습니다.</p>

<p>마지막으로, 작성 보조가 사고를 대체하지는 않습니다. 좋은 서론은 좋은 연구에서 나옵니다. Skill은 표현과 점검을 거들 뿐, 빈약한 결과를 충실한 논문으로 둔갑시키지 못합니다. 도구가 채워 주는 부분과 연구자가 끝까지 책임져야 하는 부분을 혼동하지 않는 것이 이 형식을 건강하게 쓰는 전제입니다.</p>

<p><img src="/assets/images/ai-agent-research-paper-skills-slide-09.png" alt="프롬프트를 멈추고 자산을 구축하라는 메시지로 마무리하는 슬라이드" /></p>

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

<ul>
  <li>Research-Paper-Writing-Skills: <a href="https://github.com/Master-cai/Research-Paper-Writing-Skills">https://github.com/Master-cai/Research-Paper-Writing-Skills</a></li>
  <li>원저작 노트 learning_research (펑쓰다): <a href="https://github.com/pengsida/learning_research">https://github.com/pengsida/learning_research</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="dev" /><category term="ai-agent" /><category term="agent-skills" /><category term="claude-code" /><category term="paper-writing" /><category term="llm" /><summary type="html"><![CDATA[교수의 논문 작성 노하우를 Codex, Claude Code, Gemini 어디서나 불러 쓰는 Skill 패키지로 묶은 오픈소스 프로젝트가 화제입니다. 단순 프롬프트 모음과 무엇이 다른지, Agent Skill이라는 형식이 왜 중요한지, 그리고 수백 개의 Skill로 에이전트 플랫폼을 운영하는 ThakiCloud 관점에서 이 흐름이 무엇을 시사하는지 정리합니다.]]></summary></entry><entry xml:lang="ko"><title type="html">SKILL.md를 손으로 쓰지 않습니다: Hermes Agent의 /learn 명령을 뜯어봤습니다</title><link href="https://thakicloud.github.io/ko/technique/hermes-agent-learn-skills/" rel="alternate" type="text/html" title="SKILL.md를 손으로 쓰지 않습니다: Hermes Agent의 /learn 명령을 뜯어봤습니다" /><published>2026-06-26T00:00:00+09:00</published><updated>2026-06-26T00:00:00+09:00</updated><id>https://thakicloud.github.io/ko/technique/hermes-agent-learn-skills</id><content type="html" xml:base="https://thakicloud.github.io/ko/technique/hermes-agent-learn-skills/"><![CDATA[<p><img src="/assets/images/hermes-agent-learn-skills-hero.png" alt="흩어진 문서 조각이 하나의 구조화된 결정체로 수렴하는 모습으로 표현한 스킬 저작 과정" />
<em>여러 방향에서 흩어진 지식 조각이 하나의 구조화된 산출물로 결정화되는 모습으로 표현한 /learn의 개념.</em></p>

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

<p>에이전트에게 새 능력을 가르치는 가장 흔한 방법은 스킬 파일을 손으로 쓰는 것이었습니다. 스킬은 결국 마크다운 한 장이지만, 정해진 프런트매터와 섹션 순서를 지켜 처음부터 작성하는 일은 생각보다 품이 듭니다. 사내 API 사용법, 배포 런북, 반복 작업 절차처럼 머릿속에는 있지만 글로 옮기기 귀찮은 것들이 특히 그렇습니다.</p>

<p>Nous Research가 2026년 6월 24일 자사 에이전트 프레임워크 Hermes Agent에 추가한 <code class="language-plaintext highlighter-rouge">/learn</code> 명령은 이 손으로 쓰는 단계를 통째로 없앱니다. 디렉터리, URL, 방금 끝낸 대화, 붙여넣은 메모 중 무엇이든 가리키면 라이브 에이전트가 자료를 직접 수집해 표준을 지킨 <code class="language-plaintext highlighter-rouge">SKILL.md</code>를 저작합니다. 트위터에서 tonbistudio가 여러 소스를 모아 스킬로 만드는 데모 영상을 공유하면서 화제가 됐고, 마침 ThakiCloud는 이미 사내에서 Hermes Agent를 설치해 운용하고 있어 직접 검증해 봤습니다.</p>

<p>ThakiCloud는 쿠버네티스 기반 AI/ML SaaS 플랫폼에서 멀티테넌트 에이전트를 운용합니다. 에이전트가 스스로 절차적 기억을 쌓고, 그 기억을 사람이 검토할 수 있게 게이트를 거는 구조는 저희가 “얇은 harness, 두꺼운 스킬(Thin Harness, Fat Skills)” 원칙으로 정리해 온 방향과 정확히 맞닿아 있습니다. 능력은 harness가 아니라 스킬에 쌓는다는 원칙입니다. <code class="language-plaintext highlighter-rouge">/learn</code>은 그 스킬을 만드는 진입장벽을 낮추는 도구이므로, 단순한 편의 기능 이상으로 볼 여지가 있습니다.</p>

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

<p><code class="language-plaintext highlighter-rouge">/learn</code>은 별도의 인제스천 엔진이 아닙니다. 핵심은 “표준을 안내하는 프롬프트를 만들어 에이전트에게 평범한 한 턴으로 넘긴다”는 점입니다. 그래서 소스를 수집하는 일도 에이전트가 이미 가진 도구로 처리합니다. 로컬 디렉터리는 <code class="language-plaintext highlighter-rouge">read_file</code>과 <code class="language-plaintext highlighter-rouge">search_files</code>로 읽고, 온라인 문서는 <code class="language-plaintext highlighter-rouge">web_extract</code>로 가져오며, 방금 대화에서 함께 진행한 워크플로는 대화 컨텍스트 그대로 캡처합니다.</p>

<p><img src="/assets/images/hermes-agent-learn-skills-diagram.png" alt="/learn이 소스를 수집해 표준 SKILL.md를 저작하고 게이트를 거쳐 슬래시 명령이 되기까지의 흐름" />
<em>소스 설명에서 시작해 에이전트 도구로 수집하고, 표준 SKILL.md를 저작한 뒤 write_approval 게이트와 curator를 거치는 /learn의 전체 경로.</em></p>

<p>받아들이는 소스는 네 종류입니다. 공식 문서에 실린 예시를 그대로 옮기면 다음과 같습니다.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code># 로컬 SDK 또는 문서 디렉터리 (read_file / search_files로 읽음)
/learn the REST client in ~/projects/acme-sdk, focus on auth + pagination

# 온라인 문서 페이지 (web_extract로 가져옴)
/learn https://docs.example.com/api/quickstart

# 방금 이 대화에서 에이전트와 함께 진행한 워크플로
/learn how I just deployed the staging server

# 붙여넣은 메모 또는 말로 설명한 절차
/learn filing an expense: open the portal, New &gt; Expense, attach the receipt, submit
</code></pre></div></div>

<p>에이전트는 수집한 자료를 “하우스 저작 표준”에 맞춰 정리합니다. 설명(description)은 60자 이하, 섹션 순서는 고정, 프레이밍은 Hermes 도구 기준이며, 존재하지 않는 명령을 지어내지 않는다는 규칙입니다. 결과물인 <code class="language-plaintext highlighter-rouge">SKILL.md</code>는 YAML 프런트매터와 고정된 본문 섹션으로 이뤄집니다.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nn">---</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">my-skill</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Brief description of what this skill does</span>
<span class="na">version</span><span class="pi">:</span> <span class="s">1.0.0</span>
<span class="na">platforms</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">macos</span><span class="pi">,</span> <span class="nv">linux</span><span class="pi">]</span>
<span class="na">metadata</span><span class="pi">:</span>
  <span class="na">hermes</span><span class="pi">:</span>
    <span class="na">tags</span><span class="pi">:</span> <span class="pi">[</span><span class="nv">python</span><span class="pi">,</span> <span class="nv">automation</span><span class="pi">]</span>
    <span class="na">category</span><span class="pi">:</span> <span class="s">devops</span>
<span class="nn">---</span>

<span class="c1"># Skill Title</span>

<span class="c1">## When to Use</span>
<span class="s">이 스킬을 트리거하는 조건.</span>

<span class="c1">## Procedure</span>
<span class="s">1. 첫 번째 단계</span>
<span class="s">2. 두 번째 단계</span>

<span class="c1">## Pitfalls</span>
<span class="pi">-</span> <span class="s">알려진 실패 모드와 해결책</span>

<span class="c1">## Verification</span>
<span class="s">동작을 확인하는 방법.</span>
</code></pre></div></div>

<p>저장은 <code class="language-plaintext highlighter-rouge">skill_manage</code> 도구가 담당합니다. 여기서 중요한 안전장치가 하나 붙습니다. <code class="language-plaintext highlighter-rouge">skills.write_approval</code>을 켜 두면 에이전트의 모든 스킬 쓰기가 곧바로 반영되지 않고 <code class="language-plaintext highlighter-rouge">~/.hermes/pending/skills/</code>에 스테이징됩니다. 사람은 <code class="language-plaintext highlighter-rouge">/skills pending</code>으로 대기 중인 변경을 보고 <code class="language-plaintext highlighter-rouge">/skills diff &lt;id&gt;</code>로 전체 diff를 확인한 뒤 승인하거나 거부합니다. 이 게이트는 포그라운드 턴에서 만든 스킬뿐 아니라 백그라운드 자기개선 리뷰가 제안한 스킬에도 똑같이 적용됩니다.</p>

<p>별도 인제스천 엔진이 없다는 설계 덕분에 <code class="language-plaintext highlighter-rouge">/learn</code>은 CLI, TUI, 메시징 게이트웨이, 대시보드에서 동일하게 동작합니다. 터미널 백엔드가 로컬이든 도커든 원격이든 상관없습니다. 대시보드에서는 Skills 페이지에 “Learn a skill” 버튼이 생겨 디렉터리 입력란, URL 입력란, 자유 텍스트 박스로 <code class="language-plaintext highlighter-rouge">/learn</code> 요청을 구성해 실행합니다.</p>

<p>공식 문서가 제시하는 활용 시나리오는 세 가지로 정리됩니다. 첫째는 사내 API 온보딩입니다. 비공개 문서 URL에 <code class="language-plaintext highlighter-rouge">/learn</code>을 실행하면 인증, 페이지네이션, 자주 쓰는 호출을 담은 스킬이 만들어지고, 새 팀원은 이를 슬래시 명령으로 호출합니다. 둘째는 배포 런북 캡처입니다. 에이전트와 함께 스테이징 배포를 한 번 진행한 뒤 <code class="language-plaintext highlighter-rouge">/learn how I just deployed the staging server</code>를 실행하면 그 절차가 CLI와 채팅 플랫폼 전반에서 반복 가능해집니다. 셋째는 반복 작업 묶기입니다. 스킬 번들을 쓰면 슬래시 명령 하나로 리뷰, 테스트, PR 스킬을 한꺼번에 로드합니다.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ~/.hermes/skill-bundles/backend-dev.yaml</span>
<span class="na">name</span><span class="pi">:</span> <span class="s">backend-dev</span>
<span class="na">description</span><span class="pi">:</span> <span class="s">Backend feature work - review, test, PR workflow.</span>
<span class="na">skills</span><span class="pi">:</span>
  <span class="pi">-</span> <span class="s">github-code-review</span>
  <span class="pi">-</span> <span class="s">test-driven-development</span>
  <span class="pi">-</span> <span class="s">github-pr-workflow</span>
<span class="na">instruction</span><span class="pi">:</span> <span class="pi">|</span>
  <span class="s">Always start by writing failing tests, then implement.</span>
</code></pre></div></div>

<p>스킬 시스템 자체에는 빈 상태로 시작하는 선택지도 있습니다. <code class="language-plaintext highlighter-rouge">hermes skills opt-out</code>으로 번들 스킬 시딩을 멈추고, <code class="language-plaintext highlighter-rouge">hermes skills opt-in --sync</code>로 되돌립니다. <code class="language-plaintext highlighter-rouge">platforms</code> 필드로 호환되지 않는 운영체제에서는 스킬을 숨기고, 조건부 필드로 특정 toolset이 있을 때만 스킬을 노출하는 등 노출 제어도 세밀합니다.</p>

<h2 id="설치-및-통합">설치 및 통합</h2>

<p>ThakiCloud 환경에 설치된 Hermes Agent를 직접 확인했습니다. 바이너리는 <code class="language-plaintext highlighter-rouge">~/.local/bin/hermes</code>에 있고, 실제로는 <code class="language-plaintext highlighter-rouge">~/hermes-agent/venv</code>의 파이썬에서 구동됩니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes <span class="nt">--version</span>
Hermes Agent v0.16.0 <span class="o">(</span>2026.6.5<span class="o">)</span> · upstream 40cea4d5
Python: 3.11.13
OpenAI SDK: 2.24.0
</code></pre></div></div>

<p>스킬은 모두 <code class="language-plaintext highlighter-rouge">~/.hermes/skills/</code>에 모여 있고, 이 디렉터리가 단일 진실원입니다. agentskills.io 오픈 표준과 호환되므로, 여러 도구가 공유하는 스킬 폴더를 함께 스캔하도록 설정할 수도 있습니다. 이 외부 디렉터리 설정이 뒤에서 다룰 플랫폼 관점의 핵심입니다.</p>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># ~/.hermes/config.yaml</span>
<span class="na">skills</span><span class="pi">:</span>
  <span class="na">external_dirs</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">~/.agents/skills</span>
    <span class="pi">-</span> <span class="s">/home/shared/team-skills</span>
    <span class="pi">-</span> <span class="s">${SKILLS_REPO}/skills</span>
</code></pre></div></div>

<p>설치된 스킬 목록을 직접 뽑아 봤습니다. 현재 78개의 스킬이 설치되어 있고, 카테고리는 apple, autonomous-ai-agents, creative 등으로 분류됩니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes skills list
                                Installed Skills
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┓
┃ Name                ┃ Category             ┃ Source  ┃ Trust   ┃ Status  ┃
┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━┩
│ claude-code         │ autonomous-ai-agents │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ architecture-diagram│ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ humanizer           │ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
│ excalidraw          │ creative             │ <span class="nb">builtin</span> │ <span class="nb">builtin</span> │ enabled │
└─────────────────────┴──────────────────────┴─────────┴─────────┴─────────┘
</code></pre></div></div>

<p>설치된 모든 스킬은 자동으로 슬래시 명령이 됩니다. <code class="language-plaintext highlighter-rouge">/excalidraw</code>처럼 이름만 부르면 스킬이 로드되어 에이전트가 무엇을 도울지 되묻고, <code class="language-plaintext highlighter-rouge">/plan design a rollout for migrating our auth provider</code>처럼 인자를 함께 주면 그 요청을 바로 처리합니다. 스킬 관리 서브커맨드도 풍부합니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes skills <span class="nt">--help</span>
<span class="o">{</span>browse, search, <span class="nb">install</span>, inspect, list, check, update, audit,
 uninstall, reset, opt-out, opt-in, repair-official, publish,
 snapshot, tap, config<span class="o">}</span>
</code></pre></div></div>

<p>스킬이 무한정 쌓이는 문제를 막는 장치도 내장되어 있습니다. curator는 보조 모델이 백그라운드에서 주기적으로 에이전트가 만든 스킬을 검토해 중복을 정리하고 노후 스킬을 아카이브하는 작업입니다. 번들 스킬과 허브에서 설치한 스킬은 절대 건드리지 않으며, 아카이브는 복구 가능하고 자동 삭제는 일어나지 않습니다.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>~/.local/bin/hermes curator <span class="nt">--help</span>
<span class="o">{</span>status, run, pause, resume, pin, unpin, restore,
 list-archived, archive, prune, backup, rollback<span class="o">}</span>
</code></pre></div></div>

<p>토큰 비용을 누르는 progressive disclosure도 그대로 확인됩니다. 0단계에서는 이름과 설명만 담긴 약 3,000토큰짜리 인덱스가 먼저 로드되고, 작업이 실제로 필요할 때만 전체 내용이 로드됩니다.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Level 0: skills_list()           → [{name, description, category}, ...]   (~3k 토큰)
Level 1: skill_view(name)        → 전체 내용 + 메타데이터
Level 2: skill_view(name, path)  → 특정 참조 파일
</code></pre></div></div>

<h2 id="실제-실험-결과">실제 실험 결과</h2>

<p>여기서 정직하게 기록해야 할 한계가 있습니다. ThakiCloud에 설치된 버전은 <code class="language-plaintext highlighter-rouge">v0.16.0 (2026.6.5)</code>로, <code class="language-plaintext highlighter-rouge">/learn</code>이 추가된 2026년 6월 24일자 릴리스보다 앞섭니다. 바이너리가 로컬 git 체크아웃을 기준으로 “Up to date”라고 보고하기 때문에 업스트림 신규 릴리스가 자동 반영되지는 않았습니다. 그래서 이번 글에서는 <code class="language-plaintext highlighter-rouge">/learn</code>을 우리 환경에서 직접 실행해 결과 수치를 캡처하지는 못했습니다. 재현 시도 중 제약: 설치본 버전이 <code class="language-plaintext highlighter-rouge">/learn</code> 도입 이전이라 명령 자체가 부재합니다.</p>

<p>대신 검증할 수 있는 것은 모두 실측했습니다. <code class="language-plaintext highlighter-rouge">/learn</code>이 결과물을 꽂아 넣는 스킬 시스템의 골격은 우리 환경에서 그대로 동작합니다. 78개의 스킬이 슬래시 명령으로 노출되고, <code class="language-plaintext highlighter-rouge">skill_manage</code> 기반의 에이전트 자가 저작 경로와 <code class="language-plaintext highlighter-rouge">skills.write_approval</code> 스테이징 게이트, curator 백그라운드 정리, progressive disclosure 인덱싱이 모두 설치본에 존재합니다. 즉 <code class="language-plaintext highlighter-rouge">/learn</code>이 추가한 것은 “소스를 가리키면 표준 프롬프트를 만들어 기존 저작 경로에 태운다”는 얇은 진입점이고, 그 아래의 무거운 부분은 이미 검증된 상태입니다.</p>

<p><code class="language-plaintext highlighter-rouge">/learn</code>의 동작 자체는 공식 문서와 2026년 6월 24일 MarkTechPost 보도로 교차 검증했습니다. 두 소스 모두 네 가지 소스 유형, <code class="language-plaintext highlighter-rouge">read_file</code>/<code class="language-plaintext highlighter-rouge">search_files</code>/<code class="language-plaintext highlighter-rouge">web_extract</code> 수집 도구, 60자 설명 제약과 고정 섹션 순서, <code class="language-plaintext highlighter-rouge">skill_manage</code> 저장과 <code class="language-plaintext highlighter-rouge">write_approval</code> 게이트라는 동일한 사실을 기술합니다. 수치를 지어내는 대신, 검증된 범위와 검증하지 못한 범위를 분명히 나눠 둡니다.</p>

<p>업스트림으로 업데이트하면 <code class="language-plaintext highlighter-rouge">/learn</code>을 직접 돌려 산출물 품질을 측정할 수 있습니다. 다만 그 업데이트는 운용 중인 멀티테넌트 환경에 영향을 줄 수 있어, 격리된 프로파일에서 먼저 검증한 뒤 반영하는 것이 안전합니다. 후속 글에서 실제 <code class="language-plaintext highlighter-rouge">/learn</code> 산출물을 캡처해 보강할 예정입니다.</p>

<h2 id="thakicloud-쿠버네티스-aiml-saas-플랫폼-적용-및-시사점">ThakiCloud 쿠버네티스 AI/ML SaaS 플랫폼 적용 및 시사점</h2>

<p><code class="language-plaintext highlighter-rouge">/learn</code>이 흥미로운 이유는 단순히 편하기 때문이 아니라, 멀티테넌트 에이전트 플랫폼이 풀어야 하는 세 가지 문제와 정면으로 맞닿기 때문입니다.</p>

<p>첫째는 도메인 지식의 캡처 비용입니다. 고객사마다 배포 런북, 사내 API, 인시던트 대응 절차가 다릅니다. 이것을 매번 사람이 <code class="language-plaintext highlighter-rouge">SKILL.md</code>로 옮기면 도입 속도가 느려집니다. <code class="language-plaintext highlighter-rouge">/learn</code>은 “방금 함께 끝낸 작업을 스킬로 만들어라”는 한 줄로 절차적 기억을 즉시 자산화합니다. 운영자가 한 번 시연한 스테이징 배포가 CLI와 채팅 양쪽에서 재사용 가능한 명령이 되는 식입니다.</p>

<p>둘째는 거버넌스입니다. ThakiCloud는 온프레미스와 self-hosting을 요구하는 고객, 그리고 국가정보원 보안 요구를 충족해야 하는 환경을 함께 다룹니다. 에이전트가 스스로 스킬을 쓰는 능력은 강력하지만, 동시에 검토되지 않은 절차가 자동으로 쌓이는 위험이기도 합니다. <code class="language-plaintext highlighter-rouge">write_approval</code> 게이트가 모든 스킬 쓰기를 <code class="language-plaintext highlighter-rouge">~/.hermes/pending/skills/</code>에 스테이징하고, 재시작 후에도 유지하며, <code class="language-plaintext highlighter-rouge">/skills diff</code>로 전체 변경을 사람이 확인하게 만드는 구조는 이런 환경에 적합합니다. 자동화의 편익과 사람 검토의 통제를 분리해 둔 설계입니다.</p>

<p>셋째는 도구 간 스킬 공유입니다. Hermes의 <code class="language-plaintext highlighter-rouge">external_dirs</code> 설정은 여러 AI 도구가 같은 스킬 폴더를 공유하도록 허용합니다. ThakiCloud는 이미 사내에서 1,000개가 넘는 스킬을 동일한 agentskills.io 표준으로 운용하고 있습니다. Hermes를 이 공유 디렉터리에 연결하면, 한 곳에서 작성한 스킬이 Claude Code, Cursor, Hermes를 가로질러 동작합니다. 이것이 바로 능력을 harness가 아니라 스킬에 쌓는다는 “얇은 harness, 두꺼운 스킬” 원칙의 실천이며, harness가 바뀌어도 복리가 쌓이는 자산을 만드는 방법입니다.</p>

<p>progressive disclosure의 약 3,000토큰 인덱스도 서빙 비용 관점에서 중요합니다. 스킬이 수백 개로 늘어도 매 턴 컨텍스트에 들어가는 것은 인덱스뿐이고, 전체 내용은 필요할 때만 로드됩니다. 멀티테넌트로 vLLM 서빙을 운용하며 토큰 단가를 관리하는 입장에서, 스킬 수와 컨텍스트 비용을 분리하는 이 패턴은 그대로 채택할 가치가 있습니다.</p>

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

<p>가장 큰 한계는 산출물 품질을 사람이 결국 검토해야 한다는 점입니다. <code class="language-plaintext highlighter-rouge">/learn</code>은 “없는 명령을 지어내지 않는다”는 규칙을 두지만, 작은 모델이 무엇을 배웠는지 잘못 판단할 가능성은 남습니다. 공식 문서도 이 점을 인정하며 작은 모델을 쓰거나 보안이 중요한 환경에서는 <code class="language-plaintext highlighter-rouge">write_approval</code>을 켤 것을 권합니다. 즉 <code class="language-plaintext highlighter-rouge">/learn</code>은 작성 비용을 없애지만 검토 비용을 없애지는 못합니다. 오히려 스킬 생성이 쉬워지는 만큼, 검토 게이트와 curator의 정리가 없으면 저품질 스킬이 빠르게 쌓이는 역효과가 생길 수 있습니다.</p>

<p>둘째, 소스의 신뢰도가 산출물의 신뢰도를 결정합니다. <code class="language-plaintext highlighter-rouge">web_extract</code>로 가져온 외부 문서가 부정확하거나 오래됐다면, 그 위에서 만들어진 스킬도 같은 오류를 물려받습니다. URL 한 줄로 스킬을 만든다는 편의는 곧 출처 검증 책임을 사용자에게 넘긴다는 뜻이기도 합니다.</p>

<p>셋째, 이번 검증의 명백한 공백은 우리 설치본이 <code class="language-plaintext highlighter-rouge">/learn</code> 이전 버전이라 실제 산출물을 측정하지 못했다는 것입니다. 동작 사실은 공식 문서와 보도로 교차 검증했지만, 산출물 품질, 저작 소요 시간, 표준 준수율 같은 수치는 직접 캡처하지 못했습니다. 이런 수치는 격리 프로파일에서 업스트림 버전을 돌린 뒤 후속 글에서 보강하겠습니다.</p>

<p>결론적으로 <code class="language-plaintext highlighter-rouge">/learn</code>은 스킬을 만드는 마찰을 크게 줄이는 동시에, 그 마찰이 수행하던 자연스러운 검토 단계를 게이트와 curator로 옮긴 설계입니다. 멀티테넌트 에이전트 플랫폼을 운용하는 입장에서는 편의 기능이 아니라 거버넌스 설계로 읽는 편이 정확합니다.</p>

<h2 id="출처-sources">출처 (Sources)</h2>

<ul>
  <li>Hermes Agent 공식 문서, Skills System: <a href="https://hermes-agent.nousresearch.com/docs/user-guide/features/skills">https://hermes-agent.nousresearch.com/docs/user-guide/features/skills</a></li>
  <li>MarkTechPost, “Nous Research Adds /learn to Hermes Agent’s Skills System” (2026-06-24): <a href="https://www.marktechpost.com/2026/06/24/nous-research-adds-learn-to-hermes-agents-skills-system-capturing-workflows-as-slash-commands-without-hand-writing-skill-md/">https://www.marktechpost.com/2026/06/24/nous-research-adds-learn-to-hermes-agents-skills-system-capturing-workflows-as-slash-commands-without-hand-writing-skill-md/</a></li>
  <li>NousResearch/hermes-agent (GitHub): <a href="https://github.com/NousResearch/hermes-agent">https://github.com/NousResearch/hermes-agent</a></li>
  <li>원 트윗(데모 영상 공유, tonbistudio): <a href="https://x.com/hjguyhan/status/2070135061429854577">https://x.com/hjguyhan/status/2070135061429854577</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="technique" /><category term="ai-coding" /><category term="hermes-agent" /><category term="agent-skills" /><category term="skill-authoring" /><category term="agentskills-io" /><category term="platform-engineering" /><summary type="html"><![CDATA[Nous Research가 Hermes Agent에 추가한 /learn은 디렉터리, URL, 방금 끝낸 대화, 붙여넣은 메모 어느 것이든 가리켜 재사용 가능한 스킬로 만들어 줍니다. SKILL.md를 한 줄도 손으로 쓰지 않습니다. 설치된 Hermes를 직접 돌려 스킬 시스템 골격을 실측했고, /learn의 동작과 ThakiCloud 쿠버네티스 AI/ML SaaS 플랫폼의 멀티테넌트 에이전트 운용 관점에서 무엇을 의미하는지 정리합니다.]]></summary></entry><entry xml:lang="ar"><title type="html">بناء أول وكيل ذكاء اصطناعي - ابدأ بحلقة التحكم الدنيا المحمية</title><link href="https://thakicloud.github.io/ar/dev/minimal-guarded-agent-loop/" rel="alternate" type="text/html" title="بناء أول وكيل ذكاء اصطناعي - ابدأ بحلقة التحكم الدنيا المحمية" /><published>2026-06-25T00:00:00+09:00</published><updated>2026-06-25T00:00:00+09:00</updated><id>https://thakicloud.github.io/ar/dev/minimal-guarded-agent-loop</id><content type="html" xml:base="https://thakicloud.github.io/ar/dev/minimal-guarded-agent-loop/"><![CDATA[<p>تحظى أدلة المبتدئين المعنونة بـ “كيف تبني أول وكيل ذكاء اصطناعي” باهتمام متواصل. والأدلة الجيدة منها تقسّم الوكيل عادةً إلى أربعة أجزاء: دماغ نموذج اللغة الكبير المسؤول عن الاستدلال، والذاكرة التي تحفظ الحالة، والأدوات التي تتفاعل مع العالم الخارجي، وحلقة الوكيل التي تربط الثلاثة معاً في تكرار. ويصاحب ذلك نمط ReAct - التناوب بين الاستدلال والتصرف - باعتباره المعيار الفعلي. كل ذلك صحيح. لكن عند تشغيل الوكلاء فعلياً في الإنتاج، يكون الجزء الذي يتعطل مختلفاً. إنه ضوابط الحماية التي تقرر متى توقف الحلقة. يشغّل هذا المقال حلقة وكيل دنيا مع ضوابط حماية بلغة Python الصرفة دون استدعاء أي نموذج لغوي خارجي، ويوضح الفارق بأرقام حقيقية.</p>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

<ul>
  <li>بطاقة النموذج: <a href="https://huggingface.co/nvidia/Qwen3.6-35B-A3B-NVFP4">nvidia/Qwen3.6-35B-A3B-NVFP4 · Hugging Face</a></li>
  <li>النموذج الأساسي: <a href="https://huggingface.co/Qwen/Qwen3.6-35B-A3B">Qwen/Qwen3.6-35B-A3B · Hugging Face</a></li>
  <li>أداة التكميم: <a href="https://github.com/NVIDIA/Model-Optimizer">NVIDIA Model Optimizer (GitHub)</a></li>
  <li>محرّك الاستدلال: <a href="https://github.com/vllm-project/vllm">vLLM (GitHub)</a></li>
</ul>]]></content><author><name>{&quot;name&quot;=&gt;nil, &quot;avatar&quot;=&gt;nil, &quot;bio&quot;=&gt;nil, &quot;location&quot;=&gt;&quot;Seoul, Korea&quot;, &quot;email&quot;=&gt;&quot;info@thakicloud.co.kr&quot;, &quot;uri&quot;=&gt;nil, &quot;home&quot;=&gt;nil, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;Website&quot;, &quot;icon&quot;=&gt;&quot;fas fa-fw fa-link&quot;, &quot;url&quot;=&gt;&quot;https://thakicloud.co.kr&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-fw fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/thakicloud&quot;}]}</name><email>info@thakicloud.co.kr</email></author><category term="llmops" /><category term="nvfp4" /><category term="quantization" /><category term="vllm" /><category term="qwen3" /><category term="moe" /><category term="inference-optimization" /><category term="model-optimizer" /><summary type="html"><![CDATA[أصدرت NVIDIA نسخة مكمَّمة بصيغة NVFP4 (4 بت) من نموذج Qwen3.6-35B-A3B من Alibaba. خفض الأوزان من 16 بت إلى 4 بت يقلّل مساحة القرص وذاكرة GPU بنحو 3.06 ضعف، بينما يبقى فقدان الدقة مقابل BF16 في حدود 0.1 إلى 0.8 نقطة وفق الأرقام المنشورة في بطاقة النموذج. نحلّل كيف تتكامل بنية MoE (إجمالي 35B، 3B نشطة) مع تكميم NVFP4، وأوامر النشر في vLLM، وما يعنيه ذلك للخدمة المحلية لدى ThakiCloud.]]></summary></entry></feed>