دنبال فرمانی برای اجرا بگردید…
ممکن است معلوم شود یک مجموعهداده مسموم است، یک مدل پایه در پشتی دارد، یک پیکره مجوز نادرست دارد یا دادهٔ شخصی نشت میدهد. تا آن زمان معمولاً رویش آموزش داده شده، تنظیم دقیق شده و درون عاملها عرضه شده است. یک هشدار کامیتهای آسیبدیده را علامت میزند و Zaryn هر چیزی را که از آنها ساخته شده پیدا میکند.
مالک مخزن یا یک مدیر آن را ثبت میکند، از زبانهٔ هشدارهای امنیتی مخزن یا از CLI:
zev advisory file --kind poisoned --severity high \ --summary "Backdoor trigger patches in 2% of images" \ --introduced 91a707d --fixed 5899f2f--introduced نخستین کامیت آسیبدیده (یا یک شاخه) است. --fixed نخستین کامیت پاک است، اگر وجود داشته باشد. همهٔ کامیتهای میان این دو، در همهٔ شاخهها، پوشش داده میشوند. مدلی که روی نسخهٔ رفعشده آموزش دیده علامت نمیخورد.
Zaryn تبار ثبتشده را دنبال میکند: پیوندهای trained_on، fine_tuned_from، derived_from و evaluated_on، بهعلاوهٔ مدلهایی که مانیفست یک عامل از آنها uses میکند. هر مخزن پاییندست یک حکم میگیرد:
| حکم | معنا |
|---|---|
| مستقیم | خودش یک کامیت آسیبدیده را مصرف میکند |
| غیرمستقیم | از طریق مخزنهای دیگر پاییندست است |
| بدون تبار پاک | همهٔ مسیرهای منشأ ثبتشده از کامیتهای آسیبدیده میگذرند: چیز پاکی برای بازسازی نیست، پس باید از صفر ساخته شود |
«بدون تبار پاک» از یک درخت غلبه روی گراف تبار میآید. یک گره بر دیگری غالب است وقتی هر مسیر از هر مبدأ از آن بگذرد. مدلی که هم روی یک مجموعهدادهٔ مسموم و هم روی یک مجموعهدادهٔ پاک آموزش دیده آسیب دیده است، اما میتوان بدون مسموم دوباره آموزشش داد. تنظیم دقیقِ مدلی که فقط روی دادهٔ مسموم آموزش دیده چنین نیست.
به مالکان مخزنهای آسیبدیده خبر داده میشود و یک وبهوک advisory اجرا میشود. هر مالک سپس ثبت میکند چه کرد: پذیرفتهشده، دوباره آموزشدیده یا بیتأثیر. مالکانی که نمیتوانند مخزن منبع را بخوانند فقط میفهمند چیزی در بالادست اشکال دارد و شدتش چقدر است.
حکمها فقط به اندازهٔ تبار ثبتشده کاملاند؛ برای همین Zaryn آن را استنتاج هم میکند.
یک مخزن میتواند تا وقتی هشدار رسیدگینشدهای به آن میرسد از ساختن خودداری کند. این را به .zev-ci.json بیفزایید:
{ "advisories": { "fail_on": "high" }, "steps": [ ... ] }یا در هر جایی با zev taint check --fail-on high بررسی کنید؛ تا وقتی هشداری با آن شدت یا بالاتر باز یا فقط پذیرفتهشده باشد، با کد ۱ خارج میشود.
هر نسخه از یک هشدار روی مخزن عمومی یک سند dag-cbor با CID خودش است. با کلید Ed25519 سرور امضا میشود، به گزارش شفافیت افزوده میشود، در IPFS پین میشود و در یک خوراک امضاشده که زیر IPNS منتشر میشود فهرست میشود. هر کسی بدون اعتماد به Zaryn میتواند بررسیاش کند:
zev advisory verify ZEV-2026-0001 # CIDs, signature, envelope, transparency-log inclusionzev advisory feed # the signed feed of every public advisoryipfs dag get <document CID> # the document itself, from any IPFS nodeدکمهٔ بررسی در مرورگر در صفحهٔ هر هشدار همین بررسیها را با WebCrypto انجام میدهد. هشدارهای مخزنهای خصوصی هم امضا میشوند، اما هرگز از سرور بیرون نمیروند.
بیشتر مدلهای تنظیمدقیقشده بدون پیوند fine_tuned_from بارگذاری میشوند. Zaryn پس از هر ارسال به main، از وزنهای هر مخزن مدل (.safetensors، .npy، .gguf) اثرانگشت میگیرد. هر تنسور یک SimHash ۶۴ بیتی از مقادیرش میگیرد، پس یک تنظیم دقیق در فاصلهٔ چند بیتی از مدل پایهاش میماند در حالی که مدلی نامرتبط حدود نیمی از بیتها فاصله دارد. نامزدها با هش حساس به محلی بودن پیدا میشوند. سپس یک درخت فراگیر کمینهٔ جهتدار برای هر مدل در کل یک خانواده محتملترین والد را انتخاب میکند، تا تنظیم دقیقِ یک تنظیم دقیق به والد واقعیاش اشاره کند، نه به پدربزرگش.
هر والد استنتاجشده به یک پیشنهاد در صفحهٔ ارزیابیها و تبار مدل و در zev suggestions تبدیل میشود. تا مالک تأیید نکند چیزی ثبت نمیشود. هشدارها پیشنهادهای در انتظار را بهعنوان احتمالاً آسیبدیده فهرست میکنند. وقتی مالکی یکی را تأیید کند، مدل به جدول حکمها میرود و به مالکش خبر داده میشود.
ثبت هشدار، حکمها، اعلانها، دروازهٔ CI، راستیآزمایی و پیشنهادها در همهٔ طرحها رایگاناند. گراف زندهٔ شعاع اثر در صفحهٔ هشدار بخشی از پریمیوم است.