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 лайков

Something worth keeping an eye on.

In reviewing many post in Related Topics for an English site (OpenAI) starting to notice that topics in Spanish tend to be grouped together and suspect that if they were first translated to English each post would have a different vector and thus be clustered with other post. :slightly_smiling_face:



A side benefit of this feature for moderators is to check that the categories of the topics listed in Related Topics are correct.

As I review each new post I also check the Related Topics. This is becoming an effective way to identify topics created with the wrong category.

FYI - A related idea was noted in this feature request.



Find this topic when often needing following link which is not so easy to find so noting here.

2 лайка

That behavior is governed by the model, and it appears to be a know problem:

I think the OSS model we recommend for multilingual sites does a better job at this, but we still need to rollout it to more customers to validate this.

2 лайка

It won’t let me enable this option:

Am I missing something here or is Gemini alone not enough?

UPDATE: The instructions and error description may want to be updated to add that the ai embeddings model should also be updated to match the provider otherwise ai_embeddings_enabled can’t be enabled. The parameter description is missing Gemini as an option.

1 лайк

7 posts were split to a new topic: “Net::HTTPBadResponse” errors on Gemini Embeddings

What do I fill here pls:

I want to fill the above, because I want to enable the first option among the 4 shown below:

If you use OpenAI, nothing.

1 лайк

Then this 1st option (Embeddings Module) troubles me, doesn’t let me enable it:

Most of those are empty. But ai embeddings discourse service api key is your OpenAI API and ai embeddings discourse service api endpoint is https://api.openai.com/v1/embeddings. Model should be text-embedding-3-large (sure, it can be small too but it has some issues).

1 лайк

3 posts were split to a new topic: How to get both Suggested and Related topics to display

What were your results from comparing small and large? I know there is a difference in dimensions that affects the model’s precision. The small version is 5x cheaper. Is it really unusable in the real world for topic similarity? Our forum is 99% English.

I’d be very interested in hearing more. Can you please elaborate on where all-mpnet-base-v2 sits in comparison to OpenAI models for a purely English site?

Embeddings are so cheap that price doesn’t matter — unless there is myriad posts when 0.01 cents matter in total costs.

But honestly… I didn’t see any differences. And for me, because there is chance I can’t use RAG and embeds properly, both are equal useless. i know that is badly against public opinion, but on my site that system just doesn’t find and use anything useful.

Propably it comes from OpenAI-models but I don’t have enough money to use those more professional solutions.

1 лайк

I’ve been using the text-embedding-3-small model before I read this. Is the text-embedding-ada-002 a lot better?

Ada is previous generation

1 лайк

A post was split to a new topic: Related Topics not translated