В это статье рассказываю:
Контентщик против нейросети: собираем парсер
Учим ChatGPT правильно писать посты: крупный лайфхак по промтам
Что у нас получилось?
Почему лучше забить на GPT и пользоваться ClaudeAI
В статье приводится пример с GPT, но совсем недавно мы перешли на Claude AI. Уровень текста Claude на порядок выше, нежели у зеленого конкурента. Выглядит как живой даже при "тупом" инструктаже. Не нужно учитывать семантику, SEO и остальные проблемы. Сейчас я пользуюсь ClaudeAI даже для личных задач. Правда, в отличие от OpenAI, течение нескольких дней Anthropic блокирует сторонний номер, на котором зарегистрирован аккаунт.
Скажем так, переход на ClaudeAI позволил значительно упростить себе работу. Не хотите париться с бесконечным потоком промтов и галлюцинациями текста? — переходите на ClaudeAI.
Мы просто подключили парсер к чужому телеграм-боту и платим небольшие деньги за токены. Если захочется сделать через Claude — создайте бота, который будет автоматически отсылать коммерческому боту сообщения и введите инструкции в отдельной вкладке бота. Чтобы каждое сообщение учитывало промт.
Контентщик против нейросети: почему нейронка – выгоднее и эффективнее
Я уверен, что многие Хабровчане будут недовольны: “Вы плодите мусорный контент из новостей Туризма!” – дай бог, чтобы людям стал интересен туризм, мы бы начали писать авторский контент с обзорами винных городов, выполненных в фирменном дизайне Лебедева. Или расценки горнолыжного Шерегеша.
Я бы сам писал обзоры, советовался с архитектором по поводу новой планировки винного города в Геленджике без деревьев и теней, офигевал от цен на отели в Сочи. Но это всё никому не нужно.
В сфере туризма откликаются некоторые из тем обычной прессы: ненавистные ограничения гнилой Европы и “Омерики”, возможности получения ВНЖ и виз, розыгрыши Грин-Карт, смешные видео с обезьянами из Тайланда, выходки пьяных пассажирок на внутренних рейсах, фатальные ошибки пилотов из S7, штрафы и аресты.
И, конечно же, красивые места: Аргентина, Тбилиси, Тай…
Красивые места – это всегда про помечтать, отвлечься от серого мира Челябинска за окном 64 автобуса. А провокационные новости – это провокационные новости…
Привлечение действительно путешествующей аудитории могло выходить за границы нашего бюджета (примерно в три раза), охваты на той стороне держались идентично, рекламные интеграции выходили в меньшую цену. Бизнес есть бизнес.
Мы привлекали женскую аудиторию. Надежд на рекламирование премиальных автомобилей не было, как в некоторых каналах с потенциально “богатой аудиторией”, но мы бы и не потянули по бюджету.
Хуже обстояло дело, что мы в погоне за дешевым подписчиком из-за байт-постов получали не целевого рафового релоканта – женщину-сварщицу с местного предприятия или хуже – пенсионерку.
Новости любят читать все – на них и делалась ставка.
Так как канал не особо большой, то экономия на контентщике существенная и делает прибавку в 20-30% к чистой прибыли. Поэтому я решил написать бота, который бы компилировал новости и давал бы некоторую оценку и комментарий.
Постараюсь не добавлять сюда слишком много кода, а сориентироваться на теории и конкретном результате.
Возможно, после консультации с кодером и доведения бота до ума – выложу на Гитхаб или продам конкурентам.
Немного теории: собираем парсер для анализа материалов
Суть таких парсеров – они позволяют собирать новости с огромного числа источников за полчаса, пока бедный контентщик накопает лишь несколько топ-новостей из каналов конкурентов.
На самом деле, писать интересные комментарии под новостями, как то делают в тг-каналах по маркетингу – топ для поднятия ERR. Но в нашей тематике “авторский” контент не работает. Поэтому нам достаточно минимально “живого” комментария в конце поста.
Проблемы:
Нужны не все новости. А агрегаторы, даже платные с настройками – это чаще про выбор тематики. Нам неинтересны новости про поднятие стоимости визы на 2 доллара в Италию – нам интересен полный запрет на визы в Италию.
Нужна правильная компоновка новости. Нужны новости по ключевым словам: “неадекватный пассажир”, “катастрофа”, “бесплатные”, “льготы и так далее”
Нужно предварительно собрать список агрегаторов, где таких новостей больше всего.
Помимо новостей – нужны изображения к постам. Иногда для новости видео или изображение важно – иногда достаточно рандомной “пикчи” с Пинтереста.
Источниками могут послужить RSS-ленты крупных новостных сайтов: BBC, CNN, а также cпец. туристических порталов вроде Skift. Дополнительно можно подключить API новостных сервисов: Google News API или Bing News API. Плюс крупных агрегаторов – фильтры.
Cюда можно подключить агрегаторы социальных сетей. Но всегда лучше парсинг отдельных твиттер и инстаграм аккаунтов – наилучший вариант, так как самые важные и свежие посты заливаются туда. Особенно, видео с “бибизьянами” и все остальное.
Тут есть некоторая проблема:
Настройка по ключевым словам. Это сложно, ведь словарь должен содержать такие ключевые слова, которые бы могли пересекаться.
Для этого составляется SEO-словарь, разделенных по категориям. Например, к категории «инциденты» можно отнести такие слова, как «неадекватный пассажир», «конфликт», «скандал». Для экономии — «бесплатные», «льготы».
Совет: на самом деле, лучше написать несколько парсеров для сбора конкретных новостей в одной рубрике. Предположим, рубрик всего 7: бесплатное, авиапроишествия, новые ограничения, красивые места и так далее.
Почему много узкоспециализированных парсеров лучше, чем один универсальный? – универсальность – это сложно.
Например.
Мы знаем: основную информацию National Geographic выписывает в “лиде”, первом абзаце. Это их редакционная политика. Лишние данные – медвежьи данные для нейросети, так как в одном посте может появиться: “самолет был красный” с “самолет разбился”. Второстепенное соседствует с главным.
Нейросеть не до конца понимает, что важно в тексте, а что нет. Нет смысла парсить всю страницу, если можно получить сразу всю выжимку.
Но в журнале Discovery другая ситуация. В лиде – только “водянистое” приветствие.
Желательно создать несколько функций с разной сортировкой новостей в зависимости от источников, рубрикаций и типов собираемого контента. Один парсер на одну рубрику – дичь.
Один из парсеров, например, у нас под красивые места с коротким описанием. Тут нужно парсить не только текст, но и медиа.
Я нашел источник, откуда можно взять и видео, и описание к месту сразу.
Используя API или регулярные выражения, можно вычленять только те записи, которые содержат необходимые фразы.
Пример кода, реализующего данный подход с использованием FeedParser, может выглядеть следующим образом:
import feedparser # Список RSS-источников (список может пополняться) # Ключевые слова (нужно подобрать, как можно больше ключей) # Фильтруем функцию (заголовок/ссылка/описание) filtered_news = fetch_relevant_news(rss_feeds, keywords) # Выводим результат |
Следующим этапом является обработка собранных данных, включая очистку от HTML-кода и приведение текста к читаемому виду.
Это можно реализовать с помощью библиотеки BeautifulSoup для удаления нежелательных элементов: теги, скрипты и стили. Например:
from bs4 import BeautifulSoup # Очистка HTML for news in filtered_news: |
Это слегка упрощенный формат парсинга.
Создаем несколько словарей под рубрики с ключевыми словами. Используем агрегаторы ключевых слов: Яндекс-Вордстат или Keyword.tool.
Лучше всего собрать SEO самостоятельно или через нейросеть после загрузки подходящих новостей в PDF-файл и прогонки через нейросеть. Поверьте, эти SEO вам еще понадобятся для создания авторского контента.
Пишем несколько функций с индивидуальными фильтрами и принципом парсинга. Разный тип контента, редакционная политика источников, формат – все это нужно учесть, иначе конечный контент превратится в суп.
Очищаем данные от примесей.
Мы привели объяснение простого парсера, который мы использовали в самом начале. Наш совет: ориентироваться на узкоспециализированные источники и писать парсеры конкретно под них.
Писать словари с ключевыми словами, оптимизировать фильтры и финальную очистку – все под источники, а не тип новостей – так конечные новости и тип текста будет ближе к желаемому. Еще лучше – собрать несколько парсеров под сбор конкретных рубрик в конкретных источниках.
Так вы будете получать самые релевантные результаты. Как говорится: подготовка данных – самое важное в обучении.
Предположим, что таким образом мы получаем 50 новостей в день, разбитых по рубрикам и источникам.
Сортируем данные и пишем промты: почему инструктаж ChatGPT не работает.
Внушительная часть “нейровизионеров” записывает килотонны туториалов по написанию промтов… Это настоящий мрак.
Большинство промтов выглядит как-то так:
«Преврати следующий текст в провокационный пост для социальной сети. Используй резкий стиль, добавь эмоции, сделай заголовок, который привлекает внимание. В конце добавь комментарий от автора с выражением сильного мнения».
ChatGPT хорошо реагирует на структурированные инструкции. И их нужно приводить, но их роль – чисто косметическая (сократить заголовок, разбить на абзацы, убрать вводные конструкции). Но главное – задание контекста.
КОН-ТЕКСТ. Нужно задать определенную семантическую фактуру для нейронки, чтобы она правильно подбирала комментарии к постам, преобразовывала их, давала интересный заголовок. Это связано с принципом работы самого GPT.
Вот примерное объяснение: GPT или трансформер (как его называют в мире нейросетей и программирования) – это огромная сетка весов, значимостей одних слов для других, одних текстовых конструкций для других. В GPT встроен механизм “внимания”, который выбирает, как одни слова относятся к другим.
Хочешь, чтобы GPT строчило как Довлатов? – покажи, а не приводи инструкции.
Поэтому промты должны предполагать включение собранных вами SEO, внедрение стиля письма под конкретные ситуации.
Пользуемся ChatGPT и обучаем модель писать нужные нам посты
Для создания нейросети, которая будет преобразовывать спаршенные данные в отформатированные посты, используя API ChatGPT, необходимо грамотно организовать весь процесс от подготовки данных до вызова модели и интерпретации её ответа.
У нас есть уже очищенные и структурированные данные, содержащие заголовок, описание, ключевые слова и ссылку на источник. А также необходимый набор SEO, промтов.
Совет: и тут для каждой рубрики следует собрать свои промты с предварительной загрузкой SEO, жаргонизмов, сленга – необходимо словарь из типов высказываний и слов для разных ситуаций. Так мы уникализируем контекст, стиль письма и разнообразим контент.
Из структуры: сформировать провокационный заголовок, уникализировать текст и добавить авторский комментарий.
Первым шагом является проектирование запроса (prompt), который будет отправляться в API.
Далее реализуем интеграцию через API. Используя Python и библиотеку openai, создаем запрос. Предположим, данные из парсера уже сохранены в JSON-формате.
Пример кода:
import openai # Вводим ключик # Пример данных (конечно, саммари может быть длиннее от заданных параметров) # Формирование запроса для нейросети # Генерация поста |
Обратите внимание на параметр temperature. Значение 0.8 позволяет модели выдавать более нестандартные, креативные ответы, что идеально для задач, требующих создания, например, провокационных заголовков.
Так как мы загрузили нейронку нужным SEO и контекстом – ответы будут интересными, но не уходить куда-то в сторону.
После вызова API нейросеть возвращает структурированный текст.
Следующий шаг — постобработка данных для интеграции в наш супер-проект.
Для повышения уникальности текста, если это требуется дополнительно, можно использовать параметр temperature совместно с top_p, что позволяет нейросети выбирать менее очевидные слова и фразы.
Пример обновленного вызова:
response = openai.ChatCompletion.create( |
Для полного цикла автоматизации результат можно сохранять в базу данных или передавать напрямую в API социальной сети.
Например, с использованием библиотеки requests для взаимодействия с Telegram Bot API. Это позволяет сразу публиковать посты в канал или группу. Тогда следует ограничить количество новостей для парсинга до, например, четырех.
Но мы советуем уделять 5 минут времени и отсеивать новости самостоятельно. Ведь основа новостника – это сами новости, а не их “текстовая” обработка.
Такой подход объединяет парсинг, генерацию контента и публикацию в единую систему, минимизируя необходимость ручного вмешательства.
Куда может дойти такой бот: миллионы на нейросетях?
Если грамотно составить парсеры на отдельные источники, грамотно подобрать SEO и подготовить ИИ можно добиться результатов уровня “авторского текста”.
Безусловно, сюда не подойдут каналы о маркетинге, где часто фигурирует видео – его описать ИИ не сможет. К сожалению, нейросети не могут выдавать рассуждения. Но любая экономическая новость всегда может быть разжевана при помощи чужих рассуждений на основе теории Хайека, например. Важно, чтобы в материале была фактура, от которой GPT смог бы оттолкнуться.
Если не хочется мучиться с бесконечным промтингом в GPT, воспользуйтесь ClaudeAI. Контекст размером с книгу. Сама ИИ явно лучше обучена на написание авторского информационного текста. Результат неотличим от работы автора.