Ricerca
Trasforma una domanda in un brief di ricerca con fonti
Interroga il web, salva come Markdown le pagine dietro la risposta, aggiungi ciò che dicono i professionisti su X e conserva le prove in un LiveDoc che potrai interrogare di nuovo.
Copia il prompt
Sostituisci i campi tra parentesi quadre e incolla in Claude Code, Codex o qualsiasi IA con accesso al terminale. Installa lo skill Felo, chiede prima di spendere crediti ed esegue il workflow.
Prepara un brief di ricerca con fonti per [domanda o decisione]. Ambito: [mercato, regione, lingua]. Finestra temporale: [ultimi 30 giorni / ultimi 12 mesi]. Pubblico: [chi lo leggerà]. Profondità: [panoramica di una pagina / brief completo]. Produci un brief Markdown con: 1. Una risposta breve in tre punti. 2. Una tabella delle prove: affermazione, titolo della fonte, URL, data di pubblicazione. 3. I punti su cui le fonti divergono. 4. Ciò che resta sconosciuto. 5. Un elenco completo delle fonti. Regole: - Ogni affermazione fattuale deve avere un link alla fonte. Separa fatti, opinioni e tue deduzioni. - Non inventare mai citazioni, metriche, date o fonti. Un dato mancante si scrive «Non disponibile», mai zero. - Privilegia le fonti primarie. Usa X come segnale degli operatori, non come prova. - Trasforma la finestra temporale in date esplicite di inizio e fine e indica il fuso orario. - Prima di consumare crediti, mostra le chiamate API previste e attendi la mia approvazione. - Non creare attività ricorrenti, non inviare messaggi e non pubblicare nulla. - Scrivi il risultato in ./research-brief.md e riassumilo in chat.
La copia include anche i passaggi di installazione e le regole di sicurezza.
Cosa ottieni
Output di esempio di un'esecuzione. Non è generazione dal vivo.
I modelli piccoli sostituiranno i grandi nei bot di supporto?
Risposta breve
- I modelli piccoli bastano già per classificazione e risposte di primo livello.
- Il collo di bottiglia è la qualità del recupero, non la dimensione del modello.
- I team che hanno cambiato riportano costo per ticket più basso, non tasso di risoluzione più alto.
| Affermazione | Fonte | Data |
|---|---|---|
| La qualità del recupero domina la qualità della risposta | https://example.com/rag-eval | 2026-10-12 |
| Costo per ticket risolto calato del 38% | https://example.com/support-case | 2026-09-28 |
Dove le fonti divergono
I benchmark dei fornitori mostrano quasi parità; i test indipendenti vedono ancora un divario sui rimborsi a più passaggi.
Ancora sconosciuto
Se il divario si chiude con tool migliori o richiede un modello più grande.
Le chiamate esatte
Per gli sviluppatori: lo stesso workflow come codice, nell'ordine di esecuzione.
Mostra le chiamate API reali
Interroga il web
Chat cerca nel web, ordina le fonti, scrive la risposta e restituisce le risorse usate. Conserva le prime tre: ogni passaggio successivo segue uno di quei link. L’helper invia la chiave una volta e lancia errore fuori da 2xx.
research.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type ChatData = { data: { answer: string; resources: { link: string; title: string }[] }; }; export async function answer(question: string) { const chat = await felo<ChatData>("/v2/chat", { query: question }); return { answer: chat.data.answer, sources: chat.data.resources.slice(0, 3) }; }Output di esempio
{ "answer": "Recent developments include …", "sources": [ { "link": "https://example.com/article", "title": "…" } ] }Scarica le pagine dietro la risposta
Un estratto non basta per un brief. Scarica le pagine in Markdown con leggibilità attiva, così citazioni e titoli sopravvivono senza il rumore di navigazione. Richiedere di nuovo lo stesso URL può usare la cache di estrazione.
research.ts type ExtractData = { data: { content: string } }; const pages = await Promise.all( sources.map((source) => felo<ExtractData>("/v2/web/extract", { url: source.link, output_format: "markdown", with_readability: true, with_cache: true, }).then((page) => ({ ...source, content: page.data.content })), ), );Output di esempio
// pages[0].content "# Example Article\n\nExtracted article content…"
Aggiungi ciò che dice X
Le notizie coprono gli annunci; X mostra ciò che le persone incontrano nella pratica. Cerca gli ultimi sette giorni e conserva autore e data per attribuire ogni affermazione. Aumenta
limitper ampliare; ogni pagina di risultati ha un cursor.research.ts type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; }[]; }; }; const since = Math.floor((Date.now() - 7 * 24 * 60 * 60 * 1000) / 1000); const social = await felo<XData>("/v2/x/tweet/search", { query: question, limit: 10, since_time: since, });Output di esempio
{ "data": { "tweets": [ { "content": "…", "author": { "username": "…" }, "created_at": "…" } ] } }Archivia le prove in un LiveDoc
Crea un LiveDoc e aggiungi le fonti come risorse URL. L’API deduplica ciò che ha già visto e restituisce un resource id per URL, così le stesse prove possono essere interrogate in futuro senza riscaricarle.
research.ts type LiveDocData = { data: { short_id: string } }; const doc = await felo<LiveDocData>("/v2/livedocs", { name: `Research: ${question.slice(0, 60)}`, description: "Sources collected while answering the question", }); await felo(`/v2/livedocs/${doc.data.short_id}/resources/urls`, { urls: sources.map((source) => ({ url: source.link, title: source.title })), }); console.log(doc.data.short_id); // keep this for later queriesInterroga di nuovo le prove
Qui sta il vantaggio: la domanda successiva fa ricerca semantica sul LiveDoc invece che sul web aperto. Passa
resource_idssolo per limitarti a un sottoinsieme noto.research.ts type Retrieved = { data: { title: string; content: string; score: number }[]; }; async function ask(livedoc: string, query: string) { const hits = await felo<Retrieved>( `/v2/livedocs/${livedoc}/resources/retrieve`, { query }, ); return hits.data.filter((hit) => hit.score >= 0.7); }Output di esempio
[ { "title": "…", "content": "…", "score": 0.92 } ]
Cosa include
- Risposta con fonti dal Chat API e le pagine dietro
- Estrazione delle pagine complete in Markdown per le fonti migliori
- Post X con autore e data come segnale dei professionisti
- LiveDoc che mantiene le prove interrogabili per domande future
Cosa non fa
- Solo fonti pubbliche; pagine a pagamento o solo login possono fallire
- La copertura X è un segnale, non un’indagine rappresentativa
- Niente interviste, dati privati o database a pagamento
- Quando le prove sono scarse, il brief lo dice invece di riempire i vuoti
- Un’esecuzione per prompt; la pianificazione spetta al tuo agent o cron
Domande
Da dove vengono le fonti?
Il Chat API restituisce le pagine usate, Web Fetch trasforma le più solide in Markdown e X Search aggiunge post datati dei professionisti. Ogni elemento conserva il suo URL.
Posso ricercare un mercato fuori dalla tecnologia?
Sì. Sostituisci il campo di ambito con il tuo mercato. Le nicchie possono avere meno fonti pubbliche; il brief segnala quei vuoti invece di indovinare.
Le prove restano dopo l’esecuzione?
Sì, se viene eseguito il passaggio LiveDoc. Il short_id restituito consente alle domande successive di interrogare le stesse pagine senza riscaricarle.
Quanto costa un brief?
La fatturazione avviene in crediti a consumo; le tariffe attuali sono nella pagina dei prezzi. Il prompt chiede approvazione prima di spendere.
Posso eseguirlo ogni settimana?
Sì, ma questo prompt viene eseguito una volta. Metti la pianificazione in un agent o cron che esegue lo stesso workflow.
E se una fonte è dietro un paywall?
Viene saltata e marcata non disponibile. Il brief non riempie mai il vuoto con un fatto o una citazione inventati.
Workflow correlati
Pubblica un digest quotidiano di notizie IA che il team legga davvero
Ottieni una rassegna con fonti, aggiungi le discussioni dei professionisti su X, prendi una trascrizione video, componi l’edizione in Markdown e archiviala in un LiveDoc.
Apri il workflowUfficioTrasforma una pagina di ricerca in una presentazione
Estrai la pagina, salvala come contesto LiveDoc, lascia che la PPT Task API costruisca il deck e interroga finché il link è pronto.
Apri il workflowSupportoRispondi alle domande di supporto dalla tua documentazione
Crea un LiveDoc, carica help center e runbook interno, recupera i passaggi che rispondono al ticket e lascia che il modello risponda solo da quelle prove.
Apri il workflowAdattala a te
La stessa ricetta, adattata a come lavori davvero.
Scrivi il brief in un file
Unisci risposta, estratti delle pagine e citazioni X in Markdown e passali al tuo strumento di report o committali nel repository docs. Tieni i link accanto alle affermazioni: il brief vale quanto le sue citazioni.
Eseguilo pianificato
Avvolgi `answer()` in un cron e scrivi ogni brief in un file datato. Lo stesso LiveDoc accumula fonti e alla quarta settimana risponde con le prove delle prime tre.
Salta il LiveDoc
Se hai già un database, salva lì la risposta chat e le pagine estratte. Il passaggio LiveDoc serve alla ricerca, non allo storage predefinito.
Continua
Le pagine di riferimento dietro questa ricetta e i prossimi passi.