# Rajoitettu hämärän taustan vetäminen: Mitä muistetaan

<!-- category -- AI,Patterns,Architecture,LLM,DiSE -->
<datetime class="hidden">2026-01-06T16:00</datetime>

Yksi helpoimmista tavoista, joilla AI-järjestelmä epäonnistuu, on antaa se muistaa liikaa.

Suurin osa "lähestymistapaa koskevasta käsittelystäM SK1 lähestymistavasta johtaa yhteen kahdesta virheestä

- **Tehkää kaikki selväksi.** ja toivon, että mallissa selvitetään, mikä on tärkeää
- **Toistuvasti uudelleen-summarise summaries** ja hyväksytään virtaaminen elämän tosiasiaksi

Molemmat lähestymistavat ovat kalliita,

On olemassa parempi malli -, joka kuvastaa sitä, miten biologiset järjestelmät itse asiassa mittaavat kogniatiota

Minä kutsun sitä **Rajoitettu hämärän taustan vetäminen** (CFCD).

[TOC]

---


## Yhden lauseen malli

> **Rajoitettu hämärän taustan vetäminen** on malli, jossa todennäköisyysmallit ehdottavat, mikä on merkittävää, mutta vain deterministiset säännöt voivat viedä tätä merkittävää eteenpäin vaikuttamaan tulevaan ajatteluun tai sukupolveen.

Tai suoraan sanottuna:

> *Muodot saattavat huomata. Insinöörit päättävät, mikä säilyy*

Tämä on sama filosofinen jako kuin [Rajoitettu epämääräisyys](/blog/constrained-fuzziness-pattern) ja [Rajoitettu hämärä MoM](/blog/constrained-mom-mixture-of-models) - sovellettiin juuri **akseli** sen sijasta **päätöslinja**.

---


## Keskeinen virhe: Kontextin käsittely tekstinä

LLM-järjestelmät eivät "muistele". Ne ovat malliaM SK2vastaavat tokenia .

Kun kohtelemme kontekstia " vain lisää tekstiä ", saamme

