Это приложение автоматизирует процесс поиска, сбора, и анализа новостей для создания новостного дайджеста. Оно работает в несколько этапов:
-
Поиск новостей: Использует запросы для поиска актуальных новостей через Google Search API и News API.
-
Извлечение текста: С помощью специальных инструментов, приложение загружает веб-страницы, извлекает из них чистый текст.
-
Анализ текста: Используя модель GPT-4o, приложение анализирует тексты, присваивает им оценку релевантности от 0 до 10, и генерирует краткие изложения и ключевые моменты. Также оно классифицирует тексты по типу (например, новости или блоги).
-
Удобный интерфейс: В конечном интерфейсе, новости ранжируются по их релевантности. Пользователи могут фильтровать новости по категориям и датам публикации.
Overview по коду и детали реализации.
-
Мы написали запросы, по которым будет происходить поиск новостей: search_queries_merged.json
-
По этим запросам мы ищем и собираем url страниц с актуальными новостями, которые далее предстоит распарсить и обработать.
- Google Search API: search.ipynb
- News API: search-newsapi.ipynb
-
Web Scraper. Здесь мы открываем страницы и скачиванием raw html. Затем очищаем текст от тэгов и ненужных частей страницы, которые не относятся к тексту новости. Чем чище получится текст, тем точнее будут ответы LLM.
- Для загрузки страниц использовали AsyncChromiumLoader и AsyncHtmlLoader из Langchaing extract_texts.py
- Для очистки - BeautifulSoup и html2text (оба инструмента также реализованы в Langchaing) extract_texts.py
- В конце хакатона мы нашли еще один хороший инструмент для очистки текста - Jina: extract_texts_jina.ipynb
-
Далее, просим LLM проставить relevance score для каждой новости от 0 до 10. Это полезно по двум причинам: 1) выдача гугла часто выдает совершенно нерелевантные новости, которые нужно убрать; 2) по relevance score будем ранжировать итоговый дайджест, отправляя самые релевантные новсти в топ. Помимо скора, LLM генерирует summary, key_events, title, text_type (является ли текст новостю, блог постом, или чем-то еще?)
- Мы используем модель
GPT-4o
. - code: chatgpt.ipynb
- Полный промпт: prompts/ru.md
- Мы используем модель
Мы ждем от модели JSON такого формата:
{
"summary": "Предоставьте краткое содержание текста, выделив его основные моменты",
"key_events": "Кратко перечислите ключевые события, описанные в новостном тексте",
"title": "Дайте тексту название на русском языке",
"relevance_score": "Присвойте оценку от 0 до 10, основываясь на релевантности текста для стальной промышленности",
"text_type": "Классифицируйте текст как один из следующих типов: [news, blog_post, forum, review, educational]"
}
- Объединяем всё в удобный интерфейс, сделанном на Streamlit. Новости ранжируются по relevance_score, их можно фильтровать по категориям и по дате публикации.