Резюме темы Discourse AI 🤖

:information_source: Резюме Использует удаленную языковую модель ИИ для подготовки и публикации краткого изложения темы.
:hammer_and_wrench: Ссылка на репозиторий GitHub - merefield/discourse-ai-topic-summary: Uses a remote AI language model to prepare and post a summary of a Topic · GitHub
:open_book: Руководство по установке Как установить плагины в Discourse
:heart: Спонсорство Пожалуйста, рассмотрите возможность стать постоянным спонсором моей работы с открытым исходным кодом на уровне, который соответствует вашим или ресурсам и потребностям вашей организации, чтобы этот плагин получил необходимое обслуживание и продолжал работать на вашем сайте в будущем.

Понравился этот плагин? Пожалуйста, поставьте ему :star: на GitHub! :pray:

Возможности

  • Сгенерированные ИИ краткие изложения тем:
    • Вы можете выбрать момент их первой генерации и количество новых сообщений, необходимых для их пересоздания, что делает плагин экономически эффективным.
    • Выбор места отображения темы: либо вверху, либо в боковой панели (требуется компонент темы Bars).
    • Система голосования, позволяющая сообществу снижать оценку плохих резюме. Если голоса превысят порог, будет запрошено новое резюме.
    • Отображение в списке тем — при наличии ИИ-резюме они показываются вместо отрывков.
  • Система автоматического тегирования:
    • повторно использует резюме для интеллектуального тегирования вашей темы.
    • выберите одну из двух стратегий, чтобы лучше всего соответствовать вашему случаю использования.
  • Автоматическая генерация миниатюры темы, изображающей её содержание.
  • Все подсказки можно редактировать в разделе Настройки → Текст.
  • Этот плагин стал первым плагин с ИИ для Discourse :1st_place_medal:

(Примечание: это лишь предварительный просмотр интерфейса, использующий ужасные случайные тестовые данные; результаты на реальных данных значительно лучше)

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

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

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

Вы можете изменить подсказку и пороги.

ВАЖНОЕ ПРИМЕЧАНИЕ: резюме никогда не отображаются для анонимных пользователей, поэтому текст не будет доступен для индексации поисковыми системами (вы можете считать это хорошим или плохим, но, по крайней мере, сканеры будут работать только с вашими подлинными данными, созданными людьми).

Поддержка автоматического тегирования:

Устали тегировать темы? Пусть это сделает ИИ! (Относительно интеллектуально!)

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

Вы можете быстро создать пользователя без прав администратора для этой цели через консоль Rails, используя:

rake admin:create (не давайте этому пользователю права администратора)

