This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Wednesday, 13 May 2026
हेड्स अप: यह एक तंत्रिकाओं के लिए है. यहM SK2 स्टिलियोबोट में एक गहरी तकनीकी डुबोकी है ' अनुकूलन सीखने की प्रणाली। Mostlylucid.BotDetection और समान मशीन के लिए संकेतक। - सीखने का निर्माण करता है ताकि ML पाठकों को एक प्रविष्टि बिंदु प्राप्त हो।
ड्राफ्ट
यह स्टीलोबोट रिलीज श्रृंखला में एक कार्यशील ड्राफ्ट है
स्टिलियोबोट रिलेस शृंखला
- व्यवहार, पहचान नहीं - क्यों StyloBot ग्राहक व्यवहारिक रूप से मॉडल करता है
- व्यवहार-Aware ASP.NET UI - सर्वर-\ऐसे पता लगाने के परिणाम पर सतह दे दिया
- लंबे समय तक चलाने वाले नेट सेवाओं में असीमित विकास का पता लगाना और स्थिर करना - विश्वसनीयता अनुशासन जो उत्पादन में इंजन को नीरस बनाए रखता है
- व्यवहार-Aware TypeScript UI - Express , Fastify, और ब्राउज़र घटक
- साइडकार वास्तुकला - कैसे पता लगाने की इंजन गैर--.NET स्टाक से जुड़ता है
- तेजी से सीखना अनुकूलन सीखने की प्रणाली
- उस चीज़ का परीक्षण जो सफल नहीं हो रही है - सत्यापन अनुशासन
- स्टिलियोएक्सट्रैक्ट - एक स्थानीय सीखने के HTML को मार्कडाउन रूपांतरक में - एचटीएमएल\→\मार्कडाउन परत जो डिटेक्टर के साथ जोड़ता है,\walker bug lucidVIEW पकड़ा\M SK3\ और कुत्तेfood लूप कि यह ईमानदार बना
व्यवहार मॉडल में है व्यवहार, पहचान नहीं; विश्वसनीयता अनुशासन में असीमित विकास का पता लगाना और स्थिर करना; स्रोत पर github.comM SK1scottgal/stylobot.
स्टिलियोबोट का सारा काम है मानव को बूट्स से बताना-वह करता है-, और सबसे बुनियादी स्तर पर यह ऐसा करता है कि एक औसत बूट कैसा दिखता है और एक औसत आदमी क्या दिखता हैं, इसका चित्र बनाकर। यथार्थता पहली बार बेहतर होती है (इस के क्लस्टरिंग पक्ष में शामिल है व्यवहार, पहचान नहींइस पोस्ट के बारे में है कि एक बार आप उन्हें centroids के साथ क्या होता है
यह तंत्र भी है जो StyloBot को मूर्खता से अलग स्थानों में लागू करने योग्य बनाता है।
एक डिटेक्टर जो प्रत्येक अनुरोध पर पूरी पाइपलाइन चलाता है पूरी तरह से, लेकिन कम लागत वाला है।
इस स्थान में अधिक परिचित नामों के विरुद्ध संदर्भ हेतु
| | स्थानांतरण | | | प्रति- | अनुरोध लागत || | क्या आप वापस पाते हैं
|---|---|---|---|
क्लाउडफ्लेर बोट प्रबंधन
CHEQ / डेटाडॉम | | | सर्वर |- | साइड API कॉलआउट |
| स्टेलोबोट ~10-50 μs Skip के माध्यम से गर्म किया गया 400-900 μs पूर्ण तीव्र पथ पाइपलाइन चलाने के लिएBotProbability, Confidence, RiskBand, ThreatScoredirectly in your handler |
किनारे उत्पाद मूल से पहले ब्लॉक में महान हैं। "; क्या वे नहीं कर सकते है अपने अनुप्रयोग को एक प्रति-- अनुरोध संभाव्यता प्रदान करना और आपके चेकआउट पृष्ठ को यह तय करने के लिए कि उससे क्या किया जाना चाहिए।
लिवर जो कैश को सुरक्षित करता है यह है नीति. निर्णय कैश एक द्वारा नियंत्रित होता है SignatureCacheOptions रिकॉर्ड करता है कि '\s पर सेट करता है \ -\ policy \ , \ so an admin endpoint can demand | 0.95 \ confidence and a 60- \ second freshness window while a content path accepts |0.7 | confidence over an hour . \ Same code \ {\displaystyle \mathbf {,},\ } different knobs \ (विभिन्न नोब्स) \ ASP.NET मध्यware, एक के रूप में जीआरपीसी पार्श्वगाड़ीCaddy प्लगइन के पीछे की प्रक्रिया में , या मे
इस पोस्ट का बाकी मशीनरी है जो कैश को सुरक्षित करता है।
Everything below anchors to "the fingerprintM SK1 so it'it's worth being precise about what that means here. व्यवहार, पहचान नहींTLS पर रेखांकन व्यवहारिक बदलें: एक भिन्न पथ अनुक्रम
जो अंगुलियों की छाप बनाता है मेटास्टबलस्थिर enough that an actor remains recognisable across short
यह गुण है कि पूरी सीखने की प्रणाली पर अवलंबित होती है. यदि अंगुलियों के अंक शोरपूर्ण होते हैं | ( | हर अनुरोध किसी जगह अनियमित ढंग से उतरता है |) EWMA औसतन कुछ भी नहीं Sharpen करेगा और कैश हमेशा गलत होगा | और drift पहचाना जा सकता है क्योंकि वास्तविक परिवर्तन किसी अन्य स्थिर पृष्ठभूमि के खिलाफ गति के रूप में दिखाई देता है
इस गुण को क्यों रखने के लिए संरचनात्मक तर्क (मानव ध्वनियुक्त, लेकिन संरचना में सुसंगत है, लेकिन रचना में गलत है व्यवहार, पहचान नहीं, और यदि यहाँ ज्यामिति में से कोई भी स्पष्ट नहीं है कि यह लेख पहले पढ़ने के लिए है एक बार यह दावा हाथ में है
प्रत्येक अवलोकन दो बातें करता है-: यह केंद्रक को तीक्ष्ण बनाता है यह अंगुठा छाप के लिए आता है ( अक्षरता ), और यह प्रणाली को ऊँचा करता है ' \ यह विश्वास कि यह अंगूठा छाप उस केंद्रक की तरह व्यवहार करता है जो गति सक्षम करता है). \ एक अनुकूलन डिटेक्टर का हार्ड हिस्सा यह दोनों कर रहा है बिना पुराने गलतियों को स्थायी बनना छोड़ देता है\ .
एक बोट डिटेक्टर को दिन में लाखों बार एक ही महंगा सवाल पूछा जाता है यह अभिनेता अभी भी हम पहले से ही सीखा था की तरह व्यवहार कर रहा है यह था इन अनुरोधों के बहुत अधिकतर के लिए, सिस्टम को पहले से ही एक राय है. यह एक ही TLS अंगुली छाप देखा थाMSC2 एक ही शीर्षिका क्रमM SK3 एक समान उपयोगकर्ताMST4 अभिकर्ता परिक्रमण पैटर्नMSP5 दस मिनट पहले एक ही आईपी पड़ोसMSM6 और निष्कर्षित bot, 0.93वहाँ एक ही कर्ता पर पूरा पता लगाने की पाइपलाइन फिर चलाने का कोई बिंदु नहीं है जब तक कि उस कर्ता के बारे में कुछ प्रत्यक्ष रूप से बदल गया है
StyloBot' सीखने की प्रणाली उस विचार के चारों ओर निर्मित है। केंद्रक बनाता है और परिष्कृत करता है पहले स्थान पर. जब पाइपलाइन नहीं चलाता है, तो यंत्रित परिस्थितियों में पिछला स्थानन पुनः प्रयोग किया जाता है।
एक ओर ML यह है अनुकूलन संगणना तंत्रिका नेटवर्क में आरंभिक,\ Mixture\ -\ of-\ Experts gating\ M SK3\ cheap classifier first\ ,\ expensive classifier only when the cheap one\ MSC5\ its confidence is low\ MST6\ The detector pipeline is the expensive inference path\ MSP7\ per\ MSV8\ fingerprint cache is the cheap MSV9\ did we already learn this
स्टिलियोबोट में सीखना परतबद्ध है इसलिए प्रत्येक स्तर एक अलग जीवनकाल के लिए अनुरूप होता है
ConfirmedBad में PatternReputation भंडारित करें. इनमें से एक के अनुरूप एक अनुरोध प्राथमिकता पर पाइपलाइन को छोड़ता है 3 किसी अन्य डिटेक्टर चलाने से पहलेBlackboardState.Signals अनुरोध के दौरान sink; बाद में डिटेक्टर उन संकेतों को पढ़ते हैं।InMemoryPatternReputationCache प्रति ट्रैक्स EWMA ऑनलाइन अद्यतन और समय विघटन के साथ पैटर्न बोट स्कोर्स ReputationState (Neutral → Suspect → ConfirmedBad, प्लस ConfirmedGood, ManuallyBlocked, ManuallyAllowed) असमित संवर्धन और निष्कासन थ्रेसहोल्डों के साथSignatureCoordinator प्रत्येक पर्यवेक्षण अंगुलियों का अंकन करता है। SignatureVerdictGate.DecideAsync प्रत्येक अनुरोध पर यह पढ़ता है.टियर 1 छोटा-पाईपलाइन को परिपथित करता है.\ टियर () \ 2\ इसके भीतर समकक्ष होते हैं\M SK4\ टयर () {\displaystyle ()} 3\ दिनों में जीवित रहने वाला लंबा स्मृति होती है\
flowchart LR
classDef input fill:none,stroke:#3b82f6,stroke-width:2px
classDef fast fill:none,stroke:#22c55e,stroke-width:2px
classDef async fill:none,stroke:#a855f7,stroke-width:2px
classDef store fill:none,stroke:#f59e0b,stroke-width:2px
REQ["Incoming request<br\>(TLS fingerprint, headers, IP)"]:::input
T1["Tier 1 · Fast-path reputation<br\>ConfirmedBad list<br\>priority 3, pre-pipeline"]:::fast
T2["Tier 2 · Intra-request blackboard<br\>BlackboardState.Signals<br\>lifetime: one request"]:::async
T3[("Tier 3 · PatternReputation<br\>EWMA + state machine<br\>lifetime: minutes to days")]:::store
T4[("Tier 4 · SignatureCoordinator<br\>sliding window<br\>lifetime: minutes")]:::store
PIPE["Detector pipeline<br\>(BlackboardOrchestrator)"]:::async
OUT["Verdict"]:::fast
REQ --> T1
T1 -->|match| OUT
T1 -->|no match| T4
T4 -->|Skip| OUT
T4 -->|Miss / Bias / Watchdog| PIPE
PIPE <--> T2
PIPE <--> T3
PIPE --> T4
PIPE --> OUT
सिस्टम में प्रत्येक संख्यात्मक स्मृति में एक ही अद्यतन नियम का उपयोग करता है Helpers/Ewma.cs:
public static class Ewma
{
/// <summary>new = (1 - alpha) * previous + alpha * observation</summary>
public static double Update(double previous, double observation, double alpha)
=> (1.0 - alpha) * previous + alpha * observation;
}
यह पूरी बात है alpha नए अवलोकन पर भार है 1 - alpha पिछली काल की जड़ता है
पैटर्न प्रतिष्ठा इसे सीधे उपयोग करता है PatternReputationUpdater.ApplyEvidence:
// EMA update: alpha clamped to [0,1] preserves EMA semantics (alpha > 1 inverts
// the old score contribution).
var alpha = Math.Min(_options.LearningRate * evidenceWeight, 1.0);
var newScore = Ewma.Update(decayed.BotScore, label, alpha);
LearningRate defaults to 0.1, so a single observation moves the score by 10% of the gap to that observation
एक ओर ML EWMA = क्लासिक एक्सपोनेन्शल गतिशील औसत जो दिखाता है आदम (the
β₁,β₂गति और विपरिवर्तन संग्राहक पॉलिक औसतबैच सामान्य चल औसत में ,variance TD(0) मूल्य अद्यतन (V ← V + α(r + γV' - V)).α = 0.1यहाँ वही रेंज में है जो आप देख सकते हैं गति बफर के लिए ' slow enough that one bad observation can
हमने इस अद्यतन को स्पष्ट से ऊपर उठाया, लेकिन, अधिकतम संभाव्यता को दर्शाने के गलत विकल्प को भंडारित करने के लिए, एमएसके0, परन्तु, एम्सके1, इतिहास भंडार में एक अधिकतम, एम एसके4 का अधिकतम, एक एकल स्पाइक पिन एक नमूना को हमेशा के लिए एमएसका6 पर छोड़ देता है।
क्षय स्वयं नमूने तक विस्तारित होता है ReputationOptions कोड से डिफ़ॉल्ट
public double ScoreDecayTauHours { get; set; } = 3; // generic
public double SupportDecayTauHours { get; set; } = 6;
public double ConfirmedBadScoreDecayTauHours { get; set; } = 12; // ConfirmedBad
public double ConfirmedBadSupportDecayTauHours { get; set; } = 24;
public int GcEligibleDays { get; set; } = 90;
एक दिन में नहीं देखा गया है कि एक नमूना अपने समर्थन का अधिकांश खो दिया है। Neutral कूड़ा है ConfirmedBad patterns get a longer tau (they earned their status through strong evidence and shouldn
एक ओर ML प्राप्ताङ्क-DecayM SK1toward-prior step is first ओर्नस्टाइन आकार): कोई नया साक्ष्य नहीं है, अंक दर पर पूर्व की ओर वापस लेता है
1/τ.
हाइस्टेरेसिस राज्य मशीन में निर्मित है ReputationOptions:
| संक्रमण | स्कोर थ्रेसहोल्ड | |
|---|---|---|
Neutral → Suspect |
≥ 0.6 | ≥ 10 |
Suspect → ConfirmedBad |
≥ 0.9 | ≥ 50 |
Suspect → Neutral |
≤ | |
ConfirmedBad → Suspect |
≤ | |
Neutral → ConfirmedGood |
≤ 0.1 | ≥ 100 |
stateDiagram-v2
direction LR
[*] --> Neutral
Neutral --> Suspect : score ≥ 0.6<br/>support ≥ 10
Suspect --> ConfirmedBad : score ≥ 0.9<br/>support ≥ 50
Suspect --> Neutral : score ≤ 0.4
ConfirmedBad --> Suspect : score ≤ 0.5<br/>(support ≥ 100 OR<br/>support < 50)
Neutral --> ConfirmedGood : score ≤ 0.1<br/>support ≥ 100
ConfirmedBad --> [*] : 90 days unseen<br/>+ neutral + low support
Neutral --> [*] : 90 days unseen<br/>+ low support
note left of ConfirmedBad
Fast-path eligible
(Tier 1 short-circuit)
end note
note right of Neutral
Promote at score 0.9 / sup 50
Demote at score 0.5 / sup 100
Wider gap = oscillation-resistant
end note
promote थ्रेसहोल्ड (0.9) और demote थ्रेस्होल्ड ConfirmedBad है जानबूझकर : यह \ ' \ s एक oscillation | - | suppression band \ . | Anything that flips between Suspectकेवल एक दिशा में पाया गया प्रमाण सीमा को पार करता है
एक ओर ML यह एक है स्मिट ट्रिगरराज्य संक्रमण के लिए symmetric थ्रेसहोल्ड्स
per-fingerprint स्लाइडिंग विंडो परत है जो अनुरोध गर्म पथ अब सीधे परामर्श करता है SignatureVerdictGate.DecideAsync पूरा निर्णय है और यह
public async Task<GateDecision> DecideAsync(
string? signature, SignatureCacheOptions options, CancellationToken ct = default)
{
if (!options.Enabled || string.IsNullOrEmpty(signature))
return new GateDecision(GateAction.Miss, null);
var verdict = await _coordinator.TryGetVerdictAsync(signature, ct);
if (verdict is null)
return new GateDecision(GateAction.Miss, null);
if (verdict.Confidence < options.BiasMinConfidence)
return new GateDecision(GateAction.Miss, verdict); // too noisy
var ageSeconds = (DateTime.UtcNow - verdict.LastSeenUtc).TotalSeconds;
var skipEligible =
verdict.Confidence >= options.SkipMinConfidence
&& ageSeconds <= options.SkipMaxAgeSeconds;
if (skipEligible && !ShouldRefresh(signature, options.SkipSamplingRate))
return new GateDecision(GateAction.Skip, verdict); // cache hit
var biasEligible = ageSeconds <= options.BiasMaxAgeSeconds;
return new GateDecision(biasEligible ? GateAction.Bias : GateAction.Miss, verdict);
}
per-policy थ्रेसहोल्ड्स से SignatureCacheOptions डिफ़ॉल्ट दिखाया गया
public double SkipMinConfidence { get; init; } = 0.85;
public int SkipMaxAgeSeconds { get; init; } = 300; // 5 min
public double BiasMinConfidence { get; init; } = 0.30;
public int BiasMaxAgeSeconds { get; init; } = 86_400; // 24 h
public double SkipSamplingRate { get; init; } = 0.05; // 5 %
विश्वास स्वयं में व्युत्पन्न होता है SignatureCoordinator.TryGetVerdictAsync नमूना आकार से , पूर्ण विश्वास के साथ 10 अवलोकनों और रेखात्मक रम्प नीचे | : |
var confidence = Math.Min(1.0, behavior.RequestCount / 10.0);
तो SkipMinConfidence = 0.85 का अर्थ है कि एक अंगुली छाप को ~9 वर्तमान विंडो में अवलोकनों की आवश्यकता होती है इससे पहले कि यह Skip हो सकता है
चार कार्य
BiasMaxAgeSeconds. पूरी डिटेक्टर पाइपलाइन चलाता हैflowchart TD
classDef input fill:none,stroke:#3b82f6,stroke-width:2px
classDef decision fill:none,stroke:#f59e0b,stroke-width:2px
classDef fast fill:none,stroke:#22c55e,stroke-width:2px
classDef slow fill:none,stroke:#a855f7,stroke-width:2px
classDef trip fill:none,stroke:#ef4444,stroke-width:2px
REQ["Request arrives"]:::input --> LOOKUP{"TryGetVerdictAsync<br\>(sliding window<br\>+ family fallback)"}:::decision
LOOKUP -->|"null OR low-conf OR stale"| MISS["MISS<br\>full pipeline"]:::slow
LOOKUP -->|"record found"| CONF{"conf ≥ 0.85<br\>+ age ≤ 300s?"}:::decision
CONF -->|"no"| BIAS["BIAS<br\>pipeline + prior contribution"]:::slow
CONF -->|"yes"| REFRESH{"In 5% refresh<br\>(hash bucket)?"}:::decision
REFRESH -->|"yes"| BIAS
REFRESH -->|"no"| WD{"VarianceWatchdog<br\>OK?"}:::decision
WD -->|"tripped"| TRIP["WATCHDOG-TRIP<br\>X-StyloBot-VerdictSource = pipeline<br\>X-StyloBot-WatchdogTrip = reason"]:::trip
WD -->|"ok"| SKIP["SKIP<br\>X-StyloBot-VerdictSource = cache<br\>orchestrator bypassed"]:::fast
MISS --> UPDATE[("Update sliding window<br\>+ RecordObservation")]:::slow
BIAS --> UPDATE
TRIP --> UPDATE
SKIP --> UPDATE
मिडलवेयर बाहर निकलता है X-StyloBot-VerdictSource (cache या pipeline) और X-StyloBot-WatchdogTrip जब लागू हो तो (reason string
Skip क्या होता है जब वहाँ कोई नया सीखने के लिए कुछ नहीं है।
पुनर्प्राप्ति यांत्रिकी में प्रवेश करने से पहले-, फ्रेमिंग जो उन्हें सुसंगत बनाता है-: कैशित निर्णय एक भंडारित उत्तर नहीं होता है सिस्टम अंधेरी रूप से पुनः उपयोग करता है। अंशदान, विश्वास और आयु द्वारा भारित FingerprintPriorContributor.ContributeAsync पूरी मशीन है
var horizon = AgeDecayHorizon; // default 86,400s
var decay = horizon > 0.0 ? Math.Max(0.0, 1.0 - age / horizon) : 1.0;
var effectiveWeight = conf * WeightMultiplier * decay;
if (effectiveWeight <= 0.0) return _emptyResult;
var delta = 2.0 * (prob - 0.5); // map [0,1] probability to [-1,+1] confidence delta
var contribution = new DetectionContribution
{
DetectorName = DetectorName,
Category = DetectorName,
ConfidenceDelta = delta,
Weight = effectiveWeight,
Reason = $"Cached fingerprint verdict (prob={prob:F2}, conf={conf:F2}, age={age:F0}s)"
};
एक 30-सेकेंड-सेकेण्डसेकेन्डसेकेंन्डसेमेंअभिज्ञतापूर्वककानिर्णय-0.9सेकेल्डसेकेन्जरसेअभिभिज्ञततापूर्वकअभिन्नसेकेबलसेकेकण्डसेमेनेअभिध्य्य्य्यीय्य्यय्य्य्या4सेकेंडरसेकेनियरसेकेपर्य्यिय्या5सेकेयनियरसेसेकेनरसेकेडीईसेकेपीडीईसीपीडीएपीडीआईसीपीटीपीडीडीईसापीडीजीपीडीटीपीटीटीपीपीडीएफपीडीपीडीएमएसीपीडीओपीडीएलपीडीएनडीईपीडीयूपीडीएसआईपीडीसीपीजीपीटीबीडीई पीडीई सीपीडी आईपीडी एपीडीआरपीडी ईपीडी आइपीडी एनडीईआईपीटीआईपी डीईपीआईपीजी बीडीआईपीडाईपीडी टीईपीटीईपीजी वीडीआई पीडीआईटीपीजी पीडीडीआईआईपीपीजी जीडीआईवीपीडी
एक ओर ML यह वास्तव में है बेयसीपहले (कैच किया गया निर्णय | ) |× | संभाव्यता | ( | यह अनुरोध | ' | साक्ष्य | ) | → | posterior
decay = 1 - age/horizonशब्द एक भूलकारक के रूप में एक ही भूमिका निभाता है पुनरावर्ती बेयजियन अनुमान; पुराने पूर्ववर्ती शक्ति खोते हैं तो संभावना पहले आयु के रूप में प्रभुत्व रखता हैRequestContributionDelta(यह अनुरोध किया गया परिवर्तन चलती पीछला पेजरी के लिए नहीं कच किए गए निर्णयों पर कच्चे per-request संभाव्यता के बजायdeltaयह हिस्सा है कि वास्तव में नया सूचना है
इस बिंदु तक सिस्टम खतरनाक रूप से कैश ध्वनि देता है।
flowchart TD
classDef store fill:none,stroke:#f59e0b,stroke-width:2px
classDef defense fill:none,stroke:#22c55e,stroke-width:2px
classDef recover fill:none,stroke:#a855f7,stroke-width:2px
CACHE[("Cached verdict<br\>(EWMA posterior + sample count)")]:::store
D1["Direction-agnostic confidence<br\>caches confident verdicts,<br\>not just bot verdicts"]:::defense
D2["EWMA, not MAX<br\>one spike contributes 10%,<br\>not 100%"]:::defense
D3["Sample-size gating<br\>full trust at 10 samples,<br\>Bias below that"]:::defense
D4["Variance watchdog<br\>IP rotation, rate spike,<br\>path divergence"]:::defense
D5["Skip-path observation<br\>cache hits still record,<br\>history stays whole"]:::recover
D6["Refresh sampling<br\>5% of Skips downgraded<br\>to Bias by signature hash"]:::recover
D1 --> CACHE
D2 --> CACHE
D3 --> CACHE
D4 --> CACHE
D5 --> CACHE
D6 --> CACHE
दिशा SkipMinConfidence के विरुद्ध जाँच किया जाता है verdict.Confidence, के खिलाफ नहीं verdict.BotProbability. एक निश्चित--बॉट निर्णय और एक निश्चित–-मानव निर्णय समान रूप से Skip के लिए पात्र हैं। विश्वासी निर्णयों" (प्रणाली किसी भी तरह के साक्ष्य की ओर पक्षपात करती है
EWMA, नहीं MAX. एक ही उच्च '-' संभाव्यता का अवलोकन चल रहे अंक को इस द्वारा ले जाता है α = 0.1 उस अवलोकन के अंतर से . एक असली हमलावर तेजी से प्रमाण इकट्ठा करता है क्योंकि हर पर्यवेक्षण विरोधी है. एक वैध दर्शक जो एक अनुरोध के लिए एक स्करपर की तरह दिखता है बाद में पर्यवहारों पर भयानक की ओर वापस विकृत होता है
नमूना confidence = min(1, request_count / 10). नीचे ~9 अवलोकनों, यहां तक कि एक मजबूत पीछला पेजरी को Skip के बजाय Bias के लिए रखा जाता है
एक ओर ML यह एक है पूर्व संकुचनजब तक पर्याप्त प्रमाण इकट्ठा नहीं हो जाता है, :,'. Same reason यूसीबी बैंडिट एक नमूना शामिल करें
n, व्यापक विश्वास अंतराल
वेरिएन्स वॉचलडॉग एक विश्वसनीय के साथ भी VarianceWatchdog.Check तीन स्वतंत्र परीक्षण के विरुद्ध चलाता है VarianceWatchdogOptions डिफ़ॉल्ट
public int IpRotationWindowSeconds { get; init; } = 300; // same fingerprint, new /24
public double RateSpikeMultiplier { get; init; } = 10.0; // last minute vs rolling 5
public bool CheckPathCentroid { get; init; } = true; // never-seen path family
पथ-विभिन्नता जांच को कम से कम आवश्यक है।
if (options.CheckPathCentroid && hist.PathFamilyCount >= PathFamilyBaseline)
{
var family = PathFamily(ctx.Request.Path.Value);
if (family is not null && !ContainsFamily(hist, family))
return new WatchdogResult(true, $"path-divergence:{family}");
}
कोई भी एक यात्रा और पाइपलाइन ताजा चलाता है ; प्रतिक्रिया लेती है X-StyloBot-WatchdogTrip: ip-rotation:1.2.3.0->5.6.7.0 या जो भी फायर किया गया है
एक ओर ML देखdog है अवधारणा-ड्राइप पता लगाने एक अंगुली छाप के लिए. शास्त्रीय अनुरूप हैं एडविन, पृष्ठ–Hinkley, और डीडीएमइन सभी से पता चलता है कि एक ऑनलाइन धारा के वितरण में काफी परिवर्तन हो गया है कि मौजूदा मॉडल अब विश्वसनीय नहीं है।
छोड़ें जब भी गेट पाइपलाइन को छोड़ता है, middleware अभी भी अनुरोध रिकॉर्ड करता है
_watchdog.RecordObservation(precomputedSig, clientIp, pathStr);
_ = _signatureCoordinator.NotifyObservationAsync(
precomputedSig, pathStr, v.BotProbability, context.RequestAborted);
यह तथ्य कि पता चलाने को छोड़ दिया गया है, नहीं create a hole in the per-fingerprint history
नमूना ताजा करें. ShouldRefresh विनिर्धारित रूप से Skip के एक कॉन्फ़िगर किए जा सकने वाले भिन्न को ह्रास करता है- Bias में पात्र अनुरोध इस प्रकार पाइपलाइन चलाता है और जीवित रिकॉर्ड को ताज़ा करता हैDeterministicBucket.ShouldFire), तो एक ही क्लाइंट से वापसी समान रूप से भूमि लेता है ; समय के साथ प्रत्येक अंगुली छाप एक आवधिक पूर्ण पुनः प्राप्त करता है
एक ओर ML यह एक निर्धारणात्मक संस्करण है ε-कृपण अन्वेषण मजबूती सीखने से : अधिकांश समय मौजूदा नीति का उपयोग करता है |( |Skip | ), | कुछ समय खोज करने की लागत का भुगतान करता है
Entity-family fallback जब एक अंगुली छाप घूमती है और उसके नए पहचान के पास अपना कोई कैशित निर्णय नहीं होता है लीडन क्लस्टर एन्कर व्यवहारिक मॉडल से TryGetVerdictAsync:
csharp if (!_signatureCac
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.