Parte 1 descrive un tubo di tubature: SubstrateM SK1 Proponente, ConduttoreMSC3 Un componente probabilistico , delimitato dalla verità deterministicaMNK5
Ma cosa succede quando si ha più volte. Proponenti? Multiple LLMs? Modelli visivi che parlano con i modelli di testo ? Heuristica che alimenta le reti neuraliM SK3
Che è un MoM limitato Fuzzy (CFMoM): Selezione limitata da più proposeri., validato contro la verità condivisaM SK1 Non " lasciare che molti modelli parlino". Non guidareMSC4
Il CFMoM è un modello in cui molti componenti probabilistici propongono segnali, ma solo la logica deterministica può combinareM SK1 validare , o agire su di essi.
La regola:
"In sistemi multiM SK1agenti, il substrato condiviso è la linguaMSC3 e il constrainere è la grammatica ."
Prima di immergersi in, correggere il vocabolario:
| Term | Voglio dire |
|---|---|
| CFMoM | Constritto Fuzzy MoM: selezione limitata da diversi proponenti |
| Il substrato | I fatti + le prove + i budget S(deterministiciM SK4 SSK5 |
| Contratto di segnale | Come i componenti scrivono nel substrato |
| Spazio di consenso | Store + routing + valutazione asynca M |
| Coordinazione connessa | Portatore finale per le azioniM SK1output |
Nota: Consensus Spazio è un bus e una memoria, non è un arbitro. Può eseguire l'ingestioneM SK2validazione temporale (schemaMNK4 prove dell'esistenzaMKK5 ma non prende decisioniMZK6 Le decisioni vivono nel constrainerMMK7
Questi non sono concetti nuovi. Sono la parte 1 che si estende attraverso i componentiM SK2
Non sono négociabili.
| La cosa | Perché il CFMoM è diverso |
|---|---|
| Misura di esperti (MoE) | MoE mischi i modelli matematicamente. Mischi CFMoM I segnali sotto restrizioni. con le prove e la politica. M SK1 |
| Chatter dell'agente | Molti sistemi agenti passano liberamente -formi messaggi tra i componenti. il CFMoM impedisce il liberoM SK3forme interiMSC4messaggi di componenteMST5 solo i segnali tipificati entrano nel substratoMSL6 SSL7 |
| Il routing | Selezioni di routing Quale modello chiamare?. Il CFMoM accetta molte proposte e restringe la selezione del postoM SK1hoc. |
| Voto/Esempi | Il voto presume che le emissioni siano comparabili . Il MOCF richiede dei fatti-l'accordo di livello prima della comparazioneM SK3 |
| I grafici a stile LangChain- | I grafici passano i messaggi. Il CFMoM pubblica segnali immutabili su un substrato condivisoM SK2 |
CFMoM non è una biblioteca o un framework. È una regola epistemica: I componenti probabilistici possono proporre, ma solo le prove deterministicheM SK1 la logica sostenuta può combinare o agire.
Quando due LLM comunicano attraverso il linguaggio naturale, si ottengono errori di composizione. Anche se ogni salto è più o meno correttoM SK2 gli errori si compongono più velocemente di quanto si possa aspettare
Drift semantice: Ogni modello interpreta leggermente in modo diversoM SK1 Il modello A dice " l'utente sembra frustrato ." Il Modello B legge che come "\ l'utilizzatore è arrabbiato\ ."\ Il modello C si estesa a "\ L'utilizatore ostile è stato rilevato\ ."\ Tre saltamenti\ M SK8\ Tre interpretazioni\ MSC9\ una conclusione sbagliata\ MST10\
Lavado di fiduciaIl modello A è 80% sicuro di qualcosa. Dice il modello B in prosa flessibile . Il modello B lo tratta come un fatto perché la lingua suona certaM SK4 L'incertezza viene buttata via ogni volta che salta.
Amplificazione dell'allucinazione: Il modello A inventa un dettaglio plausibile . Il Modello B lo costruisce su di esso. Il Modo C lo cita come stabilitoM SK3 L'allucinazione diventa caricoMSC4 trasportareMST5
Instabilità di formato: Il modello A produce JSONM SK1 Qualche volta. Il Modello B lo analizza . Qualcuna volta . Si propagano errori silenziosiMSC5
L'istinto è aggiungere più spinta per imporre il formato. Ma le restrizioni morbide falliscono tra i componenti proprio come falliscono dentro i componenti.
La stabilizzazione: forza tutta la comunicazione interaM SK1componente attraverso uno spazio deterministico condiviso.
Questa è la regola difficile.
Questo uccide il ", ma il mio agente può riassumere l'altro agente.
Il cuore del modello è un registro digitato che ogni componente deve usare. Niente proseM SK1 Nient'altro libero-Output formaMSC3 Slot che devono essere riempitiMST4
Primo, definire cosa significa "evidenceM SK2
public record EvidenceRef(
string Kind, // "chunk", "frame", "timestamp", "request", "row"
string Store, // namespace (e.g., "documents", "video-frames")
string Id, // chunk-12, frame-0042, t=00:13:21.200, req-abc
JsonElement? Locator = null, // span, bbox, row-range - schema depends on Kind
string? ContentHash = null // optional hash for version verification
);
Non è una stringa. E' un indicatore del materiale sorgente verificabileM SK1 Ogni affermazione deve citare ciò su cui si basa. Locator il campo manipola i spans, le scatole di piegamentoM SK1 i timmagrammi , o qualsiasi altro schema di localizzazione - il suo schema è determinato da Kind.
public record EmbeddingRef(string ModelId, float[] Vector);
public record ConstrainedSignal(
string Id, // stable identifier
string SourceId, // component name/version
string FactsSchemaId, // "bot-detection/1.0", "summarization/2.1"
DateTimeOffset At, // when produced
string? CorrelationId, // ties signals to one input/request
string? SubjectId, // what this signal is about, if known
JsonElement Facts, // schema-validated, not ad-hoc object
IReadOnlyList<EvidenceRef> Evidence, // what it's based on
float Confidence, // self-estimated probability of correctness
IReadOnlyList<EmbeddingRef>? Embeddings = null // optional, supports multi-model migration
);
FactsSchemaId punta a un schema che definisce cosa palette_dominant_hue significa, quale tipo èM SK1 quali unità usa. Nessun annuncio -hoc Dictionary<string, object>. I schemi sono schema JSON ( o equivalenti), versione e pinnedM SK3I segnali sono validi e canonicaizzati quando entrano nel substrato, non quando vengono processati dal constrainer:
public async Task IngestAsync(ConstrainedSignal signal)
{
// Hard fail if schema invalid
_schemaRegistry.Validate(signal.FactsSchemaId, signal.Facts);
// Canonicalise units, formats, types
_canonicaliser.Apply(signal.FactsSchemaId, ref signal);
// Verify evidence pointers exist and are in scope
foreach (var evidence in signal.Evidence)
_evidenceStore.VerifyExists(evidence);
await _store.WriteAsync(signal);
}
Fino al momento in cui il constrainer vede un segnale, è già schema- validaM SK2 canonicaizzata , e proveMSC4 verificateMSSK5 Il consTrainatore decide solo; non pulisce .
_evidenceStore.VerifyExists Sta facendo un lavoro reale. Questi sono i livelli:
I segnali che mancano a qualsiasi livello vengono rifiutati all'ingestione. Niente prove partialiM SK1
Questo è il punto in cui molte architettura multi-agent vanno storte.
Inserzioni vi da una geometria di distanza che correla con la somiglianza. Sono probabilistici, solo meno agitati del linguaggio naturaleM SK2 Due segnali con embeddings simili Potenza essere più o meno la stessa cosa.
I fatti + Le prove La cosa che " significa lo stesso " per tutti i componenti deve essere :
Gli inserimenti aiutano a trovare segnali che Potenza Si tratta di la stessa cosa. I fatti dimostrano che Si tratta di un sistema multifunzionale..
In Detezione del botI rilevatori , Wave 0 e i LLM di Wave ≥2 comunicano attraverso DetectionContribution:
DetectionContribution.Bot(
source: "UserAgent", // or "LLM"
category: "BotSignature",
confidence: 0.85,
reason: "Contains automation keyword",
weight: 1.0
);
L'archivio è il limite. Il LLM non può ramblere. Deve riempire gli orizzontiM SK2 Il rilevatore UserAgent e il LLM producono la stessa forma di output . I componenti in avalanche non hanno bisogno di sapere quale l'ha prodotto.
Il substrato condiviso non è un almacenamiento passivo. Coordina attivamente il flusso di segnali.
flowchart TB
subgraph Specialists["Specialist Proposers"]
S1[Text Analyzer]
S2[Image Processor]
S3[Behavioral Model]
S4[Domain Expert LLM]
end
subgraph Consensus["Consensus Space (includes Ingestion Gate)"]
C1[Ingestion Gate]
C2[Signal Aggregator]
C3[Async Evaluator]
C4[Cluster by Embedding]
end
subgraph Constrainer["Coordination Constrainer"]
B1[Verify Facts + Resolve]
B2[Conflict Resolution]
B3[Budget Management]
end
subgraph Output["System Output"]
O1[Coordinated Response]
O2[Audit Trail]
end
S1 --> C1
S2 --> C1
S3 --> C1
S4 --> C1
C1 --> C2 --> C3 --> C4
C4 --> B1 --> B2 --> B3 --> O1
B3 --> O2
style Consensus stroke:#ef4444,stroke-width:3px
style Constrainer stroke:#22c55e,stroke-width:2px
Gli specialisti non si aspettano l'un l'altro. Contribuiscono ai segnali quando completano:
public class ConsensusSpace
{
private readonly ConcurrentDictionary<string, ConstrainedSignal> _signals = new();
public async Task ContributeAsync(ConstrainedSignal signal)
{
_signals.TryAdd(signal.Id, signal);
// Trigger evaluation without blocking the contributor
_ = Task.Run(async () =>
{
var evaluation = await _evaluator.EvaluateAsync(signal);
await _distributor.DistributeAsync(evaluation);
});
}
public IDisposable Subscribe<T>(Func<T, Task> handler)
where T : ConstrainedSignal
{
// Components subscribe to signals they care about
}
}
Dettatori veloci (Check dell'agente d'utente,analisi dei titoliM SK2 non bloccano quelli lenti (analisi del MLMMska4 modelli comportamentaliMske5 L'area consensuale accumula i segnali nel tempoMSC6 I segnali precoci possono provocare la decommissione precoceMNK7 I signali tardi riparano o superano l'autorizzazioneMK8
Con un contratto di segnale condiviso, gli specialisti possono concentrarsi su ciò che fanno meglio.
public class TextSpecialist : ISpecialist
{
public async Task<ConstrainedSignal> AnalyzeAsync(InputData input, string correlationId)
{
var entities = await ExtractEntitiesAsync(input.Text);
var sentiment = await AnalyzeSentimentAsync(input.Text);
var facts = JsonSerializer.SerializeToElement(new
{
entities = entities.Select(e => e.Label).ToArray(),
sentiment_score = sentiment.Score,
sentiment_label = sentiment.Label
});
return new ConstrainedSignal(
Id: Guid.NewGuid().ToString(),
SourceId: "TextSpecialist/1.2",
FactsSchemaId: "text-analysis/1.0",
At: DateTimeOffset.UtcNow,
CorrelationId: correlationId,
SubjectId: input.Id,
Facts: facts,
Evidence: entities.Select(e => new EvidenceRef(
"span", "documents", input.Id,
JsonSerializer.SerializeToElement(new { Start = e.Start, End = e.End }))).ToList(),
Confidence: CalculateConfidence(entities, sentiment),
Embeddings: [new EmbeddingRef("all-MiniLM-L6-v2", _embedder.Embed(entities, sentiment))]
);
}
}
public class ImageSpecialist : ISpecialist
{
public async Task<ConstrainedSignal> AnalyzeAsync(InputData input, string correlationId)
{
var objects = await DetectObjectsAsync(input.Image);
var palette = await ExtractPaletteAsync(input.Image);
var facts = JsonSerializer.SerializeToElement(new
{
objects = objects.Select(o => o.Label).ToArray(),
palette_dominant_hex = palette.Dominant.ToHex(),
palette_accent_hex = palette.Accent.ToHex()
});
return new ConstrainedSignal(
Id: Guid.NewGuid().ToString(),
SourceId: "ImageSpecialist/2.1",
FactsSchemaId: "image-analysis/1.0",
At: DateTimeOffset.UtcNow,
CorrelationId: correlationId,
SubjectId: input.Id,
Facts: facts,
Evidence: objects.Select(o => new EvidenceRef(
"region", "images", input.Id,
JsonSerializer.SerializeToElement(o.BoundingBox))).ToList(),
Confidence: CalculateConfidence(objects, palette),
Embeddings: [new EmbeddingRef("all-MiniLM-L6-v2", _embedder.Embed(objects, palette))]
);
}
}
Entrambi specialisti pubblicano su lo stesso substrato con i dati inviati. Ma i dati provenienti da domeni diversi non possono essere confrontati direttamente.
Quando il specialista del testo produce entity_color: "blue" E l'immagine specialista produce. palette_dominant_hex: "#0000CC", come si verifica l'accordo?
Non uguaglianza cruda. "blueM SK1 != "#0000CC" come se fossero delle stringheMSC5 Avete bisogno di un risolvitore.
public interface IFactResolver
{
bool CanResolve(string factNameA, string factNameB);
FactAgreement Resolve(JsonElement factA, JsonElement factB);
}
public class ColorResolver : IFactResolver
{
public bool CanResolve(string a, string b) =>
(a.Contains("color") && b.Contains("hex")) ||
(a.Contains("hex") && b.Contains("color"));
public FactAgreement Resolve(JsonElement factA, JsonElement factB)
{
// Canonicalise both to RGB space
var colorA = ParseToRgb(factA);
var colorB = ParseToRgb(factB);
// Tolerance-based comparison in perceptual space
var distance = CieDeltaE(colorA, colorB);
return new FactAgreement(distance < 10.0, distance);
}
}
(La Contains La logica precedente è illustrativa. In produzione, i risolventi sono registrati da una coppia di schemi M SK2 la chiave di fatto , non l'euristica substringaleMSC4
Cross-la comparazione del schema è impossibile per défaut. Lo si ottiene solo registrando un risolvente esplicito. Questa è una funzione di sicurezza, non una limitazioneM SK2
Il constrainer di coordinazione usa un registro di risolvitori:
Non c'è bisogno di linguaggio naturale. I discorsi sono rilevati, non nascostiMSC2 CrossM SK3 i fatti modali vengono confrontati nel loro spazio canonico condiviso .
Nella parte 1, il constrainer era un guardiano della portaM SK1 validare, riscrivereMSC3 o rifiutare .
Nella parte 2, il constrainer di coordinazione è un orchestratore. It:
Il constrainer è deterministico. Non contiene nessun LLM, nessuna logica probabilistica, niente MSC2 chiamate di giudizioM SK3 Ogni decisione segue regole espliciteMST4 Questa è la garanzia architettonica che fa funzionare il resto del modelloMSV5
public class CoordinationConstrainer
{
public async Task<CoordinatedResult> ConstrainAsync(
IReadOnlyList<ConstrainedSignal> signals)
{
// Step 1: Cluster candidates by embedding (cheap, fuzzy)
var clusters = ClusterByEmbedding(signals);
// Step 2: Within each cluster, verify agreement on FACTS (hard)
var verified = new List<ConstrainedSignal>();
foreach (var cluster in clusters)
{
// Time-of-use re-check: evidence may have expired or been GC'd since ingestion
var withValidEvidence = cluster.Where(s =>
s.Evidence.Any() && _evidenceStore.IsStillAuthorisedAndAvailable(s.Evidence)).ToList();
var factAgreement = VerifyFactAgreement(withValidEvidence);
if (factAgreement.Agreed)
verified.AddRange(factAgreement.Signals);
// Disagreeing signals are logged for analysis, not merged
}
// Step 3: Check consensus threshold (policy, hard)
if (verified.Count < _policy.MinimumSignals)
{
if (_policy.AllowEscalation)
return await EscalateToTiebreakerAsync(signals);
else
return CoordinatedResult.Degraded("Insufficient consensus");
}
// Step 4: Merge and apply output constraints
var merged = MergeSignals(verified);
return ApplyOutputConstraints(merged);
}
private FactAgreement VerifyFactAgreement(IReadOnlyList<ConstrainedSignal> cluster)
{
// Agreement is on Facts via rules registry, not raw equality
foreach (var (signalA, signalB) in AllPairs(cluster))
{
var result = _rules.CheckAgreement(
signalA.FactsSchemaId, signalA.Facts,
signalB.FactsSchemaId, signalB.Facts);
if (!result.Agreed)
return new FactAgreement(false, cluster, result.ConflictingFact);
}
return new FactAgreement(true, cluster, null);
}
}
// The rules registry handles type-appropriate comparison
public class FactAgreementRules
{
private readonly Dictionary<string, IFactResolver> _resolvers = new();
private readonly IFactResolver _defaultResolver = new DefaultFactResolver();
public void Register(string factPattern, IFactResolver resolver) =>
_resolvers[factPattern] = resolver;
public AgreementResult CheckAgreement(
string schemaA, JsonElement factsA,
string schemaB, JsonElement factsB)
{
// Cross-schema: use resolvers to map between schemas
if (schemaA != schemaB)
return CheckCrossSchemaAgreement(schemaA, factsA, schemaB, factsB);
// Same schema: compare fact by fact
foreach (var prop in factsA.EnumerateObject())
{
if (!factsB.TryGetProperty(prop.Name, out var valueB))
continue;
var resolver = FindResolver(prop.Name);
var result = resolver.Resolve(prop.Value, valueB);
if (!result.Agreed)
return new AgreementResult(false, prop.Name);
}
return new AgreementResult(true, null);
}
private IFactResolver FindResolver(string factName) =>
_resolvers.FirstOrDefault(r => factName.Contains(r.Key)).Value
?? _defaultResolver;
}
public class DefaultFactResolver : IFactResolver
{
public bool CanResolve(string a, string b) => true;
public FactAgreement Resolve(JsonElement a, JsonElement b)
{
return a.ValueKind switch
{
JsonValueKind.Number => ResolveNumeric(a, b), // Tolerance
JsonValueKind.String => ResolveString(a, b), // Exact match
JsonValueKind.True or JsonValueKind.False =>
new FactAgreement(a.GetBoolean() == b.GetBoolean(), 0),
_ => new FactAgreement(a.GetRawText() == b.GetRawText(), 0)
};
}
private FactAgreement ResolveNumeric(JsonElement a, JsonElement b)
{
var va = a.GetDouble();
var vb = b.GetDouble();
var tolerance = Math.Max(Math.Abs(va), Math.Abs(vb)) * 0.001; // 0.1%
return new FactAgreement(Math.Abs(va - vb) <= tolerance, Math.Abs(va - vb));
}
private FactAgreement ResolveString(JsonElement a, JsonElement b) =>
new FactAgreement(a.GetString() == b.GetString(), 0);
}
Il punto di vista chiave: Proporzione di inserzioni, Decideno i fatti. La somiglianza embedding suggerisce " Questi segnali potrebbero essere correlatiM SK2 La comparazione dei fatti conferma " questi segnali sono d'accordo."
La decisione del constrainer' è determinista. No LLMM SK2 no heuristicsMSC3 no MST4judgmentMSV5 Ecco il flussoMSS6
Ogni passo è una funzione deterministica. Ogni decisione produce un registro di audito.
L'area consensuale consente qualcosa di potente: L'apprendimento indipendente da una verità oggettiva condivisa.
flowchart TB
subgraph Specialists["Specialist LLMs"]
S1[Model A]
S2[Model B]
S3[Model C]
end
subgraph Consensus["Consensus Space"]
C1[Signal Aggregation]
C2[Decision Selection]
end
subgraph Action["Deterministic Execution"]
A1[Execute Decision]
A2[Measure Outcome]
end
subgraph Memory["Long-Running RAG"]
M1[Decision Record]
M2[Objective Outcome]
M3[Attribution]
end
subgraph Feedback["Independent Learning"]
F1[Model A reviews own history]
F2[Model B reviews own history]
F3[Model C reviews own history]
end
S1 --> C1
S2 --> C1
S3 --> C1
C1 --> C2 --> A1 --> A2
A2 --> M1 --> M2 --> M3
M3 --> F1 --> S1
M3 --> F2 --> S2
M3 --> F3 --> S3
style Memory stroke:#3b82f6,stroke-width:3px
style Feedback stroke:#22c55e,stroke-width:2px
public record DecisionRecord(
string DecisionId,
string ProposingModel, // Which LLM proposed this
ConstrainedSignal OriginalSignal, // What it claimed
float ConsensusScore, // Agreement at decision time
DateTime Timestamp
);
public record OutcomeRecord(
string DecisionId,
bool ObjectiveSuccess, // Deterministic measurement
Dictionary<string, float> Metrics, // What we measured
TimeSpan TimeToOutcome
);
Ogni LLM può fare una domanda diversa al RAG:
// Model A: Conservative, focuses on avoiding failures
var modelAContext = await _memory.QueryAsync(
"decisions WHERE ProposingModel = 'ModelA' AND ObjectiveSuccess = false",
limit: 100
);
// Learns: "I was overconfident when X, be more cautious"
// Model B: Aggressive, focuses on missed opportunities
var modelBContext = await _memory.QueryAsync(
"decisions WHERE ProposingModel != 'ModelB' AND ObjectiveSuccess = true",
limit: 100
);
// Learns: "Others succeeded where I hesitated, be bolder on pattern Y"
// Model C: Specialist, focuses on its domain
var modelCContext = await _memory.QueryAsync(
"decisions WHERE Domain = 'security' ORDER BY ObjectiveSuccess DESC",
limit: 100
);
// Learns: "These security patterns work, reinforce them"
Questo funziona solo perché il feedback è obiettivo.
| Senza riscontri deterministici | |||||||
|---|---|---|---|---|---|---|---|
| "Modello A pensava che funzionasse bene" | 3 | 4 | Il tasso di conversione era | ||||
| "Il modello B non era d'accordo con il risultatoM SK2 | \ "Il bottello è stato confermato da un vaso di miele. | ||||||
| "I modelli discuteno della qualitàM SK2 | \ "Summario citato | 5 | pezzi validi | 6 | 7 |
La stratagemma determinista misura la realtà. I LLM non possono discutere con le misurazioni. Ogni modello impara dalla stessa verità ma si adatta indipendentemente basandosi sulla propria storia e sulle sue prioritàM SK2
Nel tempo, i modelli si specializzano naturalmente:
Nessun orchestratore centrale assegna ruoli. La specializzazione emerge dal feedback oggettivo sui risultati reali.
Percezione controintuitiva: I migliori modelli rendono i substrati condivisi più critici, non meno.
| Man mano che i modelli miglioranoM SK1 | Il rischio aumenta perché |
|---|---|
| Emissioni più sofisticate | Potenza di sbaglio più sottile |
| maggiore fiducia | I segnali superconfidenti si propagano più velocemente PSK2 |
| Capacità più estese | La tentazione di saltare le restrizioni di tipo CSK2 |
| migliore a sembrare coerente | più difficile da individuare quando non sono d'accordo semanticamente |
Un modello frontiere che comunica con un altro modello frontiera attraverso il linguaggio naturale non è più sicuro di due piccoli modelli che fanno lo stesso. I modi di fallimento sono più sofisticati, non eliminatoM SK2
La soluzione è la stessa: comunicazione di forza attraverso spazi condivisi deterministici. al modello embedding non importa se il proponente è piccolo o frontiereM SK2 lo stesso spazio vettoreMSC3 Lo stesso tipo di fattiMST4 Gli stessi limitiMSS5
Perché la comunicazione avviene attraverso registrazioni stampate e inserzioni condivise:
Volete aggiornare da all-MiniLM-L6-v2 All'incirca. nomic-embed-text-v1.5. Ma tutti i vostri segnali memorizzati hanno inserzioni del vecchio modello.
La soluzione: dual-write with multiple embeddingsM SK2
Perché Embeddings è una lista di EmbeddingRef, la migrazione è semplice:
public class EmbeddingMigration
{
// Phase 1: Dual-write (new signals get both embeddings)
public ConstrainedSignal EnrichWithDualEmbedding(ConstrainedSignal signal)
{
var oldVector = _oldModel.Embed(signal.Facts);
var newVector = _newModel.Embed(signal.Facts);
return signal with
{
Embeddings =
[
new EmbeddingRef("all-MiniLM-L6-v2", oldVector),
new EmbeddingRef("nomic-embed-text-v1.5", newVector)
]
};
}
// Phase 2: Compare agreement rates
public async Task<MigrationReport> CompareAgreementAsync()
{
var signals = await _store.GetRecentSignalsAsync(limit: 10000);
var oldClusters = ClusterByEmbedding(signals, s =>
s.Embeddings?.FirstOrDefault(e => e.ModelId == "all-MiniLM-L6-v2")?.Vector);
var newClusters = ClusterByEmbedding(signals, s =>
s.Embeddings?.FirstOrDefault(e => e.ModelId == "nomic-embed-text-v1.5")?.Vector);
// Do the same Facts end up in the same clusters?
var agreementRate = CalculateClusterAgreement(oldClusters, newClusters);
return new MigrationReport(agreementRate, threshold: 0.95);
}
// Phase 3: Flip readers after threshold met
public void CompleteMigration()
{
// Update config to use new model for queries
// Keep old embeddings for rollback if needed
// Optionally prune old embeddings after confidence period
}
}
punti chiave:
Questo schema brilla quando le cose vanno storte. Il controllo-il sistema di montaggio significa che i fallimenti sono espliciti e recuperabiliM SK2
Due specialisti riportano valori diversi per lo stesso fatto. Il risolvente non li può conciliare.
Risponsione: Registrare il conflitto con il contesto completo. Non unireM SK2 Degradare la produzione per indicare una riduzione della fiduciaMSC3 Escalare opzionalmente ad un breaker (un altro specialista o revisione umanaMST5
Un segnale arriva con dei puntatori di prove che non esistono, sono fuori campo di applicazioneM SK1 o non riescono a verificare l'hash.
Risponsione: Rimetta il segnale all'ingestione. Non entra mai nel substratoM SK2 Il componente proposto è avvisato e può riprovare con prove valide.
Troppo pochi segnali, o troppe divergenze per raggiungere il punto limite della politica.
Risponsione: Tornare a una linea di base deterministica (e.gM SK3 classificazione predefinitaMSC4 risultato precedente archiviatoMST5 o esplicitato "dati insufficientiMS" rispostaM). Se configurataSSM9 chiedere un'analisi umanaMSSM10 Non indovinare maiMSS11
Le prove erano valide al momento dell'ingestione ma sono passate da quando è finita la validità, è stato spazzaturaM SK1 è stata raccolta, o le autorità sono state revocateMSC3
Risponsione:ConstruitoreM SK1il tempo -di-controllo dell'uso (IsStillAuthorisedAndAvailable) cattura questoM SK1 Il segnale è escluso dalla decisione attuale con "la prova staccata"la ragione della revisioneMSC4 La politica può richiedere una riconsiderazioneMST5l'analisi se servono prove nuoveMSV6
Il substrato stesso non è disponibile.
Risponsione: Interruttore intermittente. Nessun segnale può essere ingettato o processatoM SK2 Il sistema si degrada a valori di default sicuri o a quei input in fila per il ulteriore processo . Si tratta di un fallimento dell'infrastrutturaMSC4 non di uno fallimento del modelloMST5
Il modello non impedisce i fallimenti. Li fa forte, localizzato, e recuperabile.
Per le squadre che costruiscono sistemi multi-agenti:
ConstrainedSignal + EvidenceRef) prima di costruire un specialistaParte 1: Le restrizioni creano un comportamento utile in singoli componenti.
Parte 2: Constrizioni condivise creano un comportamento coerente tra i componenti.
Lo spazio di consenso non è un middleware. È il substrato esteso. Quando gli specialisti comunicano tramite dati tipocati invece che attraverso la lingua , attraverso indicatori di prove invece che tramite proseMSC3 le restrizioni che rendono affidabili i singoli componenti rendono affidabile l'intero sistemaM SK4
Molti proponenti. Una verità condivisa. Lo stesso schemaM SK2
I modelli non parlano l'un con l'altro. Loro pubblicano al substrato. Il constrainer lo verificaM SK2 Il risultato viene misuratoMSC3 Il RAG ricordaMST4 Ogni modello imparaMSV5
Parte 1 restringe un modello. Parte \2 restringisce la condivisione dei modelli spazialiM SK3
Questo è il Restritto Fuzzy MoM.
| Parte | Tipo | Asse S |
|---|---|---|
| 1 | Fuzzinesse limitata | Componente unica |
| 2 ≥ | MoM constritto Fuzzy (Questo articolo) ≤ | Numerosi componenti M |
| 3 | Dragging Contexto Fuzzy Constrained | Tempo / memoria |
Parte 1 restringe un singolo componente probabilistico con limiti deterministici.
Parte 3 Questa architettura si estende lungo l'asse temporale. I modelli possono notare, ma l'ingegneria decide cosa persistaM SK2 Il vincolo diventa la memoria stessa .
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.