Как создать автоматизированный промоутер блога с помощью ChatGPT, Twitter и AWS

Как создать автоматизированный промоутер блога с помощью ChatGPT, Twitter и AWS

9 марта 2023 г.

В современном цифровом ландшафте создание блога – это лишь первый шаг на пути к онлайн-присутствию. Чтобы привлечь читателей и создать фолловеров, блогерам необходимо эффективно продвигать свой контент.

В этой записи блога мы рассмотрим тему автоматического продвижения блога и способы использования ChatGPT, Twitter API и AWS для создания инструментария продвижения блога, который поможет блогерам более эффективно продвигать свой контент.

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

Выполняя шаги, описанные в этом посте, вы сможете создать свой собственный набор инструментов для автоматизированного продвижения блога и вывести свои усилия по продвижению блога на новый уровень. Давайте погрузимся и посмотрим, как ChatGPT, Twitter API и AWS могут помочь вам продвигать свой блог на профессиональном уровне!

Требования:

  • Автоматизация расписания. Инструментарий должен запускаться автоматически по расписанию, не требуя ручного вмешательства, чтобы сэкономить время и силы пользователей при продвижении своего контента.

* Расширяемость. Набор инструментов должен легко расширяться, позволяя пользователям добавлять новые инструменты продвижения по мере необходимости. Версия набора инструментов MVP будет содержать только один инструмент, предназначенный для привлечения новых читателей, отвечая на твиты с использованием API OpenAI и ChatGPT, с генерацией текста AI, чтобы гарантировать, что бот Twitter отвечает с использованием соответствующего контекста. В будущем мы можем захотеть добавить функциональность (публикация в соответствующих сообществах) или даже выйти на новые платформы (например, LinkedIn).

* Вежливость. Инструмент должен быть вежливым и уважительным по отношению к учетным записям Twitter, избегая нескольких ответов одному и тому же пользователю в течение короткого периода времени, чтобы не показаться раздражающим или спамом.

* Гибридная среда выполнения. Набор инструментов должен работать как в облаке AWS, так и локально, предоставляя пользователям возможность выбора наиболее подходящего метода развертывания.

Проблема

Создание высококачественного контента для блога — сложная задача, но продвигать этот контент для охвата более широкой аудитории может быть еще сложнее.

Платформы социальных сетей, такие как Twitter, предлагают мощный способ делиться сообщениями в блогах и взаимодействовать с читателями, но ручное управление учетной записью Twitter и ответы на твиты могут занимать много времени и повторяться. '

Кроме того, вежливое и уважительное общение с пользователями Twitter может оказаться сложной задачей, особенно при попытке охватить большое количество пользователей. Эти проблемы могут помешать блогерам эффективно продвигать свой контент в Твиттере и привлекать новых читателей.

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

Решение

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

Эти хэштеги и метаданные настраиваются автором блога вручную (обычно с использованием того же ChatGPT 😀) и извлекаются непосредственно из HTML.

После извлечения хэштегов инструментарий передает их API Twitter SearchTweets, который возвращает список релевантных твитов от самых старых до самых новых. Затем инструментарий проверяет каждый твит на соответствие различным требованиям, таким как вежливость и размер аудитории автора.

Если твит соответствует требованиям, инструментарий передает URL-адрес твита и URL-адрес сообщения в блоге API OpenAI, который генерирует соответствующий ответ с использованием языковой модели ChatGPT. Наконец, инструментарий отправляет сгенерированный ответ с помощью Twitter Manage Tweets API.

Мы можем представить этот поток как конвейер со следующими ключевыми компонентами: n

За счет автоматизации процесса поиска релевантных твитов и формирования вежливых и привлекательных ответов наш набор инструментов для продвижения блогов поможет блогерам сэкономить время и силы при продвижении своего контента в Твиттере.

Кроме того, возможность расширения набора инструментов новыми инструментами продвижения в будущем может предоставить еще больше способов взаимодействия с читателями и продвижения контента блога.

Инструменты и библиотеки

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

