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

Как энтузиаст ИИ и ленивый писатель, я решил взяться за эту проблему в лоб. Результат? BlogGPT — агент языковой модели (LLM), который создает сообщения в блогах с минимальным руководством. Просто укажите тему и схему блога, а BlogGPT сделает все остальное.

Эволюция BlogGPT

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

BlogGPT v0.1–0.2 не включены в репозиторий, но BlogGPT v0.3 и BlogGPT v1.0 включены.

BlogGPT v0.1: агент LLM с инструментом GoogleSearchAPIWrapper

  • Настройка: я использовал базовую настройку, в которой я применил стандартный инструмент поиска Google Langchain, чтобы создать простой агент LLM для создания блогов.
  • Сильные стороны: агент может выполнять последовательный поиск по темам, которые он не полностью понимает, благодаря фреймворку ReAct.
  • Слабые стороны: инструмент возвращал только фрагменты информации, что ограничивало количество релевантной информации, которую LLM мог использовать для создания блога. Этот метод также приводит к созданию гораздо более коротких блогов.

BlogGPT v0.2: Пользовательская цепочка LLM для RAG (расширенная генерация поиска) с использованием векторной базы данных Pinecone

  • Настройка. В этой версии я собирал релевантную информацию из нескольких поисковых запросов по указанной теме, сохранял ее в векторной базе данных Pinecone и использовал цепочку LLM RAG (поиск с расширенным поколением) для получения релевантной информации. . Затем соответствующие данные были помещены в контекст для создания блога.
  • Сильные стороны. Хранение не только фрагментов кода позволило цепочке LLM получать более актуальную информацию.
  • Слабые стороны. Сохраняемая информация, часто представляющая собой поиск по широким темам, была недостаточно точной, чтобы предоставить релевантные данные для создания конкретных разделов блога. Например, если тема Tiger, а раздел блога How Long do Tigers Live?, вы можете себе представить, как вы можете не найти необходимую информацию, чтобы ответить, как долго они живут, просто выполнив поиск по теме Tiger.

BlogGPT v0.3: Пользовательская рекуррентная цепочка LLM для RAG с использованием векторной базы данных Pinecone

  • Настройка. На этом этапе BlogGPT версии 0.2 периодически запускался для разделов блога. Каждый раздел блога хранил свои релевантные поисковые данные в уникальном пространстве имен базы данных Pinecone Vector и извлекал из него данные для создания контента раздела блога.
  • Сильные стороны. Хранение и использование более релевантной информации для каждого раздела блога позволило модели создать более согласованные разделы блога.
  • Слабые стороны: эта версия выполняла поиск только с использованием заголовка раздела блога, не имея возможности выполнять последовательный поиск для получения более релевантной информации по сравнению с агентом BlogGPT v0.1, который мог выполнять поиск последовательно и использовать фреймворк ReAct, чтобы решить, достаточно ли у него информации для создания контента.

BlogGPT v1.0: рекуррентный агент LLM с инструментом пользовательского поиска

  • Настройка. В текущей версии я включил функции поиска BlogGPT v0.2 в создание специализированного инструмента поиска. Этот инструмент использует возможности целевого веб-поиска, гарантируя, что агент оснащен богатым контекстным фоном по заданной теме. Я также использовал повторяющийся характер BlogGPT v0.3. Эта функция позволяет агенту независимо перебирать каждый раздел блога, гарантируя, что каждый раздел рассматривается как отдельная уникальная сущность с определенными требованиями.
  • Сильные стороны. Агент, благодаря пользовательскому инструменту поиска, теперь может извлекать релевантную информацию из Интернета, которая служит контекстом для определенного раздела блога. Кроме того, рекуррентная структура агента позволяет ему решить, нужны ли дополнительные поиски или достаточно текущей информации для создания блога. Это добавляет уровень автономии и интеллекта в процесс создания блога.
  • Проблемы. Какой бы многообещающей ни была эта версия, в ней не обошлось без проблем. Одной из существенных проблем была максимальная длина токена. Всякий раз, когда полный текст результатов поиска возвращался для подачи в контекст агента LLM, это часто приводило к ошибкам Out of Tokens (OOT). Эти ошибки приводили к сбоям программы, бессмысленным блогам или значительно ограничивали количество поисков на вызов агента. Из-за этой проблемы мне пришлось реализовать цепочку суммирования LLM, которая суммирует N результатов поиска, прежде чем передать их агенту LLM (также итерация по каждому разделу блога по отдельности помогла решить эту проблему).
  • Слабые стороны. Недостатком является стоимость. Процесс суммирования нескольких поисков по нескольким разделам блога быстро увеличивает стоимость. Однако мне удалось значительно снизить стоимость, назначив менее интенсивные задачи на GPT-3.5 и назначив более сложные мысли агента ReAcT на GPT-4. Такое стратегическое распределение задач уравновешивает эффективность и экономичность.

Дизайн и функциональность BlogGPT

