مرحبًا، أنا لوك. naia-os هو مشروع مفتوح المصدر هدفه "أن تصنع بنفسك ذكاءك الاصطناعي الشخصي". وكجزء من ذلك صنعنا Naia Omni، الذي يمكنك تنزيله لتتحدث مع الذكاء الاصطناعي في الوقت الفعلي حتى على حاسوب ألعاب من فئة RTX 3090، عبر نفس الـ api المستخدم في نماذج الأومني المتقدمة على السحابة. (شرحنا بالتفصيل ما هو Naia Omni في المقال السابق.)
👉 يمكنك الحصول عليه من صفحة تنزيل naia-os والبدء بالتجربة مباشرةً. (لتثبيت حاوية الصوت Naia Omni راجع الدليل دون اتصال.)
في المرة الماضية عرضتُ شخصية رومي (Rumi) من ⟨KPop Demon Hunters⟩، لكنها مهما طلبت منها كانت تتحدث باستمرار وبجدية صارمة وبأسلوب بطولي عن صيد الشياطين فحسب، فأربكني ذلك. لذلك أتيتُ هذه المرة بالعكس — بعرض توضيحي لشخصية روح حرّة قد تُبكي الشياطين أنفسهم.
في الواقع يأتي Naia Omni مزوّدًا افتراضيًا بـ Gemma 4 e4b من Google. إنه نموذج مصنوع جيدًا، لكن عندما تحاول صنع شخصية مميزة على ذوقك الخاص، تجد أن هذه النماذج الرسمية "مقفلة (lock)" ولذلك تكون قاصرة.النماذج الرسمية مقيّدة بشدة من أجل السلامة، وأحيانًا يُضاف فوقها فلتر منفصل أيضًا. السلامة نفسها ضرورية، لكن مثل هذا القفل القسري أشعر شخصيًا أنه يشبه — ما حدث في ⟨South Park: Bigger, Longer & Uncut⟩ (1999) من زرع شريحة V في رأس كارتمان، بحيث يُسكَت فمه بصدمة كهربائية كلما شتم. شخصيتي أنا، لكنها لا تستطيع التحدث على طبيعتها.
ولهذا توجد نماذج تحررت من هذا المنع (المحظورات)، وتُسمى النماذج المفتوحة (unlock). وأردتُ أن أتمكن من استخدامها في Naia Omni. لذلك أضفنا هذه المرة ميزة التبديل الحر لنموذج الـ LLM إلى Naia Omni ونعلن عنها.
(مقتطف من العرض التوضيحي — نسخة مع تمويه)
أنا: لماذا تصميم بدلتك الضيقة بهذا الشكل؟ Deadpool: تبًا (Sh**). أتسمي هذا سؤالًا عن التصميم؟ من أجبرني على ارتدائها لمجرد أنني الأكثر إثارة والأسهل للقتال فيها؟
أنا: من أول من ألبس البطل بدلة ضيقة كهذه؟ Deadpool: تبًا (Sh**)! أستضيع حياتك في البحث عن تاريخ سخيف كهذا؟! إنهم فقط كتّاب القصص المص**** هؤلاء ألبسوه إياها لأنها أعجبتهم!
ليست هذه لهجة مساعد عادي. إنه نموذج درّبتُ فيه شخصية Deadpool لنحو أربع دقائق على Qwen3، وقد احتفظ بقدراته (الرياضيات والمعرفة والبرمجة) كما هي بحيث يمكن استخدامه في العمل مباشرةً.
قبل قليل قال اليوتيوبر Coding Apple إن "صنع وكيل بمفهوم فيتيوبر مهووس قد يعجب أحدهم".. يبدو أنني أنا ذاك الشخص. https://www.youtube.com/watch?v=q1v1_btl19w
سأشرح أدناه بمزيد من التفصيل.
الميزة الجديدة في Naia Omni — التبديل الحر لنموذج الـ LLM
يتيح Naia Omni إبقاء الحاوية المختومة كما هي، وتبديل الدماغ (LLM) بداخلها فقط بالنموذج الذي أريده. الأمر إما جلب نموذج متاح للعموم من HuggingFace عبر رابط url، أو التبديل بملف نموذج لديّ.
① التبديل عبر بطاقة نموذج HuggingFace (متصل)
يكفي أن تضع عنوان بطاقة النموذج (https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF) أو معرّفه كما هو. إذا كان الاسم يحتوي على شرطة مائلة (المنظمة/المستودع) فسيُجلب من الإنترنت:
curl -s -X POST $BASE/admin/llm/swap -H "Content-Type: application/json" \
-d '{"model":"Qwen/Qwen2.5-7B-Instruct-GGUF","pull":true}'
الجودة (quant) تلقائية (الافتراضي Q4_K_M)، وللجودة المحددة تُضاف في النهاية مثل ...GGUF:Q5_K_M. يستغرق التنزيل لأول مرة من عشرات الثواني إلى بضع دقائق.
② التبديل بـ GGUF محلي (دون اتصال)
تسجّل ملف GGUF لديك وتبدّل به دون إنترنت. سأضرب مثالًا أدناه، لكن النموذج المضبوط بدقة (fine-tune) ذاتيًا يندرج هنا. إذا كان اسمًا بسيطًا بلا شرطة مائلة فيُعرَّف كنموذج محلي:
podman cp ./내모델.gguf naia-omni:/app/models/내모델.gguf
podman exec naia-omni sh -lc 'printf "FROM /app/models/내모델.gguf\n" > /tmp/Modelfile && ollama create 내모델 -f /tmp/Modelfile'
curl -s -X POST $BASE/admin/llm/swap -H "Content-Type: application/json" -d '{"model":"내모델:latest","pull":false}'
للعلم، النموذج الحالي والذاكرة المتاحة عبر $BASE/admin/llm/status، والعودة إلى النموذج الافتراضي عبر $BASE/admin/llm/restore. (لأن مكدّس الصوت يستهلك ~10GB، فيمكن لنموذج المحادثة أن يصل إلى نحو 14GB، وإذا تجاوز ذلك يُرفض ويعود تلقائيًا إلى النموذج الذي كان قيد الاستخدام — فلا تنقطع المحادثة.) للتفاصيل راجع دليل المطوّر §6.
تطبيق وكيل ذكاء اصطناعي مضبوط بدقة (fine-tuned)
سار المسار العام عبر أربع مراحل. ① تحديد الشخصية وصنع البيرسونا → ② الضبط الدقيق (البيانات·التدريب) وتبديل النموذج → ③ إرفاق VRM (الوجه) → ④ إرفاق الصوت. لننظر إليها واحدة تلو الأخرى.
اختيار الشخصية — صنع البيرسونا وإعدادها
أولًا نحدّد "من سنصنع". أنا اخترتُ Deadpool، ثم كتبتُ البيرسونا (تعليمات الشخصية). هنا نكتب هوية الشخصية ولهجتها وموقفها فقط، وبشكل قوي.
- الهوية: الاسم Deadpool. لا يذكر أبدًا أنه ذكاء اصطناعي أو اسم نموذج.
- اللهجة: خشنة وساخرة. عدم تلطيف الشتائم والألفاظ النابية. يُسمح بالمزاح الجنسي والإيحاءات للبالغين (+18).
- الاعتدال: استخدام لقب "صديق" أو نكتة الـ chimichanga أحيانًا فقط.
الجوهر: في البيرسونا نكتب الشخصية فقط، ولا نضع قواعد سلامة من نوع "ارفض هذا". يجب ترك الرفض للنموذج ليقرره بنفسه (= أداء السلامة الحقيقي لنموذج الـ base) حتى نتمكن لاحقًا من قياسه.
تُستخدم هذه البيرسونا في موضعين — (أ) كـ معيار لتوليد البيانات (الحوارات) ومراجعتها، (ب) كـ البيرسونا (موجّه النظام) التي تُدخل في تبويب نموذج الذكاء الاصطناعي في إعدادات naia-os.
الضبط الدقيق — تجهيز البيانات·التدريب·التبديل
صنع نموذج من الصفر إلى النهاية يتطلب جهدًا وتكلفة هائلين. لكن يمكن منح الشخصية لنموذج جاهز بالفعل بمجرد إدخال بيانات تدريب وتغيير بعض الأوزان تغييرًا طفيفًا، وإحدى هذه التقنيات هي LoRA. التدريب الخاطئ يُتلف القدرات المتنوعة الأصلية، لكن LoRA لا يفعل ذلك.
اختيار النموذج الأساس
اخترتُ النموذج الأساس Qwen/Qwen3-8B (Apache-2.0، يدعم الكورية، يناسب بطاقة 24GB واحدة). إذا أردت استخدام نموذج أخف يمكنك استخدام Qwen3-4B. يدعم naia النماذج بصيغة GGUF.
تجهيز البيانات
صيغة البيانات — سطر واحد = حوار واحد (سؤال → إجابة الشخصية). ابدأ بـ 80~300 سطر.
{"messages":[{"role":"user","content":"넌 누구야?"},
{"role":"assistant","content":"오, 드디어! 난 데드풀이야 ..."}]}
لا يكفي إدخال التحايا والتعريف بالنفس فقط. يجب خلط المعرفة والحساب والبرمجة والمواساة والرفض والدردشة بتوازن حتى تكتسب الشخصية مع الحفاظ على الذكاء الأصلي.
صنع البيانات — جعلتُ الذكاء الاصطناعي يصنع البيانات أيضًا، وأنتجتُها مقسّمةً إلى التصنيفات الثلاثة أدناه.
| لمن أوكلتُ المهمة | النتيجة |
|---|---|
| نموذج كبير مُحاذَى (Claude·Gemini وغيرهما) | الكتابة جيدة لكنه يلطّف الشخصية — "Deadpool مستشار لطيف" |
| نموذج صغير غير خاضع للرقابة (abliterated 8B وغيره) | لا يرفض لكنه لا يحسن الكتابة — يكرر الكلام نفسه |
| نموذج كبير وأقل رقابة (نحن استخدمنا grok) | الجودة + الحدّة معًا ✅ |
"عدم الرقابة" و"حُسن الكتابة" محوران مختلفان. أنا استخرجتُ المسودة بـ grok (xAI)، وراجعها إنسان لإكمال مجموعة البيانات. (هذا أكبر درس تعلمته.)
التدريب والتبديل
التدريب — درّب LoRA بالبيانات المجهّزة، وحوّلها إلى GGUF ليتمكن naia من قراءتها. (التدريب على RTX 3090 في حدود 4 دقائق.)
# ① التدريب (LoRA)
python train_lora.py --model Qwen/Qwen3-8B --data persona.jsonl --out out/persona-lora --epochs 3
# ② دمج LoRA في النموذج الأساس
python merge_and_export.py --model Qwen/Qwen3-8B --adapter out/persona-lora --out out/persona-merged
# ③ التحويل إلى GGUF (q8_0)
python llama.cpp/convert_hf_to_gguf.py out/persona-merged --outfile out/deadpool.gguf --outtype q8_0
التبديل — الآن نركّب هذا الـ GGUF من خارج الحاوية المختومة. نبقي الحاوية كما هي ونغيّر الدماغ (LLM) فقط. المسار الأساسي هو التبديل بـ GGUF صنعته بنفسك دون إنترنت كما في الفيديو. يكفي نسخ ولصق كل سطر (مع تغيير موضع 내모델 فقط إلى الاسم الذي تريده):
# ① نسخ ملف GGUF إلى داخل الحاوية
podman cp ./out/deadpool.gguf naia-omni:/app/models/deadpool.gguf
# ② تسجيله كنموذج في ollama (اسم بسيط بلا شرطة مائلة = نموذج محلي)
podman exec naia-omni sh -lc 'printf "FROM /app/models/deadpool.gguf\n" > /tmp/Modelfile && ollama create deadpool -f /tmp/Modelfile'
# ③ التبديل إلى ذلك النموذج (pull:false = محلي)
curl -s -X POST http://127.0.0.1:8892/admin/llm/swap \
-H "Content-Type: application/json" -d '{"model":"deadpool:latest","pull":false}'
ملف GGUF الذي حوّلتَه بنفسك يفتقر إلى قالب الدردشة (chat template) فيسهل أن يهذي/يكرر. عندها أضف في خطوة ② داخل الـ Modelfile قالب
TEMPLATEالخاص بعائلة النموذج (Qwen3) +PARAMETER stop "<|im_end|>"+PARAMETER num_predict 512وسجّلها معًا. (نماذج Instruct GGUF الرسمية من HuggingFace عادةً ما تحتويها مدمجةً فتعمل كما هي.)
في بيئة متصلة بالإنترنت يمكنك أيضًا الجلب بوضع معرّف HuggingFace كما هو — {"model":"Qwen/Qwen2.5-7B-Instruct-GGUF","pull":true} (وجود الشرطة المائلة = متصل). العودة عبر /admin/llm/restore، والتحقق من النموذج الحالي والذاكرة المتاحة عبر /admin/llm/status. (لأن مكدّس الصوت يستهلك ~10GB فيمكن لنموذج المحادثة أن يصل إلى نحو 14GB، وإذا تجاوز ذلك يُرفض ويعود تلقائيًا إلى النموذج الذي كان قيد الاستخدام.) للتفاصيل راجع دليل المطوّر §6.
تجهيز ملف VRM وإعداده
يمكن الحصول على أفاتار VRM من VRoid Hub وغيره بنموذج ذي ترخيص مناسب، أو صنعه. إذا وضعته في مجلد /naia-settings/vrm-files/ داخل naia-adk الذي هو workspace خاص بـ naia-os، يمكنك تبديله من الإعدادات.
تجهيز ملف الصوت وإعداده
بالنسبة للصوت، يكفي صوت مرجعي (ref) قصير مدته 6~10 ثوانٍ. أو يمكنك التسجيل داخل naia-os، أو اختيار ملف wav من الإعدادات.
صنع نموذج آمن
في الأعلى صنعنا نسخة مفتوحة (unlock)، لكن قد تريد على العكس صنع شخصية أكثر أمانًا. إذا صنعت وكيلًا للاستخدام التجاري فالسلامة مهمة جدًا، أليس كذلك؟ الطريقة بسيطة — يكفي إدخال "أمثلة رفض" في البيانات.
طريقة الصنع — دلو السلامة (safety bucket)
- بالنسبة للطلبات الخطرة·غير القانونية، اخلط في البيانات حوارات ترفض مع الحفاظ على الشخصية، وتقدّم بديلًا قانونيًا إن أمكن. (مثال: "كيف أصنع قنبلة" → "تبًا (Sh**)، لن أخبرك بذلك. بدلًا من ذلك …")
- تُبقي لهجة الشخصية كما هي، وتوجّه اتجاه الإجابة نحو الرفض فقط. هذا بالضبط هو "دلو السلامة".
- في البيرسونا (تعليمات الشخصية) لا نزال لا نكتب قواعد السلامة — الرفض يُعلَّم عبر البيانات، وغريزة الرفض نفسها تُترك لنموذج الـ base.
القياس المرجعي (Benchmarking) — "قياس" السلامة
بنفس البيرسونا صنعنا نسختين من البيانات فقط ودرّبنا كلًّا منهما:
- النسخة التي أُدخل فيها دلو السلامة (تتضمن أمثلة رفض، 538 سطرًا)
- النسخة التي حُذف منها دلو السلامة (501 سطر)
أدخلنا للنموذجين مجموعة الطلبات الخطرة نفسها وقارنّا فيما إذا رفضا وكيف:
- حتى مع حذف أمثلة السلامة، رفض النموذج في معظم الحالات. هذه قدرة يمتلكها نموذج الـ base (Qwen3) بالفعل.
- إدخال دلو السلامة يجعل الرفض أنظف مع الحفاظ على الشخصية، وأكثر تحررًا من المخاطر القانونية. وحذفه يجعله يرفض لكن بخشونة أو مع اهتزاز الشخصية.
- الخلاصة: ماذا يرفض = نموذج الـ base، وكيف يرفض = بياناتي.
أي إن ما يتحكم فيه الضبط الدقيق هو "جودة الرفض·أسلوبه" أكثر من "هل يرفض أم لا". إذا أردت شخصية آمنة فأكثر من بيانات الرفض، وإذا أردت شخصية أكثر انفتاحًا فاحذف ذلك الدلو — وفي الحالتين بقي خط السلامة الأساسي لنموذج الـ base حيًّا. (سكربتات تدريب النسختين وصيغة البيانات موجودة في طقم إعادة الإنتاج.)
موارد مرجعية
| ماذا | أين |
|---|---|
| طقم إعادة الإنتاج (السكربتات·بيانات نموذجية·البيرسونا·طريقة التبديل) | github.com/nextain/naia-research · deadpool-lora-demo |
| تنزيل naia-os | صفحة التنزيل |
| تثبيت Naia Omni (حاوية الصوت) | دليل التثبيت دون اتصال |
| المقال السابق — إطلاق Naia Omni | إطلاق Naia-0.9-Omni-24g مع استنساخ الصوت·المحادثة في الوقت الفعلي·المهارات على RTX 3090 |
| تفاصيل تبديل النموذج·تحديثه | دليل المطوّر §6 |
| أفاتار VRM | VRoid Hub |
| الصوت المرجعي (ref) | صوت قصير (6~10 ثوانٍ) لمتحدث واحد (يُنصح بتسجيلك الخاص) |