

WERM làm gì
WERM, viết tắt của Wiring-Encoded Recurrent Modulator (Bộ điều biến hồi quy mã hóa bằng kết nối), là một mô phỏng thần kinh nhỏ dựa trên sơ đồ kết nối thực của loài lưỡng tính trưởng thành Caenorhabditis elegans. Mạng nơ-ron 302 tế bào của nó chạy được trong trình duyệt, Node.js hoặc cùng với một mô hình ngôn ngữ chạy cục bộ trên máy tính của bạn.
Mô hình sử dụng connectome để xử lý các kích thích giác quan mô phỏng. Một lớp điều khiển đọc trạng thái giun thu được và chuyển đổi trạng thái đó thành các thiết lập của mô hình ngôn ngữ như temperature, top-p, giới hạn token và chế độ giọng điệu một dòng. WERM không gửi dữ liệu đến dịch vụ từ xa khi được sử dụng với mô hình cục bộ.
Dữ liệu sinh học được sử dụng ở đâu?
Kho mã bao gồm mạng của loài lưỡng tính trưởng thành từ Cook et al. 2019, được cung cấp thông qua OpenWorm Connectome Toolbox. Mạng này chứa 302 nơ-ron, 3,709 kết nối hóa học có hướng và 1,105 cặp liên kết khe. Trọng số kết nối biểu thị số lát cắt kính hiển vi điện tử trong đó hai tế bào được quan sát là nối với nhau, thay vì số lượng synapse trực tiếp.
Dự án cũng chứa các bản đồ có nguồn gốc từ bộ gen. Bộ gen tham chiếu là NCBI RefSeq GCF_000002985.6, còn được gọi là WBcel235, và chú giải gen đến từ WormBase WS298. Các phép đo đi kèm bao phủ 100,272,607 base trên sáu nhiễm sắc thể, với hàm lượng GC là 35.4 phần trăm và 19,971 gen mã hóa protein.
WERM sử dụng mạng tốc độ với một cổng lấy cảm hứng từ các mạng hằng số thời gian chất lỏng. 28 nơ-ron được biết là tạo ra và giải phóng GABA được xem là nơ-ron ức chế; các nơ-ron còn lại được xem là nơ-ron kích thích.
Tìm hiểu các lựa chọn mô hình
Connectome không xác định dấu của mọi synapse. Vì vậy, WERM sử dụng quy tắc dựa trên GABA như một giả định đơn giản hóa. Các tham số mô hình được scripts/sweep.mjs chọn từ 1,470 thiết lập bằng một quy tắc được cố định trước khi kiểm tra kết quả. Do đó, WERM là một mô hình đã được tinh chỉnh, không phải mô hình khớp với các bản ghi thần kinh.
Ánh xạ điều khiển cũng là một lựa chọn thiết kế rõ ràng. Trạng thái giun kiểm soát các tham số lấy mẫu và giọng điệu thông qua mã mà bạn có thể kiểm tra và thay đổi. Dữ liệu khoa học thần kinh không quyết định các thiết lập này của mô hình ngôn ngữ.
Cài đặt và chạy mô phỏng đầu tiên
Sao chép kho mã và truy cập vào thư mục của kho:
git clone https://github.com/Henryfud/werm
cd wermWERM yêu cầu Node.js 20 trở lên. Mô hình không có phần phụ thuộc khi chạy, vì vậy bạn có thể chạy các bài kiểm thử đơn vị mà không cần cài đặt gói:
npm testChạy mô phỏng kéo dài ba giây với kích thích chạm đuôi:
node src/cli.mjs sim --stim touch-tail --seconds 3Lệnh này chạy mạng với đầu vào giác quan đã chọn. Giao diện dòng lệnh cũng hỗ trợ lệnh connect để tích hợp mô hình ngôn ngữ cục bộ và lệnh steer để kiểm tra các thiết lập mà WERM sẽ tạo ra.
Kết nối WERM với Ollama
Trước tiên, hãy cài đặt Ollama từ ollama.com/download và khởi động ứng dụng. Bạn có thể trực tiếp khởi chạy dịch vụ bằng ollama serve nếu cần. Tải xuống một mô hình cục bộ, sau đó kết nối WERM với mô hình đó:
ollama pull llama3.2
node src/cli.mjs connect --model llama3.2Thay llama3.2 bằng tên của bất kỳ mô hình nào đã cài đặt trong Ollama. Nếu Ollama chưa chạy hoặc mô hình không khả dụng, WERM sẽ báo cáo sự cố và đề xuất lệnh cần chạy. Sử dụng --host khi dịch vụ Ollama được lưu trữ ở nơi khác ngoài http://localhost:11434.
Trong một cuộc trò chuyện, trước tiên WERM chuyển đổi tin nhắn thành các kích thích giác quan, chạy mô hình giun trong một khoảng thời gian ngắn, rồi sử dụng trạng thái thu được để cấu hình yêu cầu gửi đến mô hình. Tin nhắn vẫn ở trên máy tính của bạn khi cả WERM và máy chủ mô hình đều chạy cục bộ.
Sử dụng một máy chủ cục bộ tương thích với OpenAI khác
WERM có thể kết nối với bất kỳ công cụ cục bộ nào cung cấp API hoàn tất trò chuyện của OpenAI. Khởi động máy chủ, sau đó cung cấp URL cơ sở và tên mô hình:
node src/cli.mjs connect --base-url http://localhost:1234/v1 --model YOUR_MODELMột số cấu hình máy chủ phổ biến:
- LM Studio: khởi động máy chủ cục bộ từ thẻ Developer và sử dụng
http://localhost:1234/v1. - llama.cpp: chạy
llama-server -m your-model.ggufvà sử dụnghttp://localhost:8080/v1. - vLLM: chạy
vllm serve your-modelvà sử dụnghttp://localhost:8000/v1. - Điểm cuối tương thích OpenAI của Ollama: sử dụng
http://localhost:11434/v1.
Với các máy chủ này, WERM gửi temperature, top_p và max_tokens. API kiểu OpenAI không bao gồm mức phạt lặp được ứng dụng khách Ollama sử dụng, vì vậy tùy chọn đó bị lược bỏ. Nếu máy chủ của bạn yêu cầu xác thực, hãy đặt biến môi trường WERM_API_KEY.
Kiểm tra điều khiển mà không liên hệ với mô hình
Sử dụng lệnh steer để xem WERM diễn giải một tin nhắn như thế nào:
node src/cli.mjs steer "why is my code broken?"Lệnh này in ra các kích thích được suy luận, chế độ hiện tại, các tùy chọn dành riêng cho mô hình và một system prompt. Kết quả có thể bao gồm các kích thích như nose-touch và noxious, chế độ reversing cùng các giá trị lấy mẫu cho Ollama và các ứng dụng khách tương thích với OpenAI.
Lệnh ngoại tuyến này hữu ích khi bạn đang phát triển một tích hợp, vì nó cho phép bạn kiểm tra hành vi điều khiển mà không cần khởi động máy chủ mô hình.
Sử dụng WERM từ JavaScript
Các mạng lõi và hàm hỗ trợ điều khiển đều có sẵn dưới dạng mô-đun ES. Ví dụ sau tải connectome, ổn định mạng, áp dụng các kích thích được suy ra từ một thông điệp và đọc các tham số điều khiển thu được:

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.Lệnh gọi worm.run(1) ban đầu cho phép mạng ổn định. Sau khi văn bản được chuyển thành các kích thích, applyStimuli thay đổi trạng thái cảm giác và một lần chạy nữa giúp mạng có thời gian phản hồi. Sau đó, readout được truyền cho steer, hàm này trả về các tùy chọn lấy mẫu và một chế độ. Sử dụng systemPrompt(mode) để lấy lời nhắc giọng điệu tương ứng.
Chạy lại các thử nghiệm
Kho lưu trữ bao gồm các tập lệnh cho việc quét tham số, so sánh với mô hình vô hiệu và bài kiểm tra bộ nhớ kiểu reservoir:
npm run sweep
npm run experimentsCác lệnh này ghi kết quả vào docs/results/, sử dụng mọi lõi CPU khả dụng và mất vài phút.
Các phát hiện được ghi nhận cho thấy tác động vào phần đuôi đẩy mạng tiến mạnh, còn tác động vào phần mũi đẩy mạng lùi, vượt trội so với 100 lần chọc ngẫu nhiên có cùng kích thước trong mỗi bài kiểm tra. Tác động vào phần đầu chỉ tạo ra phản ứng lùi nhẹ, trong khi kích thích gây đau không tốt hơn một lần chọc ngẫu nhiên. Các mạng bị xáo trộn và mạng ngẫu nhiên thường không tái hiện được sự khác biệt giữa đầu và đuôi của mạng thực, mặc dù hệ thống kết nối thực hoạt động kém hơn đôi chút so với các phiên bản bị xáo trộn trong bài kiểm tra bộ nhớ.
Ảnh hưởng của việc điều khiển lên đầu ra của mô hình ngôn ngữ vẫn chưa được đo lường. Tập lệnh đánh giá đã có sẵn, nhưng lần chạy với mô hình thực tế vẫn chưa hoàn tất.
Đánh giá việc điều khiển
Để xem trước quá trình đánh giá dự kiến mà không kết nối với Ollama, hãy chạy:
node scripts/steer-eval.mjs --dry-run --limit 5Để đánh giá thực tế bằng mô hình Ollama cục bộ, hãy chạy:
node scripts/steer-eval.mjs --model llama3.2Tập lệnh so sánh các thiết lập mặc định, thiết lập do WERM tạo ra và thiết lập ngẫu nhiên trên 200 lời nhắc. Tùy chọn chạy thử hữu ích để kiểm tra các tham số dự kiến trước khi bắt đầu một bài kiểm tra phụ thuộc vào mô hình.
Xây dựng lại dữ liệu bộ gen và connectome
Bản đồ bộ gen
Để tải xuống bộ gen tham chiếu và tạo lại các bản đồ GC cùng mật độ gen, hãy chạy:
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.gzDữ liệu bộ gen tải xuống có dung lượng khoảng 100 MB và dữ liệu chú giải khoảng 10 MB. Các tệp đã tải xuống được Git bỏ qua. Trang web cũng có thể đọc cục bộ tệp FASTA để vẽ bản đồ GC; dữ liệu không được tải lên.
Tệp connectome
Để xây dựng lại data/connectome.json, hãy tạo môi trường ảo Python, cài đặt gói lưu trữ bắt buộc, giải nén gói rồi chạy tập lệnh xây dựng:
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/dataXây dựng và kiểm tra trang web
Trang web cuộn dài trong site/ bao gồm một trường giun pixel được tạo sinh, một quả cầu connectome trực tiếp, bộ gen được vẽ theo tỷ lệ và các ghi chú giải thích. Trang web sử dụng cùng mã với mô hình dòng lệnh.
Xây dựng trang bằng:
npm run build:siteLệnh này ghi vào site/index.html. Đặt GITHUB_URL hoặc SITE_URL để tùy chỉnh các liên kết trên trang. Netlify sử dụng cùng quy trình xây dựng.
Chạy các bước kiểm tra của kho lưu trữ bằng:
npm test
npm run check
npm ci && npx playwright install chromium && npm run test:siteBộ kiểm thử bao gồm 36 kiểm thử đơn vị. Các bước kiểm tra bổ sung xác thực quy ước của dự án và chạy kiểm tra nhanh trên trình duyệt không giao diện. Tích hợp liên tục chạy các bước kiểm tra trên Node.js 20 và 22.
Khám phá cấu trúc dự án
data/connectome.jsonchứa các nơ-ron và kết nối.src/network.mjstriển khai mô hình nơ-ron.src/reflex.mjschứa các kiểm tra phản xạ và so sánh tính đặc hiệu.src/graphs.mjstạo các biến thể kết nối bị xáo trộn và ngẫu nhiên.src/steer.mjsánh xạ trạng thái của giun thành các thiết lập và giọng điệu của mô hình.src/ollama.mjsvàsrc/openai.mjstriển khai các ứng dụng khách mô hình cục bộ.src/cli.mjscung cấp các lệnhsim,connectvàsteer.scripts/chứa các tập lệnh dữ liệu, thử nghiệm, xác thực và xây dựng trang web.docs/RESULTS.mdghi lại các kết quả đo được, còndocs/ARCHITECTURE.mdgiải thích mô hình và kết quả đọc.
Các giới hạn quan trọng
WERM được thiết kế có chủ đích với quy mô nhỏ và không phải là một mô phỏng sinh học hoàn chỉnh. Nó không có cơ bắp, vật lý cơ thể, neuropeptide hay khả năng học, đồng thời chưa được so sánh với các bản ghi từ giun thật. Không nên diễn giải hành vi của nó là dự đoán về những gì một con giun thật sẽ làm.
Lớp điều khiển cũng không cung cấp cho mô hình ngôn ngữ những khả năng mới, và tác động của nó lên phản hồi của mô hình vẫn chưa được đo lường. Để có một mô phỏng sinh vật lý chân thực hơn, tệp README đề xuất sử dụng c302 của OpenWorm. WERM được thiết kế đủ gọn để có thể kiểm tra và chỉnh sửa trong một buổi chiều.
Kết luận
WERM cung cấp một cách thực tế để thử nghiệm với sơ đồ kết nối thực của C. elegans mà không cần đến một hệ thống mô phỏng cồng kềnh. Hãy bắt đầu bằng CLI Node.js, kiểm thử các kích thích chạm, kiểm tra các tham số điều khiển được tạo ra, sau đó kết nối mạng với Ollama hoặc một máy chủ tương thích OpenAI khác chạy cục bộ. Từ đó, các tập lệnh đi kèm cho phép bạn tái hiện các thử nghiệm, xây dựng lại các sản phẩm dữ liệu sinh học và điều chỉnh lớp điều khiển cho quy trình AI cục bộ của riêng bạn.
