# DoomSummarizer: DocSum marizer 's Younger, Smarter Brother

<!--category-- AI, LLM, RAG, C#, Deep Research, Lucene, Knowledge Graph, Time Boxed Tool -->
<datetime class="hidden">2026-01-29T10:00</datetime>

गहरी Pockets के बिना गहरे अनुसंधान

जब ‘"’‘Deep Research’‘"’ प्रीमियम एआई उपकरणों में उतरा, तो मैं उत्सुक था। ’:’ यह क्या है?

### DoomSummarizer एक समान कार्यप्रणाली का उपयोग करता है , लेकिन इसका डिजाइन अधिकतर निर्धारणात्मक और स्थानीयकृत प्रक्रिया को कम करता है

इस दृष्टिकोण में ह्रास चरण की मजबूती से संतोषजनक परिणामों को उत्पन्न करने के लिए एक बड़े ऊँचे मॉडल की आवश्यकता समाप्त होती है

विशेष रूप से, मैं पहले से ही कई अनिवार्य निर्माण खंडों को प्राप्त कर चुका था।

missing component was not a lack of capability, but rather understanding how to effectively apply these existing elements

वाणिज्यिक उपकरणों में-, “Deep Research” सामान्यतः एक कार्य का अर्थ होता है

या

महत्वपूर्ण

या

एक अनुसंधान दृष्टिकोण की योजना के नीचे सारांशः, multi करता है। - चरण खोज करता है; / ब्राउज़ करता है. / अनेक स्रोतों पर पढ़ता है।

मूल्य का एक बड़ा हिस्सा इनपुट को सुधारना है।

