В это статье рассказываю:

  • Контентщик против нейросети: собираем парсер

  • Учим 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-источников (список может пополняться)
rss_feeds = [
    "https://www.bbc.com/news/rss.xml",
    "https://skift.com/feed/"
]

# Ключевые слова (нужно подобрать, как можно больше ключей)
keywords = ["неадекватный пассажир", "катастрофа", "бесплатные", "льготы"]

# Фильтруем функцию  (заголовок/ссылка/описание)
def fetch_relevant_news(feeds, keywords):
    relevant_news = []
    for feed_url in feeds:
        feed = feedparser.parse(feed_url)
        for entry in feed.entries:
            if any(keyword.lower() in entry.title.lower() or keyword.lower() in entry.summary.lower() for keyword in keywords):
                relevant_news.append({
                    "title": entry.title,
                    "link": entry.link,
                    "summary": entry.summary
                })
    return relevant_news

filtered_news = fetch_relevant_news(rss_feeds, keywords)

# Выводим результат
for news in filtered_news:
    print(f"Заголовок: {news['title']}\nСсылка: {news['link']}\nОписание: {news['summary']}\n")

Следующим этапом является обработка собранных данных, включая очистку от HTML-кода и приведение текста к читаемому виду. 

Это можно реализовать с помощью библиотеки BeautifulSoup для удаления нежелательных элементов: теги, скрипты и стили. Например:

from bs4 import BeautifulSoup

# Очистка HTML
def clean_html(raw_html):
    soup = BeautifulSoup(raw_html, 'html.parser')
    return soup.get_text()

for news in filtered_news:
    news["summary"] = clean_html(news["summary"])

Это слегка упрощенный формат парсинга. 

  1. Создаем несколько словарей под рубрики с ключевыми словами. Используем агрегаторы ключевых слов: Яндекс-Вордстат или Keyword.tool. 

Лучше всего собрать SEO самостоятельно или через нейросеть после загрузки подходящих новостей в PDF-файл и прогонки через нейросеть. Поверьте, эти SEO вам еще понадобятся для создания авторского контента. 

  1. Пишем несколько функций с индивидуальными фильтрами и принципом парсинга. Разный тип контента, редакционная политика источников, формат – все это нужно учесть, иначе конечный контент превратится в суп. 

  1. Очищаем данные от примесей. 

Мы привели объяснение простого парсера, который мы использовали в самом начале. Наш совет: ориентироваться на узкоспециализированные источники и писать парсеры конкретно под них. 

Писать словари с ключевыми словами, оптимизировать фильтры и финальную очистку – все под источники, а не тип новостей – так конечные новости и тип текста будет ближе к желаемому. Еще лучше – собрать несколько парсеров под сбор конкретных рубрик в конкретных источниках. 

Так вы будете получать самые релевантные результаты. Как говорится: подготовка данных – самое важное в обучении. 

Предположим, что таким образом мы получаем 50 новостей в день, разбитых по рубрикам и источникам. 

Сортируем данные и пишем промты: почему инструктаж ChatGPT не работает. 

Внушительная часть “нейровизионеров” записывает килотонны туториалов по написанию промтов… Это настоящий мрак. 

Большинство промтов выглядит как-то так: 

 «Преврати следующий текст в провокационный пост для социальной сети. Используй резкий стиль, добавь эмоции, сделай заголовок, который привлекает внимание. В конце добавь комментарий от автора с выражением сильного мнения».

ChatGPT хорошо реагирует на структурированные инструкции. И их нужно приводить, но их роль – чисто косметическая (сократить заголовок, разбить на абзацы, убрать вводные конструкции). Но главное – задание контекста. 

КОН-ТЕКСТ. Нужно задать определенную семантическую фактуру для нейронки, чтобы она правильно подбирала комментарии к постам, преобразовывала их, давала интересный заголовок. Это связано с принципом работы самого GPT. 

Вот примерное объяснение: GPT или трансформер (как его называют в мире нейросетей и программирования) – это огромная сетка весов, значимостей одних слов для других, одних текстовых конструкций для других. В GPT встроен механизм “внимания”, который выбирает, как одни слова относятся к другим. 

Хочешь, чтобы GPT строчило как Довлатов? – покажи, а не приводи инструкции. 

Поэтому промты должны предполагать включение собранных вами SEO, внедрение стиля письма под конкретные ситуации. 

Пользуемся ChatGPT и обучаем модель писать нужные нам посты