* Python: популярный язык программирования, который широко используется в анализе данных, машинном обучении и веб-разработке. Я впервые использую этот язык для создания чего-то значимого, поэтому, пожалуйста, не судите меня строго.

* Tweepy: библиотека Python, обеспечивающая простой доступ к Twitter API, позволяющая разработчикам создавать приложения, взаимодействующие с Twitter. Я буду использовать клиент V2.

* Библиотека OpenAI: библиотека Python, обеспечивающая доступ к мощным языковым моделям OpenAI, включая GPT-3.

* BeautifulSoup: библиотека Python для просмотра веб-страниц и анализа HTML-документов.

* Сервисы AWS: DynamoDB (для хранения), AWS Lambda (для вычислений), AWS CloudWatch (для планирование запуска Lambda) и, конечно же, мой любимый AWS App Composer для интеграции всех этих сервисов вместе в рабочий шаблон SAM и его развертывания через AWS CloudFormation.< /p>

Реализация

TLDR; Ссылка на код

Репозиторий GitHub: https://github.com/sr-shifu/blog-promo-toolkit

Создание инфраструктуры

Как упоминалось ранее, для создания шаблона SAM я буду использовать пользовательский интерфейс AWS App Composer. Не буду вдаваться в подробности (подробнее о том, как с ним работать, вы можете узнать в одном из моих предыдущих постов) — Я просто оставлю свою окончательную диаграмму здесь:

Инфраструктура довольно проста:

  • EngageTweets лямбда-функция. Я решил установить максимальное время ожидания (15 минут), чтобы дать ему как можно больше времени: API OpenAI может работать медленно, а API поиска Twitter может иметь довольно длительное время ожидания после дросселирования.

* Правило события (AWS::Events::Rule), которое запускает лямбда-функцию EngageTweets с использованием этого выражения cron (к сожалению, пользовательский интерфейс не поддерживает эту конфигурацию, поэтому вам нужно написать ее вручную): cron (0 18 * * ? *). Это выражение можно перевести на человеческий язык как "в 18:00 UTC каждый день".

* Экземпляр IntegrationTokens Secrets Manager для хранения токенов для доступа к API Twitter и OpenAI. EngageTweets lambda будет использовать их через переменные среды (опять же, необходимо настроить вручную в шаблоне).

* Таблица RepliedTweets. Он будет использоваться для хранения информации о твитах, на которые уже были даны ответы  — он будет использоваться как компонентами SearchTweets, так и компонентом TweetFilter. Он будет использовать userId в качестве ключа разделения и tweetId в качестве ключа диапазона (сортировки).

* Также стоит упомянуть 2 дополнительных атрибута:

* TTL: ключ срока действия (время UNIX, когда запись должна быть удалена из таблицы). Идея заключается в том, чтобы сделать хранилище более эффективным. API Twitter's SearchTweets может искать твиты только за последние 7 дней, поэтому нет необходимости вечно хранить данные ответов на твиты. Мы можем ответить на твит, установив TTL равным current_time + 7d и убедившись, что мы не будем беспокоить автора в течение следующих 7 дней или больше не будем отвечать на тот же твит.

* searchKey: строка запроса, которая использовалась для поиска этого твита (об этом позже). Идея состоит в том, чтобы создать глобальный вторичный индекс (GSI), используя searchKey в качестве первичного ключа и tweetId в качестве ключа диапазона. Используя этот индекс, мы можем найти последний твит, на который был дан ответ, если предыдущее выполнение функции было прервано (например, превышено время ожидания лямбда). Вы можете спросить, почему бы нам не хранить время ответа в таблице и вместо этого использовать его в качестве ключа сортировки. Ответ прост: Twitter использует идентификаторы Snowflake, которые гарантируют, что все твиты следуют примерному порядку. (приблизительно сортируется). Кроме того, API поиска поддерживает параметр запроса until_id, который предоставит нам все твиты, отправленные после идентификатора последнего отвеченного твита, хранящегося в нашей таблице. Если наш инструмент не запускался в течение последних 7 дней и все данные в таблице были очищены, это не проблема — помните, API возвращает только последние 7 дней.

