Back to "DoomSummarizer:"

This is a viewer only at the moment see the article on how this works.

To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk

This is a preview from the server running through my markdig pipeline

AI C# Deep Research Knowledge Graph LLM Lucene RAG Time Boxed Tool

DoomSummarizer:

Thursday, 29 January 2026

syvällinen tutkimus ilman syviä taskuja.

Kun "Deep Research" saapui korkealaatuisiin AI-ohjelmiin, , olin huvittunut, mitä tämä on,, itse asiassa,? Poistin sen pois,M SK6 Ja kun ymmärsin arkkitehtuurin,MSC7 tajusin, että olen jo rakentanut suurimman osan siitä.

DoomSummarizer hyödyntää samankaltaista työprosessia,, mutta sen suunnittelu optimoi "read + vähentääM SK3 prosessia pääasiassa deterministiseksi ja lokalisoituksiMSC4 suurten kielten mallin kanssa.

Tässä lähestymistavassa vähennysvaiheen vahvuus poistaa tarve laatia suuri, kallis malli tyydyttävien tulosten aikaansaamiseksi

Erityisesti, Minulla oli jo useita olennaisia rakenteellisia elementtejä, mukaan luettuna monenlaisiaM SK2lähdetietolähestymistapaa ,yksikön ekstrakointiaMSC4tietämyksen grafioitaMST5 ja sisällyttämistäMSV6perusteiseen luokitukseenMSP7, jotka ovat yhteisiä lucidRAG:n ja DocSummarizer-sarjan kanssa.

Epäonnistunut osatekijä ei ollut kyvyttömyyden puute, vaan pikemminkin sen ymmärtäminen, miten näitä olemassa olevia elementtejä voidaan tehokkaasti soveltaa.

Kaupallisissa työvälineissä, M SK1Tietotutkimus” tarkoittaa yleensä työtä

tai

Merkittävä

tai

Johdanto-osana, jossa suunnitellaan tutkimusta koskevaa lähestymistapaa, tekee monivaiheista-vaiheista hakua /käynnin läpiM SK3 lukee monenlaisia lähteitä MSC4 usein internetiä SSK5 olette laatineet laatimanne,/yhtenäistettyjen asiakirjojen,), sitten kirjoittaa pidemmän kertomuksen viittausten kanssa

Suuri osa arvosta on tulojen parantaminen.: pull in fresher , higher - signal sources than any model ’ training data cut - off date , ground claims in evidence , and reduce the chance of the model making things up

Esimerkkejä: OpenAI:n syvällinen tutkimus, Gemini Deep Research -tutkimus, ja Perplexity Deep -tutkimus (se kutsutaan myös “tutkimusta koskevaksi toiminnaksi” UI:ssään

DoomSummarizer noudattaa samaa työtapaa,, mutta se ’ on suunniteltu niin, että suurin osa M SK2 lukee M SK3 vähentää” työstä on deterministista ja paikallistaMSC5 ja LLM:tä käytetään pääasiassa synteesiinMST6

Jos vähennysvaihe on vahva, ei tarvitse suuria, kalliita malleja saada hyvää tulosta

Yhdessä lucidRAG ja DocSummarizer-sarja, Minulla oli jo suurin osa rakennuselementeistäM SK1 monimuotoinen -lähteiden löytäminen,yksiköiden ekstrahointiMSC4tietämyksen grafiikat

Missing piece oli't capability. Se oli orkesteri. Miten otetaan kaikki nämä signaalit ja liitetään ne yhteen jonkin pienen mallin kanssa?

Se's DoomSummarizer. Named after doom scrolling , because it doom Scrolls so you donMSC3t have toM SK4 Point it at your sourcesMNK5 set a vibeMKK6 get a synthesisMZK7

Mutta tässä artiklassa ei ole kyse välineestä, vaan siitä ajatuksesta, jonka avulla se toimii.

GitHubin julkilausuma

Tämä on Osa 5 DocSummarizer -sarjasta.

Jos haluatte ensin pohjatyöt:

Tämä on myös Aikarajoitteinen väline.


Keskeinen ajatus: Reduced RAG

Standard RAG on jo tehnyt semanttista hakua: chunk-asiakirjat, sijoittaa neM SK2 ja fetch top

Paine on viimeinen askel: loppujen lopuksi tuhlaatte meluisen, päällekkäisten kuvien pilpin LLM:hen ja pyydätte sitä sovittamaan päällekkäisyydet yhteen , painottamaan lähteitä , ja pitämään johdonmukaista siltaaMSC4 Se toimiiM SK5 mutta se ajaa teitä kohti suuria tausta-aitoja ja kalliita mallejaMST6

Mitä tapahtuu, jos teette enemmän työtä ennen LLM näkee kaiken?

Se ”'” on malli vähennetään ennen kuin luotte. Otetaan raaka-asiakirjat ja alennetaan ne määrätietoisesti olennaisiin signaaleihinsa, : sisällytykset, M SK2 luokkat, , merkittävät osat,, yksiköiden profiilit,

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

Vähennysvaihe on deterministinen: sisällytyksetM SK1 luokitus, entity extraction , TextRankMSL4 segmenttituloksetMST5 Ei LLM-puhelujaMSC6

Synteesi on ainoa LLM-vaihe. Standardikyselyssä vähennetyt signaalit ovat riittävän puhtaita, että yksi puhelu suorittaa tehtävän. pitkienM SK1muodollisten asiakirjojen , osalta sentinel suunnittelee rakennetta ja päämalli tuottaa osia rinnakkainN+3 N-osia koskevat puhelut).

