# elovic-gpt-researcher-context-filter-jev-2026-09-26

## Veille

Pagina di documentazione tecnica di **GPT Researcher**, *"Context Filter"*, riscritta il **26 settembre 2026** da **Assaf Elovic**, il creatore del progetto, il giorno in cui ha reso **Jev** (un modello di **TypeSafe**) il filtro di contesto predefinito. Circa **2.200 parole**, incluso un benchmark riproducibile. **(A)** La tesi progettuale: il filtro di contesto è *"la leva più importante sulla qualità del report dopo la ricerca stessa"*: *"ciò che scarta, il writer non lo vede mai"*. **(B)** Il meccanismo: ogni pagina raccolta (scraped) viene suddivisa in blocchi (chunk) di **1.000 caratteri**. Jev assegna a ciascun chunk un punteggio di utilità su una scala a quattro livelli (da 0 a 3), e solo i chunk con punteggio **≥ 1,5** vengono conservati, al massimo dieci. Senza una chiave API, entra in gioco un fallback locale **BM25** con soglia relativa. **(C)** Il benchmark: 28 task ripetuti sulle stesse pagine. **73%** di passaggi pertinenti per Jev contro **46%** per gli embedding, **15-10-3** nei confronti diretti, allo stesso costo (~0,115 $ per report). **(D)** Il risultato più trasferibile: *"la soglia conta più del ranking"*. Senza soglia, Jev scende di nuovo al 50%. Il guadagno deriva da meno rumore, non da più contenuto. Estende, sul lato della ricerca web, il confronto delle strategie di retrieval di [[comparethemarket-context-retrieval-ai-code-review-gkg-rag-2026-03-06]].

## Titre Article

Context Filter

## Date

2026-09-26

## URL

https://docs.gptr.dev/docs/gpt-researcher/gptr/context-filter

## Keywords

filtro di contesto, filtro di contesto, selezione dei passaggi, GPT Researcher, Jev, TypeSafe, System One, punteggio di utilità, probabilità calibrate, soglia di selezione, BM25, ricerca lessicale, embedding, similarità del coseno, suddivisione in chunk, chunking, fallback, modalità fallback, benchmark ripetuto, precisione, confronto a coppie, giudice LLM, SimpleQA, deep research, costo per report, rumore contestuale, context engineering

## Authors

Assaf Elovic, créateur de GPT Researcher, auteur de la page (documentation officielle docs.gptr.dev, non signée).

## Ton