Углубление в код

Инициализировать клиент Tweepy:

client = tweepy.Client(
    bearer_token=bearer_token,
    consumer_key = consumer_key,
    consumer_secret = consumer_secret,
    access_token = access_token,
    access_token_secret = access_token_secret,
    wait_on_rate_limit = True
)

Если wait_on_rate_limit = True, клиент проглотит все исключения регулирования и будет ждать, пока API остынет.

Создать ответ с помощью openAI:

def generate_tweet_reply_message(tweet_url, post_url, lang = 'en'):
    prompt = f"Reply to tweet {tweet_url}. Reply must include link to article {post_url} and engage to follow @TheSameTech{' using ' + lang + ' language' if lang != 'en' else ''}. Don't exceed {str(MAX_TWITTER_MESSAGE_LENGTH)} chars"
    completions = openai.Completion.create(
        engine="text-davinci-003",
        prompt=prompt,
        max_tokens=300,
        n=1,
        stop=None,
        temperature=0.7,
    )
    author_id = re.search(r"twitter.com/([^/]+)/status", tweet_url).group(1)
    # this is one of the weird stuff I noticed - sometimes ChatGPT tags author using their ID, and not account name
    return completions.choices[0].text.replace("nn", "").replace(f" @{author_id}", "")

Параметры:

  • engine: этот параметр указывает идентификатор языковой модели OpenAI, который будет использоваться для генерации текста. В этом примере используется модель text-DaVinci-003 (ChatGPT-3), которая является одной из самых передовых моделей OpenAI.

* prompt: этот параметр указывает текстовое приглашение, которое будет использоваться в качестве входных данных для языковой модели. В наборе инструментов продвижения блога подсказкой будет соответствующий твит, на который алгоритм ChatGPT будет генерировать ответ.

* max_tokens: этот параметр указывает максимальное количество токенов (слов или знаков препинания), которое языковая модель должна генерировать в своем ответе.

* n: этот параметр указывает количество генерируемых ответов. В этом случае будет сгенерирован только один ответ.

* stop: этот параметр указывает последовательность токенов, которые следует использовать в качестве точки остановки для ответа языковой модели. В этом случае последовательность остановки не указана.

* температура: этот параметр управляет случайностью ответов языковой модели. Более высокое значение температуры приведет к более творческим и разнообразным реакциям, а более низкое значение температуры приведет к более предсказуемым и консервативным реакциям. В этом примере используется температура 0,7, которая должна давать креативные, но не слишком непредсказуемые ответы.

ОБНОВЛЕНИЕ: OpenAI выпустила новую языковую модель gpt-3.5-turbo через несколько дней после того, как я написал этот пост (7 марта 2023 г.). Его цена составляет 0,002 доллара США за 1 000 токенов, что в 10 раз дешевле существующих моделей GPT-3.5.

Поиск по твитам:

twitter_metadata = extract_twitter_metadata(post_url, tagsSelector='.post-tags')
        keywords, hash_tags, description, *rest = twitter_metadata
        combos = list(combinations(hash_tags, 2))
        for combo in(combos):
            hash_tags_string = " ".join(combo)
            latest_tweet_id = get_latest_activity(hash_tags_string)
            if latest_tweet_id is None and search_days_ago is not None:
                start_time=(datetime.datetime.now() - datetime.timedelta(days=search_days_ago)).strftime("%Y-%m-%dT%H:%M:%SZ")
            tweets = search_recent_tweets_with_pagination(query=hash_tags_string, max_results = 100, start_time=start_time, latest_tweet_id=latest_tweet_id, tweet_fields=['id', 'author_id', 'created_at', 'in_reply_to_user_id', 'lang'])
            # do other stuff (filtering, generating reply, promoting)

После извлечения метаданных Twitter из HTML я использую хэштеги в качестве критерия поиска, чтобы найти релевантные твиты. Обычно с каждым постом в блоге связано около 4–5 тегов.

