# سحب السياق المحدود الغامض: ما يُتذكر

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

أحد أسهل الطرق لجعل نظام الذكاء الصناعي يفشل هو أن نجعله يتذكر الكثير

معظم "التعامل مع السياق" المقاربات تنتهي إلى واحدة من الأخطاء

- **قم بوضع كل شيء في الملاحظات** ونأمل أن يكتشف النموذج ما هو المهم
- **إعادة مرة أخرى -summarise summaries** وتقبل التدفق كحقيقة للحياة

كلا المقاربتين مكلفتان , غير شفافة , وغير مستقرة على الأفق الطويل

هناك نمط أفضل - واحد يعكس كيف أن الأنظمة البيولوجية في الواقع تدرج الإدراك

أسميها **سحب السياق الخافت المقيد** (CFCD).

[TOC]

---


## النمط في جملة واحدة

> **سحب السياق الخافت المقيد** هو نمط حيث تقترح النماذج الإحتمالية ما هو الملحوظ , لكن فقط القواعد القطعية تسمح بنقل هذا الملحوم للأمام لتأثر بالتفكير أو الجيل المستقبلي .

أو بشكل أكثر وضوحا:

> *قد يلاحظ النماذج*

هذا هو نفس الانقسام الفلسفية [الغموض المقيد](/blog/constrained-fuzziness-pattern) و [MoM مقيدة](/blog/constrained-mom-mixture-of-models) - تم تطبيقه على طول **محور الزمن** بدلا من **محور القرار**.

---


## الخطأ الأساسي: التعامل مع السياق كنص

لا تتطابق الـ LLMs "remember". إنها نمط -match over tokensM SK3

عندما نتعامل مع السياق كـ " فقط المزيد من النص ", نحصل على:

- الهبوط الصامت
- مصطلحات غير متجانسة
- تكلفة الهرب
- الإحصائيات التي تتعارض مع الإحصائية السابقة
- الترجمات التي تعيد تسمية الشيء نفسه خمس مرات
- becomes a unversioned dependency (nobody knows what changed, but results changed )

النوافذ السياقية الطويلة لا تحل هذا

السؤال الحقيقي ليس *كم* السياق للحفاظ على, لكن:

> **ما يستحق البقاء على قيد الحياة**

---


## قاعدة CFCD

CFCD يفرض فصلاً صلباً:

