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
Sunday, 21 December 2025
Det här är Häfte 2 i DocSummarizer serien. Se Häfte 1 för arkitektur och mönster, eller Häfte 3 för den djupa tekniska dykningen i inbäddningar och hämtning.
Förvandla dokument eller webbadresser till faktabaserade sammanfattningar - för människor eller AI agenter - utan att skicka något till molnet.
Varje påstående är spårbart, alla fakta anger dess källa, fristående binär, körs helt på din maskin.
# Human-readable summary
docsummarizer -f contract.pdf
# JSON for agents/pipelines
docsummarizer tool -u "https://docs.example.com"
Vad den här artikeln behandlar: Installation, nyckellägen (Auto/BertRag/Bert), mallar och vanliga användningsfall.
Vad det inte täcker: Fullständig kommandoreferens, inställningsalternativ, felsökning, arkitekturdetaljer.
För fullständig dokumentation, se INLEDNING. För hur det fungerar internt, se Häfte 3.
De flesta sammanfattningar ger dig text. bevis.
[chunk-N] hänvisningar Tillbaka till källmaterialOm du behöver Tillit En sammanfattning - eller mata den till ett annat system - som är viktig.
och tool kommando är speciellt utformad för integration med AI-agenter, MCP-servrar och andra automatiserade system. Det ger strukturerade JSON att stdout med bevis-grundade påståenden - perfekt för att bygga RAG rörledningar eller agent verktyg.
# Summarize a URL and get JSON output
docsummarizer tool --url "https://example.com/docs.html"
# Summarize a local file
docsummarizer tool -f document.pdf
# With a focus query
docsummarizer tool -f contract.pdf -q "payment terms and conditions"
# Pipe to jq for processing
docsummarizer tool -f doc.pdf | jq '.summary.keyFacts'
Verktygskommandot returnerar strukturerad JSON med bevisspårning:
{
"success": true,
"source": "https://example.com/docs.html",
"contentType": "text/html",
"summary": {
"executive": "Brief summary of the document.",
"keyFacts": [
{
"claim": "The system supports 10,000 TPS.",
"confidence": "high",
"evidence": ["chunk-3", "chunk-7"],
"type": "fact"
}
],
"topics": [
{
"name": "Architecture",
"summary": "The system uses microservices...",
"evidence": ["chunk-1", "chunk-2"]
}
],
"entities": {
"people": ["John Smith"],
"organizations": ["Acme Corp"],
"concepts": ["OAuth 2.0", "REST API"]
},
"openQuestions": ["What is the disaster recovery plan?"]
},
"metadata": {
"processingSeconds": 12.5,
"chunksProcessed": 15,
"model": "qwen2.5:1.5b",
"mode": "MapReduce",
"coverageScore": 0.95,
"citationRate": 1.2,
"fetchedAt": "2025-01-15T10:30:00Z"
}
}
docsummarizer tool [options]
tillval och kort beskrivning på plats
|--------|-------|-------------|
| --url | -u på webbadressen för att hämta och sammanfatta
| --file | -f Fil för att sammanfatta
| --query | -q Obligatorisk fokusfråga
| --mode | -m Sammanfattande läge (Auto, BertRag, Bert, BertHybrid, MapReduce, Rag, Iterative)
| --model Ollama modell att använda
| --config | -c Inställningsfilsökväg
evidence ID:n som refererar till källbitarhigh, medium, eller low på grundval av bevisning som ligger till grund för detta beslut,executive sammanfattning har inga citeringsmarkörer för enkel visningsuccess: false med en error meddelandePythonskript:
import subprocess
import json
result = subprocess.run(
["docsummarizer", "tool", "-u", "https://example.com/api-docs"],
capture_output=True, text=True
)
data = json.loads(result.stdout)
if data["success"]:
for fact in data["summary"]["keyFacts"]:
if fact["confidence"] == "high":
print(f"- {fact['claim']}")
Skalledning:
# Extract high-confidence facts only
docsummarizer tool -f doc.pdf | jq '[.summary.keyFacts[] | select(.confidence == "high")]'
# Get just the executive summary
docsummarizer tool -u "https://example.com" | jq -r '.summary.executive'
Förbyggda inhemska körbara program finns tillgängliga från Utgåvor av GitHub:
Ladda ner ladda ner ladda ner
| ---------- | -------------- | ---------- |
|---|---|---|
Fönster på ARM64 docsummarizer-win-arm64.zip |
||
Obligatoriskt för Linux på x64 docsummarizer-linux-x64.tar.gz |
||
Obligatoriskt för Linux på ARM64 docsummarizer-linux-arm64.tar.gz |
||
och macOS på x64 (Intel) docsummarizer-osx-x64.tar.gz |
||
ARM64 (Apple Silicon) docsummarizer-osx-arm64.tar.gz |
# Download and extract (Linux/macOS)
curl -L -o docsummarizer.tar.gz https://github.com/scottgal/mostlylucidweb/releases/download/docsummarizer-v3.1.0/docsummarizer-linux-x64.tar.gz
tar -xzf docsummarizer.tar.gz
chmod +x docsummarizer
# Download and extract (Windows PowerShell)
Invoke-WebRequest -Uri "https://github.com/scottgal/mostlylucidweb/releases/download/docsummarizer-v3.1.0/docsummarizer-win-x64.zip" -OutFile "docsummarizer.zip"
Expand-Archive -Path "docsummarizer.zip" -DestinationPath "."
För ren utvinningssammanfattning, Inga externa tjänster krävs:
docsummarizer -f document.md -m Bert
ONNX modeller automatisk nedladdning från HuggingFace vid första användning (~23MB). Returnerar i ~3-5 sekunder.
För LLM-driven summering krävs Ollama:
# Install Ollama from https://ollama.ai
ollama pull llama3.2:3b # Default model - good balance of speed/quality
ollama serve
Hastighetstips: För snabbare sammanfattningar (~3s vs ~15s), använd
--model qwen2.5:1.5b
Krävs för PDF, DOCX, XLSX, PPTX, HTML, bilder (PNG/JPG/TIFF), CSV, VTT och AsciiDoc-filer. Markering och enkla textfiler läses direkt - ingen dockning krävs.
docker run -d -p 5001:5001 quay.io/docling-project/docling-serve
Krävs inte som standard - BertRag använder vektorer i minnet. Aktivera Qdrant för ihållande lagring för att undvika att återinbädda dokument i efterföljande körningar:
docker run -d -p 6333:6333 -p 6334:6334 qdrant/qdrant
Anpassa sedan in docsummarizer.json:
{
"bertRag": {
"vectorStore": "Qdrant",
"collectionName": "docsummarizer",
"persistVectors": true
}
}
Om du föredrar Ollama för inbäddningar istället för ONNX:
ollama pull nomic-embed-text # Or mxbai-embed-large
# Then use: --embedding-backend Ollama
docsummarizer check --verbose
Förväntad effekt visar en formaterad tabell:
Dependency Status
╭─────────┬────────┬────────────────────────╮
│ Service │ Status │ Endpoint │
├─────────┼────────┼────────────────────────┤
│ Ollama │ OK │ http://localhost:11434 │
│ Docling │ Optional │ http://localhost:5001 │
│ Qdrant │ Optional │ localhost:6333 │
╰─────────┴────────┴────────────────────────╯
Default Model Info
╭────────────────┬────────────────╮
│ Property │ Value │
├────────────────┼────────────────┤
│ Name │ llama3.2:3b │
│ Family │ llama │
│ Parameters │ 3.2B │
│ Context Window │ 128,000 tokens │
╰────────────────┴────────────────╯
Ready to summarize! Ollama is available.
Anmärkning: Dockning och Qdrant som visar till är bra för arbetsflöden endast Markdown.
Kör docsummarizer utan några argument kommer att
README.md i aktuell katalogreadme.summary.md# Summarize README.md in current directory
docsummarizer
# Shows a formatted panel with:
# - Document info table (file, mode, model)
# - Progress indicators during processing
# - Summary panel with the result
# - Topics tree if available
# - Saved: readme.summary.md
# Just run it - Auto mode picks the best approach
docsummarizer -f document.pdf
# Fast mode - no LLM, pure extraction (~3-5s)
docsummarizer -f document.pdf -m Bert
# Production mode - best quality with validated citations
docsummarizer -f document.pdf -m BertRag
# Focused on specific topic
docsummarizer -f manual.pdf -m BertRag --focus "installation steps"
# Verbose progress
docsummarizer -f document.pdf -v
Verktyget utvecklades från "bara MapReduce" till en full pipeline. Här är vad varje läge faktiskt gör:
Väljer rätt läge baserat på vad du ber om. Använd detta om du inte har en anledning att inte.
docsummarizer -f doc.pdf
Det här är vad du vill ha för produktion.
docsummarizer -f doc.pdf -m BertRag
docsummarizer -f doc.pdf -m BertRag --focus "payment terms"
Varför använda den: Varje påstående spårar tillbaka till en källa segment. Ingen hallucination. Skalar till någon dokumentstorlek. LLM bara körs i slutet (billig).
Ren extraktion med lokala ONNX-modeller, inget LLM-samtal alls.
docsummarizer -f doc.pdf -m Bert
Varför använda den: Fungerar offline. Returnerar i ~3-5 sekunder. Deterministisk (samma indata = samma utdata). Tillräckligt bra för snabbsökning.
BERT-extrakt, LLM-lack. Mellanmark mellan Bert och BertRag.
docsummarizer -f doc.pdf -m BertHybrid
De ursprungliga lägena. Fungerar fortfarande, men BertRag ersatte dem för de flesta användningsfall.
docsummarizer -f doc.pdf -m MapReduce # Full coverage
docsummarizer -f doc.pdf -m Rag --focus "query" # Legacy focused mode
I stället för att sammanfatta, ställ frågor om ett dokument:
docsummarizer -f manual.pdf --query "How do I install the software?"
Sammanfatta webbsidor direkt utan att ladda ner:
# Summarize a web article
docsummarizer --url "https://example.com/article.html" --web-enabled
# Summarize a remote PDF
docsummarizer --url "https://example.com/document.pdf" --web-enabled
# With structured JSON extraction
docsummarizer --url "https://example.com/api-docs.html" --web-enabled --structured
Innehåll som stöds: HTML (sanitized), PDF, Markdown, bilder (OCR), Office-dokument. Stora bilder ändras automatiskt.
Säkerhet: SSRF-skydd, DNS-rebindande skydd, innehållsliknande gating, dekompressionsbombskydd, HTML-sanering.
JavaScript-renderade sidor: Användning --web-mode Playwright för SPA och React-appar (auto-installationer Krom vid första användningen).
Extrahera maskinläsbar JSON istället för prosa:
docsummarizer -f document.pdf --structured -o Json
Utdrag: enheter, funktioner, nyckelflöden, fakta (med konfidensnivåer), osäkerheter, koncisa passager.
# Use a template
docsummarizer -f doc.pdf --template executive
docsummarizer -f doc.pdf -t bullets
# Specify custom word count with template:wordcount syntax
docsummarizer -f doc.pdf -t bookreport:500
docsummarizer -f doc.pdf -t executive:100
# Or use --words to override any template's default
docsummarizer -f doc.pdf -t detailed --words 300
Template med ord på bästa sätt
|----------|-------|----------|
| default på ~300 på balanserad sammanfattning med ämnen (2 stycken)
| prose på ~400 på ren flerpunktsprosa - inga metadata
| brief Kort sammanfattning på 2-3 meningar
| oneliner Sammanfattning av enkel mening
| bullets Skottpunktslista (5-7 objekt)
| executive på ~150 på Executive information med rekommendationer
| detailed på ~1000 på ett heltäckande sätt med alla ämnen
| technical på ~350 på tekniska dokument med genomförandedetaljer på
| academic på ~250 på Akademiskt abstrakt format på engelska
| citations på auto på nyckelcitat med källciteringar endast på
| bookreport på ~500 på bok rapport (inställning, tecken, tomt, teman) på
| meeting på ~200 på Möteskommentarer (beslut, åtgärder, frågor)
| strict på ~60 på Token-effektiva, 3 kulor max, ingen säkring
För att se alla tillgängliga mallar med beskrivningar:
docsummarizer templates
Jämför modeller på samma dokument med hjälp av benchmark underkommando:
docsummarizer benchmark -f doc.pdf -m "qwen2.5:1.5b,llama3.2:3b,ministral-3:3b"
Kommandot benchmarking tolkar dokumentet en gång, kör sedan varje modell på samma bitar för rättvis jämförelse. Utmatning visar timing, ordräkning och ord/sekund för varje modell.
Behandla hela kataloger:
# Use BertRag for quality
docsummarizer -d ./documents -m BertRag -v
# Fast offline batch (no LLM needed)
docsummarizer -d ./documents -m Bert -o Json --output-dir ./summaries
# Process only PDFs recursively
docsummarizer -d ./documents -e .pdf --recursive -v
Förvalt alternativ och kort beskrivning på grund av förvalda värden
|--------|-------|-------------|---------|
| --file | -f Sökväg till dokument (DOCX, PDF, MD) på engelska
| --directory | -d Sökväg till katalog för batch-bearbetning
| --url | -u Webbadress för att hämta och sammanfatta
| --web-enabled Aktivera webbhämtning (krävs för --url) false |
| --mode | -m Sammanfattande läge: Auto, BertRag, Bert, BertHybrid, MapReduce, Rag, Iterative Auto |
| --structured | -s Använd strukturerat JSON-extraktionsläge false |
| --focus Inriktningsfråga för RAG-läge
| --query | -q och frågeläge istället för summering
| --model Ollama modell att använda llama3.2:3b |
| --verbose | -v på Visa detaljerade framsteg med live UI false |
| --config | -c Sökväg till inställningsfil med automatisk upptäckt
| --output-format | -o Utmatningsformat: Konsol, Text, Markering, Json Console |
| --output-dir Utmatningskatalog för filutmatningar
| --extensions | -e på Filtillägg för batch-läge på alla dockningsformat
| --recursive | -r Processkataloger rekursivt false |
| --template | -t En sammanfattning av mallen (standard, kort, kulor, verkställande, etc.) default |
| --words | -w Obligatoriskt antal målord (överskrider mall)
--embedding-backend Inbäddad backend: Onnx, Ollama Onnx |
|
|---|---|
--web-mode Webbhämtningsläge: Enkelt, Playwright Simple |
|
--analyze |
-a till Kör kvalitetsanalys på sammanfattning på false |
Bästa för omfattande sammanfattningar med fullständig dokumenttäckning.
docsummarizer -f document.pdf -m MapReduce -v
Hur det fungerar:
Hierarkisk reduktion för långa dokument:
För mycket långa dokument där den kombinerade bitsammanfattningen överskrider modellens sammanhangsfönster använder MapReduce automatiskt hierarkisk reduktion:
100 chunks → 100 summaries → 5 batches → 5 intermediate summaries → final
Detta bevarar full dokumenttäckning oavsett längd - varje bit bidrar till den slutliga sammanfattningen. Verktyget uppskattar tokens (~4 tecken / token) och riktar 60% sammanhangsfönster utnyttjande per minskning pass.
Förmåner: Snabb, komplett täckning, parallell bearbetning, hanterar dokumentlängd Nackdelar: Kan missa tvärsnittsanslutningar, långsammare för mycket långa dokument
Bäst när du behöver fokusera på specifika ämnen eller har en riktad fråga.
docsummarizer -f document.pdf -m Rag --focus "pricing and payment terms" -v
Hur det fungerar:
När du ska använda RAG över MapReduce:
Scenario på bästa sätt |----------|-----------| på "Summarisera hela detta dokument" på kartanReduce "Vad säger det här om säkerhet?" 500-sidig manual, behöver allt på kartanReduce (hierarkisk) på 500 sidor manual, behöver specifik avsnitt på RAG på Behöver snabba resultat, har inte Qdrant på kartanReduce
RAG är inte om hantering av långa dokument - MapReduce hanterar det med hierarkisk reduktion. RAG handlar om Relevansfiltrering: när du vill ignorera 90% av ett dokument och fokusera på vad som är viktigt för din specifika fråga.
Förmåner: Ämnesfokuserad, semantisk förståelse, återanvändning index, snabbare för fokuserade frågor Nackdelar: Kan missa innehåll utanför fokusområdet, kräver Qdrant, långsammare initial indexering
Bästa för berättande dokument där kontexten flödar sekventiellt.
docsummarizer -f story.pdf -m Iterative -v
Varning: Långsammare och kan förlora sammanhang på långa dokument (>10 bitar).
på dokumenttyp på mål och läge på grund av detta |---------------|------|------|-----| Tekniska specifikationer (50+ sidor) en fullständig sammanfattning på kartanReduce med fullständig täckning på Novel/Narrative med fullständig sammanfattning på kartanReduce och behöver tidskontext till Juridiskt avtal och fullständig sammanfattning på kartanReduce på sidan Kan inte missa klausuler • Lagligt kontrakt • "Betalningsvillkor?" • RAG • Fokusera på specifika avsnitt på API-dokument (200 sidor) på "Hur fungerar auth?" på forskningsrapport och fullständig sammanfattning på kartanReduce med struktur, behöver allt
på innehållstyp på bästa sätt . Anteckningar . |--------------|-----------|-------| | Fiktion/Narrativ på kartanReduce och Plot kräver sekventiellt sammanhang | Tekniska dokument på båda sidor av kartanReduce for overview, RAG for specifics | Rättsliga/avtal på kartanReducera alla klausuler som är viktiga | Handböcker på RAG på Vanligen fråga efter detaljer
på dokumentstorlek på kartanReducera RAG-anteckningar |---------------|-----------|-----|-------| 10 sidor 15s 20s båda snabbt på 50 sidor 45s 30s på RAG snabbare om det är fokuserat på 200 sidor 3-5 min på 1–2 min på Hierarkisk reduktion på 500+ sidor 10–15 min på 2-3 min Överväg flera RAG-frågor
docsummarizer config --output myconfig.json
Inställningen är automatiskt upptäckt från:
--config alternativdocsummarizer.json i aktuell katalog.docsummarizer.json (dold fil)~/.docsummarizer.json (användarhem)Exempel docsummarizer.json:
{
"embeddingBackend": "Onnx",
"onnx": {
"embeddingModel": "AllMiniLmL6V2"
},
"ollama": {
"model": "llama3.2:3b",
"embedModel": "mxbai-embed-large",
"baseUrl": "http://localhost:11434",
"temperature": 0.3,
"timeoutSeconds": 1200
},
"docling": {
"baseUrl": "http://localhost:5001",
"timeoutSeconds": 1200,
"pdfBackend": "pypdfium2",
"pagesPerChunk": 10,
"maxConcurrentChunks": 4,
"enableSplitProcessing": true
},
"qdrant": {
"host": "localhost",
"port": 6333,
"collectionName": "documents"
},
"processing": {
"maxHeadingLevel": 2,
"targetChunkTokens": 1500,
"minChunkTokens": 200,
"maxLlmParallelism": 2
},
"output": {
"format": "Console",
"verbose": false,
"includeTrace": false
},
"webFetch": {
"enabled": false,
"mode": "Simple",
"timeoutSeconds": 30,
"userAgent": "Mozilla/5.0 DocSummarizer/1.0"
},
"batch": {
"fileExtensions": [".pdf", ".docx", ".md", ".txt", ".html"],
"recursive": false,
"continueOnError": true
}
}
Obligatoriskt förvald beskrivning
|--------|---------|-------------|
| maxLlmParallelism Ollama köer (Ollama köer, så högre värden bara kö)
| maxHeadingLevel på endast H1/H2. Ställ in till 3 för finare granularitet
| targetChunkTokens 0 (auto) 0 = automatisk beräkning (~25% av sammanhangsfönstret)
| minChunkTokens 0 (auto) på minsta möjliga före sammanslagningen. 0 = 1/8 av målet
## Executive Summary
- Key finding 1 with specific details [chunk-0]
- Important point 2 with numbers and dates [chunk-3]
- Critical requirement 3 [chunk-5]
## Section Highlights
- Introduction: Overview of the system architecture [chunk-0]
- Requirements: Technical specifications detailed [chunk-3]
...
## Open Questions
- What is the timeline for Phase 2?
- How does the fallback mechanism work?
### Trace
- Document: document.pdf
- Chunks: 12 total, 12 processed
- Topics: 5
- Time: 21.4s
- Coverage: 100%
- Citation rate: 1.20
Spårmått: Täckning (% avsnitt ingår), Citeringshastighet (citeringar / bult), Chunks bearbetade (RAG kan hoppa över några).
på modell på storlek på hastighet och kvalitet på användningsfallet på plats
|-------|------|-------|---------|----------|
| qwen2.5:1.5b på 986MB och mycket snabb (~3s)
| gemma3:1b 815MB på snabb (~10s) på ett rättvist sätt på en alternativ liten modell
| llama3.2:3b 2GB på medellång (~15s) på mycket bra Förval - bra balans
| ministral-3:3b 2.9GB på medellång (~20s) på ett mycket bra sätt, kvalitetsfokuserad
| llama3.1:8b Slow (~45s) på 4,7GB (~45s)
Tips: För snabbare sammanfattningar (~3s vs ~15s), använd
--model qwen2.5:1.5b. För kritiska dokument där kvalitet betyder mer, använd--model llama3.1:8b.
# Clone the repository
git clone https://github.com/scottgal/mostlylucidweb.git
cd mostlylucidweb/Mostlylucid.DocSummarizer
# Build
dotnet build
# Run
dotnet run -- --help
För produktion utan krav på .NET runtime installation:
# Build self-contained executable (Windows x64)
dotnet publish -c Release -r win-x64 --self-contained
# Build for Linux
dotnet publish -c Release -r linux-x64 --self-contained
# Build for macOS
dotnet publish -c Release -r osx-x64 --self-contained
Utmatning: bin/Release/net9.0/<runtime>/publish/docsummarizer
ollama serveollama listdocker run -p 5001:5001 quay.io/docling-project/docling-serve--mode Rag)docker run -p 6333:6333 -p 6334:6334 qdrant/qdrantSymtom: Kul poäng ekar prompten ("Återvänd endast kul poäng", "Reglen är...") i stället för att sammanfatta innehållet.
Orsak: Modell kämpar med snabb eller innehåll för länge.
Rätta: Standardvärdet qwen2.5:1.5b hanterar de flesta dokument bra. För problematiska dokument, försök --model llama3.2:3b. Se också Förlaga till rekommendationer.
Om sammanfattningen verkar generisk eller inte refererar till specifikt innehåll:
Citation rate i spårutgång--mode Rag) som motiverar sammanfattningar i återvunna bitar--verbose för att se vilka bitar som bearbetasOm sammanfattningar saknas [chunk-N] Hänvisningar:
llama3.2:3bCitation rate I spår – högre värden tyder på bättre spårbarhetqwen2.5:1.5b för hastighet, llama3.2:3b för balans, llama3.1:8b för kvalitetmaxLlmParallelism om du upplever timeout© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.