- hiljainen ajo
- epäjohdonmukainen terminologia
- rikolliset kustannukset
- yhteenvedot, jotka ovat ristiriidassa aiempien yhteenvedojen kanssa
- käännökset, joissa sama asia korvataan viidellä kertaa
- kontekstista tulee käännettämätön riippuvuus ( kukaan ei tiedä, mitä on muutettuM SK1 mutta tulokset ovat muuttuneet

pitemmälle menevät kontekstin olot eivät ratkaise tätä. Ne vain viivästyttävät epäonnistumista

Todellinen kysymys ei ole *kuinka paljon* konteksti säilyttää, muttaM SK1

> **Mikä ansaitsee selviytyä?**

---


## CFCD-säännöt

CFCD velvoittaa ankaraan erotteluun:

| Tehtävä | Mahdollistetaan se, että se on hämärä
|------|---------------------|--------------------------------------|
| Salienssin havaitseminen
| Yhteenvetona edistäminen
| Yhteinen sukupolvi SSK1 Kyllä | Ei S|
| Ankkurivarasto ( aluksenvarsi ) | Ei SSK4 Kyllä S|

Todennäköisyys voi *ehdottaa*. Päättäväisyys päättää, mitä viedään eteenpäin

Deterministinen tarkoittaa: **samat tulot + sama politiikka ⇒ samat ankkurit**. Voitte edelleen käyttää todennäköistä tulosta ; vain suorittaa ne kiinteällä edistyksellä M SK2 päättymistehtävät (MMR, RRFM SK5 äänestyssääntöjen noudattaminen

CFCD on se tapa, jolla saat hyötyä kontekstista maksamatta kontekstin hintaa.

---


## Esimerkki 1: Lyhyesti sanottuna

### Naiivi lähestymistapa

- Chunk-asiakirja
- Yhteenveto jokaisesta osasta
- Lyhyesti yhteenvedot
- Hyväksy drift

Tämä epäonnistuu, koska:

- varhaiset virheet yhdistetään
- painopiste siirtyy mielivaltaisesti
- ristiriidat on peitelty

### CFCD-lähestymistapa

Keskeinen käsitys: **salienssin havaitseminen ei edellytä LLM:tä**. Voitte käyttää deterministista ML:tä (embeddings, TFM SK3IDFMST4 BMMSC5 löytääksenne, mikä on tärkeääMSL6 sitten rajoittaa LLM:tä vain näkemään, mikä selviytyi valiotuksestaMスク7

[DocSummarizer](/blog/docsummarizer-advanced-concepts) panee täytäntöön tämän

1. **Käsitellään asiakirjaa osittain** (
2. **Laaditaan sisällytyksiä** ONNX-lausetta käyttäen-transformaattorit (MLM SK2 ei LLM)
3. **Laskelmatulokset** käyttäen:
   - Kosiinin samankaltaisuus asiakirjan centroidia kohtaan
   - TF-IDF ajankohtaisen merkityksen osalta
   - Sijoituspainot (intro/johdanto-osuuden nostaminenM SK2
   - Sisältö-tyypin mukautukset M SK1kertomus vs esittelijä)
4. **Valittakaa ylhäältä-K MMR:n avulla** (Määrimmäinen merkitysmarginaali
   - Tasapainot merkityksellinen ( centroidien samankaltaisuusM SK1 monimuotoisuuden kanssa
   - Deterministinen: samat tulot M SK1 sama valinta
5. **LLM synteesii vain selected segments -osista**

LLM ei koskaan näe koko asiakirjaa.

```csharp
// From DocSummarizer: SegmentExtractor.cs
public class SegmentExtractor
{
    private readonly OnnxEmbeddingService _embeddingService;  // ML, not LLM

    public async Task<ExtractionResult> ExtractAsync(string docId, string markdown)
    {
        // 1. Parse document into typed segments
        var segments = ParseToSegments(docId, markdown);

        // 2. For large docs: semantic pre-filtering with multi-anchor approach
        //    - Guaranteed coverage: first/last sentences per section, constraints
        //    - BM25 candidate generation with pseudo-query from TF-IDF terms
        //    - Topic anchors via k-means clustering on sample embeddings
        if (segments.Count > _config.MaxSegmentsToEmbed)
        {
            (segmentsToEmbed, centroid) = await SemanticPreFilterAsync(segments, targetCount);
        }
        else
        {
            await GenerateEmbeddingsAsync(segments);
            centroid = CalculateCentroid(segments);
        }

        // 3. Score by salience using MMR (deterministic)
        //    Salience = lambda * sim(segment, centroid) * position_weight * content_weight
        //             - (1 - lambda) * max_sim(segment, higher_ranked_segments)
        ComputeSalienceScores(segments, centroid, contentType);

        // 4. Return top-K as anchors for synthesis
        var topBySalience = segments
            .OrderByDescending(s => s.SalienceScore)
            .Take(Math.Max(_config.FallbackBucketSize, targetCount))
            .ToList();

        return new ExtractionResult
        {
            AllSegments = segments,
            TopBySalience = topBySalience,
            Centroid = centroid,
            ContentType = contentType
        };
    }

    /// <summary>
    /// Greedy MMR selection: balances relevance with diversity
    /// </summary>

    private void ComputeSalienceScores(List<Segment> segments, float[] centroid, ContentType contentType)
    {
        var candidates = new HashSet<Segment>(segments.Where(s => s.Embedding != null));
        var ranked = new List<Segment>();

        // Pre-compute centroid similarities with content-type adjustments
        foreach (var segment in candidates)
        {
            var baseSim = CosineSimilarity(segment.Embedding!, centroid);
            var contentWeight = ComputeContentTypeWeight(segment, contentType);
            segment.SalienceScore = baseSim * segment.PositionWeight * contentWeight;
        }

        // Greedy MMR: pick best, penalise similar, repeat
        while (candidates.Count > 0)
        {
            var best = candidates
                .Select(c => new {
                    Segment = c,
                    Score = _config.MmrLambda * c.SalienceScore
                          - (1 - _config.MmrLambda) * MaxSimToRanked(c, ranked)
                })
                .OrderByDescending(x => x.Score)
                .First();

            best.Segment.SalienceScore = 1.0 - ((double)ranked.Count / segments.Count);
            ranked.Add(best.Segment);
            candidates.Remove(best.Segment);
        }
    }
}
```

### Adaptiivinen valinta: Kontext-puitetietoisuus

Koska tulos on **luokiteltu keräys**, voi mukauttaa ankkurimäärän synteesimalliin runtimessa

```csharp
public class AdaptiveSynthesizer
{
    public int ComputeAnchorBudget(ModelProfile model, ExtractionResult extraction)
    {
        // Larger context windows → more anchors
        var baseTokenBudget = model.ContextWindow / 4;  // Reserve 25% for output

        // More powerful models → can handle more complex synthesis
        var complexityMultiplier = model.Tier switch
        {
            ModelTier.Small => 0.5,   // tinyllama: fewer, simpler anchors
            ModelTier.Medium => 1.0,  // llama3.2:3b: standard
            ModelTier.Large => 1.5,   // llama3.1:8b+: more context, nuanced synthesis
            _ => 1.0
        };

        var anchorBudget = (int)(baseTokenBudget * complexityMultiplier / _avgTokensPerSegment);

        // Never exceed what we have
        return Math.Min(anchorBudget, extraction.TopBySalience.Count);
    }

    public async Task<Summary> SynthesizeAsync(
        ExtractionResult extraction,
        ModelProfile model)
    {
        var budget = ComputeAnchorBudget(model, extraction);

        // Take top-K from already-ranked segments
        var anchors = extraction.TopBySalience.Take(budget).ToList();

        // Synthesis model only sees what survived selection + adaptation
        return await _llm.SynthesizeAsync(anchors, model);
    }
}
```

Tämä on edelleen deterministista: **samat tulot + sama malliprofiili → samat ankkurit**. Rangaistus tapahtuu kerran.

Tämä tarkoittaa, että voi

- Käyttäkää nopea pieni malli 5 ankarien avulla lyhyen yhteenvedon tekemiseksi
- Käyttäkää tehokas malli 50 ankarien avulla kattavaan analyysiin
- Dynaamisesti mukautetaan mid-pipeliiniä, jos ensimmäisessä yrityksessä ei ole kattoa

Keskeinen käsitys: **Ankarit ovat rakenteellisia, eivät prosia**. Siirrot ja MMR ovat deterministisiaM SK1 LLM tekee lopullisen synteesin vain, , rajoittuu siihen, mikä selviytyi

**Ankarsopimus:** generation voi vaihdella sanamuotoa, mutta ei saa olla ristiriidassa ankkurien kanssaM SK1 Jos ankkurit ovat riittämättömiä , niiden on suojattava ja/ tai pyydettävä lisää todisteita

Konkreettinen ankkurirepresentaatio:

```json
{
  "policyVersion": "cfcd-v1",
  "segments": [
    {"id":"seg-12","text":"Reset requires holding button 10s","salience":0.92},
    {"id":"seg-45","text":"Factory reset clears all settings","salience":0.88}
  ],
  "coverage": "3.2% semantic sample",
  "hedging": "sampled 3% - avoid definitive conclusions"
}
```

---


## Esimerkki 2: käännös

Tulkkaus paljastaa tämän mallin vielä selvemmin.

### Epäonnistuminen

Translate sentence-byM SK1sentence and you get

- epäjohdonmukainen terminologia
- nimeämät entiteet
- hienovarainen semanttinen virtaus

Vaikka teksti on valtava, mallit ovat edelleen vapaat.

### CFCD-lähestymistapa

1. Alkuasiakirjan, tiivistelmä **terminologiaehdokkaat**:
   - asianmukaiset nimitykset
   - tekniset ehdot
   - toistuvat lauseet
2. Rakennetaan **tilinpäätöskirja**:
   - lähde → kohdekartoitus
   - luottamus
   - ensimmäinen- nähty paikka
3. Jokainen lause:
   - sallia hämärän käännöksen
   - **rajoitus** tilinpäätöksiä koskevat valinnat
   - sallitaan poikkeaminen vain vahvojen paikallisten todisteiden avulla
4. ajantasaistetaan kirjanpitoa määrätietoisesti, jos:
   - parempi kartoitus ilmenee toistuvasti
   - tai julistetaan selkeä yliride

**Mitkä ovat vahvoja paikallisia todisteita?**

- Termi appears in a glossary, tableM SK1 or definition block (structural cue
- Selkeät käyttäjät ylittävät järjestelyssä
- Toistaa viimeisen W-kierroksen aikana (sliding windowM SK1 johdonmukaisen käytön kanssa

Tämä on deterministista.

Tasa-arvopolitiikka: ΔM SK1 luottamuspula, W =50 chunks MST4tune per domainMSC5

```csharp
public class TermLedger
{
    private readonly Dictionary<string, TermMapping> _mappings = new();

    public record TermMapping(
        string SourceTerm,
        string TargetTerm,
        float Confidence,
        string FirstSeenChunkId,
        int LastSeenChunkIndex,               // Track recency
        int VotesForCurrentTarget,
        int TotalVotes,                       // Preserve history
        string? ChallengerTarget = null,
        int ChallengerVotes = 0,
        float ChallengerConfidence = 0);

    public void ProposeMapping(string source, string target, float confidence, string chunkId, int chunkIndex)
    {
        source = source.ToLowerInvariant().Trim();

        if (_mappings.TryGetValue(source, out var existing))
        {
            if (existing.TargetTerm == target)
            {
                // Same as current: accumulate votes
                _mappings[source] = existing with
                {
                    Confidence = Math.Max(existing.Confidence, confidence),
                    VotesForCurrentTarget = existing.VotesForCurrentTarget + 1,
                    TotalVotes = existing.TotalVotes + 1,
                    LastSeenChunkIndex = chunkIndex
                };
            }
            else if (existing.ChallengerTarget == target)
            {
                // Same as challenger: accumulate challenger votes
                var newChallengerVotes = existing.ChallengerVotes + 1;
                var newChallengerConfidence = Math.Max(existing.ChallengerConfidence, confidence);

                // Switch if challenger has >= 2 votes AND higher confidence
                if (newChallengerVotes >= 2 && newChallengerConfidence > existing.Confidence)
                {
                    // Swap: old current becomes challenger, challenger becomes current
                    _mappings[source] = existing with
                    {
                        TargetTerm = target,
                        Confidence = newChallengerConfidence,
                        VotesForCurrentTarget = newChallengerVotes,
                        TotalVotes = existing.TotalVotes + 1,
                        LastSeenChunkIndex = chunkIndex,
                        ChallengerTarget = existing.TargetTerm,  // Preserve old mapping as challenger
                        ChallengerVotes = existing.VotesForCurrentTarget,
                        ChallengerConfidence = existing.Confidence
                    };
                }
                else
                {
                    _mappings[source] = existing with
                    {
                        ChallengerVotes = newChallengerVotes,
                        ChallengerConfidence = newChallengerConfidence,
                        TotalVotes = existing.TotalVotes + 1,
                        LastSeenChunkIndex = chunkIndex
                    };
                }
            }
            else if (confidence > existing.ChallengerConfidence)
            {
                // New challenger replaces old challenger
                _mappings[source] = existing with
                {
                    ChallengerTarget = target,
                    ChallengerVotes = 1,
                    ChallengerConfidence = confidence,
                    TotalVotes = existing.TotalVotes + 1,
                    LastSeenChunkIndex = chunkIndex
                };
            }
        }
        else
        {
            _mappings[source] = new TermMapping(
                source, target, confidence, chunkId, chunkIndex,
                VotesForCurrentTarget: 1, TotalVotes: 1);
        }
    }

    public string? GetCanonicalTranslation(string source)
    {
        source = source.ToLowerInvariant().Trim();
        return _mappings.TryGetValue(source, out var mapping)
            ? mapping.TargetTerm
            : null;
    }
}
```

Käytännössä haluatte myös äänestysväärennytyksen ( tai liikkuvan ikkunanM SK1, niin että aikaisemmat virheet eivät muuttu pysyväksi '. Tärkeintä on se, että häviämissääntö on deterministinen, ei mallinmukainen

**Miksi tämä on tärkeää virheiden korjaamiseksi:** Jos käännös käännetään "tehtaiden uudelleen asentaminenM SK1 keskinäinen -asiakirja, voitte erottaa luvut ja nähdä tarkasti, milloin ja miksi

```
chunk-12: "factory reset" → "Werkseinstellungen" (votes: 3, conf: 0.82)
chunk-47: challenger "Zurücksetzen" reaches 2 votes, conf: 0.91
chunk-47: SWITCH - "factory reset" → "Zurücksetzen" (old mapping preserved as challenger)
```

Ei ole epäilystäkään. Ei M SK1malli on juuri päättänyt ". Ilman näkyvyyttä, määrätietoinenMST4 tilintarkastettavaMSV5

Tämä antaa teille:

- paikallinen joustavuus (malli käsittelee sanamuotoaM SK1
- maailmanlaajuinen johdonmukaisuus (
- rajallinen hinta ( ei tarvitse muuttaa - käännös johdonmukaisuuden varmistamiseksi
- tilintarkastuskelpoiset päätökset (velvoite on tarkastettavaM SK1

Siksi **terminologinen johdonmukaisuus** ei voida ratkaista " vain lisää kontekstiaM SK1

---


## Tämä ei ole muisti - Se on rajoitteiden levittäminen

CFCD tekee **ei** annetaan mallin muisti.

Se antaa *järjestelmä* muisti.

Malli:

- ei sisällä valtiota
- ei päätä, mikä pysyy
- ei omista taustaa

Järjestelmä:

- varastoi ankkurit
- rajoittaa rajoja
- vanhentunut salienssi päättyy
- valvoo nimenomaisesti elinkaaren kestoa

**Määräaikataulu** (

- **Aika** ankkurit päättyvät sen jälkeen, kun `T` ilman viittausta
- **Käyttäkää-perustainen:** ankkurit, joissa ei ole yhtään iskua `N` jäljelle jäävät chunkit häviävät
- **ristiriita-perusteinenM SK1** voittajalla on ≥2 ääni ja se ylittää nykyisen luottamuksen ΔM SK1 W-kierroksella

Se ero on kaikki.

```mermaid
flowchart TB
    subgraph Model["Probabilistic Model"]
        M1[Detect Salience]
        M2[Generate Output]
    end

    subgraph System["Deterministic System"]
        S1[Promote Anchors]
        S2[Store in Ledger]
        S3[Enforce on Generation]
        S4[Expire Stale Context]
    end

    M1 --> S1 --> S2
    S2 --> S3 --> M2
    S2 --> S4

    style Model stroke:#f59e0b,stroke-width:2px
    style System stroke:#22c55e,stroke-width:3px
```

### CFCD-kaasuputki

Tässä on malli, jossa ledger on ensimmäinen

```mermaid
flowchart LR
    S[Stream: chunks/sentences] --> M[Model proposes salience]
    M --> P[Promotion rules]
    P --> L[Ledger / Anchors]
    L --> G[Generation constrained by anchors]
    G --> O[Output]
    L --> E[Expiry rules]
    E -.-> L

    style L stroke:#22c55e,stroke-width:3px
    style P stroke:#22c55e,stroke-width:2px
    style E stroke:#22c55e,stroke-width:2px
    style M stroke:#f59e0b,stroke-width:2px
    style G stroke:#f59e0b,stroke-width:2px
```

Vihreät laatit ovat deterministisia. Pohjoinen laatija on probabilistista. Luettelo on niiden välilläM SK2 ja siinä piilee se, mikä selviytyi .

### Mitä käytäntöön on tapahtunut?

Kolme shiftia:

- Lopettakaa jatkuva prosoiminen
- Te pysytte kiinni *kirjatut ankkurit*
- Suhtaudutte tilinpäätökseen API, eikä prompt

Pyynnöstä tulee *näköpiiri* tilinpäätöksestä, ei itse tilinpäätöstäM SK1

Se, että ' on "grok

### Mitä ankkuriksi lasketaan?

Ankarit eivät ole "tärkeä tekstiM SK1 Ne ovat **typed, rakenteelliset tosiasiat** jotka rajoittavat tuotantoa:

- **Terminologiakartoitus**: `factory reset` → `restore factory settings`
- **Yritykset ja henkilötiedot**: `ProductName`, `ModelNumber`, `UserID`
- **Rajoitukset / invariantit**:
- **User preferences / style constraints**:
- **Laaja-alaiset metadatat**: "3.2% semanttinen näytelmä
- **Versionointi**: `policyVersion: "cfcd-v1"`, `anchorSchemaVersion: 2`

Kyse on siitä, että ankkurit eivät ole prososia vaan rakenteita.

---


## Biologinen yhteys

*Tämä on analogiaa, ei biologista väitettä : kohdassa on valikoiva konsolidointiM SK2 ei kirjallinen mekanismi*

Aivot eivät toista koko sensorivirtaa.

Ne:

- havainnollistaminen
- vahvistetaan valikoivasti
- haitata melua
- jäädytetään esitykset, kun ne ovat vakiintuneita

Kieli, moottoritaidotM SK1 ja tajuaminen kaikki riippuvat **rajoitettu kuljettaminen- eteenpäin**, ei raaka-ainetta

CFCD on sama periaate,, joka pannaan täytäntöön mekaanisesti

| Biologinen järjestelmä
|------------------|-----------------|
| Huomauttaminen ( mitä huomataM SK2 | Salliance detection
| Konsolidointi (mitä on muistettava
| Kielto ( mitä jättää huomiotta
| Muistutan ( mitä hakea) | Ledger query (deterministic

---


## Muodot yhtenäistetään

CFMoM ja CFCD ovat sama ajatus, jota tarkastellaan eri näkökulmasta:

| Mitta | Muodon SSK2
|-----------|---------|
| Yksittäinen ehdottaja [Rajoitettu epämääräisyys](/blog/constrained-fuzziness-pattern) |
| Useat ehdottajat [Rajoitettu hämärä MoM](/blog/constrained-mom-mixture-of-models) |
| PitkätM SK1 horisontaalinen konteksti | Rajoitettu hämärän kontekstin vetäminen SSK3

Kaikki kolme noudattavat samaa sääntöä

> **Todennäköisyys ehdottaa. Determinismi pysyy ennallaan**

Kun otetaan tämä sääntö huomioon, suurin osa järjestelmän suunnittelusta ei enää ole salaista.

```mermaid
flowchart LR
    subgraph CFP["Part 1: Constrained Fuzziness"]
        P1[Single Proposer] --> C1[Constrainer] --> O1[Output]
    end

    subgraph CFMoM["Part 2: Constrained Fuzzy MoM"]
        P2A[Proposer A] --> CS[Consensus Space]
        P2B[Proposer B] --> CS
        P2C[Proposer C] --> CS
        CS --> C2[Coordination Constrainer] --> O2[Output]
    end

    subgraph CFCD["Part 3: Context Dragging"]
        T1[Time T] --> A1[Anchors]
        T2[Time T+1] --> A1
        A1 --> C3[Constrained Generation] --> O3[Output]
    end

    style CFP stroke:#22c55e,stroke-width:2px
    style CFMoM stroke:#3b82f6,stroke-width:2px
    style CFCD stroke:#8b5cf6,stroke-width:2px
```

---


## Miksi tämä ei ole mainstream

Koska se:

- vähentää laskentakuluja (ei uudelleenM SK1prosessointi johdonmukaisuuden varmistamiseksi
- Soveltuu pieniin malleihin (kankarat tekevät raskaan nostamisenM SK1
- Demossa näyttää ikävältä (ei "herkkä muistiM SK2väittämät
- tuottaa vähemmän dramaattisia epäonnistumisia (ongelmat ovat selviä
- edellyttää todellista järjestelmien ajattelua ( ei vain nopeaa insinööritoimintaa )

Toisin sanoen, se optimoi tuotantoa.

---


## Anti-Patternit korvaavat tämän

| AntiM SK1Pattern | Ongelma | CFCD-ratkaisu SSK4
|--------------|---------|---------------|
| **Kaikkea asiaan liittyvää** | Rajattomat kustannuksetM SK1 huomion heikentäminen | Edistetään vain sitä, mikä selviytyy valikoinnista
| **Rekursiivinen yhteenveto** | DriftM SK1 ristiriidat | Ankarit ovat rakenteita, eivät prososia |
| **Toivottavasti malli muistaa** | Takuuta ei ole
| **Per-pyyntö täydellisestä uudelleenkäsittelystä** | Historian mukaiset kustannustaulukot | Luettelo säilyy koko pyynnön ajan
| **Luonnollinen kieli "muistio"** | Semanttinen virtaus
| **Yhteinen-laajuus- sopiiM SK2kaikki konteksti** | Jätekapasiteetin tai nälkämallin mukainen oikaiseminen luokiteltuja keräysmääriä varten |

---


## täytäntöönpanostrategia: Lyhyt

[Useimminselvä.Väliaikainen](https://github.com/scottgal/mostlylucid.atoms) on perusta, joka tekee CFCD:sta käytännönläheisen. Jos ette ole lukeneet taustaartikkelejaM SK1

- [Tuli ja Don't täysin unohtamatta](/blog/fire-and-dont-quite-forget-ephemeral-execution) - filosofia
- [Väliaikainen täytäntöönpanokirjasto](/blog/ephemeral-execution-library) - täytäntöönpano
- [Lyhyt signaalit](/blog/ephemeral-signals) -signaaliM SK1johtoinen koordinointi
- [LRU:n oppiminen](/blog/learning-lrus-when-capacity-makes-systems-better) - miksi rajattu muisti on tärkeä

| Lyhyen aikavälin alkuperäinen
|--------------------|-----------|
| **Viestit** | Ehdokastärkeys
| **Rajoitetut olot** | Ei rajoitetta
| **Eviction -säännöt** | Unohtaminen on yksiselitteinen
| **Slidingin päättyminen** | Pysyvä konteksti päättyy automaattisesti |
| **Signalin levittäminen** | Ankkurit vievät eteenpäin mutaatiota välttäen

Väliaikainen ei ole "muistettavaM SK1 Se **päättää, mitä sallitaan muistaa, ja miten kauan**.

Tämä on juuri se, mitä CFCD tarvitsee

```csharp
public class CFCDCoordinator
{
    private readonly SignalSink _sink;
    private readonly TermLedger _ledger;
    private readonly TimeSpan _anchorLifetime = TimeSpan.FromHours(1);

    public void PromoteAnchor(string term, string translation, string chunkId, int chunkIndex)
    {
        _ledger.ProposeMapping(term, translation, 0.8f, chunkId, chunkIndex);

        // Emit signal for observability (key = chunkId for correlation)
        _sink.Raise($"anchor.promoted:{term}", key: chunkId);
    }

    public void ExpireStaleAnchors()
    {
        var cutoff = DateTimeOffset.UtcNow - _anchorLifetime;

        // Ledger entries older than cutoff without recent usage are removed
        // This is deterministic, not model-decided
        _ledger.ExpireOlderThan(cutoff);
        _sink.Raise("anchors.expired");
    }
}
```

---


## Implementation Sketch: Dokumentti käännös

Yhdenmukaistaminen täydelliseen asiakirjan käännösputkeen:

```csharp
public class CFCDTranslationPipeline
{
    private readonly ILlmService _llm;
    private readonly TermLedger _ledger;
    private readonly SignalSink _sink;
    private readonly int _seedChunks = 3;  // K: configurable seed window

    public async Task<TranslatedDocument> TranslateAsync(
        Document source,
        string targetLanguage)
    {
        var chunks = Chunker.Chunk(source, maxTokens: 500).ToList();
        var translated = new List<TranslatedChunk>();

        // Phase 1: Extract terminology candidates (first pass, fuzzy)
        // Seed from first K chunks: front-loads terminology, avoids churn later
        for (var i = 0; i < Math.Min(_seedChunks, chunks.Count); i++)
        {
            var chunk = chunks[i];
            var candidates = await _llm.ExtractTerminologyAsync(chunk);
            foreach (var term in candidates)
            {
                _ledger.ProposeMapping(
                    term.Source,
                    term.ProposedTranslation,
                    term.Confidence,
                    chunkId: chunk.Id,
                    chunkIndex: i);
            }
        }

        _sink.Raise("terminology.seeded");

        // Phase 2: Translate with ledger constraints
        for (var i = 0; i < chunks.Count; i++)
        {
            var chunk = chunks[i];

            // Get canonical translations for terms in this chunk
            var constraints = ExtractConstraints(chunk, _ledger);

            // Translate with constraints (model must respect ledger)
            var result = await _llm.TranslateWithConstraintsAsync(
                chunk,
                targetLanguage,
                constraints);

            // Update ledger with any new terms (deterministic rules)
            foreach (var newTerm in result.NewTerminology)
            {
                if (ShouldPromote(newTerm, _ledger))
                {
                    _ledger.ProposeMapping(
                        newTerm.Source,
                        newTerm.Target,
                        newTerm.Confidence,
                        chunkId: chunk.Id,
                        chunkIndex: i);

                    _sink.Raise($"anchor.promoted:{newTerm.Source}");
                }
            }

            translated.Add(result.Chunk);
        }

        return new TranslatedDocument(translated, _ledger.GetAllMappings());
    }

    private bool ShouldPromote(TermCandidate term, TermLedger ledger)
    {
        // Deterministic rules, not model judgment:
        // - Proper nouns always promoted
        // - Technical terms promoted if repeated
        // - Common words never promoted
        return term.Type == TermType.ProperNoun ||
               (term.Type == TermType.Technical && term.OccurrenceCount >= 2);
    }
}
```

---


## Päätöslauselma

Suurin osa AI-järjestelmistä tekee virheen olettaessaan, että äly paranee muistamalla *Lisätietoa*.

Käytännössä ”,” -tietämys mittaa päättämällä, mitä tehdä **ei enää tarvitse ajatella**.

CFCD on tapa, jolla teette sen valehtamatta itsellenne.

---


## Luettelo

| Osuus | Muodos | Axis SSK3
|------|---------|------|
| 1 | [Rajoitettu epämääräisyys](/blog/constrained-fuzziness-pattern) | Yksittäinen osake |
| 2 | [Rajoitettu hämärä MoM](/blog/constrained-mom-mixture-of-models) | Useat osat |
| 3 ≥| Rajoitettu hämärän taustan vetäminen SSK3artikkeliM SK4 \| Aika \SSK6 muisti \|
| 4 | [Kuvan yhteenveto](/blog/constrained-fuzzy-image-intelligence) | Käytännön täytäntöönpano

Kaikilla kolmella mallilla on sama invariantti **todennäköiset osatekijät ehdottavat; määritelmäjärjestelmät pysyvät**.

Euroopan unionin [LLM:n käyttöä koskevat kymmenen käskyä](/blog/tencommandments) kodifioida nämä säännöt. [DiSE-arkkitehtuuri](/blog/dise-architecture-overview) panee ne täytäntöön koodin kehityksessä. [Bot-tutkimukset](/blog/botdetection-introduction) panee ne täytäntöön pyyntöjen luokitteluun. [DocSummarizer](/blog/docsummarizer-advanced-concepts) panee ne täytäntöön asiakirjan hakua varten. [ImageSummarizer](/blog/constrained-fuzzy-image-intelligence) panee ne täytäntöön kuvaanalyysiin.

Erilaiset domainit. Yhteinen malli. Yhtenäinen sääntöM SK2 [DoomSummarizer](/blog/doomsummarizer-deep-research) panee täytäntöön context dragging -menetelmän rinnakkaisten pitkien vaatimusten täyttämiseksi.

---


## Seuraava: Käytännön toteuttaminen

**Osa 4** on nyt saatavilla: [Image Summarizer : Konstrained Fuzzy Image RAG Engine](/blog/constrained-fuzzy-image-intelligence). Se panee kaikki kolme mallia täytäntöön wavessa -pohjaisen kuvaanalyysin putken M SK2ColorWave laskee tosiasiat , VisionLlmWave ehdottaa MSC4 ImageLedger kerää esiintyviä piirteitä MSV5 ja deterministinen valinta rajoittaa tulosta M SV6 kloonaa sen [github.com/scottgalM SK2lucidrag](https://github.com/scottgal/lucidrag).