Discourse AI — Векторные представления

:bookmark: Эта тема посвящена настройке модуля Embeddings плагина Discourse AI. Здесь объясняется, что такое эмбеддинги, как они используются и как их настроить.

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

Эмбеддинги являются ключевым компонентом плагина Discourse AI, обеспечивая такие функции, как Связанные темы и Поиск с помощью ИИ. Это руководство проведет вас через процесс настройки и использования эмбеддингов в вашем экземпляре Discourse.

Что такое эмбеддинги?

Эмбеддинги — это числовые представления текста, которые улавливают семантический смысл. В Discourse они используются для:

  1. Генерации связанных тем в нижней части страниц тем
  2. Включения функциональности семантического поиска

Настройка эмбеддингов

Для хостинговых клиентов

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

Для самостоятельно размещенных экземпляров

Если вы самостоятельно размещаете свой экземпляр, обратитесь к руководству по самостоятельной установке Discourse AI для получения подробных инструкций по настройке.

Настройка определений эмбеддингов

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

Доступные пресеты включают:

  • text-embedding-3-large (OpenAI)
  • text-embedding-3-small (OpenAI)
  • text-embedding-ada-002 (OpenAI)
  • gemini-embedding-001 (Google)
  • bge-large-en (Hugging Face)
  • bge-m3 (Hugging Face)
  • multilingual-e5-large (Hugging Face)

Каждое определение эмбеддинга включает: отображаемое имя, провайдера, URL, API-ключ (или секрет ИИ), токенизатор, размерность, функцию расстояния, максимальную длину последовательности и необязательные промпты для встраивания/поиска.

Настройка эмбеддингов

Перейдите в АдминистрированиеПлагиныDiscourse AI и убедитесь, что включены следующие настройки.

  1. ai embeddings enabled: Включение или отключение модуля эмбеддингов
  2. ai embeddings selected model: Выбор определения эмбеддинга, которое будет использоваться для генерации эмбеддингов

Необязательные настройки, которые можно настроить…

  • AI embeddings generate for pms: Решение о генерации эмбеддингов для личных сообщений
  • AI embeddings semantic related topics enabled: Включение или отключение функции «Связанные темы»
  • AI embeddings semantic related topics: Максимальное количество отображаемых связанных тем
  • AI embeddings semantic related include closed topics: Включение закрытых тем в результаты связанных тем
  • AI embeddings semantic related age penalty: Применение экспоненциального штрафа за возраст к темам в результатах связанных тем (0.0 отключает, более высокие значения сильнее штрафуют старые темы)
  • AI embeddings semantic related age time scale: Масштаб времени в днях для расчета штрафа за возраст (по умолчанию: 365)
  • AI embeddings semantic search enabled: Включение полного поиска с помощью ИИ
  • AI embeddings semantic quick search enabled: Включение опции семантического поиска во всплывающем меню поиска
  • AI embeddings semantic search use hyde: Включение HyDE (Hypothetical Document Embedding) для семантического поиска
  • AI embeddings semantic search hyde agent: Агент ИИ, используемый для расширения поисковых запросов при включенном HyDE

Провайдеры

Discourse AI поддерживает нескольких провайдеров эмбеддингов:

  • OpenAI
  • Google
  • Hugging Face (для моделей с открытым исходным кодом/открытыми весами)
  • Cloudflare Workers AI

Для хостинговых клиентов Discourse предоставляет предварительно настроенные (засеянные) определения эмбеддингов, которые работают сразу после установки.

Функции

Связанные темы

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

Поиск с помощью ИИ

Эмбеддинги обеспечивают работу опции семантического поиска на интерфейсе полного поиска.

Семантический поиск может опционально использовать HyDE (Hypothetical Document Embedding). При включении через ai embeddings semantic search use hyde поисковый запрос расширяется с помощью агента ИИ, настроенного в ai embeddings semantic search hyde agent. Расширенный запрос затем преобразуется в вектор и используется для поиска похожих тем. Этот метод добавляет некоторую задержку при поиске, но может улучшить результаты.

При выборе агента для HyDE выбирайте быстрые модели, такие как Gemini Flash, Claude Haiku, GPT-4o Mini или новейшие доступные модели.

Генерация эмбеддингов

Эмбеддинги автоматически генерируются для новых сообщений. Для генерации эмбеддингов для существующего контента:

  1. Discourse автоматически заполнит эмбеддинги для более старых тем с помощью запланированной задачи, которая выполняется каждые 5 минут
  2. Заполнение обрабатывает темы в порядке недавней активности

Часто задаваемые вопросы

В: Как определяются связанные темы?
О: Связанные темы определяются исключительно на основе эмбеддингов, которые включают заголовок, категорию, теги и содержимое сообщений.

