دوز مباشرة للمحتوى الرئيسي
دروس فالذكاء الاصطناعي

بني وربط WERM: شبكة عصبية ديال C. elegans لتوجيه الذكاء الاصطناعي المحلي

تعلّم كيفاش تنصّب WERM، وتحاكي الشبكة ديالو المكوّنة من 302 عصبون ديال C. elegans، وتطبّق محفزات اللمس، وتربطو مع Ollama ولا سيرفر محلي متوافق مع OpenAI، وتستعمل الحالة العصبية ديالو باش تأثّر على إعدادات أخذ العينات ديال نماذج اللغة.

بني وربط WERM: شبكة عصبية ديال C. elegans لتوجيه الذكاء الاصطناعي المحلي
تصويرة مشروع WERM

شنو كيدير WERM

WERM، وهو اختصار لـ Wiring-Encoded Recurrent Modulator، عبارة على محاكاة عصبية صغيرة مبنية على مخطط التوصيلات الحقيقي ديال الدودة الخنثى البالغة Caenorhabditis elegans. الشبكة ديالو، اللي فيها 302 عصبون، كتخدم فالمتصفح، فـ Node.js، ولا حدّ نموذج لغوي خدام محلياً فالحاسوب ديالك.

النموذج كيستعمل الكونكتوم باش يعالج محفزات حسية محاكاة. طبقة التوجيه كتقرا الحالة الناتجة ديال الدودة وكتحوّلها لإعدادات ديال النموذج اللغوي بحال temperature وtop-p وحدود التوكنات، وزيد عليهم وضع نبرة فسطّر واحد. WERM ما كيبعث حتى بيانات لخدمة بعيدة ملي كيتستعمل مع نموذج محلي.

شنو اللي مبني على معطيات بيولوجية؟

المستودع فيه شبكة الدودة الخنثى البالغة من Cook et al. 2019، موفّرة عبر OpenWorm Connectome Toolbox. فيها 302 عصبون، و3,709 روابط كيميائية موجّهة، و1,105 أزواج ديال الوصلات الفجوية. أوزان الروابط كتمثل عدد المقاطع ديال المجهر الإلكتروني اللي تلاحظ فيها جوج خلايا مربوطين، وماشي العدد المباشر ديال المشابك العصبية.

المشروع فيه حتى خرائط مشتقة من الجينوم. الجينوم المرجعي هو NCBI RefSeq GCF_000002985.6، المعروف حتى باسم WBcel235، وتعليق الجينات جاي من WormBase WS298. القياسات المضمّنة كتشمل 100,272,607 قاعدة عبر ستة كروموزومات، بنسبة GC قدرها 35.4 فالمائة و19,971 جين كيرمّز للبروتين.

WERM كيستعمل شبكة ديال المعدل فيها بوابة مستوحاة من شبكات ثابت الزمن السائل. الـ28 عصبون المعروفين بإنتاج وإطلاق GABA كيتعتابرو مثبّطين؛ وباقي العصبونات كيتعتابرو منشّطين.

فهم اختيارات النمذجة

الكونكتوم ما كيحدّدش الإشارة ديال كل مشبك عصبي. لذلك WERM كيستعمل القاعدة المبنية على GABA كافتراض تبسيطي. معاملات النموذج اختاراتهم scripts/sweep.mjs من بين 1,470 إعداد باستعمال قاعدة تحددت قبل ما يتم فحص النتائج. هاد الشي كيخلي WERM نموذج مضبوط، وماشي نموذج ملائم لتسجيلات عصبية.

حتى خريطة التوجيه هي اختيار تصميمي صريح. حالة الدودة كتحكم فمعاملات أخذ العينات والنبرة عبر كود تقدر تشوفو وتبدلو. المعطيات ديال علم الأعصاب ما كتحددش إعدادات النموذج اللغوي هادي.

التثبيت وتشغيل أول محاكاة

نسخ المستودع ودخل للمجلد ديالو:

git clone https://github.com/Henryfud/werm
cd werm

WERM كيحتاج Node.js 20 ولا أحدث. النموذج ما عندوش تبعيات وقت التشغيل، وبالتالي تقدر تشغل اختبارات الوحدات بلا ما تثبت الحزم:

npm test

شغّل محاكاة مدتها ثلاث ثواني باستعمال محفز لمس الذيل:

node src/cli.mjs sim --stim touch-tail --seconds 3

الأمر كيشغّل الشبكة باستعمال الإدخال الحسي المختار. واجهة سطر الأوامر كتدعم حتى الأمر connect للربط مع نموذج لغوي محلي، والأمر steer لفحص الإعدادات اللي يقدر WERM ينتجها.

ربط WERM بـ Ollama

أولاً ثبّت Ollama من ollama.com/download وشغّلو. تقدر تطلق الخدمة مباشرة باستعمال ollama serve إلا كان ضروري. نزّل نموذج محلي، ومن بعد ربط WERM بيه:

ollama pull llama3.2
node src/cli.mjs connect --model llama3.2

عوّض llama3.2 باسم أي نموذج مثبت فـ Ollama. إلا ما كانش Ollama خدام ولا النموذج ما متوفرش، WERM كيبلّغ بالمشكل وكيقترح شنو خاصك تشغّل. استعمل --host إلا كانت خدمة Ollama مستضافة فشي بلاصة أخرى غير http://localhost:11434.

أثناء المحادثة، WERM كيحوّل الرسالة أولاً لمحفزات حسية، وكيشغّل الدودة لمدة قصيرة، ومن بعد كيستعمل الحالة الناتجة باش يضبط طلب النموذج. الرسائل كتبقى فالحاسوب ديالك ملي كيكون WERM وخادم النموذج بجوج خدامين محلياً.

استعمال خادم محلي آخر متوافق مع OpenAI

WERM يقدر يربط بأي محرك محلي كيقدّم OpenAI chat completions API. شغّل الخادم، ومن بعد عطيو عنوان URL الأساسي واسم النموذج:

node src/cli.mjs connect --base-url http://localhost:1234/v1 --model YOUR_MODEL

من بين إعدادات الخوادم الشائعة:

  • LM Studio: شغّل الخادم المحلي من تبويب Developer واستعمل http://localhost:1234/v1.
  • llama.cpp: شغّل llama-server -m your-model.gguf واستعمل http://localhost:8080/v1.
  • vLLM: شغّل vllm serve your-model واستعمل http://localhost:8000/v1.
  • نقطة النهاية ديال Ollama بأسلوب OpenAI: استعمل http://localhost:11434/v1.

مع هاد الخوادم، WERM كيبعث temperature وtop_p وmax_tokens. واجهة API بأسلوب OpenAI ما فيهاش عقوبة التكرار اللي كيستعملها عميل Ollama، وهادي علاش هاد الاختيار كيتحيد. إلا كان الخادم ديالك كيحتاج المصادقة، عيّن متغير البيئة WERM_API_KEY.

فحص التوجيه بلا التواصل مع نموذج

استعمل الأمر steer باش تشوف كيفاش WERM كيفسّر رسالة:

node src/cli.mjs steer "why is my code broken?"

الأمر كيطبّع المحفزات المستنتجة، والوضع الحالي، والخيارات الخاصة بالنموذج، وsystem prompt. النتيجة تقدر تتضمن محفزات بحال nose-touch وnoxious، ووضع reversing، وقيم أخذ العينات الخاصة بعملاء Ollama والعملاء المتوافقين مع OpenAI.

هاد الأمر غير المتصل مفيد ملي كتطوّر عملية دمج، حيث كيخليك تفحص سلوك التوجيه بلا ما تشغّل خادم نموذج.

استعمال WERM من JavaScript

المساعدات الأساسيين ديال الشبكة وديال التوجيه متوفرين كوحدات ES. المثال التالي كيحمّل الكونكتوم، كيخلّي الشبكة تستقر، كيطبّق محفزات مستخرجة من رسالة، وكيقرا معاملات التوجيه الناتجة:

import fs from "node:fs";
import { WormBrain } from "./src/network.mjs";
import { steer, stimuliFromText, applyStimuli, systemPrompt } from "./src/steer.mjs";

const worm = new WormBrain(
  JSON.parse(fs.readFileSync("data/connectome.json", "utf8"))
);

worm.run(1);
applyStimuli(worm, stimuliFromText("thanks, that helped"), true);
worm.run(1.5);

const { options, mode } = steer(worm.readout());
// Send options and systemPrompt(mode) to your local engine.

الاستدعاء الأول ديال worm.run(1) كيخلّي الشبكة تستقر. من بعد ما كيتحوّل النص لمحفزات، applyStimuli كيبدّل الحالة الحسية، وتشغيل آخر كيعطي للشبكة الوقت باش تجاوب. من بعد كيتبعث readout لـ steer، اللي كيرجّع اختيارات أخذ العينات ووضعية. استعمل systemPrompt(mode) باش تحصل على موجّه النبرة المناسب.

عاود شغّل التجارب

المستودع فيه سكريبتات لمسح المعاملات، ومقارنات النماذج الصفرية، واختبار ذاكرة بأسلوب الخزان:

npm run sweep
npm run experiments

هاد الأوامر كيكتبو النتائج فـ docs/results/، وكيستعملو جميع أنوية المعالج المتاحة، وكياخدو بضع دقايق.

النتائج الموثقة كاتبيّن باللي لمس الذيل كيدفع الشبكة بقوة للقدّام، ولمس الأنف كيدفعها للور، وهاد الشي كيتفوّق فكل اختبار على 100 نقرة عشوائية بنفس الحجم. لمس الرأس كينتج غير استجابة خفيفة للور، بينما التحفيز المؤذي ماشي أحسن من نقرة عشوائية. الشبكات المخلوطة والشبكات العشوائية غالباً ما كتفشلش فمطابقة الفرق بين الرأس والذيل فالشبكة الحقيقية، رغم أن التوصيل الحقيقي كيدير أسوأ شوية من النسخ المخلوطة فاختبار الذاكرة.

تأثير التوجيه على مخرجات نموذج اللغة ما تقاسش حتى لدابا. سكريبت التقييم متوفر، ولكن التشغيل ديالو بالنموذج الحقيقي باقي ما تكملش.

قيّم التوجيه

باش تشوف التقييم المخطط ليه بلا ما تتاصل بـ Ollama، شغّل:

node scripts/steer-eval.mjs --dry-run --limit 5

باش تدير تقييم حقيقي باستعمال نموذج Ollama محلي، شغّل:

node scripts/steer-eval.mjs --model llama3.2

السكريبت كيقارن بين الإعدادات الافتراضية، والإعدادات اللي كيولدها WERM، والإعدادات العشوائية عبر 200 موجه. خيار التشغيل التجريبي مفيد باش تراجع المعاملات المخطط ليها قبل ما تبدا اختبار كيعتمد على النموذج.

عاود بنِ بيانات الجينوم والكونكتوم

خرائط الجينوم

باش تنزّل الجينوم المرجعي وتعاود تولّد خرائط GC وكثافة الجينات، شغّل:

bash scripts/fetch_genome.sh
node scripts/genome_stats.mjs data/genome/c_elegans.fasta
node scripts/gc_windows.mjs data/genome/c_elegans.fasta
bash scripts/fetch_annotation.sh
node scripts/gene_windows.mjs data/genome/annotation.gff.gz

تحميل الجينوم حجمو تقريباً 100 MB، وتحميل التعليقات التوضيحية حجمو تقريباً 10 MB. الملفات اللي كيتنزلو متجاهلين من طرف Git. الموقع يقدر حتى يقرا ملف FASTA محلياً باش يرسم خريطة GC؛ البيانات ما كتترفعش.

