Notizia
Modelli
Prodotti
keyboard_arrow_down
Lettore
Leggi gli URL e cerca sul web per ottenere LLM più approfonditi.
Incorporamenti
Incorporamenti multilingue multimodali di livello mondiale.
Riclassificazione
Recupero neurale di livello mondiale per massimizzare la pertinenza della ricerca.
Ricerca profonda
Cerca, leggi e ragiona finché non trovi la risposta migliore.
Di più
keyboard_arrow_down
Classificatore
Classificazione zero-shot e few-shot per immagini e testo.
Segmentatore
Tagliare il testo lungo in blocchi ed effettuare la tokenizzazione.

Documentazione API
Generazione automatica di codice per il tuo IDE o LLM di Copilot
open_in_new


Azienda
keyboard_arrow_down
Chi siamo
Contatta le vendite
Programma di stagista
Unisciti a noi
open_in_new
Scarica il logo
open_in_new
Termini & Condizioni


Login
login
Cos'è un Feed di Notizie?
Iniziamo Questa Frenesia di Feed
Scaricare i Feed
Estrarre il Testo degli Articoli Con Jina Reader
Riassumere gli articoli con PromptPerfect
Generare un Report di Notizie con PromptPerfect
Leggere le Notizie ad Alta Voce
Prossimi Passi
Blog tecnico
aprile 29, 2024

Crea il tuo Podcast Personalizzato con Jina Reader e PromptPerfect

Usa Jina Reader e PromptPerfect per generare il tuo podcast di notizie personalizzato con feed RSS, estrazione di articoli, LLM e Text-to-Speech.
Neon-lit 3D microphone on black background with a white 'P' and arrow pointing right, amidst a green and blue glow.
Alex C-G
Alex C-G • 9 minuti letti

Come molte persone, ascolto un sacco di podcast. Alcuni sono sulla fantascienza. Altri sulla paleontologia. E altri ancora sui strani personaggi medievali. Nessun true crime purtroppo, a parte il mio occasionale cattivo gusto.

🎧
Quello che non è di cattivo gusto (ovviamente) è il podcast di Jina AI. Assicurati di ascoltarlo!

Ma... è faticoso ascoltare tutti questi podcast. E non sono nemmeno il peggio. Mi sono anche iscritto a molti feed di notizie. E questo può richiedere molta lettura. Sarebbe fantastico se potessi semplicemente prendere tutto il contenuto di quei feed di notizie, metterlo in un riassunto di cinque minuti e far sì che il mio telefono lo legga mentre mi lavo i denti la mattina.

🏥
I dentisti probabilmente non raccomandano di lavarsi i denti per cinque minuti interi. Il blog di Jina AI non dovrebbe essere considerato una fonte di consigli medici. Alcuni di noi sono dottori, ma non quel tipo di dottori.

Immagino che tu possa capire dove voglio arrivare. Sto usando Python per costruire uno strumento con (principalmente) lo stack tecnologico di Jina per creare il mio podcast giornaliero personalizzato di notizie.

Se vuoi andare avanti e sentire come suona, puoi ascoltare qui sotto:

audio-thumbnail
Output
0:00
/1:19

tagCos'è un Feed di Notizie?

Prima di tutto, li chiamo "feed di notizie" poiché la maggior parte delle persone non ha familiarità con i termini RSS o Atom feeds. In breve, un feed è una lista strutturata di articoli pubblicati da un blog o una fonte di notizie, ordinati dal più recente al più vecchio. Molti siti li offrono, e ci sono diverse app e siti web che ti permettono di importare tutti i tuoi feed, permettendoti di leggere tutte le tue notizie in una sola app, senza dover visitare i siti web di Ars Technica, siti fan di Taylor Swift, e Washington Post:

Screenshot image 8
Feeder lettore di feed su Android, che mostra il feed di Ars Technica. Nota il layout semplice, senza pubblicità o elementi inutili

Sono una tecnologia antica del web preistorico, ma molti siti web li supportano, incluso il blog di Jina AI (ecco il nostro feed).

💡
Per i siti che non hanno i propri feed, esistono strumenti di terze parti per generarli.