В: Можно ли исключить определенные темы из связанных тем?
О: Да, существует настройка сайта для удаления закрытых тем из результатов.

В: Работают ли эмбеддинги для исторических сообщений?
О: Да, система автоматически заполнит эмбеддинги для всего вашего контента.

Дополнительные ресурсы

17 лайков

Отличная работа, спасибо прежде всего, но я не вижу похожие темы в разделе «Темы». Как-то так, мои настройки выглядят вот так: я добавил ключ OpenAI. Семантический поиск работает, но как можно отображать похожие статьи в разделе «Темы»?

Если вы хотите использовать OpenAI для создания векторных представлений, необходимо установить параметр ai embeddings model в значение text-embedding-ada-002.

3 лайка

Как планируются задачи по генерации эмбеддингов? Судя по коду, эмбеддинги создаются только при просмотре страницы, если они отсутствуют. Можно ли сгенерировать эмбеддинги для всего сайта при включении этой функции?

2 лайка

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

8 лайков

Предложение

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


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

Я знаю, что означает RAG в этом начальном сообщении, но сколько людей действительно это знают?

Что такое RAG (нажмите на треугольник, чтобы развернуть)

Как работают чат-боты, специализированные на определённой предметной области? Обзор генерации с дополнением на основе извлечения (RAG)


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

1 лайк

Являются ли эмбеддинги единственным фактором при определении «Связанных тем»? Или учитываются и другие параметры (например, автор, рейтинг темы, возраст темы, категория и т. д.)?

3 лайка

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

5 лайков

7 сообщений были перенесены в новую тему: Полнотекстовый семантический поиск доступен только на английском?

2 поста были перенесены в новую тему: Различия в задержке поиска между AI-семантическим и ключевым поиском

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

Посмотрю, можно ли втиснуть это в такую «стандартную» настройку!

Я обнаружил небольшую ошибку в последней версии, из-за которой команда rake ai:embeddings:backfill завершается неудачей:

root@nbg-webxj:/var/www/discourse# rake ai:embeddings:backfill
rake aborted!
NameError: uninitialized constant Parallel (NameError)

  Parallel.each(topics.all, in_processes: args[:concurrency].to_i, progress: "Topics") do |t|
  ^^^^^^^^
/var/www/discourse/plugins/discourse-ai/lib/tasks/modules/embeddings/database.rake:27:in `block in <main>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Tasks: TOP => ai:embeddings:backfill
(See full trace by running task with --trace)

Я подозреваю, что проблема в том, что gem parallel не установлен ни в этом плагине, ни в ядре Discourse (нашёл его только в блоке if ENV["IMPORT"] == "1": gem "parallel", require: false).

Также для выполнения rake ai:embeddings:backfill требуется gem ruby-progressbar.

Я создал простой PR на Github:

2 лайка

Обратите внимание, что этот метод rake, по-видимому, был понижен в статусе/полуустарел, поскольку, согласно сообщению Falco на GitHub:

Спасибо за PR @fokx, но я намеренно оставил их без внимания, так как задача rake вышла из употребления и должна использоваться лишь в редких случаях опытными администраторами, которые могут легко установить их отдельно.

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

1 лайк

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

1 лайк

Это второй вариант, так как он автоматически заполнит эмбеддинги для всего вашего контента.

4 лайка

Я пытаюсь настроить AI Embeddings с помощью Gemini Flash, но у меня не получается. Я не могу найти хорошие описания/примеры для всех полей настроек, поэтому, возможно, пропустил одно или два важных. Не знаю, обязательно ли поле настройки ‘ai_embeddings_model’, но если я установлю его в значение ‘gemini’, получаю следующую ошибку…

Мне не удалось найти настройку ‘ai_gemini_api_key’. У меня уже настроен Gemini Flash как LLM с API-ключом, и он работает в других местах, например, для суммаризации, но, видимо, здесь требуется ввести API-ключ в другом месте?

Думаю, это должно работать и с OpenAI, верно?

Было бы здорово, если бы она поддерживала их Batch API (скидка 50%).

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

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

1 лайк

Спасибо. Правильно ли я понимаю, что backfill — это процесс векторизации? При переключении между моделями векторы нужно пересчитывать заново (они «проприетарные»)? Думаю, да.

Было бы полезно узнать, как сопоставить затраты на использование API OpenAI с инвестициями в сервер на базе GPU с открытым исходным кодом. Есть ли формула или какой-либо способ оценить количество используемых токенов? Мы используем API только для векторизации постов, а не для вычисления расстояний между векторами, верно? Следовательно, количество используемых токенов зависит от объема нашего контента, правильно?

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