BlogGPT следует систематическому подходу к созданию всеобъемлющего блога:

  1. Поиск по теме и обобщение URL-адресов в Интернете. Сеть LLM использует инструмент поиска для поиска релевантных результатов по теме. Затем каждый URL-адрес суммируется для создания сводки по теме.
  2. Автоматическое создание разделов блога. Агент использует контекст темы для создания разделов блога. Он также может выполнять дополнительный поиск для каждого раздела блога с помощью инструмента пользовательского поиска.
  3. Объединение и уточнение черновика блога. Сгенерированный черновик блога объединяется и уточняется с помощью пользовательской цепочки LLM, чтобы создать окончательный отточенный блог.

Вот блок-схема для BlogGPT v1.0:

Настройка BlogGPT

Установка

Этот проект использует Поэзию для управления зависимостями. Чтобы настроить проект:

1. Клонируйте репозиторий:

git clone https://github.com/yourusername/bloggpt.git
cd bloggpt

2. Установите Поэзия:

curl -sSL https://install.python-poetry.org | python -

3. Установите зависимости проекта:

poetry install

Конфигурация

Скопируйте файл .env.template в .env и заполните соответствующие значения:

cp .env.template .env

Ключ API OpenAI

В этом проекте используется API OpenAI, для которого требуется ключ API. Вот как вы можете получить этот ключ:

1. Перейдите на сайт OpenAI.

2. Если вы еще этого не сделали, зарегистрируйте учетную запись.

3. После авторизации перейдите в раздел API.

4. В этом разделе вы найдете свой ключ API. Скопируйте этот ключ — вам нужно указать его как значение для OPENAI_API_KEY в файле .env.

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

Конфигурация поиска Google

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

Получение ключа API Google

1. Перейдите в Google Cloud Console.

2. Если вы еще этого не сделали, создайте новый проект.

3. Включите API пользовательского поиска для своего проекта. Для этого зайдите в «Библиотеку» в Cloud Console. Найдите «Custom Search API» и включите его.

4. Создайте учетные данные для API пользовательского поиска. Для этого перейдите в меню «Учетные данные» в облачной консоли. Нажмите «Создать учетные данные» и выберите «Ключ API».

5. Появится ваш новый ключ API. Скопируйте этот ключ — вам нужно указать его как значение для GOOGLE_API_KEY в файле .env.

Получение идентификатора системы пользовательского поиска

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

2. Нажмите «Новая поисковая система» и укажите веб-сайты, которые вы хотите найти. Вы можете ввести целые домены или конкретные URL-адреса. Если вы хотите, чтобы ваша поисковая система выполняла поиск по всему Интернету, введите * в качестве сайта для поиска.

3. Нажмите «Создать».

4. После того, как поисковик создан, заходим в его настройки. Здесь вы можете найти «ID поисковой системы» (или «cx»). Скопируйте этот идентификатор — вам нужно будет указать его в качестве значения для GOOGLE_CSE_ID в файле .env.

Вы можете следить за более подробными инструкциями в следующем блоге

Инструкции по использованию

Чтобы использовать модуль, вам нужно запустить приложение Streamlit:

streamlit run app.py

Использование (Streamlit)

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

  • Тема. Тема блога, который вы хотите создать. Это будет использоваться для поиска соответствующих веб-страниц и для создания контекста темы.
Example:
Falcon LLM
  • Разделы блога. Для каждого раздела блога необходимо указать следующее:
  • Название раздела: название раздела блога. Заголовок должен начинаться с `#`, чтобы указать, что это заголовок.
  • Контекст раздела: контекст раздела блога. Это будет использоваться для создания раздела блога. Упомяните ключевые вещи, которые вы хотите включить в раздел блога. Кроме того, вы можете включить Search for: (keywords), чтобы указать, что вы хотите, чтобы агент искал дополнительную информацию по теме.
Example Blog Section #1:
# What is Falcon LLM?
Talk about what is Falcon LLM and how it is different from other LLMs. Mention which company created it and how it is open-source.
Search internet for: open llm leaderboard
Example Blog Section #2:
# What are Unique Features of Falcon LLM
In this section, talk about how the innovations and advancements in Falcon LLM that are different from other LLMs. 
Mention the new features that Falcon LLM has. Mention how the model uses multi-query attention and flash attention.
Search internet for: multi-query attention, flash attention.
Example Blog Section #3:
# What was required to train Falcon LLM?
Talk about the compute and data requirements to train Falcon LLM. Mention the number of GPUs and the amount of data that was used to train Falcon LLM.
  • Добавить новый раздел блога. Нажмите эту кнопку, чтобы добавить еще один раздел блога.

Демо

Ниже приведен отредактированный gif, показывающий, как работает модуль.

Вы можете проверить блог, созданный из этой демонстрации.

Подведение итогов

BlogGPT является свидетельством мощи агентов языковой модели. С небольшим количеством творческих подсказок, цепочек и Python в качестве клея мы можем создать систему, способную исследовать и создавать уникальный, всеобъемлющий блог. Процесс становится более плавным, поскольку LLM продолжают развиваться и совершенствоваться.

Приглашаю вас внести свой вклад, разветвить, расширить или черпать вдохновение из этого проекта. Удачного ведения блога!

И да… Этот блог также на 90% создан с помощью BlogGPT ;)

Если вы нашли блог информативным и интересным, пожалуйста, поделитесь своими мыслями, оставив комментарий! Кроме того, если вы хотите больше подобного контента, не забудьте подписаться на меня для будущих сообщений в блоге :)

Рекомендации