In breve, i feed ti permettono di leggere tutte le tue notizie in un unico posto, saltando tutti gli elementi inutili nella barra laterale e la pubblicità. In questo post, useremo i feed di notizie per trovare e scaricare gli ultimi post dai siti che seguiamo.

tagIniziamo Questa Frenesia di Feed

💡
Il codice in questo post è una versione semplificata di quello che troverai nel notebook. Non andremo a pasticciare con
I pip install e l'impostazione delle chiavi in questo post, quindi se vuoi seguire il tutorial, consulta il notebook per l'esperienza completa e attieniti a questo post per il quadro generale.

Link Colab | Link GitHub

Per realizzare la magia, useremo diversi servizi e librerie Python:

  • Feedparser: Una libreria Python per scaricare ed estrarre contenuti dai feed di notizie.
  • Jina Reader: L'API di Jina per estrarre solo il contenuto da ogni articolo, senza scaricare elementi inutili come header, footer e barre laterali.
  • PromptPerfect: Prompts-as-Services riassumerà ogni articolo e poi combinerà questi riassunti in un unico paragrafo, nello stile di un lettore di notizie della NPR.
  • gTTS: La libreria Text-to-Speech di Google, per leggere il notiziario ad alta voce.

Questo è tutto ciò che tratteremo nel post. Se vuoi creare un feed podcast per il tuo podcast personalizzato, ti suggeriamo di consultare altre fonti.

tagScaricare i Feed

Dato che questo è solo un esempio semplice, ci limiteremo a un paio di feed di notizie di The Register e OSNews, due siti di notizie tecnologiche.

feed_urls = [
    "https://www.osnews.com/feed/",
    "https://www.theregister.com/headlines.atom"
]

Con Feedparser possiamo scaricare i feed e poi scaricare i link degli articoli da ciascun feed:

import feedparser

for feed_url in feed_urls:
    feed = feedparser.parse(feed_url)
    for entry in feed["entries"]:
        page_urls.append(entry["link"])

tagEstrarre il Testo degli Articoli Con Jina Reader

Ogni feed contiene link a ciascun articolo sul sito web corrispondente. Se scaricassimo semplicemente quella pagina web, otterremmo un sacco di HTML, incluse barre laterali, header, footer e altri elementi inutili di cui non abbiamo bisogno. Se dai questo a un LLM sarebbe come masticare erba. Certo, l'LLM può farlo, ma non è ciò che vuole mangiare naturalmente.

Ciò che un LLM vuole veramente è qualcosa simile al testo semplice. Jina Reader converte un articolo in Markdown.

Reader API
Leggi qualsiasi URL in testo compatibile con LLM istantaneamente, senza problemi.

Questo lo fa apparire più così:

Title: Unintended acceleration leads to recall of every Cybertruck produced so far

URL Source: https://www.theregister.com/2024/04/19/tesla_recalls_all_3878_cybertrucks/?td=rt-3a

Published Time: 2024-04-19T13:55:08Z

Markdown Content:
Tesla has issued a recall notice for every single Cybertruck it has produced thus far, a sum of 3,878 vehicles.

Today's [recall notice](https://static.nhtsa.gov/odi/rcl/2024/RCLRPT-24V276-7026.PDF) \[PDF\] by the National Highway Traffic Safety Administration states that Cybertrucks have a defect on the accelerator pedal, which can get wedged against the interior of the car, keeping it pushed down. The pedal actually comes in two parts: the pedal itself and then a longer piece on top of it. That top piece can become partially detached and then slide off against the interior trim, making it impossible for the pedal to lift up. This defect [was already suspected](https://www.theregister.com/2024/04/15/tesla_lays_off_10_percent/) as Tesla paused production of the Cybertruck due to an "unexpected delay." Some Cybertruck owners also spoke on social media about their vehicles uncontrollably accelerating, with one crashing into a pole and another demonstrating [on film](https://www.tiktok.com/@el.chepito1985/video/7357758176504089898) how exactly the pedal breaks and gets stuck.
...

L'abbiamo tagliato più corto perché includere l'intero articolo sarebbe eccessivo. Ma puoi vedere che è un testo chiaro e leggibile (markdown).

Invece di questo:

