Скрытие XX результатов, найденных с помощью ИИ — включить переключатель по умолчанию

Я экспериментирую с использованием ИИ на нашем форуме Discourse, и пока всё работает отлично (большое спасибо команде). Он действительно учитывает намерения пользователей и выдаёт очень релевантные результаты.

Проблема в том, что результаты по умолчанию скрыты:

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

Забавно, но я попытался найти что-то на этом форуме с помощью ИИ, но не получил никаких релевантных ответов.

3 лайка

Что ж, ИИ всё равно нашёл это в разделе «Смежные темы» :wink::

Да, я видел эту страницу, но не нашёл там информации о том, как включить результаты поиска с использованием ИИ по умолчанию для всех. Не упустил ли я что-то?

Возможно, я вас неправильно понял :slight_smile:. Я подумал, что вы имели в виду «включить функцию», а не «включить переключатель». Если речь идет о переключателе, то, насколько я знаю, сделать это невозможно.

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

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

6 лайков

Это отличная отправная точка. Было бы здорово добавить возможность приоритизации результатов, которые мы хотим отображать в качестве первого выбора (расширение только что реализованной логики): ИИ или нативный семантический поиск. В моем случае ИИ дает гораздо более релевантные результаты при поиске.

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

4 лайка

В качестве временного решения, если кому-то нужно включать переключатель по умолчанию, вы можете добавить этот скрипт в свою тему (я разместил его внутри тега ). Он отслеживает изменения в результатах поиска с ИИ и затем включает отображение результатов ИИ. Это не самый чистый код; возможно, @awesomerobot предложит более элегантный способ решения этой задачи.

<script type="text/javascript">
    // ЭТОТ СКРИПТ НЕОБХОДИМ ДЛЯ ВКЛЮЧЕНИЯ ПЕРЕКЛЮЧАТЕЛЯ, ЧТОБЫ ВКЛЮЧАТЬ РЕЗУЛЬТАТЫ ПОИСКА ОТ ИИ ПОСЛЕ ЗАВЕРШЕНИЯ ПОИСКА. УДАЛИТЕ ЕГО, КОГДА ПОЯВИТСЯ ВСТРОЕННАЯ ВОЗМОЖНОСТЬ ВКЛЮЧАТЬ ЭТО ПО УМОЛЧАНИЮ.
    console.log('Скрипт загружен. Постоянный поиск .semantic-search__searching и управление наблюдателем.');

    let searchObserver = null; // Переменная для хранения экземпляра наблюдателя

    function observeSearchContainer() {
      const searchStatusContainer = document.querySelector('.semantic-search__searching');

      if (searchStatusContainer) {
        // Если контейнер найден
        if (!searchObserver) {
            // Если наблюдатель еще не запущен, запускаем его
            console.log('.semantic-search__searching найден. Запуск наблюдения.');

            searchObserver = new MutationObserver(function(mutations) {
              //console.log('Обнаружено изменение в .semantic-search__searching:', mutations);
              mutations.forEach(function(mutation) {
                // Проверка на соответствующие изменения внутри наблюдаемого контейнера
                if (mutation.type === 'characterData') {
                  //console.log('Обнаружен соответствующий тип изменения. Попытка активировать функциональность кнопки переключения. ' + mutation.type);
                  const currentToggleButton = document.querySelector('button.d-toggle-switch__checkbox.semantic-search__results-toggle');
                  if (currentToggleButton) {
                      const isCurrentlyEnabled = currentToggleButton.getAttribute('aria-checked') === 'true';
                      if (!isCurrentlyEnabled) { // Если переключатель НЕ включен в данный момент
                        // Запускаем событие клика для активации связанной функциональности
                        currentToggleButton.click();
                        console.log('Событие клика по кнопке переключения запущено.');
                      } else {
                        console.log('Кнопка переключения уже включена.');
                      }
                  } else {
                    // Этот случай может возникнуть, если кнопка переключения удалена, пока контейнер еще присутствует
                    console.log('Кнопка переключения не найдена при попытке активировать функциональность.');
                  }
                }
              });
            });

            const config = { childList: true, subtree: true, characterData: true, attributes: true };
            searchObserver.observe(searchStatusContainer, config);
            console.log('MutationObserver запущен на .semantic-search__searching.');
        } else {
            // Контейнер найден, и наблюдатель уже запущен для него
            //console.log('.semantic-search__searching найден, наблюдатель уже активен.');
        }
      } else {
        // Если контейнер НЕ найден
        if (searchObserver) {
            // Если наблюдатель ранее был запущен, это означает, что контейнер был удален
            console.log('.semantic-search__searching удален. Отключение наблюдателя.');
            searchObserver.disconnect(); // Остановить наблюдение
            searchObserver = null; // Сбросить переменную наблюдателя
        } else {
            // Контейнер не найден, и наблюдатель не активен (правильное состояние)
            //console.log('.semantic-search__searching пока не найден.');
        }
      }
    }

    // Используем интервал для периодической проверки существования контейнера
    const containerCheckInterval = setInterval(observeSearchContainer, 500); // Проверка каждые 500 миллисекунд
</script>

Я переместил это в #feature, так как это, похоже, открытая дискуссия о том, как улучшить эту функцию.

1 лайк