**Profilo**: documentazione di riferimento per un progetto open source, scritta dal suo lead maintainer proprio il giorno del cambiamento del comportamento predefinito. La pagina funge sia da manuale (modalità, variabili d'ambiente, catena di fallback) sia da giustificazione basata su misurazioni per quella scelta.

**Stile**: sobrio, denso, orientato all'ingegnere. Diagramma della pipeline in ASCII, richiesta HTTP completa, tabelle di risultati, parametri numerici (k1 = 1,5, b = 0,75, 64 chiamate concorrenti). Le affermazioni sono brevi e fondate su evidenze (*"un punteggio di utilità calibrato può dire 'nient'altro in questa pagina merita di essere incluso'; un punteggio di similarità non può"*).

**Posizione epistemica**: più prudente della media delle pagine di prodotto. Protocollo pubblicato, script e metriche committati, test di significatività fornito (p ≈ 0,008 per Jev, p ≈ 0,12 per il fallback BM25, definito *"indicativo"*). Una sezione sui limiti precede la riproduzione: 28 task, un solo modello writer, un solo tipo di report, scrittura e valutazione a cura della stessa famiglia (gpt-5.4). La scelta predefinita avvantaggia un fornitore terzo (TypeSafe), e la pagina non dice nulla sulla relazione tra i due progetti. Il fallback gratuito, tuttavia, è documentato e misurato come almeno equivalente agli embedding.

## Pense-betes

- **Dove si colloca il filtro.** Query → sub-query → per ciascuna: ricerca, scraping, **filtro**, passaggi. I passaggi di tutte le sub-query vengono uniti e poi inviati al writer. Pagina limitata a **50.000 caratteri**, suddivisa in chunk di **1.000 caratteri** con una sovrapposizione di 100. La chat su un report già completato passa per la stessa funzione `select_context()`, trattando il report come un'unica pagina.
- **Cinque modalità** (`CONTEXT_FILTER`): `auto` (Jev se è presente una chiave, altrimenti keyword), `jev`, `keyword` (BM25), `embeddings`, `none`. Qualsiasi errore di Jev (chiave assente, problema di rete, 429/529 dopo tre tentativi, risposta malformata) ricade sul keyword. Nessuna configurazione lascia un'esecuzione senza contesto. Sotto gli **8.000 caratteri** totali, tutto passa senza filtraggio.
- **Jev, un "modello System One"**: non genera testo, risponde a domande tipizzate con probabilità calibrate. Scala a quattro livelli: non pertinente / stesso argomento ma non utile / risponde parzialmente / risponde direttamente. Il punteggio è la media pesata (da 0 a 3). Soglia `JEV_MIN_SCORE` = 1,5. Costo: **0,042 $ per milione di token in input**, output gratuito, ovvero ~mezzo centesimo per report.
- ⭐ **Il guadagno dipende dalla soglia, non dal modello.** Jev costretto a riempire 10 slot senza soglia: 73% → **50%**, appena meglio degli embedding. BM25 top-10 grezzo: 40%, perde contro gli embedding; lo stesso BM25 con soglia relativa (≥ 50% del chunk migliore): 51%, li supera. Una metrica capace di dire "nient'altro merita di entrare" batte un ranking che riempie sempre il budget.
- **Meno rumore, non più contenuto.** Jev invia **4,5k token** contro 7,6k degli embedding, per una quantità di testo pertinente quasi identica (~3,3k contro 3,5k). La differenza riguarda ciò che il writer deve ignorare. Fa eco alla diagnosi di *context rot*, vista dal lato dell'input.
- **Non filtrare affatto** vince sulle domande aperte (8-0 contro gli embedding), ma costa **+65%** per report (+83% sulle domande aperte) e invia fino a 108k token. Sulle domande fattuali, nessun guadagno. Il divario si amplia nella *deep research*, che moltiplica le sub-query.
- **Protocollo riutilizzabile**: registrare le pagine effettivamente viste dal filtro, riprodurle con ciascun filtro, writer tenuto costante, poi valutare da tre angolazioni (precisione dei passaggi, confronto diretto alla cieca in entrambi gli ordini, accuratezza SimpleQA). Ricerca e scraping, le fasi più rumorose, vengono neutralizzate.
- **SimpleQA è saturo**: da 18 a 20 su 20 per ogni filtro. Un benchmark fattuale non distingue tra le strategie di contesto.
- ⚠️ **I limiti indicati dalla pagina stessa**: 28 task, solo report standard, scrittura e valutazione a cura della stessa famiglia di modelli. Costo del benchmark: ~41 $ per scrittura e filtraggio, più da 8 a 15 $ per la valutazione.

## RésuméDe400mots

La pagina di documentazione di GPT Researcher "Context Filter", riscritta il 26 settembre 2026 dal suo creatore Assaf Elovic, descrive la fase che sceglie, tra le pagine raccolte, i passaggi che il modello writer leggerà effettivamente. La presenta come la leva principale sulla qualità del report dopo la ricerca stessa.

Per ogni sub-query, le pagine sono limitate a 50.000 caratteri e suddivise in chunk di 1.000 caratteri. Il filtro conserva al massimo dieci chunk (venticinque in modalità keyword), poi i contesti delle sub-query vengono uniti e passati al writer. La chat su un report esistente riutilizza la stessa funzione.

Sono disponibili cinque modalità. Per impostazione predefinita, GPT Researcher usa Jev, un modello di TypeSafe che non genera testo ma risponde a domande tipizzate con probabilità calibrate. Ogni chunk riceve un punteggio di utilità da 0 a 3 su una scala a quattro livelli; vengono conservati solo i chunk con punteggio pari o superiore a 1,5. Le chiamate partono in parallelo, sessantaquattro alla volta, per circa 1,7 secondi di tempo mediano di filtraggio e mezzo centesimo per report. Senza una chiave TypeSafe, o in caso di errore, il sistema ricorre a un ranking BM25 in puro Python, senza dipendenze, che conserva i chunk che raggiungono metà del punteggio del chunk migliore. Nessuna configurazione lascia un'esecuzione senza contesto.

Il benchmark ripete 28 task reali, 20 domande SimpleQA e 8 domande aperte, esattamente sulle pagine che erano state registrate, con lo stesso modello writer. Varia solo il filtro. Jev raggiunge il 73% di passaggi pertinenti contro il 46% degli embedding, e vince 15 confronti diretti contro 3, con 10 pareggi, allo stesso costo. Il fallback BM25 raggiunge il 51% e vince 14 contro 6, un risultato giudicato solo indicativo. Senza filtro, i report a domanda aperta guadagnano in ampiezza, ma costano in media il 65% in più.

Due risultati strutturano la pagina. Primo, la soglia conta più del ranking: senza soglia, Jev scende al 50% e BM25 perde contro gli embedding. Secondo, il guadagno è una riduzione del rumore: Jev invia 4,5k token invece di 7,6k, per una quantità equivalente di testo pertinente. SimpleQA, saturo a 18-20 su 20, non discrimina affatto.

La pagina elenca i propri limiti: 28 task, un solo tipo di report, scrittura e valutazione a cura della stessa famiglia di modelli. Gli script di raccolta, replay e valutazione sono pubblicati, insieme alle metriche di ogni esecuzione, così chiunque può ripetere la misurazione.

## GrapheDeConnaissance

- Assaf Elovic —a_créé→ GPT Researcher (TECHNOLOGIE, 0.95)
- Assaf Elovic —publie→ page Context Filter (DOCUMENT, 0.9)
- GPT Researcher —utilise→ Jev (TECHNOLOGIE, 0.97)
- TypeSafe —a_créé→ Jev (TECHNOLOGIE, 0.97)
- GPT Researcher —utilise→ BM25 (CONCEPT, 0.95)
- GPT Researcher —utilise→ filtre de contexte (METHODOLOGIE, 0.97)
- filtre de contexte —améliore→ la qualité des rapports de recherche, principal levier après la recherche elle-même (AFFIRMATION, 0.92)
- Jev —est_instance_de→ modèle System One (CONCEPT, 0.93)
- modèle System One —permet→ des réponses à des questions typées sous forme de probabilités calibrées, sans génération de texte (AFFIRMATION, 0.92)
- Jev —surpasse→ embeddings (TECHNOLOGIE, 0.9)
- Jev —mesure→ 73 % de passages pertinents contre 46 % pour les embeddings, 15 victoires, 10 égalités, 3 défaites, sur 28 tâches (MESURE, 0.93)
- BM25 —mesure→ 51 % de passages pertinents et 14-8-6 contre les embeddings avec seuil relatif, 40 % en top-10 brut (MESURE, 0.9)
- page Context Filter —affirme_que→ le seuil de sélection compte plus que le classement : sans seuil, la précision de Jev tombe de 73 % à 50 % (AFFIRMATION, 0.94)
- filtre de contexte —réduit→ le bruit transmis au rédacteur, 4,5 k tokens contre 7,6 k pour une quantité de texte pertinent équivalente (MESURE, 0.9)
- page Context Filter —affirme_que→ ne pas filtrer élargit les rapports ouverts mais coûte 65 % de plus par rapport, sans gain sur les questions factuelles (AFFIRMATION, 0.9)
- page Context Filter —affirme_que→ SimpleQA est saturé, 18 à 20 sur 20 pour tous les filtres, et ne départage pas les stratégies de contexte (AFFIRMATION, 0.9)
- page Context Filter —est_basé_sur→ benchmark rejoué à pages constantes, jugé par gpt-5.4 et gpt-5.4-mini (AFFIRMATION, 0.88)
- page Context Filter —affirme_que→ "A calibrated usefulness score can say 'nothing else on this page is worth including'; a similarity score can't." (CITATION, 0.93)
- filtre de contexte —fait_partie_de→ context engineering (METHODOLOGIE, 0.8)

---
Canonical: https://www.thekb.eu/it/fiches/elovic-gpt-researcher-context-filter-jev-2026-09-26/