<!doctype html>
<html lang="en">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>Unintended acceleration leads to recall of every Cybertruck • The Register</title>
    <meta name="robots" content="max-snippet:-1, max-image-preview:standard, max-video-preview:0">
    <meta name="viewport" content="initial-scale=1.0, width=device-width"/>
    <meta property="og:image" content="https://regmedia.co.uk/2019/11/22/cybertruck.jpg"/>
    <meta property="og:type" content="article" />
    <meta property="og:url" content="https://www.theregister.com/2024/04/19/tesla_recalls_all_3878_cybertrucks/" />
    <meta property="og:title" content="Unintended acceleration leads to recall of every Cybertruck" />
    <meta property="og:description" content="That isn&#39;t what Tesla meant by Full Self-Driving" />
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:site" content="@TheRegister">
<script type="application/ld+json">
...

Abbiamo dovuto tagliarlo prima di arrivare al contenuto effettivo. C'è semplicemente troppo materiale non leggibile dall'uomo.

Fornendo all'LLM qualcosa che può digerire più naturalmente (come markdown invece di HTML), può darci un output migliore. Altrimenti è come dare Doritos a un leone. Certo, può mangiarli, ma non sarà il miglior leone possibile se mantiene quella dieta.

Per estrarre solo il testo in modo leggibile useremo l'API di Jina Reader:

import requests

articles = []

for url in page_urls:
    reader_url = f"https://r.jina.ai/{url}"
    article = requests.get(reader_url)
    articles.append(article.text)
💡
Puoi visualizzare l'output leggibile direttamente nel tuo browser web andando su https://r.jina.ai/<url>, per esempio https://r.jina.ai/https://www.theregister.com/2024/04/19/wing_commander_windows_95/

tagRiassumere gli articoli con PromptPerfect

Dato che potrebbero esserci molti articoli, useremo un LLM per riassumere ciascuno separatamente. Se li mettessimo tutti insieme e li dessimo all'LLM da riassumere, potrebbe soffocare con troppi token in una volta.

Questo varierà a seconda di quanti articoli vuoi gestire. Per pochi articoli potrebbe valere la pena concatenarli tutti in un'unica stringa lunga e fare una sola chiamata, risparmiando tempo e denaro. Tuttavia per questo esempio supporremo di avere a che fare con un numero maggiore di articoli.

Per riassumerli useremo un Prompt-as-a-Service da PromptPerfect.

Qual è il Futuro del Prompt Engineering? Il Prompt as a Service di PromptPerfect!
Distribuisci prompt e template di prompt flessibili come servizi REST API e integrali nelle tue applicazioni con pochi clic
PromptPerfect

Ecco il nostro Prompt-as-Service:

image
Il nostro Prompt-as-Service per riassumere gli articoli

Scriveremo una funzione per fare questo, poiché chiameremo un altro Prompt-as-Service più avanti in questo post:

def get_paas_response(id, template_dict):
    url = f"https://api.promptperfect.jina.ai/{id}"
    headers = {
        "x-api-key": f"token {PROMPTPERFECT_KEY}",
        "Content-Type": "application/json"
    }
        response = requests.post(url, headers=headers, json={"parameters": template_dict})
        
    if response.status_code == 200:
        text = response.json()["data"]
        return text
    else:
        return response.text

Quindi prenderemo ogni riassunto e li aggiungeremo a una lista, per infine concatenarli in una lista markdown con punti elenco:

summaries = []

for article in articles:
    summary = get_paas_response(
        prompt_id="mkuMXLdx1kMU0Xa8l19A", 
        template_prompt={"article": article}
    )
    summaries.append(summary)
    
concat_summaries = "\n- ".join(summaries)

tagGenerare un Report di Notizie con PromptPerfect

Ora che abbiamo quella lista con punti elenco, possiamo inviarla a un altro Prompt-as-a-Service per generare un bollettino di notizie che suoni come un naturale discorso da speaker:

image
Il nostro Prompt-as-Service per combinare i riassunti in un report di notizie coeso

Il prompt completo è:

You are an NPR technology news editor. You have received the following news summaries:

[summaries]

Your job is to give a one paragraph overview of the news, covering each item in an organic way, with segues to the next item. You can change the order of the items if that makes sense, and merge duplicates.