Если я передам их все вместе, то, скорее всего, Twitter API ничего не вернет — поэтому я объединяю их попарно и использую каждую пару как поисковый ключ (таким образом, каждый пост в блоге будет генерировать от 6 до 10 поисковых запросов в целом).< /p>

Локальный запуск

С SAM вам не нужно много делать. Выполните только 3 команды, и все готово. Если вы хотите запустить локальную версию DynamoDB, следуйте инструкциям README в моем репозитории GitHub.

sam build
sam local start-lambda
aws lambda invoke --function-name "EngageTweets" --endpoint-url "http://127.0.0.1:3001" --no-verify-ssl out.txt

Это так же просто с использованием исполняемого файла Python:

cd src/engage-tweets-lambda
pip install -r requirements.txt
source env/bin/activate   
TABLE_NAME=PromotedTweets python engage_tweets.py

Просто убедитесь, что все токены сохранены в локальном файле .env.

Развертывание в AWS

Одна команда, которую вам нужно знать:

sam deploy

Ограничения

  • Ограничение скорости API Twitter: API Twitter имеет ограничение скорости, которое ограничивает количество вызовов API, которые могут быть сделаны одним пользователем в течение 15-минутного окна. Это означает, что если пользователь превысит ограничение скорости, он не сможет выполнять дальнейшие вызовы API до тех пор, пока ограничение не будет сброшено (но мы уже позаботились об этом — см. предыдущий раздел).

* Ежемесячный лимит Twitter для поиска твитов: Twitter ограничивает количество твитов, которые можно искать в данном месяце. Текущий лимит составляет 500 000 твитов в месяц для одного аккаунта разработчика, который также может быть изменен.

* API OpenAI не является бесплатным: API OpenAI взимает плату в зависимости от количества отправленных и полученных запросов и ответов (токенов). Несмотря на то, что мы получили бесплатный пробный пакет стоимостью 18 долл. США, для дальнейшего использования API потребуется оплата в зависимости от использования.

* Недавние изменения API Твиттера: Твиттер недавно внес изменения в свой API, которые влияют на доступность определенных функций и данных. Например, с февраля 2022 года Twitter приостановил доступ к конечным точкам профиля пользователя и количества подписчиков, что затруднило определение размера аудитории автора твита. Это может повлиять на эффективность нашего набора инструментов для продвижения блога.

* Недавнее объявление Twitter об автоматизации: Twitter объявил о новых правилах автоматизации на платформе, направленных на предотвращение спама и оскорбительного поведения. Хотя полный объем этих изменений еще не ясен, они могут повлиять на функциональность нашего инструментария продвижения блога. Мы продолжим следить за развитием событий и корректировать наш подход по мере необходимости.

Эти ограничения подчеркивают проблемы, связанные с созданием и обслуживанием набора инструментов для продвижения блогов, основанного на внешних API и платформах. Несмотря на эти ограничения, я считаю, что наш инструментарий по-прежнему может быть эффективным для продвижения нашего контента и взаимодействия с нашей аудиторией.

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

Заключительные слова

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

Используя мощь языковых моделей ИИ и API Twitter, мы можем генерировать персонализированные ответы на твиты, в которых упоминается релевантный контент нашего блога в контексте целевого твит-сообщения.

Однако важно отметить, что у этого подхода есть ограничения, в том числе ограничения на скорость API Twitter и ежемесячные ограничения на поиск, а также стоимость использования API OpenAI для языковой обработки.

В целом, я считаю, что этот набор инструментов может быть ценным активом для блоггеров и создателей контента, стремящихся продвигать свою работу в социальных сетях. Я с нетерпением жду продолжения доработки и улучшения этого набора инструментов, и мы приветствуем любые отзывы или предложения от сообщества.

Благодарю вас за внимание к моему инструментарию, и я надеюсь, что он поможет вам в достижении ваших целей по продвижению контента!

Первоначально опубликовано на https://thesametech. com 3 марта 2023 г.


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE