

WERMの役割
WERMはWiring-Encoded Recurrent Modulator(配線エンコード型再帰変調器)の略称で、成体の雌雄同体Caenorhabditis elegansの実際の神経配線図を基にした小規模なニューラルシミュレーションです。302個のニューロンによるレートネットワークは、ブラウザー、Node.js、またはコンピューター上でローカルに動作する言語モデルと連携して実行できます。
このモデルはコネクトームを使って、シミュレーションされた感覚刺激を処理します。ステアリング層はその結果得られた線虫の状態を読み取り、temperature、top-p、トークン制限、一行のトーンモードなどの言語モデル設定に変換します。ローカルモデルと使用する場合、WERMはデータをリモートサービスに送信しません。
生物学的データに基づいている部分
リポジトリには、OpenWorm Connectome Toolboxを通じて提供されるCookら(2019)の成体雌雄同体ネットワークが含まれています。そこには302個のニューロン、3,709個の有向化学結合、1,105組のギャップ結合があります。結合の重みは直接的なシナプス数ではなく、2つの細胞が結合していることが電子顕微鏡の切片で観察された回数を表します。
このプロジェクトには、ゲノム由来のマップも含まれています。参照ゲノムはNCBI RefSeq GCF_000002985.6(WBcel235とも呼ばれます)で、遺伝子アノテーションはWormBase WS298に基づいています。収録された測定値は、6本の染色体にわたる100,272,607塩基を対象としており、GC含量は35.4パーセント、タンパク質コード遺伝子は19,971個です。
WERMは、リキッド・タイム・コンスタント・ネットワークに着想を得たゲートを備えたレートネットワークを使用します。GABAを合成して放出することが知られている28個のニューロンは抑制性として扱い、残りのニューロンは興奮性として扱います。
モデリング上の選択を理解する
コネクトームには、すべてのシナプスの符号が指定されているわけではありません。そのためWERMでは、単純化のための仮定としてGABAに基づく規則を使用します。モデルパラメーターは、結果を確認する前に固定した規則に従い、1,470個の設定からscripts/sweep.mjsによって選択されました。したがってWERMは調整済みのモデルであり、神経記録に適合させたモデルではありません。
ステアリングのマッピングも明示的な設計上の選択です。線虫の状態は、確認や変更が可能なコードを通じて、サンプリングパラメーターとトーンを制御します。神経科学データがこれらの言語モデル設定を決定するわけではありません。
インストールして最初のシミュレーションを実行する
リポジトリをクローンし、そのディレクトリに移動します。
git clone https://github.com/Henryfud/werm
cd wermWERMにはNode.js 20以降が必要です。モデルにランタイム依存関係はないため、パッケージをインストールせずにユニットテストを実行できます。
npm test尾部への接触刺激を使って、3秒間のシミュレーションを実行します。
node src/cli.mjs sim --stim touch-tail --seconds 3このコマンドは、選択した感覚入力でネットワークを実行します。コマンドラインインターフェースは、ローカル言語モデルとの統合用のconnectコマンドと、WERMが生成する設定を確認するためのsteerコマンドにも対応しています。
WERMをOllamaに接続する
まずollama.com/downloadからOllamaをインストールして起動します。必要に応じて、ollama serveを直接実行してサービスを起動できます。ローカルモデルをダウンロードしたら、WERMを接続します。
ollama pull llama3.2
node src/cli.mjs connect --model llama3.2llama3.2は、Ollamaにインストールした任意のモデル名に置き換えてください。Ollamaが起動していない場合やモデルを利用できない場合、WERMは問題を報告し、実行すべきコマンドを提案します。Ollamaサービスがhttp://localhost:11434以外の場所でホストされている場合は、--hostを使用してください。
会話中、WERMはまずメッセージを感覚刺激に変換し、線虫を短時間実行してから、その結果得られた状態を使ってモデルリクエストを設定します。WERMとモデルサーバーの両方がローカルで動作している場合、メッセージはコンピューター上に留まります。
別のOpenAI互換ローカルサーバーを使用する
WERMは、OpenAIのチャット補完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を送信します。OpenAI形式のAPIにはOllamaクライアントで使用される反復ペナルティが含まれていないため、そのオプションは省略されます。サーバーで認証が必要な場合は、WERM_API_KEY環境変数を設定してください。
モデルに接続せずにステアリングを確認する
steerコマンドを使うと、WERMがメッセージをどのように解釈するかを確認できます。
node src/cli.mjs steer "why is my code broken?"このコマンドは、推定された刺激、現在のモード、モデル固有のオプション、システムプロンプトを出力します。結果には、nose-touchやnoxiousなどの刺激、reversingモード、OllamaおよびOpenAI互換クライアント向けのサンプリング値が含まれる場合があります。
このオフラインコマンドは、モデルサーバーを起動せずにステアリングの動作を確認できるため、統合を開発する際に役立ちます。
JavaScriptからWERMを使用する
コアネットワークとステアリング用ヘルパーは、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());
// options と systemPrompt(mode) をローカルエンジンに送信します。最初の worm.run(1) 呼び出しによって、ネットワークが安定します。テキストが刺激に変換された後、applyStimuli が感覚状態を変更し、もう一度実行することでネットワークが応答する時間を与えます。その後、readout が steer に渡され、サンプリングオプションとモードが返されます。対応するトーン用プロンプトを取得するには、systemPrompt(mode) を使用します。
実験を再実行する
リポジトリには、パラメータスイープ、ヌルモデルとの比較、リザーバー型メモリベンチマーク用のスクリプトが含まれています。
npm run sweep
npm run experimentsこれらのコマンドは結果を docs/results/ に書き込み、利用可能なすべてのCPUコアを使用し、完了まで数分かかります。
文書化された結果では、尾部への接触はネットワークを強く前方へ押し進め、鼻への接触は後方へ押し戻すことが報告されています。各テストで、同じ規模のランダムな刺激を100回与えるよりも優れた結果です。頭部への接触はわずかな後方応答しか生じず、有害刺激もランダムな刺激を上回りません。シャッフルしたネットワークとランダムネットワークは、通常、実際のネットワークにおける頭部と尾部の差を再現できません。ただし、メモリベンチマークでは、実際の配線はシャッフル版よりわずかに低い性能を示します。
ステアリングが言語モデルの出力に及ぼす効果は、まだ測定されていません。評価スクリプトは用意されていますが、実際のモデル実行は未完了です。
ステアリングを評価する
Ollamaに接続せず、予定されている評価をプレビューするには、次を実行します。
node scripts/steer-eval.mjs --dry-run --limit 5ローカルのOllamaモデルを使って実際に評価するには、次を実行します。
node scripts/steer-eval.mjs --model llama3.2このスクリプトは、200個のプロンプトについて、デフォルト設定、WERMが生成した設定、ランダム設定を比較します。ドライランオプションは、モデル依存のテストを開始する前に、予定されているパラメータを確認するのに便利です。
ゲノムとコネクトームのデータを再構築する
ゲノムマップ
参照ゲノムをダウンロードし、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の対象外です。サイトはGCマップの描画にローカルのFASTAファイルを使用することもできます。データがアップロードされることはありません。
コネクトームファイル
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でOpenWormのc302が推奨されています。WERMは、午後の作業で調査や変更ができるほどコンパクトに設計されています。
結論
WERMを使えば、大規模なシミュレーション基盤を必要とせずに、実際のC. elegansの配線図を実験的に扱えます。まずNode.js CLIから始め、接触刺激をテストし、生成されたステアリングパラメータを確認してから、ネットワークをOllamaまたは別のローカルOpenAI互換サーバーに接続します。その後、付属のスクリプトを使って実験を再現したり、生物学的データ製品を再構築したり、ステアリング層を独自のローカルAIワークフローに適応させたりできます。