You will output a one paragraph script that sounds organic, to be read on NPR daily news. The script should take no longer than five minutes to read aloud.

Otterremo lo script delle notizie con questo codice:

news_script = get_paas_response(
    prompt_id="tmW07mipzJ14HgAjOcfD",
    template_prompt={"summaries": concat_summaries}
)

Ecco il testo finale:

Today in tech news, we have a range of updates and developments to discuss. First up, the Tiny11 Builder tool offers users the ability to debloat Windows 11, creating a customized image tailored to their preferences. Moving on to the world of gaming, we delve into the hidden components inside Super Nintendo cartridges, shedding light on the technology that fascinated gamers in the '90s. Shifting gears to software, the Niri tiling window manager for Wayland has released a major update, offering new features like infinite scrolling and improved animations. In the realm of AI, Microsoft's Copilot feature has faced some hiccups in its rollout to Windows Insiders, with bugs and intrusive behavior prompting a halt in the deployment. Meanwhile, the UK's Information Commissioner's Office raises concerns about Google's Privacy Sandbox, questioning its privacy implications and impact on competition. Lastly, the US Federal Aviation Administration has updated its launch license requirements, now mandating reentry vehicles to obtain a license before launch, following an incident involving Varda Space Industries. These diverse tech stories highlight the ongoing advancements and challenges in the tech world.

tagLeggere le Notizie ad Alta Voce

Per leggere il testo ad alta voce useremo la libreria TTS di Google.

gTTS
gTTS (Google Text-to-Speech), una libreria Python e strumento CLI per interfacciarsi con l'API text-to-speech di Google Translate
PyPI
from gtts import gTTS

tts = gTTS(news_script, tld="us")
tts.save("output.mp3")

Questo ci darà un file audio finale:

audio-thumbnail
Output
0:00
/1:19
❓
Perché non abbiamo optato per un approccio TTS basato su modelli? Per due ragioni: prima di tutto, nei nostri test con Bark abbiamo frequentemente riscontrato allucinazioni quando gli inviavamo più di sei frasi circa. Non è che le allucinazioni iniziassero dopo sei frasi – iniziavano molto prima, inserendo numeri e parole senza senso ogni volta che gli passavamo troppe informazioni. In secondo luogo, utilizzare una libreria invece di un'API significa una chiave API in meno per cui registrarsi.

tagProssimi Passi

Non tratteremo il resto dell'esperienza di creazione del podcast in questo post. Non è il nostro punto di forza e, proprio come per i consigli medici, probabilmente non dovreste ascoltarci quando si tratta dei dettagli pratici sulla configurazione di un feed podcast, sul caricamento su Spotify, Apple Podcasts, ecc. Per consigli medici o sui podcast, rivolgetevi rispettivamente al vostro medico o a Joe Rogan.

Per quanto riguarda cosa altro può fare Jina Reader, pensate a tutte le applicazioni RAG che potete creare scaricando versioni leggibili di qualsiasi pagina web. O per PromptPerfect, scoprite come può aiutare anche gli YouTuber (o gli esperti di marketing, se è quello che vi interessa.)

Categorie:
Blog tecnico
rss_feed
Uffici
location_on
Sunnyvale, California
710 Lakeway Dr, Ste 200, Sunnyvale, CA 94085, Stati Uniti
location_on
Berlino, Germania (sede centrale)
Prinzessinnenstraße 19-20, 10969 Berlino, Germania
location_on
Pechino, Cina
Livello 5, Edificio 6, No.48 Haidian West St. Pechino, Cina
location_on
Shenzen, Cina
402 Piano 4, Fu'an Technology Building, Shenzhen, Cina
Fondazione di ricerca
Lettore
Incorporamenti
Riclassificazione
Ricerca profonda
Classificatore
Segmentatore
Documentazione API
Ottieni la chiave API Jina
Limite di velocità
Stato dell'API
Azienda
Chi siamo
Contatta le vendite
Sala stampa
Programma di stagista
Unisciti a noi
open_in_new
Scarica il logo
open_in_new
Termini
Sicurezza
Termini & Condizioni
Privacy
Gestisci i cookie
email
Jina AI © 2020-2025.