उदाहरण [ओपनएआई गहन अनुसंधान](https://openai.com/index/introducing-deep-research/), [जेमिनी गहरा अनुसंधान](https://blog.google/products/gemini/new-gemini-app-features-march-2025/), और [जटिलता गहन अनुसंधान](https://www.perplexity.ai/hub/blog/introducing-perplexity-deep-research) (उसके UI में भी कहा जाता है

DoomSummarizer एक ही कार्यप्रणाली का अनुसरण करता है।

यदि ह्रास चरण मजबूत है, तो आपको अच्छा परिणाम प्राप्त करने के लिए एक बड़ा मॉडल की जरूरत नहीं है

बीच [सुस्पष्टRAG](https://github.com/scottgal/lucidrag) और DocSummarizer श्रृंखला, मैं पहले से ही निर्माण खंडों का अधिकांश था।

अनुपस्थित टुकड़ा था *orchestration*कैसे आप इन सभी संकेतों को ले जाते हैं और उन्हें एक छोटा मॉडल के साथ किसी सुसंगत चीज़ में सम्मिलित करते हैं

That's DoomSummarizer

लेकिन यह लेख उपकरण के बारे में नहीं है।

[![जिटहब जारी करना](https://img.shields.io/github/v/release/scottgal/lucidrag?filter=doomsummarizer*&label=doomsummarizer)](https://github.com/scottgal/lucidrag/releases?q=doomsummarizer)

यह है **भाग 5** DocSummarizer श्रृंखला के

अगर आप मूल कार्य पहले चाहते हैं

- [भाग 1: वास्तुकला](/blog/building-a-document-summarizer-with-rag)
- [भाग 2: उपकरण का उपयोग करते हुए](/blog/docsummarizer-tool)
- [भाग 3: उन्नत संकल्पना](/blog/docsummarizer-advanced-concepts)
- [भाग 4: निर्माण RAG पाइपलाइन्स](/blog/docsummarizer-rag-pipeline)

यह भी एक है [समय बाकस उपकरण](/blog/timeboxedtool-consoleimage).

---


[toc]

## कोर विचार: कम RAG

मानक आरएजी पहले से ही सेमेंटिक रिट्रीव करता है

दर्द अंतिम कदम है।

क्या अगर आप अधिक काम करते हैं *पहले* एलएलएम कुछ भी देखता है

कि, ', पैटर्न है **आप उत्पन्न करने से पहले कम करें**. कच्चे दस्तावेज ले लो और निश्चित रूप से उन्हें उनके अनिवार्य संकेतों के लिए कम कर दें।

```mermaid
flowchart TD
    subgraph REDUCE["REDUCE: Distil to Signals"]
        Q[Query] --> Decompose[Composite Decomposition]
        Decompose --> S1[Subquery 1]
        Decompose --> S2[Subquery 2]
        S1 & S2 --> Fetch[Multi-Source Fetch]
        Fetch --> Embed[ONNX Embed Each Item]
        Embed --> Rank[6-Signal RRF Fusion]
        Rank --> TextRank[TextRank Extraction]
        TextRank --> NER[Entity Extraction]
        NER --> Profile[Entity Profile Vectors]
        Profile --> Segments[Salient Segment Extraction]
    end

    subgraph SYNTH["SYNTHESIZE"]
        Segments --> Standard["Standard Path - 1 LLM Call"]
        Segments --> LongForm["Long-Form Path - N+3 LLM Calls"]
    end

    style REDUCE fill:#1a1a2e,color:#e0e0e0
    style SYNTH fill:#162447,color:#e0e0e0
```

ह्रास चरण निर्णायक है।

एक मानक क्वेरी के लिए कम किए गए संकेत काफी साफ हैं कि **एक कॉल** कार्य करता है**एमएसके0** एन सेक्शनों के लिए कॉल

इस पैटर्न पर अधिक विवरण के लिए देखें [कम RAG](/blog/reduced-rag).

## मानचित्र चरण: क्वेरी से स्रोत तक

किसी भी चीज़ को कम करने से पहले क्वेरी को खोज कार्यों के रूप में जाना चाहिए

एक छोटा स्थानीय sentinel मॉडल (0.6B मेरे मामले में-, JSON मोड-में, तापमान-0.1) कच्ची क्वेरी को एक संरचनात्मक अभिप्राय के रूप में व्याख्या करता है।

```mermaid
flowchart TD
    Q["User Query"] --> Sentinel["Sentinel: JSON Interpretation - categories, intent, entities, - temporal hints, tone"]
    Sentinel --> Router["Source Router - YAML category → source mapping"]
    Router --> S1["gnews:AI safety"]
    Router --> S2["search:AI regulation"]
    Router --> S3["bbc:technology"]
    Router --> S4["reddit • hn"]
    S1 & S2 & S3 & S4 --> Fetch["Parallel Fetch - circuit breaking + rate limiting"]
    Fetch --> Merge["Merge + Deduplicate - → reduce phase"]

    style Sentinel fill:#1e3a5f,color:#e0e0e0
    style Router fill:#0d3b2e,color:#e0e0e0
```

sentinel संरचनात्मक क्षेत्र निकालता है

- विषय वर्ग (समान वज़न के साथ
- Query intent (news, QAM SK2 research , comparisonMSC4 howtoMST5
- टर्मिनल संवेदनशीलता (विच्छेदन
- नामित इकाई
- यौगिक प्रश्नों के लिए: विघटित उपचर्चाओं के लिए

**स्रोत चयन** छह चरणों में होता है

1. **स्पष्ट स्रोत**उपयोगकर्ता ने कहा `"from HackerNews"` → `hn` सीधा अंदर जाता है
2. **खोज क्वेरी**: sentinel's optimized search terms become vibeM SK2qualified API calls | Google News RSS | )
3. **श्रेणी रूटिंग**YAML कॉन्फ़िग के माध्यम से आरएसएस फीड को विषय वज़न मानचित्र करता है *और* नीति फीड
4. **अनुसंधान संवर्धन**: `research` या `deep_dive` अभिप्राय अभिलेख जोड़ें
5. **अस्तित्व संवर्धन**एनईआर से नामित इकाइयों को अपनी जीन्यूस क्वेरी प्राप्त होती है `gnews:OpenAI`)
6. **विविधता तल**यदि 3 से कम स्रोत चुना गया है तो : तयशुदा भरें

परिणाम प्रति स्रोत परिपथ विच्छेदन के साथ समांतर रूप से लाया गया स्रोत पहचानकर्ता

वे किसी API hit करने से पहले खोज शब्द परिवर्धित करें `--vibe doom` उपसर्ग प्रश्नों के साथ *"problems concerning risk issues in*, किसी भी श्रेणी के होने से पहले वापस आने वाली वस्तुओं को पुनर्रूपित करना

यदि आप प्रतिरोध बिट्स पर पृष्ठभूमि चाहते हैं [सेवानिवृत्ति के लिए पॉली का उपयोग करना](/blog/usingpollyforretries) (परिपथ ब्रेकर्स [कतार प्रणाली में बैकप्रेसर](/blog/backpressure-queueing-systems) (रेट सीमा और बैकप्रेस

## क्वेरी को डिकॉन्स्ट्रक्चर करना

अधिकतर खोज प्रणालियां इसे एक प्रश्न के रूप में व्यवहार करते हैं

sentinel जटिल प्रश्नों को विघटित करता है

```json
{
  "is_composite": true,
  "subqueries": [
    "What's new in AI safety?",
    "What are the latest AI regulations?"
  ]
}
```

दिलचस्प विकल्प यह है कि क्या आगे होता है [स्थानीय रूप से ML मॉडल चला रहे हैं](/blog/docsummarizer-advanced-concepts#onnx-running-ml-models-locally)). लेखों को प्राप्त करने के दौरान **अधिकतम कोसाइन समानता** सभी सबक्यूरी एम्बेडिंग्स में , औसत नहीं है

क्यों अधिकतम? एक वस्तु जो पूरी तरह से उत्तर देता है M SK1AI सुरक्षा" को नहीं दंडित किया जाना चाहिए ' नियमों के बारे में कुछ न कहने के लिए \" मापन इसे औसत आंशिक मिलानों के अधीन गाड़ना होगा \ . अधिकतम समानता का अर्थ होता है | : यदि एक वस्तु की nail *कोई भी* आपके प्रश्न का हिस्सा, यह बढ़ता है

## विषम संकेतों को मिलाना

मेरे पास छह रैंकिंग संकेत हैं

```mermaid
flowchart LR
    subgraph Signals
        BM25[BM25 - Keyword Match]
        Fresh[Freshness - 48h Half-Life]
        Auth[Authority - HN/Reddit Score]
        QSim[Query Similarity - Cosine]
        Vibe[Vibe Alignment - Cosine]
        Qual[Quality - Clickbait Detector]
    end

    subgraph RRF[RRF Fusion]
        direction TB
        R[Rank Each Signal - Independently]
        F["score = Σ weight × 1/(60 + rank)"]
    end

    BM25 & Fresh & Auth & QSim & Vibe & Qual --> R --> F

    style RRF fill:#1e3a5f,color:#e0e0e0
```

HN बिंदुओं को हजारों तक चला जाता है।

यहाँ कुंजीशब्द संकेत है BM25 बहुविध क्षेत्रों के माध्यम से (BMM SK2F\). यदि आप BM पर पृष्ठभूमि चाहते हैं [DocSummarizer भाग 3](/blog/docsummarizer-advanced-concepts#bm25-the-sparse-retrieval-workhorse).

**[पारस्परिक रैंक फ्यूजन](/blog/docsummarizer-advanced-concepts#hybrid-search-with-rrf)** (Cormack et alM SK1 2009) इस को कच्चे अंकों को उपेक्षा करके हल करता है *दर्जे*: `score = Σ weight × 1/(k + rank)` (से `k=60`).

अगर आप आरआरएफ पर पूरा पृष्ठभूमि चाहते हैं **क्वेरी प्रकार के लिए वज़न अनुकूलित करें**sentinel अभिप्राय पता लगाता है

- समयरेखा क्वेरी ("आज क्या हुआ है?") ताजगी को ऊपर और गुणवत्ता को नीचे झुकाएँ
- व्याख्याकर्ता क्वेरी ("कौनटीम कंप्यूटिंग कैसे काम करता है?
- राउंडअप और तुलनाओं के पास उनके अपने अनुकूल प्रोफाइल हैं

## पुनर्प्राप्ति आयाम के रूप में ध्वनि

यह एक मजाक के रूप में शुरू हुआ।

एक "vibe" है **प्रथम श्रेणी-- वर्ग रैंकिंग सिग्नल** पुनर्प्राप्ति पाइपलाइन में सम्मिलित

```mermaid
flowchart LR
    V["--vibe doom"] --> Expand["Query Expansion - 'concerning risks issues in...'"]
    V --> Embed["Vibe Embedding - 'vulnerability breach layoffs - recession crisis warning...'"]
    Embed --> Score["Cosine Similarity - per article"]
    Score --> RRF["RRF Signal - weight: 0.4"]

    style V fill:#8b0000,color:#e0e0e0
```

जब आप एक वीब सेट करते हैं तो तीन बातें होती है

1. **क्वेरी विस्तार** - खोज को मूड के साथ उपसर्ग मिलता है
2. **व्युब एम्बेडिंग** प्रतिनिधि पाठ को एक 384-dim लक्ष्य के रूप में अंतःस्थापित किया जाता है
3. **श्रेणीकरण संकेत** - लेख कोसाइन समानता द्वारा बीब अंतःस्थापित करने के लिए प्राप्त

मनपसंद वीब समान रूप से काम करते हैं `--vibe "contemplative philosophical"`आपका पाठ क्वेरी उपसर्ग और वरीयता लक्ष्य दोनों बन जाता है

## Entity Profiles, Not Entity Counts

यह एक गलती है जो मैंने पहले किया था

दो लेखों में दोनों में उल्लेख किया गया है "California

1. *कैलिफोर्निया का कार्यालय सुरक्षा टीम की घोषणा करता है*
2. *"कालिफोर्निया के आलू उत्पादक सूखा से ग्रस्त हैं*

भागीदार इकाई गणना

फ़िक्स entities को वेक्टरों के रूप में सोचना था

यह है [सीमित अस्पष्टता पैटर्न](/blog/constrained-fuzziness-pattern)एनईआर मॉडल इकाइयों को प्रस्तावित करता है, लेकिन निर्णायक वज़न से निर्णय होता है, क्या महत्वपूर्ण है

प्रत्येक दस्तावेज को एक **भारित इकाई प्रोफ़ाइल** (a 384-dim भेक्टर एनकोडिंग *जो* इकाईयां दिखाई देते हैं और वे कितनी अलग-अलग हैं):

```
weight = TF × IDF × confidence × type_weight
profile = L2_normalize(Σ entity_embedding × weight)
```

```mermaid
flowchart TD
    subgraph Doc1["Article: OpenAI Safety Team"]
        E1["OpenAI (ORG) - IDF: high - weight: 2.1"]
        E2["California (LOC) - IDF: low - weight: 0.3"]
        E3["Safety Team (MISC) - IDF: high - weight: 1.8"]
    end

    subgraph Doc2["Article: Almond Farming"]
        E4["California (LOC) - IDF: low - weight: 0.3"]
        E5["Almond Farmers (MISC) - IDF: high - weight: 1.9"]
        E6["Drought (MISC) - IDF: medium - weight: 1.2"]
    end

    Doc1 --> P1["Profile Vector - Dominated by OpenAI + Safety"]
    Doc2 --> P2["Profile Vector - Dominated by Farming + Drought"]
    P1 -. "low similarity" .- P2

    style Doc1 fill:#1a1a2e,color:#e0e0e0
    style Doc2 fill:#2d1a2e,color:#e0e0e0
```

आईडीएफ कुंजी है।

स्मार्ट भाग **संतृप्त TF**. कच्चे उल्लेख गणना के बजाय `1 + log(mentions)`एक लंबे लेख में वर्णित इकाई को एक बार उल्लेखित एक इकाई का वजन नहीं मिलता।

## सेमेटिक ग्राफ खोज

अस्तित्व प्रोफाइलें केवल दस्तावेजों को समझने के लिए नहीं हैं **पुनर्प्राप्ति आयाम**प्रत्येक Documen HNSW ग्राफ में अनुक्रमित हो जाता है।

अगर आप HNSW और DuckDB VSS, पर अधिक विवरण चाहते हैं तो देखें [अंश 2: न्यूनतम व्यवहार्य GraphRAG](/blog/graphrag-minimum-viable-implementation).

```mermaid
flowchart TD
    subgraph Retrieval["Three-Layer Retrieval (UNION)"]
        L1["Lucene FTS - keyword matches"]
        L2["Embedding HNSW - semantic similarity"]
        L3["Entity Profile HNSW - entity fingerprint match"]
        L1 & L2 & L3 --> Union["Union of all candidates"]
    end

    subgraph Enrich["Post-RRF Enrichment"]
        Top["Top 5 Ranked Items"] --> Agg["Aggregate Profile - mean of entity profiles"]
        Agg --> Graph["HNSW Search - min similarity: 0.30"]
        Graph --> Related["+3 Related Articles - scored below existing items"]
    end

    Union --> RRF["RRF Fusion"] --> Enrich

    style Retrieval fill:#1a1a2e,color:#e0e0e0
    style Enrich fill:#0d3b2e,color:#e0e0e0
```

यह दो चरणों में कार्य करता है

**पुनःप्राप्ति के दौरान**जब sentinel क्वेरी से 2+ इकाइयों को निकालता है, तो यह एक ही TF के प्रयोग से क्वेरि इकाई प्रोफाइल का संगणन करता है।

**श्रेणीकरण के बाद**: उच्चतम | 5 | रैंकित वस्तुओं के उनके अस्तित्व प्रोफाइलों को एक समग्र भेक्टर में औसतन किया गया है |. | यह समग्र खोज संबंधित लेखों के लिए करता है कि शब्दकुञ्जी और सम्मिलित परत पूरी तरह से छूट गए हैं \. | खोजे गए लेख निम्नतम रैंकिंग वस्तु के ठीक नीचे प्राप्त होते हैं |मस्क4 | और खोजा के रूप में चिह्नित *इकाइयों के माध्यम से "*यह उन प्राथमिक स्रोतों को पकड़ता है जो समाचार लेख संदर्भित करते हैं लेकिन नहीं

यूनियन के माध्यम से तीन पुनर्प्राप्ति परतें एकजुट होती हैं।

फ़ैलबैक पथ (कोर्पोरेट के लिए अभी भी अस्तित्व प्रोफाइल नहीं है`HAVING shared_count >= 2`यह काम करता है, लेकिन यह O के बजाय O `--backfill-entity-profiles` कमांड मौजूदा कॉर्पोरेशन को HNSW पथ में स्थानांतरित करता है.

## मानक संश्लेषण

यह सामान्य पथ है `scroll "AI safety and regulation"` यह छिपता है. घटाना चरण के बाद आपके स्रोतों को श्रेणीबद्ध में विसर्जन करता है।

```mermaid
flowchart TD
    subgraph REDUCE["Reduce Phase (ALL DETERMINISTIC)"]
        Items[Fetched Items] --> Embed[ONNX Embed All Items]
        Embed --> RRF[6-Signal RRF Fusion]
        RRF --> TR[TextRank Compression]
        TR --> Seg[Segment Extraction + Salience Scoring]
        Seg --> Dedup[Deduplication + Relevance Floor]
    end

    subgraph SYNTH["Synthesis (1 LLM CALL)"]
        Dedup --> Rerank["Semantic Re-Rank - by query similarity"]
        Rerank --> Budget["Smart Evidence Budgeting - redistribute unused chars"]
        Budget --> Gen["Single LLM Call - with curated evidence"]
        Gen --> Output[Final Summary]
    end

    style REDUCE fill:#0d3b2e,color:#e0e0e0
    style SYNTH fill:#1e3a5f,color:#e0e0e0
```

कमी चरण कठिन काम करता है

- **सिर्फ शीर्ष वस्तुएँ**सर्वोत्तम वस्तु में : प्रासंगिकता खंड पर
- **स्रोत विविधता**roundup क्वेरी के लिए प्रत्येक डोमेन पर : आइटमों को \3\ पर कैप किया गया
- **अर्थ-परिवर्तन**: आइटमों को पुन:ordered by cosine similarity to the query embedding
- **स्मार्ट साक्ष्य बजटिंग**:\ short items donate unused character budget to long items
- **संगठित साक्ष्य खंड**: `[E1] Title | topic | relevance` जिसमें सामग्री बजट में काट दी गई है

एक LLM कॉल `.` यह है कि ' के प्रतिफल [कम RAG](/blog/reduced-rag)चयन:,ranking, deduplication, and budgeting all happen before the LLM sees anything

## लम्बी पाईपलाइन

लंबा`--template blog-article`एक अलग जानवर है

जवाब है **[प्रतिबंधित अस्पष्ट संदर्भ खींचना](/blog/constrained-fuzzy-context-dragging)**These are deterministic mechanisms that maintain cross-section coherence while allowing parallel generation

```mermaid
flowchart TD
    subgraph Phase1["Phase 1: Evidence Preparation (DETERMINISTIC)"]
        Articles[Top 20 Articles] --> Segments[Chunk into Segments]
        Segments --> Salience[Score Salience per Segment]
        Salience --> EmbedSeg[Embed Each Segment]
    end

    subgraph Phase2["Phase 2: Document Planning (1 SENTINEL CALL)"]
        EmbedSeg --> Summary[Build Evidence Summary]
        Summary --> Sentinel["Sentinel: Generate Outline - with theme keywords per section"]
        Sentinel --> EmbedThemes[Embed Section Themes]
    end

    subgraph Phase3["Phase 3: Evidence Assignment (DETERMINISTIC)"]
        EmbedThemes --> Assign["Score: 60% theme similarity - + 25% salience + 15% relevance"]
        Assign --> Dedup[Cross-Section Deduplication]
        Dedup --> Gate["Quality Gates - • Min salience 0.35 - • Min theme sim 0.45 - • Max 2 per source per section"]
    end

    subgraph Phase4["Phase 4: Section Generation (N+2 LLM CALLS)"]
        Gate --> Intro["Intro (sequential)"]
        Intro --> Body["N Body Sections (parallel) - max 3 concurrent"]
        Body --> Conclusion["Conclusion (sequential)"]
    end

    subgraph Phase5["Phase 5: Validation (DETERMINISTIC)"]
        Conclusion --> Validate[Citation Validation - URL + Entity Grounding]
    end

    subgraph Phase6["Phase 6: Assembly (DETERMINISTIC)"]
        Validate --> Assemble[Final Document Assembly]
    end

    style Phase1 fill:#0d3b2e,color:#e0e0e0
    style Phase2 fill:#1e3a5f,color:#e0e0e0
    style Phase3 fill:#0d3b2e,color:#e0e0e0
    style Phase4 fill:#1e3a5f,color:#e0e0e0
    style Phase5 fill:#0d3b2e,color:#e0e0e0
    style Phase6 fill:#0d3b2e,color:#e0e0e0
```

एलएलएम कॉलों की गणना करें **1** (सेंसिल रूपरेखा **1** आरंभिक **एन** (बौडी सेक्शन्स **1** (निर्धारण **एमएसके0**छह चरणों में से चार निर्णायक हैं

### प्रतिबंधित अस्पष्ट संदर्भ खींचना

समांतर खंड उत्पादन के साथ समस्या एकरूपता है।

इसके बजाय, प्रत्येक खंड को एक मिलता है **सीमित संदर्भ** यह निश्चिततावादी ढंग से बनाया गया है

```mermaid
flowchart LR
    subgraph Context["Per-Section Context (ALL DETERMINISTIC)"]
        RS["Running Summary - 1400 char budget - recent 2 sections: full - older: heading only"]
        NP["Negative Prompts - 'Do NOT discuss: X, Y, Z' - from covered concepts"]
        EC["Entity Continuity - re-introduce entities - last seen 2+ sections ago"]
        Props["Propositions - ~15 atomic facts - per section"]
        Evidence["Curated Evidence - max 12 segments - quality-gated"]
    end

    Context --> LLM["LLM generates - with full awareness - of document state"]

    style Context fill:#1a1a2e,color:#e0e0e0
```

- **चल रहा सारांश**: प्रत्येक खंड के बादM SK1 शीर्ष खंड- अनुकरण साक्ष्य खंड | (200 | अक्षर |) | अभिलेखित किया जाता है\ . | हाल के खंडों को पूरा पाचन प्राप्त होता है\; | पुराने खंडो को शीर्षक प्राप्त होता हैं\ MSC8 | प्रथम वाक्य | МSK9 | कुल बजट | मस्क10 | एमस्क11 | क्यारेक्टर |मस्क12 | कोई एलएलएम संक्षेप नहीं
- **ऋणात्मक प्रवर्धन**: शामिल संकल्पनाओं को निकाला जाता है। *इन विषयों पर चर्चा न करें*
- **इकाई निरंतरता**: भागों में उल्लेखित नहीं इकाइयां पुनः के लिए चिह्नित होती हैं। *यदि प्रासंगिक है तो आरंभ करें*
- **ड्राइप पता लगाना**प्रत्येक खंड को उत्पन्न करने के बाद : उसके पहले वर्णों को सम्मिलित किया जाता है और योजना के साथ तुलना की जाती है।

समांतर मोड में , अंतःप्रणाली पहले उत्पन्न करता है | ( | आधाररेखा सेट करता है\ ), | मुख्य भाग समांतर रूप से चलाता है `SemaphoreSlim` एकरूपता को शीर्षित करने के लिए, प्रत्येक intro विषयों को छोड़ कर लेकिन एक दूसरे पर नहीं है, और निष्कर्ष अंतिम चला जाता है

अनुक्रमिक मोड अधिक सुसंगतता प्रदान करता है (each section excludes all previous concepts cumulatively

### प्रमाण आबंटन: कम RAG के हृदय

प्रत्येक धारा को साक्ष्य की आवश्यकता है, लेकिन नहीं *कोई भी* साक्ष्य. प्रत्येक खंड को एक मिश्रित अंक मिलता है **विषयवस्तु समानता** (विभाग से कोसाइन दूरी **25% सारिता** (सेगमेंट कैसे सूचनात्मक है **अनुच्छेद प्रासंगिकता** (source article की कुल प्रासंगिकता कितनी है।

तो दरवाज़े

- **सलिंस फर्श** (0.35):lowM SK1गुणवत्ता सेगमेंट LLM तक कभी नहीं पहुँचते
- **विषयवस्तु समानता तल** (0.45): off-topic evidence stays out
- **क्रॉस--सेक्शन डेड्यूप** (0.80 कोसाइन): एक ही तथ्य नहीं दिखता
- **Per-स्रोत कैप** (2 प्रति अनुच्छेद प्रति अनुभाग खंड खंड
- **धारा भूमिका जागरूकता**आरंभिक खंडों में तकनीकी विवरण को दंडित किया जाता है. बाद के खंड इसे पुरस्कृत करते हैं.
- **क्वेरी कोहेजियन गेट** (0.30): प्रमाण मूल क्वेरी से संबंधित होना चाहिए

LLM लक्ष्य शब्द गिनती प्रमाण गुणवत्ता के आधार पर समायोजन करती है।

### प्रस्ताव निष्कर्षण

प्रमाण LLM तक पहुंचने से पहले यह propositions (inspired by the [Dense-X पुनःप्राप्ति कागज](https://arxiv.org/abs/2312.06648)प्रत्येक खंड को परमाणु तथ्य के छह प्रकार में विभाजित किया जाता है **दावे** (सामान्य तथ्यात्मक दावे **उद्धरण** स्रोत से प्रत्यक्ष **सांख्यिकी** (संख्या और मापन **परिभाषाएं** ("X Y है **प्रक्रियाएँ** ( **नामित इकाई तथ्य** (एक विशिष्ट इकाई पर केन्द्रित

प्रत्येक अनुभाग को semantic समानता का प्रयोग करते हुए अनुच्छेदों में ~15 प्रस्तावों, दोहराया जाता है | ( | नहीं स्ट्रिंग मिलान |). | LLM स्रोत द्वारा समूहित संरचनात्मक गोली बिंदुओं को प्राप्त करता है

जब LLM एक खंड लिखता है, तो कम करने के चरण ने इसे दिया है

- एक स्पष्ट शीर्षक और विषयवस्तु
- Curated evidence segments (quality
- परमाणु प्रस्ताव
- पिछली धाराओं को जो पहले से ही शामिल किया गया है उसका एक चालू सारांश
- क्या के लिए नकारात्मक प्रवर्धन *नहीं* दोहराना
- इकाई निरंतरता मार्गदर्शन

एक छोटा मॉडल इस प्रकार के पूर्व से अच्छा काम कर सकता है

## TextRank: निर्धारात्मक सारांश

जब आलेख साक्ष्य पाइपलाइन के लिए काफी लंबा होते हैं, तो मुझे उन्हें दबाने की जरूरत है।

TextRank (Mihalcea & Tarau, 2004) यह deterministically करता है

```mermaid
flowchart LR
    Text[Article Text] --> Split[Split into Sentences]
    Split --> EmbedS[Embed Each Sentence]
    EmbedS --> Graph["Build Similarity Graph - (cosine > 0.15 = edge)"]
    Graph --> PR["PageRank - (20 iterations, d=0.85)"]
    PR --> Select["Select Top-K - in Original Order"]

    style Graph fill:#1e3a5f,color:#e0e0e0
```

प्रत्येक वाक्य एक सम्मिलन प्राप्त करता है . ग्राफ किनारे बनते हैं 0.15 से ऊपर पाईयरवाइज समानताएँ *केंद्रीय* वाक्यों, जो सबसे अधिक अन्य सब से जुड़े होते हैं

कुंजी विवरण: चुने गए वाक्य लौटाए जाते हैं **मूल दस्तावेज क्रम में**यह वर्णन प्रवाह को सुरक्षित करता है

कोई LLM कॉल नहीं है `TensorPrimitives` (`System.Numerics.Tensors`आरंभ समय पर चुना गया

## One-Hop लिंक निम्नलिखित

लेखों में अन्य लेखों को संदर्भित किया जाता है।

DoomSummarizer लिंक्स का अनुसरण करता है, लेकिन चयनात्मकता सेM SK1 प्रत्येक उम्मीदवार लिंक को प्राप्त अंक मिलता है :

```
link_score = 0.7 × query_relevance(anchor_context) + 0.3 × segment_salience
```

जहां सेगमेंट सॉलिएन्स को जोड़ा जाता है

- **स्थिति** आरंभिक अनुच्छेदों में अधिक महत्व है
- **पदार्थ** पैराग्राफ लम्बाई और सूचना घनत्व

प्रासंगिकता तल के नीचे लिंक्स (0.15) छोड़ दिए गए हैं. प्रणाली पत्रकारिता की उल्टी पिरामिड मनोवैज्ञानिक पद्धति का अनुसरण करती है

परिणाम सामग्री हैshes और ETags के साथ कैश किए जाते हैं [प्रतिक्रिया कैशिंग](/blog/ASPNET-STATE-BETWEEN-REQUESTS).

## क्रॉल मोड: एक स्थानीय ज्ञान आधार बनाना

अभी तक वर्णन किया गया सब कुछ वेब फ़ैचिंग को मानता है

`crawl` एक वेबसाइट को स्थानीय ज्ञान आधार में शामिल करता है।

```bash
doomsummarizer crawl https://docs.example.com --name example-docs --depth 3 --max-pages 200
```

Everything gets persisted: full contentM SK1 ONNX embeddings, entity profiles , SQLite FTSMST4 keyword indexes MSC5fullMSP6text searchMSCP7 sentiment and topic scores MSCP8computed via embeding anchorsSCP9 no LLMSMP10 Incremental reSPP11crawls send `If-None-Match` / `If-Modified-Since` हेडर. अपरिवर्तित पृष्ठ HTTP लौटाते हैं | 304 | और पुनःप्रसंस्करण छोड़ें |. | बिना ETag समर्थन वाले सर्वर के लिए |

एक बार crawled, क्वेरी पूरी तरह ऑफ़लाइन

```bash
doomsummarizer scroll "how does authentication work?" --name example-docs
```

 `--name` स्थानीय केबी को वेब स्रोतों की बजाय फ्लैग पथों को इंगित करें।

भंडारण हल्का है।

## इसे एक साथ रखना

```bash
doomsummarizer scroll "AI safety and regulation" --vibe doom --debug

Composite query detected: 2 subqueries
  • What's new in AI safety?
  • What are the latest AI regulations?

Searching...
├─ Lucene: 18 keyword matches (regulation^3, safety^2)
├─ Embedding: 12 semantic matches (max-sim across 2 subqueries)
├─ RRF fusion: 22 candidates, 6 signals
├─ Entity HNSW: +3 related via entity profiles
├─ TextRank: compressed 4 long articles
└─ Final: 12 items

Long-form: Phase 1 - 187 segments from 12 articles
Long-form: Phase 2 - "AI Safety Landscape" - 5 sections
Long-form: Phase 3 - Evidence assigned (cross-section dedup: 8 removed)
Long-form: Phase 4 - Generating sections...
```

## उन विचारों ने इसे काम में लाया

ये अंतर्दृष्टि हैं

1. **उत्पन्न करने से पहले कम करें**मानक मार्ग को सिर्फ 1 LLM कॉल की जरूरत है क्योंकि पाइपलाइन सभी भारी उठाने के निर्णायक रूप से करता है [कम RAG](/blog/reduced-rag) पैटर्न है-: embeddings, , PageRank,, Heuristics और गुणवत्ता गेट ऐसे साफ इनपुट का उत्पादन करते हैं कि छोटे मॉडल भी अच्छी तरह से संश्लेषण
2. **सैंटिनेल---प्रचालित स्रोत रूटिंग**एक छोटा मॉडल प्रश्नों को संरचनात्मक अभिप्राय में व्याख्या करता है।
3. **संयोजन क्वेरी के लिए अधिकतम समानता**: donM SK1t औसत सब क्वेरी स्कोर्स, सबसे अच्छा मैच लेने के लिए . एक आलेख आपके प्रश्न का एक भाग बनाना एक आधा से बेहतर है
4. **श्रेणी जोड़ें, not scores**RRF आपको असंगत स्केलों के साथ संकेतों को संयोजित करने देता है
5. **एम्बेडिंग के रूप में Vibes**कोई भी पाठ रिtrieval आयाम हो सकता है।
6. **वेक्टर के रूप में अस्तित्व प्रोफाइलें**IDF-weighted entity embeddings,not entity string counting. Rare entities dominate the profile,common entities become noise, and HNSW search discovers related articles in O
7. **प्रतिबंधित अस्पष्ट संदर्भ खींचना**: [निर्णायक संदर्भ प्रबंधन](/blog/constrained-fuzzy-context-dragging) समांतर खंड उत्पादन सक्षम करता है. चलाने वाली सारांशों, ऋणात्मक प्रांप्ट्सM SK2 इकाई निरंतरता , और ड्रिफ्ट डिटेक्शन LLM कम्प्रिशन कॉल के बिना संगतता बनाएँ
8. **यथासंभव निर्धारित**छह लम्बे चरणों में से : form phases, four are deterministicM SK3 TextRank replaces LLM summarisationMSC4 Evidence assignment substitutes LLM selection

## संसाधन

- **[ड्यूमसममैजर जारी करता है](https://github.com/scottgal/lucidrag/releases?q=doomsummarizer)**: एकल द्विआधारी
- **[à¤ ̧à¥à¤°à¥à¤](https://github.com/scottgal/lucidrag)**मूल परियोजना
- **[स्रोत कोड](https://github.com/scottgal/lucidrag/tree/main/src/DoomSummarizer)**

### संबंधित लेख

- [कम RAG](/blog/reduced-rag): कम करने के लिए \- \before \ - \generate pattern in depth
- [प्रतिबंधित अस्पष्ट संदर्भ खींचना](/blog/constrained-fuzzy-context-dragging): कैसे समांतर खंड उत्पादन सुसंगतता बनाए रखता है
- [प्रतिबंधित अस्पष्टता पैटर्न](/blog/constrained-fuzziness-pattern)निश्चितात्मक नियंत्रण के पीछे व्यापक पैटर्न : संभाव्यतावादी प्रस्ताव

### और

- [कंसोल छवि (टाइम बक्सेटेड औज़ार](/blog/timeboxedtool-consoleimage)