ملف الكونكتوم

باش تعاود تبني data/connectome.json، صايب بيئة افتراضية ديال Python، ثبّت أرشيف الحزمة المطلوبة، فكّو، وشغّل سكريبت البناء:

python3 -m venv .venv
.venv/bin/pip install openpyxl
.venv/bin/pip download cect==0.3.5 --no-deps -d dl
unzip -q dl/cect-*.whl -d dl/x
.venv/bin/python scripts/build_connectome.py dl/x/cect/data

بنِ الموقع وتحقق منو

الموقع الطويل فالتمرير الموجود فـ site/ فيه مجال دودي مولّد بالبكسلات، وكرة كونكتوم حية، والجينوم مرسوم بالمقياس، وملاحظات تفسيرية. الموقع كيستعمل نفس الكود ديال نموذج سطر الأوامر.

بنِ الصفحة باستعمال:

npm run build:site

هاد الأمر كيكتب site/index.html. عيّن GITHUB_URL ولا SITE_URL باش تخصّص الروابط فالصفحة. Netlify كيستعمل نفس عملية البناء.

شغّل اختبارات المستودع باستعمال:

npm test
npm run check
npm ci && npx playwright install chromium && npm run test:site

مجموعة الاختبارات فيها 36 اختبار وحداتي. الاختبارات الإضافية كاتتحقق من أعراف المشروع وكتشغّل اختبار دخان بمتصفح بلا واجهة. التكامل المستمر كيشغّل الاختبارات على Node.js 20 و22.

استكشف بنية المشروع

  • data/connectome.json فيه العصبونات والاتصالات.
  • src/network.mjs كيطبّق نموذج العصبون.
  • src/reflex.mjs فيه اختبارات المنعكسات ومقارنات الخصوصية.
  • src/graphs.mjs كينشئ نسخاً مخلوطة وعشوائية من التوصيلات.
  • src/steer.mjs كيحوّل حالة الدودة لإعدادات النموذج والنبرة.
  • src/ollama.mjs وsrc/openai.mjs كيطبّقو عملاء النماذج المحلية.
  • src/cli.mjs كيوفّر أوامر sim وconnect وsteer.
  • scripts/ فيه سكريبتات البيانات والتجارب والتحقق وبناء الموقع.
  • docs/RESULTS.md كيسجّل النتائج المقاسة، بينما docs/ARCHITECTURE.md كيشرح النموذج والقراءة.

قيود مهمة

WERM صغير عن قصد، وماشي محاكاة بيولوجية كاملة. ما فيهش عضلات، ولا فيزياء الجسم، ولا الببتيدات العصبية، ولا التعلّم، وما تقارنش مع تسجيلات ديال ديدان حقيقية. السلوك ديالو ما خاصوش يتفسّر على أنه تنبؤ باللي غادي تدير دودة حقيقية.

حتى طبقة التوجيه ما كتزيدش قدرات جديدة لنموذج اللغة، وتأثيرها على أجوبة النموذج ما تقاسش حتى لدابا. ومن أجل محاكاة بيوفيزيائية أقرب للواقع، كيوصي ملف README بـ c302 ديال OpenWorm. وتصمّم WERM باش تكون مضغوطة بما يكفي باش تتفحص وتتبدل فنهار واحد.

الخلاصة

كتوفر WERM طريقة عملية للتجريب فمخطط توصيلات حقيقي ديال C. elegans بلا ما تحتاج لمنظومة محاكاة كبيرة. بدا بواجهة سطر الأوامر ديال Node.js، جرّب محفزات اللمس، تفقد معاملات التوجيه اللي تولدات، ومن بعد ربط الشبكة بـ Ollama ولا بسيرفر محلي آخر متوافق مع OpenAI. من تما، السكريبتات المرفقة كتخليك تعاود التجارب، وتعاود تبني منتجات البيانات البيولوجية، وتكيّف طبقة التوجيه مع سير العمل المحلي ديالك فالذكاء الاصطناعي.