Для создания нейросети, которая будет преобразовывать спаршенные данные в отформатированные посты, используя API ChatGPT, необходимо грамотно организовать весь процесс от подготовки данных до вызова модели и интерпретации её ответа. 

У нас есть уже очищенные и структурированные данные, содержащие заголовок, описание, ключевые слова и ссылку на источник. А также необходимый набор SEO, промтов. 

Совет: и тут для каждой рубрики следует собрать свои промты с предварительной загрузкой SEO, жаргонизмов, сленга – необходимо словарь из типов высказываний и слов для разных ситуаций. Так мы уникализируем контекст, стиль письма и разнообразим контент. 

Из структуры: сформировать провокационный заголовок, уникализировать текст и добавить авторский комментарий. 

Первым шагом является проектирование запроса (prompt), который будет отправляться в API. 

Далее реализуем интеграцию через API. Используя Python и библиотеку openai, создаем запрос. Предположим, данные из парсера уже сохранены в JSON-формате. 

Пример кода:

import openai

# Вводим ключик
openai.api_key = "ключ_API"

# Пример данных (конечно, саммари может быть длиннее от заданных параметров)
news_item = {
    "title": "Авиакомпания ввела новые правила перевозки багажа",
    "summary": "Теперь каждый пассажир может провозить только одну единицу ручной клади.",
    "keywords": ["багаж", "новые правила", "авиакомпания"],
    "link": "https://example.com/news/123"
}

# Формирование запроса для нейросети
def generate_post(data):
    prompt = f"""
    Преврати следующий текст в провокационный пост:
    Заголовок: {data['title']}
    Описание: {data['summary']}
    Ключевые слова: {", ".join(data['keywords'])}
    Проанализируй, является ли новость положительной. Проработай описание, чтобы оно выглядело уникальным. Задействуй keywords, используй (сюда выписываем список жаргонизмов), “прокомментируй”.
    """
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=300,
        temperature=0.8  # Увеличиваем креативность
    )
    return response["choices"][0]["message"]["content"]

# Генерация поста
post = generate_post(news_item)
print(post)

Обратите внимание на параметр temperature. Значение 0.8 позволяет модели выдавать более нестандартные, креативные ответы, что идеально для задач, требующих создания, например, провокационных заголовков. 

Так как мы загрузили нейронку нужным SEO и контекстом – ответы будут интересными, но не уходить куда-то в сторону. 

После вызова API нейросеть возвращает структурированный текст. 

Следующий шаг — постобработка данных для интеграции в наш супер-проект. 

Для повышения уникальности текста, если это требуется дополнительно, можно использовать параметр temperature совместно с top_p, что позволяет нейросети выбирать менее очевидные слова и фразы. 

Пример обновленного вызова:

response = openai.ChatCompletion.create(
    model="gpt-4",
    messages=[{"role": "user", "content": prompt}],
    max_tokens=300,
    temperature=0.9,
    top_p=0.85  # Балансируем между креативностью и правдоподобием
)

Для полного цикла автоматизации результат можно сохранять в базу данных или передавать напрямую в API социальной сети. 

Например, с использованием библиотеки requests для взаимодействия с Telegram Bot API. Это позволяет сразу публиковать посты в канал или группу. Тогда следует ограничить количество новостей для парсинга до, например, четырех. 

Но мы советуем уделять 5 минут времени и отсеивать новости самостоятельно. Ведь основа новостника – это сами новости, а не их “текстовая” обработка. 

Такой подход объединяет парсинг, генерацию контента и публикацию в единую систему, минимизируя необходимость ручного вмешательства.

Куда может дойти такой бот: миллионы на нейросетях? 

Если грамотно составить парсеры на отдельные источники, грамотно подобрать SEO и подготовить ИИ можно добиться результатов уровня “авторского текста”. 

Безусловно, сюда не подойдут каналы о маркетинге, где часто фигурирует видео – его описать ИИ не сможет. К сожалению, нейросети не могут выдавать рассуждения. Но любая экономическая новость всегда может быть разжевана при помощи чужих рассуждений на основе теории Хайека, например. Важно, чтобы в материале была фактура, от которой GPT смог бы оттолкнуться. 

Если не хочется мучиться с бесконечным промтингом в GPT, воспользуйтесь ClaudeAI. Контекст размером с книгу. Сама ИИ явно лучше обучена на написание авторского информационного текста. Результат неотличим от работы автора.

Комментарии (0)