(Это немного хакерское решение, поскольку текущий «внутренний API» Discourse для тегирования не позволяет указать «без новых тегов», поэтому единственный способ легко предотвратить это на данный момент — создать пользователя, у которого нет этого права (т.е. уровень доверия ниже min_trust_to_create_tag).

Опциональная замена отрывков в списке тем ИИ-резюме

Настройка ai_topic_summary_expose_as_excerpt при включении заменит отрывки в списках тем, где отображаются отрывки (например, через компонент темы, такой как Предварительный просмотр списка тем или Отрывки списка тем), на ИИ-резюме, если оно доступно.

Переключение отрывков:

Вы можете использовать его для моего компонента темы: Topic List Previews (TLP) - #592 by merefield

Опциональное изображение, иллюстрирующее тему

Добавлена опциональная функция генерации миниатюр для этого плагина.

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

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

Наслаждайтесь :framed_picture:

Ограничения

Из-за ограничений токенов сейчас плагин подходит только для примерно 160 сообщений максимум (зависит от модели!), поэтому он не будет включать материал в сообщениях после определенной точки. Это, скорее всего, изменится в будущем, когда модели станут более мощными, а сервисы — более совершенными.

Ограничения скорости и затраты

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

Поддержка боковой панели «Bars»!!

Теперь в комплекте с плагином поставляется виджет, совместимый с Bars. Вам просто нужно установить компонент темы Bars и настроить его:

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

Примечания

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

Важное примечание о конфиденциальности: Данные вашего форума отправляются в Open AI. Хотя они, скорее всего, не будут включены в их предварительно обученные модели, они будут использовать эти данные для аналитики и ведения логов. Обязательно включите этот факт в Условия использования и политику конфиденциальности вашего форума. Ссылки: Условия использования, Политика конфиденциальности

Авторское право: Open AI сделала заявление об авторском праве здесь: Заберет ли OpenAI авторские права на то, что я генерирую с помощью API? | Справочный центр OpenAI

TODO

  • Добавить фронтенд- и бэкенд-тесты :construction:
  • Добавить больше пользовательских настроек для влияния на стиль ответа :white_check_mark:
  • Добавить поддержку пользовательских имен моделей :white_check_mark:
  • Добавить поддержку GPT-4, когда она станет доступна :white_check_mark:
  • Сделать выбор модели выпадающим списком :white_check_mark:
  • Добавить поддержку виджетов для плагина Layouts :white_check_mark:
30 лайков

Это было лишь вопросом времени, пока мы не получим это!

Но мой главный вопрос: насколько это может стать для нас дорогим?

4 лайка

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

Сложно ответить, так как я не знаю, насколько активен ваш форум.

Мой совет: попробуйте запустить его в одной категории и посмотрите, как всё пойдёт.

Есть довольно информативная панель управления.

После разработки двух плагинов на базе GPT3 (самая дорогая модель) и запуска на одном сайте в конце прошлого месяца, мои расходы за февраль выглядят так:

Так что, вероятно, это стоит меньше, чем ваша почтовая рассылка.

10 лайков

О, это могло бы быть полезно для расширения тем нашего глоссария.

Это должно работать на испанском?

3 лайка

Я не знаю, возможно, вам нужно изменить подсказку в настройках. Но попробуйте!

(это должна быть локализованная строка, я скоро это исправлю)

4 лайка

Спасибо @merefield — выглядит как отличный плагин!

Я его активировал, ввёл свой API-ключ, включил категории и так далее, но пока не вижу никаких сводок. Есть ли способ отслеживать его прогресс на моём форуме Discourse? В логах или Sidekiq пока ничего не вижу (хотя, честно говоря, ещё не копался глубоко).

3 лайка

Привет, Крис, он реагирует на новые посты. Если они соответствуют пороговым значениям и критериям расположения категории, будет создана сводка.

3 лайка

Понятно, спасибо за уточнение, @merefield

2 лайка

Здравствуйте,

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

Комментирование плагина ai-topic-summary решает проблему, и сборка проходит успешно.

Большое спасибо за любую помощь.

I, [2023-03-12T17:24:25.390052 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'LOAD_PLUGINS=0 bundle exec rake plugin:pull_compatible_all'
I, [2023-03-12T17:24:31.668769 #1]  INFO -- : discourse-ai-topic-summary уже на последней совместимой версии
discourse-assign уже на последней совместимой версии
discourse-chat-integration уже на последней совместимой версии
discourse-chatbot уже на последней совместимой версии
discourse-checklist уже на последней совместимой версии
discourse-solved уже на последней совместимой версии
docker_manager уже на последней совместимой версии

I, [2023-03-12T17:24:31.677801 #1]  INFO -- : > cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate'
rake aborted!
Gem::LoadError: невозможно активировать ruby-openai-3.4.0, так как уже активирован ruby-openai-3.3.0
/var/www/discourse/lib/plugin_gem.rb:26:in `load'
/var/www/discourse/lib/plugin/instance.rb:796:in `gem'
/var/www/discourse/plugins/discourse-chatbot/plugin.rb:9:in `activate!'
/var/www/discourse/lib/plugin/instance.rb:693:in `instance_eval'
/var/www/discourse/lib/plugin/instance.rb:693:in `activate!'
/var/www/discourse/lib/discourse.rb:352:in `block in activate_plugins!'
/var/www/discourse/lib/discourse.rb:349:in `each'
/var/www/discourse/lib/discourse.rb:349:in `activate_plugins!'
/var/www/discourse/config/application.rb:216:in `block in <class:Application>'
/var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
/var/www/discourse/config/application.rb:216:in `<class:Application>'
/var/www/discourse/config/application.rb:75:in `<module:Discourse>'
/var/www/discourse/config/application.rb:74:in `<top (required)>'
/var/www/discourse/Rakefile:7:in `require'
/var/www/discourse/Rakefile:7:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rake-13.0.6/exe/rake:27:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
(Полный трассировочный вывод можно получить, запустив задачу с флагом --trace)
I, [2023-03-12T17:24:38.020166 #1]  INFO -- : gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Когда вы используете HTTParty, нужно праздновать по-крупному!
Успешно установлен httparty-0.21.0
Установлено 1 gem
gem install ruby-openai -v 3.3.0 -i /var/www/discourse/plugins/discourse-ai-topic-summary/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Примечание при обновлении: модуль `::Ruby::OpenAI` был удален, и все классы перемещены в корневой модуль `::OpenAI`. Для обновления замените `require 'ruby/openai'` на `require 'openai'` и измените все ссылки с `Ruby::OpenAI` на `OpenAI`.
Успешно установлен ruby-openai-3.3.0
Установлено 1 gem
gem install httparty -v 0.21.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Когда вы используете HTTParty, нужно праздновать по-крупному!
Успешно установлен httparty-0.21.0
Установлено 1 gem
gem install ruby-openai -v 3.4.0 -i /var/www/discourse/plugins/discourse-chatbot/gems/3.2.1 --no-document --ignore-dependencies --no-user-install
Примечание при обновлении: модуль `::Ruby::OpenAI` был удален, и все классы перемещены в корневой модуль `::OpenAI`. Для обновления замените `require 'ruby/openai'` на `require 'openai'` и измените все ссылки с `Ruby::OpenAI` на `OpenAI`.
Успешно установлен ruby-openai-3.4.0
Установлено 1 gem

I, [2023-03-12T17:24:38.021523 #1]  INFO -- : Завершение асинхронных процессов
I, [2023-03-12T17:24:38.022106 #1]  INFO -- : Отправка INT для HOME=/var/lib/postgresql USER=postgres exec chpst -u postgres:postgres:ssl-cert -U postgres:postgres:ssl-cert /usr/lib/postgresql/13/bin/postmaster -D /etc/postgresql/13/main pid: 41
2023-03-12 17:24:38.022 UTC [41] LOG:  получен запрос на быстрое завершение работы
I, [2023-03-12T17:24:38.022874 #1]  INFO -- : Отправка TERM для exec chpst -u redis -U redis /usr/bin/redis-server /etc/redis/redis.conf pid: 102
102:signal-handler (1678641878) Получен SIGTERM, планирование завершения работы...
2023-03-12 17:24:38.035 UTC [41] LOG:  прерывание всех активных транзакций
2023-03-12 17:24:38.046 UTC [41] LOG:  фоновый рабочий "logical replication launcher" (PID 50) завершился с кодом выхода 1
2023-03-12 17:24:38.049 UTC [45] LOG:  завершение работы
102:M 12 Mar 2023 17:24:38.053 # Пользователь запросил завершение работы...
102:M 12 Mar 2023 17:24:38.054 * Сохранение финального снапшота RDB перед выходом.
102:M 12 Mar 2023 17:24:38.120 * База данных сохранена на диск
102:M 12 Mar 2023 17:24:38.122 # Redis готов к выходу, до свидания...
2023-03-12 17:24:38.153 UTC [41] LOG:  система баз данных завершена


FAILED
--------------------
Pups::ExecError: cd /var/www/discourse && su discourse -c 'bundle exec rake db:migrate' завершилась с ошибкой, код возврата #<Process::Status: pid 1043 exit 1>
Место ошибки: /usr/local/lib/ruby/gems/3.2.0/gems/pups-1.1.1/lib/pups/exec_command.rb:117:in `spawn'
Выполнение не удалось с параметрами {"cd"=>"$home", "hook"=>"db_migrate", "cmd"=>["su discourse -c 'bundle exec rake db:migrate'"]}
Загрузка не удалась с кодом выхода 1
3 лайка

Ой, моя вина. Это конфликт между двумя моими плагинами ИИ. Исправлю и отменю изменения! :sweat_smile: Извините!

5 лайков

Попробуйте это: FIX: conflict with chatbot · merefield/discourse-ai-topic-summary@0067eaf · GitHub

5 лайков

Большое спасибо за такой быстрый ответ. Я попробую это завтра. С нетерпением жду, когда увижу этот плагин в действии!

3 лайка

Краткое обновление: у меня сработала первая настоящая сводка, и она получилась вполне разумной. @merefield, думаю, вы отлично справились с этим плагином :-). На самом деле, я считаю, что использование ChatGPT в таком формате имеет гораздо больший потенциал на будущее, чем простое добавление в ветку обсуждения.

Вот сгенерированная сводка, которая появилась вверху темы и отлично мотивирует других читать (или не читать):

При публикации обновления, которое должно было запустить сводку, я получил ошибку 500. Это произошло потому, что в настройках я попытался использовать gpt-3.5-turbo. Возможно, если возникает ошибка API ChatGPT, было бы лучше разрешить отправку сообщения, вместо того чтобы пользователь получал ошибку 500, не понимая, что с ней делать.

В логах было ясно видно, что я сделал не так:

StandardError (Это чат-модель и она не поддерживается в эндпоинте v1/completions. Не имели ли вы в виду v1/chat/completions?)

Возможные направления развития:

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

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

4 лайка

Отличная обратная связь, спасибо. Это хорошие идеи.

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

Отлично!

Интересно, не является ли список «места для просмотра резюме» по сути альтернативным кратким описанием в списке тем?

Добавлю это в дорожную карту.

Да, я должен превратить это в выпадающий список, как я сделал с Chatbot. Хорошая попытка, хотя :wink:

Кстати, скоро выйдет GPT-4, что значительно улучшит качество резюме и позволит работать с гораздо более длинными темами.

6 лайков

Можете ли вы сказать, поддерживает ли плагин на данный момент ChatGPT 4 и API приложения POE (платформа чат-ботов с ИИ, разработанная Quora)?

3 лайка

Лол, дай мне шанс! :sweat_smile: Насколько я знаю, это было объявлено только вчера?

Пока доступ к API получили очень немногие разработчики. Существует список ожидания. Поэтому пользователи плагина в любом случае вряд ли смогут подключиться.

(Кстати, вы обратили внимание на заголовок темы?)

Нет, и в настоящее время таких планов нет. В чём будет польза? Известно ли, что он превосходит в суммаризации?

2 лайка

^^
извини за неясность ^^ я просто хотел узнать, интересуетесь ли вы их интеграцией в будущем? Я слежу за новостями вокруг GPT 04, и это удивительно и особенно для нашего вьетнамского сообщества

3 лайка

Спасибо за ваш интерес. Что касается поддержки GPT-4, отвечу так:

Hell Yeah Dcuniverse GIF by DC

Скорее всего, я сначала добавлю её в Chatbot, но вскоре после этого обязательно займусь AI Topic Summary.

Я жду письмо от Open AI… (и немного свободного времени!)

5 лайков

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

Как насчёт того, чтобы просто добавить настройки «веса голоса» для Администратора и Автора?

Например, можно установить вес голоса Автора равным 3, и если пороговое значение также равно 3, это приведёт к генерации новой сводки.

Недостаток обоих решений (кнопка или вес, равный порогу) в том, что Автор может просто спамить запросами на создание новых сводок, что обойдётся вам в значительные затраты на вызовы API.

Поэтому я предлагаю сделать так, чтобы голос Автора имел вес чуть ниже порога (но больше, чем у обычного пользователя), а голос Администратора — равный порогу?

Тогда нам не придётся менять интерфейс, достаточно внедрить это в логику бэкенда и настройки.

Понижающие голоса Администратора всегда будут создавать новую сводку и сбрасывать счётчик.

Что думаете, @JamesPick?

4 лайка

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

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

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

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

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

4 лайка