| دور | يسمح أن يكون غامضاً? | يسمح بأن يصبح القيود المستقبليةM SK4 ♫|
|------|---------------------|--------------------------------------|
| إكتشاف الغضب | نعم | لا |
| تعزيز السياق | لا | نعم |
| الجيل | نعم | لا |
| تخزين ال anchor (ledger

الاحتمال يمكن *تقترح*. يقرر الإختيار ما الذي يسحب إلى الأمام .

المعنى المعرفي: **نفس المدخلات + نفس السياسة ⇒ نفس القنابل**. لا يزال بإمكانك استخدام الدرجات الإحتمالية ; فقط تقوم بتشغيلها من خلال ترقية ثابتة

CFCD هو كيفية الحصول على فوائد السياق دون دفع سعر السياق.

---


## مثال 1: تلخيص (سحب عمودي)

### المقاربة البسيطة

- وثيقة Chunk
- تلخص كل قطعة
- تلخيص الخلاصات
- تقبل الهبوط

هذا يفشل لأن:

- تراكم الأخطاء المبكرة
- يتغير التركيز بشكل عشوائي
- التناقضات مخفية

### مقاربة CFCD

الفكرة الرئيسية: **إكتشاف الأهمية لا يتطلب '**. بإمكانك استخدام الـML الإفتراضي (الدمجات, TFM SK3IDFMスク4 BMMSC5 لإيجاد ما يهمMNK6 ثم تقيد الـLM لرؤية فقط ما تبقى من الانتقاءMMK7

[DocSummarizer](/blog/docsummarizer-advanced-concepts) ينفذ هذا:

1. **تحليل الوثائق إلى أجزاء** (جمل,رؤيئاتM SK2 القوائم , بلاكات الرمز )
2. **تنتج المداخلات** باستخدام جملة ONNX-transformers (ML, ليس LLMM SK3
3. **حساب نقاط الأهمية** باستخدام:
   - شبيهة الكوسين للوثيقة مركزية
   - TF-IDF لأهمية المدى
   - وزنات الموضع (intro/conclusion boostM SK2
   - المحتوى-تصحيحات النوع (خبرة مقابل مخزن )
4. **إختيار أعلى-K باستخدام MMR** (مقدار الأهمية المحدودة):
   - توازن الأهمية (متشابهة مع مركزية ) مع التنوع
   - إختبارية: نفس المدخلات → نفس الانتقاء
5. **ينتج LLM فقط من أجزاء sélectionnés**

لا يرى الـ LLM المشهد الكامل ــ . ــ إنه ينتج حول الأسلاك ــ, ــ وليس من خلالها

```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);
        }
    }
}
```

### إختيار متكيف: الوعي في النافذة السياقية

لأن المخرج هو **المجموعة المصنفة**, يمكنك أن تكيف عدد ال anchor مع نموذج التركيب في وقت التشغيل:

```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);
    }
}
```

هذا مازال محدداً **نفس المدخلات + نفس نمط النموذج → نفس الأسلاك**. التصنيف يحدث مرة ; التكيف هو مجرد قطعة

هذا يعني أنه يمكنك

- إستخدم نموذج صغير سريع مع أربطة 5 للخلاصات السريعة
- استخدم نموذج قوي مع 50 لنخات للتحليل الشامل
- ضبط موصل mid- Dynamically if the first attempt lacks coverage

الفكرة الرئيسية: **ال anchors are structure, not prose**. المداخلات و MMR هي معرفية. الـ LLM تقوم فقط بتجميع النهائيM SK2 محصورة بما تبقى

**عقد العnker:** يمكن أن يتغير الصيغة, لكنها لا يجب أن تتناقض مع الأسلاكM SK1 إذا كانت الأسلاك غير كافية, يجب أن يغطي وMSC3 أو يطلب المزيد من الأدلة .

ممثل لل anchor المعدني:

```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"
}
```

---


## مثال 2: الترجمة (سحب المراحل)

الترجمة تكشف هذا النمط بشكل أكثر وضوحاً

### طريقة الفشل

ترجمة الجملة-byM SK1sentence وتحصل على:

- مصطلحات غير متجانسة
- تم إعادة تسمية الوحدات
- التحرك اللغوي

حتى مع نافذة سياق ضخمة، نماذج , لا تزال " تشعر بحرية، "M SK2" لتتغير الصيغة

### مقاربة CFCD

1. في البداية في المخرج , **مرشحي المصطلحات**:
   - الأسماء الصحيحة
   - المصطلحات التقنية
   - العبارات المتكررة
2. بناء **وثيقة المصطلحات**:
   - مصدر → رسم هدف
   - الثقة
   - الأول-مكان الرؤية
3. لكل جملة:
   - تسمح بترجمة غامضة
   - **القيود** إختيارات باستخدام المحاسبة
   - تسمح بالابتعاد فقط مع أدلة محلية قوية
4. تحديث المحاسبة بشكل محدد إذا :
   - تظهر خرائط أفضل مرارا وتكرارا
   - أو يتم الإعلان عن تجاوز واضح

**ما يُعتبر دليلا محليا قويا**

- يظهر المصطلح في القاموس , جدول , أو بلاك تعريف | ( | إشارات هيكلية |)
- تخطي المستخدم الواضح في الإعداد
- كررت في آخر قطعة W ( نافذة مزلجة) مع إستخدام متماسك

هذا هو المعرفي: المؤشرات الهيكلية تُكشف عن طريق تصنيف النمط أو المقصّر, ليس الحكم على النماذجM SK2

سياسة تلقائية: ΔM SK1 فجوة الثقة , W=50 قطع MST4ثروة لكل مجالMSC5

```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;
    }
}
```

في الواقع تريد أيضا تحطيم الصوت (or a sliding window) so early mistakes donM SK2t become permanentMSC3 The key is that the decay rule is deterministic

**لماذا هذا مهم لحل الأخطاء:** إذا كان الترجمة تقلب "factory resetM SK1 mid-document , يمكنكم أن تحوّل المحاسبة وترى بالضبط متى ولماذا

```
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)
```

لا تخمين . لا " لقد قررت النموذج للتو

هذا يعطيك

- المرونة المحلية (نموذج يتعامل مع الفراغات)
- التماسك العالمي (العامل يفرض المصطلحات)
- التكلفة المحدودة (لا حاجة لإعادة -ترجمة من أجل التماسك)
- قرارات قابلة للفحص ( المشتري قابل للتفتيش )

هذا هو السبب **توازن المصطلحات** لا يمكن حله بواسطة "أكثر من السياق".

---


## هذا ليس بالذاكرة - إنه تمدد القيود

CFCD يفعل **لا** أعطي ذاكرة النموذج.

إنها تعطي *النظام* الذاكرة.

النموذج:

- لا يحمل الدولة
- لا يقرر ما الذي يبقى
- لا يملك السياق

النظام:

- تخزين القنابل
- يفرض الحدود
- ي expires stale salience
- يتحكم في مدى الحياة بوضوح

**وقواعد فاتورة** (إختباري,لانموذجي -تقريرM SK3

- **الوقت-based:** ينتهي عمر القنابل بعد `T` دون أن يشير إليها
- **استخدموا-based:** ال anchors مع صفر ضربات فوق `N` تتلاشى الجسيمات التالية
- **التناقض-based:** المتحد لديه ≥2 الأصوات ويتجاوز الثقة الحالية بـ Δ, في نافذة متحركة من قطع W

هذا التمييز هو كل شيء

```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

هنا هي النمط مع المحاسبة ككائن أول

```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
```

الصناديق الخضراء هي إفتراضية. الصناديقات البرتقالية هي إحتمالية . المسجل يجلس بينهم, يحمل ما تبقى

### ما هي التغيرات في العمل?

ثلاث مرحلات

- أنت توقف عن الإستمرار في الخطابة
- أنت تستمر *القنابل المطبعة*
- فأنت تتعامل مع المحاسبة كAPI , ليس بطلب

الاقتراح يصبح *نظرة* من المذكرات, ليس المذكرة نفسها.

أن"MSC0" هو "MSC1" "MSc2" اللحظة" " MSC3" ال ledger is not context" . It' is a contract"

### ما الذي يُعد ك anchor?

المعلقات ليست "نص مهم". إنها **टाइपت, الحقائق المبنية** التي تقيد الإنتاج:

- **خرائط المصطلحات**: `factory reset` → `restore factory settings`
- **Entities and IDs**: `ProductName`, `ModelNumber`, `UserID`
- **القيود / غير متغيرة**: "تعديل requires holding button 10s"
- **वरीयता المستخدم / القيود في शैली**: "إستخدم النغمة الرسمية", ≥"لغة بريطانيةM SK4
- **بيانات تغطية**: "3.2% عينة سيمانسية, | | 5 | لنخات
- **الإصدار**: `policyVersion: "cfcd-v1"`, `anchorSchemaVersion: 2`

النقطة هي : القنابل ليست نباتة . إنها هيكلية . .. . النموذج يكتب حولها .

---


## التوازن البيولوجي

*هذا هو التناظر , ليس إدعاء بيولوجي : النقطة هي الجمع الانتقائي , ليست آلية حرفية .*

الدماغ لا يعيد تشغيل كل التيار الحسي.

انهم

- إكتشاف الجاذبية
- توصيل بشكل انتقائي
- منع الضوضاء
- تجميد التمثيلات بعد أن تكون مستقرة

اللغة, المهارات الحركية, والادراک كلها تعتمد على **تحمل محدودة-إتجاهاً**, ليس recall خام.

CFCD هو نفس المبدأ

| النظام البيولوجي | معادل CFCD |
|------------------|-----------------|
| الملاحظة ( ما الذي يجب ملاحظته) | الكشف عن الشفقة ( الغموض S) ||
| توصيل ( مالذي يجب أن نتذكره) | ترقية ال anchor | ( | deterministic
| منع ( مالذي يجب تجاهله) | | | قواعد نهاية المطاف |
| استرجاع ( ما الذي يمكن الحصول عليه) | | | سؤال المحاسبة |

---


## توحيد الأنماط

CFMoM وCFCD هي نفس الفكرة المنظرة من زوايا مختلفة:

| بعد | نمط |
|-----------|---------|
| مقترح واحد | [الغموض المقيد](/blog/constrained-fuzziness-pattern) |
| العديد من المقترحين | [MoM مقيدة](/blog/constrained-mom-mixture-of-models) |
| طويلة- السياق الأفقي | نقل السياق المحدود الغامض |

كل الثلاثة تتبع نفس القاعدة

> **تقترح إحتمالية. يستمر التنبؤ.**

بمجرد أن ت internalise تلك القاعدة , معظم " تصميم نظام الذكاء الصناعي | " يتوقف عن كونه غامض

```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
```

---


## لماذا هذا ليس تدفق رئيسي

لأنه

- يقلل من استهلاك الحسابات (لا إعادة - معالجة لثبات الدقة)
- يعمل مع نماذج صغيرة (anchors do the heavy lifting)
- يبدو مملًا في العرض.
- produces fewer dramatic failures (failures are explicit)
- يتطلب التفكير في أنظمة حقيقية ( ليس فقط الهندسة المسرعة )

بعبارة أخرى : يحسن الإنتاج , لا يثير الإنتباه

---


## Anti-Patterns هذا يبدل

| مضاد-كتابة | مشكلة | حل CFCD S|
|--------------|---------|---------------|
| **أضع كل شيء في السياق** | هزينة غير محدودة, تخفيض الإنتباه | تعزز فقط ما ينقذ الانتقاء
| **الخلاصة المتكررة** | DriftM SK1 contradictions | Anchors are structure, not prose |
| **أتمنى أن يتذكر النموذج** | لا توجد ضمانات | تملك النظام الإستمرارية |
| **لكل -quest full re-processing** | مقاييس التكلفة مع التاريخ | الخزانة تستمر عبر الطلبات |
| **اللغة الطبيعية "memory"** | الهبوط الدلالي | القناصات المطبعة, الخرائط الواضحة |
| **واحد-اندازة-تطابق مع -كل السياق** | مقياس النفايات أو نماذج الصخور | قطعة ملائمة من المجموعة المصنفة |

---


## طبقة التنفيذ: مؤقتة

[الأكثر وضوحا.طفيف](https://github.com/scottgal/mostlylucid.atoms) هو الغطاء الذي يجعل CFCD عملية. إذا لم تقرأوا المقالات الخلفية'

- [النار وdon't لا تنسى تماما](/blog/fire-and-dont-quite-forget-ephemeral-execution) - الفلسفة
- [مكتبة تنفيذ مؤقت](/blog/ephemeral-execution-library) - التنفيذ
- [إشارات مؤقتة](/blog/ephemeral-signals) - إشارة- تقود اللتنسيق
- [تعلم الـ LRUs](/blog/learning-lrus-when-capacity-makes-systems-better) - لماذا يهم الذاكرة المحدودة

| أولية بدائية | دور CFCD |
|--------------------|-----------|
| **الإشارات** | إختلاف المرشح ( يقترح النماذج
| **النوافذ المغلقة** | لا محدودة "ذاكرة" |
| **قواعد الطرد** | الغياب واضح |
| **انتهى الزمن المت Sliding** | سيختفي السياق المستقيم تلقائياً |
| **إنتشار الإشارات** | المعلقات تنتقل للأمام دون طفرة |

الطفيف لا "تذكر". إنه **decides what is allowed to be remembered, and for how long**.

هذا بالضبط ما يحتاجه CFCD.

```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");
    }
}
```

---


## رسم التنفيذ: ترجمة مستندات

جمعها معاً لخط ترجمة مستند كامل:

```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);
    }
}
```

---


## الختام الفكري

الخطأ الذي يفعله معظم أنظمة الذكاء الصناعي هو افتراض أن الذكية تتطور عن طريق التذكر *أكثر*.

في الواقع , تتدرج الذكاء عن طريق اتخاذ قرار ما **لن يتوجب علينا أن نفكر مرة أخرى**.

CFCD هو كيف تفعل ذلك دون أن تكذب على نفسك.

---


## السلسلة

| جزء | نمط | محور |
|------|---------|------|
| 1 | [الغموض المقيد](/blog/constrained-fuzziness-pattern) | عنصر واحد |
| 2 | [MoM مقيدة](/blog/constrained-mom-mixture-of-models) | أجزاء متعددة |
| 3 ≥| نقل السياق المحدود الغامض (هذا المقال) ♫| الزمن / الذاكرة мSK7
| 4 | [توصيل الصورة](/blog/constrained-fuzzy-image-intelligence) | تنفيذ عملي |

جميع النماذج الثلاثة تشارك نفس التغير **مكونات الإحتمالية تقترح ; أن الأنظمة الثابتة تستمر**.

الـ [عشرة وصايا لاستعمال LLM](/blog/tencommandments) codify these rules. The [العمارة DiSE](/blog/dise-architecture-overview) يطبقها لتطور البرمجة. [إكتشاف البوت](/blog/botdetection-introduction) يطبقها لتصنيف الطلب. [DocSummarizer](/blog/docsummarizer-advanced-concepts) يقوم بتطبيقها للبحث عنឯកសារ. [ImageSummarizer](/blog/constrained-fuzzy-image-intelligence) يطبقها لتحليل الصور.

مجالات مختلفة. نفس النمط . نفس القاعدة. ["دوم سمماريزر"](/blog/doomsummarizer-deep-research) implementates context dragging for parallel long-form document generation MSC1 running summaries, negative promptsM SK3 entity continuityMスク4 and drift detection maintain coherence across concurrent LLM calls .

---


## التالي: تنفيذ عملي

**الجزء 4** الآن متاحة: [مخصّص الصور : محرك RAG لصورة غامضة محدودة](/blog/constrained-fuzzy-image-intelligence). إنه ينفذ جميع النماذج الثلاثة في موجة- بناء على أنابيب تحليل الصورM SK2 ColorWave يقوم بحساب الحقائق , ويقترح VisionLlmWave , ImageLedger يجمع الملامح البارزة MSC5 و تقيد الانتقاء المعرفي المنتج M SK6 محاكاه من [github.comM SK1scottgal/lucidrag](https://github.com/scottgal/lucidrag).