Discourse AI - Связанные темы

:bookmark: Это руководство объясняет, как включить и настроить функцию «Связанные темы» для плагина Discourse AI.

:person_raising_hand: Требуемый уровень доступа пользователя: Администратор

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

Возможности

  • Семантическое сходство текстов: Поиск действительно связанных материалов выходит за рамки простого совпадения ключевых слов.
  • Переключение между темами в разделах «Предложенные» и «Связанные».
  • Доступно как для анонимных, так и для авторизованных пользователей.

Включение функции «Связанные темы»

:information_source: Функция «Связанные темы» включена по умолчанию для всех клиентов Discourse с хостингом, у которых активирован плагин Discourse AI.

Предварительные требования

Для работы функции «Связанные темы» необходимы Embeddings.

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

Для самостоятельно размещённых (self-hosted)实例 необходимо настроить модель embeddings через поддерживаемого провайдера.

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

  1. Перейдите в раздел Администрирование → Плагины → Discourse AI → Возможности ИИ.
  2. Найдите модуль Embeddings и настройте его:
    • Установите ai_embeddings_selected_model в значение определения модели embeddings, которое вы настроили.
    • Включите параметр ai_embeddings_enabled, чтобы активировать Embeddings.
  3. Включите параметр ai_embeddings_semantic_related_topics_enabled, чтобы активировать функцию «Связанные темы».

Настройка модели embeddings

Перед включением embeddings необходимо настроить модель. Перейдите в раздел Администрирование → Плагины → Discourse AI → Embeddings, чтобы создать новое определение модели. Вы можете выбрать из нескольких предустановок:

  • Open AI: text-embedding-3-small или text-embedding-3-large (рекомендуется для большинства сайтов).
  • Google: gemini-embedding-001.
  • Hugging Face (собственный инференс): multilingual-e5-large (рекомендуется для сайтов на других языках или многоязычных сайтов), bge-large-en или bge-m3.

Вам потребуется предоставить API-ключ (или связать его с AI Secret) и URL-адрес конечной точки для выбранного провайдера.

Дополнительные настройки

Следующие настройки позволяют тонко настроить функцию «Связанные темы»:

  • ai_embeddings_semantic_related_topics: Максимальное количество тем, отображаемых в разделе «Связанные темы» (по умолчанию: 5).
  • ai_embeddings_semantic_related_include_closed_topics: Включать ли закрытые темы в результаты (по умолчанию: true).
  • ai_embeddings_semantic_related_age_penalty: Применять ли штраф к более старым темам, чтобы отдавать предпочтение новому контенту (по умолчанию: 0.0, диапазон: 0.0–2.0).
  • ai_embeddings_semantic_related_age_time_scale: Временной масштаб в днях для штрафа за возраст (по умолчанию: 365).

Технический FAQ

Развернуть, чтобы просмотреть схему архитектуры функции «Связанные темы»

Общий процесс выглядит следующим образом: при создании или обновлении темы происходит следующее:

sequenceDiagram
    User->>Discourse: Создаёт тему
    Discourse-->>Embedding Microservice: Генерирует embeddings
    Embedding Microservice-->>Discourse: 
    Discourse-->>PostgreSQL: Сохраняет embeddings 

А при посещении темы:

sequenceDiagram
    User->>Discourse: Посещает тему
    Discourse-->>PostgreSQL: Запрашивает ближайшие темы
    PostgreSQL-->>Discourse: 
    Discourse->>User: Отображает связанные темы 

Как работает функция «Связанные темы»?

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

Как обрабатываются данные тем/сообщений?

  • Для сайтов на хостинге Discourse данные обрабатываются в нашем защищённом частном дата-центре. Для самостоятельно размещённых сайтов обработка данных зависит от выбранного вами стороннего провайдера.

Где хранятся данные embeddings?

  • Данные embeddings хранятся в вашей базе данных Discourse наряду с другими данными форума, такими как темы, сообщения и пользователи.

Какие модели embeddings доступны?

  • Discourse AI поддерживает модели от OpenAI (text-embedding-3-small, text-embedding-3-large), Google (gemini-embedding-001), совместимые с Hugging Face конечные точки (bge-large-en, bge-m3, multilingual-e5-large) и Cloudflare Workers AI. Вы также можете настроить пользовательские модели embeddings через интерфейс администратора.
14 лайков

Что-то, за чем стоит понаблюдать.

Анализируя множество постов в разделе «Связанные темы» для английского сайта (OpenAI), я начал замечать, что темы на испанском языке часто группируются вместе. Подозреваю, что если бы они сначала были переведены на английский, у каждого поста был бы свой вектор, и они были бы сгруппированы с другими постами. :slightly_smiling_face:



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

При просмотре каждого нового поста я также проверяю раздел «Связанные темы». Это становится эффективным способом выявления тем, созданных с неверной категорией.

К сведению — аналогичная идея была отмечена в этом запросе на добавление функции.



Нашел эту тему, когда часто искал следующую ссылку, которую не так-то легко найти, поэтому отмечу её здесь.

2 лайка

Такое поведение определяется моделью, и, похоже, это известная проблема:

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

2 лайка

У меня не получается включить эту опцию:

Я что-то упускаю или одного Gemini недостаточно?

ОБНОВЛЕНИЕ: Возможно, инструкции и описание ошибки стоит обновить, добавив, что ai embeddings model также необходимо обновить в соответствии с провайдером, иначе ai_embeddings_enabled нельзя включить. В описании параметра отсутствует вариант Gemini.

1 лайк

7 сообщений были перенесены в новую тему: “Net::HTTPBadResponse” ошибки в Gemini Embeddings

Что мне заполнить здесь, пожалуйста:

Мне нужно заполнить указанное выше, так как я хочу включить первый вариант из четырёх, показанных ниже:

Если вы используете OpenAI, ничего.

1 лайк

Тогда этот первый вариант (модуль Embeddings) вызывает у меня проблемы — я не могу его включить:

Большинство из них пусты. Однако ai embeddings discourse service api key — это ваш ключ API OpenAI, а ai embeddings discourse service api endpoint — это https://api.openai.com/v1/embeddings. Модель должна быть text-embedding-3-large (конечно, можно использовать и small, но у неё есть некоторые проблемы).

1 лайк

3 сообщения были перенесены в новую тему: Как отображать и рекомендуемые, и связанные темы

Какие результаты вы получили при сравнении small и large? Я знаю, что существует разница в размерности, влияющая на точность модели. Версия small в 5 раз дешевле. Действительно ли она непригодна для использования в реальных задачах поиска тематического сходства? Наш форум на 99% на английском языке.

Мне было бы очень интересно узнать больше. Не могли бы вы подробнее рассказать о том, как all-mpnet-base-v2 соотносится с моделями OpenAI для сайта, где используется исключительно английский язык?

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

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

Вероятно, проблема в моделях OpenAI, но у меня нет достаточно средств, чтобы использовать более профессиональные решения.

1 лайк

До прочтения этого я использовал модель text-embedding-3-small. Значительно ли лучше модель text-embedding-ada-002?

Ada — это предыдущее поколение

1 лайк

Сообщение было перенесено в новую тему: Связанные темы не переведены