Yksityiskohtaisempia tietoja tästä mallista, Vähennetty RAG.

Karttavaihe: Kysymyksestä lähteisiin

Ennen kuin mitään vähennetään, kysymyksen on muututtava hakutoimiksi,

Pienellä paikallisella sentinel-mallilla (0.6B omassa tapauksessani, JSON-modusM SK2 lämpötila 0.1) tulkitsee raaka-ainekysymyksen rakenteelliseksi tarkoitukseksiMSC4 ja YAML-lähettiläisesti ohjattava lähderoutteri muuntaa kyseisen tarkoituksen konkreettisiksi fetchesiksi.

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

Rangailija ekstrahoi rakenteellisia alueita:

  • Aihe-alueet (luottamuspainoineenM SK1
  • Kysymystarkoitus ( uutiset, QAM SK2 tutkimus , vertailuMST4 mitenMSC5
  • Väliaikainen herkkyys (
  • Nimetyt yksiköt
  • Yhdistyneissä kysymyksissä: hajotetut alakysymykset M SK1selittävät sanamuodot )

Alkuperän valinta tapahtuu kuudessa vaiheessa:

  1. Selkeät lähteet: käyttäjä sanoi "from HackerNews"hn menee suoraan sisään
  2. hakukysymykset: sentinelM SK1 optimoidut hakusanat muuttuvat elvytettäviksi - päteviä API-puheluja SSK3DuckDuckGo, BraveMST5 Google News RSSMSC6
  3. Luokitussuuntaus: topic weights map to RSS feeds via YAML config ja politiikkoja koskevat tiedot
  4. Tutkimuksen rikastaminen: research tai deep_dive tarkoitus lisätä arkisto
  5. Entiteettien rikastaminen: nimetyt entiteet NER:stä saavat omat gnews-kysymyksensä gnews:OpenAI)
  6. Monimuotoisuustaso: jos vähemmän kuin 3 lähteitä on valittu

Tuloksena oli:: ~10 lähdeidentifiaattorit otettiin samanaikaisesti perimään

Vibes muuttaa hakuehtoja ennen kuin ne kohdistavat mitään API:ta. Esimerkkinä, --vibe doom edellytykset kysymykset "ongelmista aiheutuvat riskit otetaan huomioon, uudelleen muotoiltava se, mikä palaa takaisin ennen kuin mikään tärkeysjärjestys tapahtuu

Jos haluatte taustan kestävyyden biteille, ks. Pollyn käyttäminen eläkkeelle jäämiseen ( Jäljestysjärjestelmien takapaine (rajan rajoittaminen ja takapaine

Kysymyksen rakentaminen uudelleen

Suurin osa hakujärjestelmistä kohtelee "Mitkä ovat ns. AI-turvallisuuden uudet vaatimukset ja mitkä ovat viimeisimmät säännökset?

Sentinel hajottaa yhdistetyt kysymykset:

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

On mielenkiintoista valita, mitä tapahtuu seuraavaksi. Jokainen alakysymys saa oman ONNX-embeddingin (katso ONNX: Running ML Models Locally). Kun arvostellaan artikloja, otan Max-kosineeritys kaikkiin subkysymyksen sisällytteisiin, ei keskimääräinenM SK1

Miksi max? artiklaa, joka vastaa täysin M SK1AI-turvallisuutta ", ei olisi rangaistettava siitä, että se ei sano mitään "säädöksistä". Lyhyesti ottaen se siirrettäisiin keskimääräisten osittaisten vastakkainasettelujen alapuolelle? mikä tahansa osa kysymyksestänne, se nouseeM SK1 Vaihtoehtoinen, keskiarvoinen , palkitsee hämäriä artikloja, jotka koskettavat epämääräisesti kaikkea

Heterogeenisten signaalien syntyminen

Minulla on kuusi luokitussignaalia. Niillä on täysin eri mittasuhteetM SK1

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-pisteet menevät tuhansiin. Kosiinien samankaltaisuus on M SK1 to 1. Värvys heikkenee eksponentiaalisesti. VoitteMSC4 lisätä ne turvallisesti yhteenMST5 mittakaavat ovat yhteensopimattomia

Tärkein tunnusmerkki on BM25 monilla eri aloilla (BMM SK2F). Jos haluatte taustan BMSSK4, katso DocSummarizer -osuus 3.

Vastavuoroinen rangaistusfuusio (Cormack ja al. rangaistus: score = Σ weight × 1/(k + rank) (sekä k=60).

Jos haluatte täydellisen taustan RRF:ssä, Osa M SK1 kattaa sen . Siihen käänne on painot mukautuvat kysymyksen muotoon. Rangailija havaitsee tarkoituksen, , ja ampuja muotoilee itsensä uudelleen

  • Aikataulukoita koskevat kysymykset ("Mitä tapahtui tänään?
  • Esittelijän kysymykset ("Kuinka kvantkomputointi toimiiM SK1on päinvastoin (pesäys on tärkeämpää kuin uutinen
  • Roundupsilla ja vertailuilla on omat mukautetut profiilit.

Vibeet ottamisen ulottuvuudena

Tämä alkoi naurettavana.

A "vibe ensimmäisen luokan - ranking-signaali otettu mukaan jäljittämisputkeen:

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

Kolme asiaa tapahtuu, kun otetaan käyttöön vibe:

  1. Kysymyksen laajentaminen - haku prefixoidaan moodin kanssa
  2. Viben sisällyttäminen - esittelijäteksti sisällytetään 384-dim-tarkoituksena
  3. Rangaistussignaali - artiklat, jotka on otettu mukaan kosineen samankaltaisuudesta vibin sisällyttämiseen

Custom vibes toimivat identtisesti. --vibe "contemplative philosophical"-kysymyksenne tulee sekä kysymyksen edeltäjäksi että tärkeysjärjestystavoitteeksi.

Entiteettiprofiilit, Ei Entiteettilukuja

Tässä on virhe, jonka tein ensimmäiseksi laskemalla asiakirjojen välisiä yhteisiä yksikköjä

Kahdessa artiklassa mainitaan molemmat "CaliforniaM SK1

  1. Kalifornian toimisto ilmoittaa turvallisuusryhmästä
  2. "Kalifornian mandelmien viljelijät kohtaavat kuivuuden

Yritettyjen osapuolten lukumäärä: M SK1 Näin ollen sidoksissa olevat ! Ilmiselvästi väärin.

Ratkaisu oli, että entiteet olisi pidettävä vektorina.

Tämä on rajoitettu epäselvyysmalli: NER-mallissa ehdotetaan yksiköitä, mutta deterministisen painotuksen perusteella päätetään, mikä on tärkeää.

Jokainen asiakirja saa painotettu yksikköprofiili (a 384-dim-vektorikoodi joka entiteet näkyvät ja miten erottuvaisia ne ovat):

weight = TF × IDF × confidence × type_weight
profile = L2_normalize(Σ entity_embedding × weight)
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

IDF on avainasemassa. M SK1California" ilmenee tonnia artikloja kohden - alhainen IDF*, heikko signaaliMSC5 | | "OpenAI+" on erityinen |

Älykkä osa: TF:n satustaminen. En käytä raaka-ainetta mainitsevien lukujen sijasta 1 + log(mentions). Väestö, joka mainitaan 50 kertaa pitkässä artiklassa, ei saa

Semantic Graph Discovery

Entiteettiprofiilit eivät ole vain asiakirjojen ymmärtämiseen tarkoitettuja, vaan ne ovat oikaisuulottuvuus. kukin documenM SK1t'yksikön profiili on indeksoitu HNSW-grafiikassa (DuckDB'VSS:n laajentaminenMSC5 mahdollistetaan OSSK6log NMスク7 sellaisten semantisesti liittyvien artikloiden löytäminen, joita avainsanojen haku jättäisi kokonaan huomiotta

Jos haluatte lisätietoja HNSW:stä ja DuckDB:sta, katso GraphRAG-osuus 2: Vähimmäiskäytännöllinen GrafRAG.

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

Tämä toimii kahdessa vaiheessa:

Palauttamisen aikana: kun sentinel ekstrahoi 2+ entiteet kysymyksestä, kysymyksen entiteetin profiili lasketaan samalla TF-muodollaMSC3IDF-muodollaM SK4 Tämä etsii HNSW:n indeksiä artikloista, joilla on samankaltaisia entityisen sormenjälkiäMST5 vähintään samankaltaisina kuin \0.25. artikla \OpenAI:n turvallisuutta koskevista huolenaiheista \ " pintailtaan, vaikka se ei koskaan mainitakaan tarkasti kysymyksessä mainittuja termejä \

Luokittelun jälkeen: ylhäältä 5 järjestettyjen artikloiden entiteetin profiilit on keskitetty kokonaisvektoriksiM SK2 Tämä kokonaistutkimus etsii asiaan liittyviä artikloja, joita avainsana ja sisällytyslaajat ovat täysin unohtaneet. löydettyjä artikloita arvioidaan juuri alle alhaisimman järjestetyn artiklan ‐(×0.9) ja niissä merkitään, että ne on havaittu "yksiköiden kautta. Tämä koskee ensisijaisia lähteitä, joihin uutisartikkelit viittaavat, mutta eivät

Kolme jäljittämiskerrosta sekoittuvat unionin välityksellä: Lucenin avainasemassa olevat avainsanat vastaavat toisiaan ∪ sisällyttäminen HNSW:n mukaisiin toisiinsa M SK2 entity-profiili HN SW:n vastaiset toisistaan. Unioni on tarkoituksellisesti laajempi kuin yhteensovittaminenMSC4 Se kiinnittää kohdista, jotka sisältävät kaikki yksittäiset signaalit.

Fallback-tie ( corporalle, jossa ei ole vielä entitysprofiilejaHAVING shared_count >= 2). Se toimii,, mutta seM SK2s O (NMSC4 sen sijaan että OMSSK5log NMST6 --backfill-entity-profiles komendassa siirretään olemassa oleva corpora HNSW-tietä.

Standard Synthesis: Yksi LLM-puhelu

Tämä on normaali tie. scroll "AI safety and regulation" kohdistaa tämän. vähennysvaiheen jälkeen siirtää lähteenne luokiteltuihinM SK1 kaksinkertaistettuun , yksiköön-profiloituihin segmentteihin

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

Vähennysvaihe tekee kovasti töitä. Kun LLM näkee jotakinM SK1 se saa:

  • Ainoastaan korkeimmat kohdat: asiaankuuluvuustaso 30% parasta näkökohtaa koskevassa arviossaM SK2 tulosta koskeva arvio
  • Alkuperäinen monimuotoisuus: rajoittuu 3 kohteisiin kutakin aluetta kohti roundup-kyselyissä
  • Semantic re-ranking: kohdat uudelleenM SK1 järjestetty kosineen samankaltaisuuden mukaan kysymyksen sisällyttämiseen
  • Älykäs todisteiden budjetointi: lyhyen luokan esineet lahjoittavat käyttämättömiä lukumäärärahoja pitkälle luokan kappaleelle , joten todisteita ei käytä hukkaan
  • Rakennetut todisteiden ryhmät: [E1] Title | topic | relevance talousarvioon siirrettyä sisältöä

Yhden LLM:n puhelu . tarkoittaa, että alennettu RAG: valinta , tärkeysjärjestys M SK2 päällekkäisyydessä olevien määrärahojen vähentäminen , ja budjetointi tapahtuvat ennen kuin LLM näkee mitään

Pitkät-muodolliset putketM SK1 rajoitettu rinnakkaistuotanto

Pitkä-muodo M SK1--template blog-article) on erilainen hirviö . Te'generoitte monimuotoisenMSC3osioasiakirjan kymmenistä lähteistäM SK4 ja tarvitsette johdonmukaisuutta osittain ilman kalliita LLM-kompresointia koskevia puheluja

Vastaus on rajoitettu epämääräinen kontekstin vetäminen. Nämä ovat deterministisia mekanismeja, joilla säilytetään cross-muodon johdonmukaisuus, samalla kun sallitaan rinnakkainen tuotanto.

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

Luvut LLM-puheluista: 1 (sentinel-piirre 1 (intro N (ruumiosatM SK1 + 1 (selitys N+3. Neljä kuusta vaiheesta on deterministisiaM SK1

Rajoitettu hämärän taustan vetäminen

Ongelmana rinnakkaisen osan generationissa on johdonmukaisuus. Jos osat eivät tiedä, mitä muut osat sanoivatM SK2 saamme toistumista ja virtaamista . Tavallinen korjaus on peräkkäinen generaatio koko kontekstin kanssa.

Sen sijaan, kukin kohta saa rajoitettu konteksti että ' rakentuu deterministisesti

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
  • Käynnissä oleva yhteenveto: jokaisesta kohdasta jälkeen, , yläpuolella,- todisteiden osoittamista koskevat osat, M SK3 tunnusmerkit, ) tallennetaan,
  • Negatiiviset pyynnöt: katettuja käsitteitä ekstrahoidaan. " Älkää keskusteleko näistä aiheista.
  • Yhteinen jatkuvuus: osa-alueet, joita ei mainita, merkitään uudelleen. "ReM SK1ottaa käyttöön, jos asiaankuuluvaa,
  • Driftin havaitseminen: kun kukin jakso tuottaaM SK1 sen ensimmäiset characters, 1000, on sisällytetty ja verrattu suunnitelmaan.

Samanaikaisessa muodossa , intro tuottaa ensimmäisen ( asettaa lähtökohdan SemaphoreSlim Yhdenmukaisuuden katkaiseminen, kukin poistaa intro-aiheet mutta ei toisiaanM SK1 ja päätelmä on viimeinen ( poistaa kaikki).

Toissijainen menettely antaa tiukemman johdonmukaisuuden (kaikki jakso poistaa kaikki aiemmat käsitteet kumulatiivisestiM SK1 mutta rinnakkain on ~3x nopeampi suurten asiakirjojen osalta

Evidence Assignment: Reduced RAG:n sydän

Jokainen osa tarvitsee todisteita, mutta ei mikä tahansa todisteet. Jokaiselle segmentille myönnetään yhdistelmätulos 60% theme similarity (kosiinien etäisyydestä osalle 25% ( kuinka informatiivinen segmentti on 15% artiklan merkitys ( miten merkityksellinen lähdeartikkeli on kokonaisuudessaan

Sitten ovet:

  • Saliensin katto (0.35): alhainenM SK1laatusegmentit eivät koskaan pääse LLM:hen
  • Aiheen samankaltaisuus (0.45): pois -aiheelliset todisteet jäävät pois
  • cross-sektion vähennys (0.80kosineM SK1 sama tosiasia ei toistu
  • Per-lähteiden katto (2 segmentit artiklaa kohti ja kohtaa kohtiM SK1 yksi ainoa lähde ei hallitse
  • Pääosaston roolitietoisuus: aloitusosuudet rankaisevat teknistä yksityiskohtaa (-0.3); myöhemmät osat palkitsevat sitä
  • Kysymys yhteenkuuluvuusportaalista (0.30): todisteet on liitettävä alkuperäiseen kysymykseen

LLM-tarkoituksen sanamäärää mukautetaan todisteiden laadun perusteella. Vahvat todisteet ( todennäköisyys ≥ 0.6, \2+ lähteetMSC5 |4+ osatM SK7 ♪→ täyssanainen sanamääräMska9 heikkoja todisteita SSK10 todellisuus CSK11 \ 0.45, löyhää MSSK13 ♫→ ♫ 60% ♫ tavoitteen sisällöstäMST16 Tämä estää halucinaatiota, kun todistukset ovat pienimuotoisiaMSL17

Ehdotuslähetys: tiheäM SK1X käytännössä

Ennen kuin todisteet saavuttavat LLM:n, ne taantuvat ehdotuksiin, jotka inspiredoivat Dense-X-hakupaperiEach segment is broken into six types of atomic fact vaatimukset (yleiset tosiseikat lainaukset (lähettiläsläheisesti tilastot (numerot ja mittaritM SK1 määritelmät ("X on YM SK1 menettelyt (step-by-Step), ja nimettyjen yksiköiden tosiasiat (on keskittynyt tiettyyn yksiköön

Jokainen kohta saa ~15 ehdotuksiaM SK1 päällekkäisyydellä eri osa-alueilla käyttäen semanttista samankaltaisuutta.

Kun LLM kirjoittaa osan,, vähennysvaihe on antanut sen:

  • Selkeä otsikko ja aihe
  • Curated evidence segments (
  • ~15 atomiehdotukset
  • Käynnissä oleva yhteenveto siitä, mitä edelliset osat ovat jo käsitelleet
  • Negatiivisia syitä siihen, mitä ei toistaa
  • Yhteinen jatkuvuusohje

Pienellä mallilla voidaan tehdä erinomaista työtä tämäntyyppisessä valmistuksessa.

TextRank: Deterministinen yhteenveto

Kun artiklat ovat liian pitkät todisteita varten, minun on komprimoitava ne. Mutta en halua käyttää LLM-puhelua yhteenvetoon.

TekstiRank (Mihalcea & Tarau, 2004) tekee sen deterministisestiM SK4

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

Jokainen lause saa sisällyttämisen. Vertikaaliset samankaltaisuudet yli 0.15 muuttuvat grafiikan reiteiksiM SK2 PageRank löytää eniten keskeinen lauseet, ne, jotka liittyvät eniten kaikkeen muuhun

Tärkein yksityiskohta: valitut lauseet palautetaan alkuperäisessä asiakirjajärjestyksessä. Tämä säilyttää naratiivisen virtauksenM SK1 Saatte johdonmukaisen yhteenvedon , ei sattumanvaraista tärkeiden lauseiden pakettia

No LLM call. Runs in milliseconds. Cosine similarity is SIMDM SK2accelerated via TensorPrimitives (System.Numerics.Tensors)

Artiklat viittaavat muihin artikloihin. Näissä viittauksissa on usein parhaat todisteet M SK1 ensisijainen lähde, jonka uutisartikkeli sisältää yhteenvedon

DoomSummarizer seuraa yhteyksiä, mutta valikoivastiM SK1 Jokainen ehdokasyhteys saa tulosta :

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

Kun segmentti salienssi yhdistetään:

  • Tilanne (60%) - käännettyä pyramidiaaM SK2 aikaisempien kohtien merkitys on suurempi
  • Elohopea (40%) - kohdan pituus ja tiedotustiheys

Links below a relevance floor (0.15) are skipped . The system follows the journalistic inverted pyramid heuristic

Tulokset tallennetaan sisältöä koskeviin hasheseihin ja ETags-osoitteisiin. Toiset toimet ovat nopeitaM SK1 Ks. Vastauksen tallettaminen, ETags, ja ehdolliset pyynnöt.

Crawl Mode: Luomaan paikallista tietopohjaa

Kaikista tähän mennessä kuvatuista asioista voidaan olettaa, että web- fetching on toteutettu.

crawl sisällyttää sivuston paikalliseen tietopohjaan. Se laajentaa seikkaa-ensimmäinen crawl M SK2BFS ) siemenosoitteesta URL-osoitteeseen

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

Kaikki pysyy ennallaan: täydellinen sisältöM SK1 ONNX-embeddings, yksikön profiilit , SQLite FTSMSC4 avainsanaindeksit MST5kokonainenMSV6 tekstitutkimusMSP7 tunteenpitoisuus ja aiheen pisteet MSV8 lasketaan sisällytettyjen ankkurien välitykselläM SV9 ei LLMM Sv10 lisääntyvä uudelleenMsv11huomautukset lähetetään If-None-Match / If-Modified-Since headers. Muutamat sivut palauttavat HTTP:n 304 ja välttävät uudelleenkäsittelynM SK2 ETagin tukemattomien serverien osalta , SHAMST4 sisältöhashes catch duplicatesMSC5

Kun kysely oli crawloitu, kysymys on täysin offline:

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

Euroopan unionin --name lippureittejä paikalliseen KB:hen verkkolähteiden sijasta. Samoja kolmeaM SK1lohkopyynnön tulipaloja : FTS+5 täytäntöönpanoa-tekstiä edeltävä toimenpide-filteriM SK6 sisällyttäminen HNSW-tutkimukseen, osapuolten profiili HNSD-tutkemukseen†. Ne ovat yhtymäyhteyksiäMSC9yhdistettyjä ja järjestettyjä~. Sama vähennysputki*, sama synteesisointi*M SK12 ei tarvita verkkoa

Storage on lightweight: SQLite metadataa ja FTS-tietokantoja varten5 indeksitM SK2 DuckDB HNSW:n vektoriindeksejä varten VSS-lisäverkon kanssa . Mitään ulkoisia palveluja ei ole saatavillaMSC4 Dockeria ei ole käytettävissäMST5 API-kysymyksiä ei ole käytössäMSV6 Sadat sivut sisältyvät muutamaan megabyteen ja kysymykset miljooniin sekunteihin.

Putting It Together

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

Ajatukset, joiden ansiosta se onnistui

Nämä ovat näkemykset.

  1. Vähennä ennen kuin luotte: standardin tie tarvitsee vain 1 LLM-puhelua, koska putki tekee kaiken raskaan nostamisen määrätietoisesti Vähennetty RAG on malli, : embeddings, PageRank, heuristiikka ja laatuportaalit tuottavat niin puhdasta inputiä, että jopa pienet mallit synteesisivät hyvin.
  2. Sentinel-johtoinen lähdesuuntaus: pieni malli tulkitsee kysymykset rakenteellisiksi tarkoituksiksi , sitten YAML-johtoinen etenemissuuntaus valitsee ja vibeM SK3valvoo ~10\lähteet \ .\ sentinel on riittävän halpa jokaista kysymystä vastaanottamiseksi
  3. Suurin samankaltaisuus yhdistetyissä kysymyksissä: donM SK1t keskimääräiset alakysymyksen tulokset , ottavat parhaan vastauksen M SK3 Kirje, jossa vain mainitaan yksi osa kysymyksestänne, on parempi kuin yksi puoli
  4. Yhdentämisjärjestelmät, ei tulosta: RRF:n avulla voidaan yhdistää signaalit yhteensopimattomiin mittakaavaihin . Valtuutemus, tuoreusM SK3 sisällyttäminen samankaltaisuuteenMSC4 vibe-asetusMRK5 vain luokitus ja yhdistäminenMST6
  5. Vibeet sisällyttämisenä: mikä tahansa teksti voi olla jäljittämisulottuvuus
  6. Entiteettiprofiilit vektorina:, IDF, -, painotettujen entityjen sisällyttäminen, ,, ei entity string counting, M SK3, harvinaiset entiteet hallitsevat profiiliä,,, tavalliset entiteet muuttuvat meluksi ja HNSW-tutkimuksessa löydetään asiaa koskevia artikloja O, MSV6, log N, MSC7
  7. Rajoitettu epämääräinen kontekstin vetäminen: deterministinen kontekstihallinto sallii rinnakkaisen osuuden generationin. Käytössä olevat yhteenvedot, negatiiviset viivytykset , entiteetin jatkuvuusM SK3 ja drift-detection säilyttävät johdonmukaisuuden ilman LLM:n painetta koskevia puheluja
  8. Deterministinen, jos mahdollista: kuudesta pitkästä vaiheesta, -muodollinen vaihe,, neljä on deterministista, M SK3 TekstiRank korvaa LLM:n yhteenvedon, . Evidence assignment korvaa lLM-valinnan, MSC5

Resurssit

Myös

logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.