AI로 찾은 XX개 결과 숨기기 - 기본적으로 토글 활성화

저희 디스커스 포럼에서 AI를 활용하는 실험을 하고 있는데, 지금까지 꽤 잘 작동하고 있습니다 (팀 여러분, 정말 잘하고 계시네요). 사용자 의도를 문맥에 잘 반영하여 매우 관련성 높은 결과를 제공합니다.

문제는 기본적으로 결과가 숨겨져 있다는 점입니다.

기본적으로 토글을 활성화하는 설정을 찾을 수 없습니다. 관리자가 이를 어떻게 설정하나요? 이 기능의 진정한 강점은 기본적으로 활성화하여, 때로는 결과가 들쭉날쭉할 수 있는 시맨틱 검색에서 벗어나는 것입니다.

재미있는 것은, 이 포럼에서 AI를 사용해 검색해 보았지만 관련 있는 답변을 전혀 찾지 못했다는 점입니다.

3개의 좋아요

글쎄요, AI는 그래도 관련 주제 섹션에서 찾았어요 :wink::

네, 그 페이지는 봤습니다. 하지만 AI 검색 결과를 모든 사용자에게 기본적으로 활성화하는 방법에 대한 내용은 보이지 않아요. 제가 뭘 놓치고 있는 건가요?

아마도 제가 오해한 것 같습니다 :slight_smile:. '기능 활성화’가 아니라 '토글 스위치 활성화’를 말씀하신 줄 알았거든요. 말씀하신 것이 토글을 가리키는 것이라면, 그렇게 할 방법이 없는 것 같습니다.

우리는 방금 전체 페이지 검색 결과가 0건일 때 기본적으로 토글되도록 설정했고, 다음으로 빠른 헤더 검색 결과가 0건이거나 매우 적을 때 AI 결과를 자동으로 추가하도록 할 예정입니다.

전체 페이지 검색에서 이 토글을 항상 자동으로 켜는 설정은 없습니다. 그렇게 하면 https://medium.com/@stephenjayakar/frontend-developers-stop-moving-things-that-im-about-to-click-on-5827bc0409b3 와 같은 문제가 발생하기 때문입니다.

6개의 좋아요

훌륭한 시작입니다. 방금 구현된 로직을 확장하여, 어떤 검색 결과를 첫 번째 선택지로 표시할지 우선순위를 지정할 수 있는 옵션이 있으면 좋겠습니다. AI 또는 네이티브 시맨틱 검색을 말하는 것이죠. 제 경우를 보면, 검색 시 AI가 훨씬 더 관련성 높은 결과를 생성합니다.

여기서 고려하는 점은, AI 검색을 실행하기 위해 이미 토큰이 소모되었으므로, 결과가 더 적합하다면 왜 그 결과를 보여주지 않느냐는 것입니다. 여전히 많은 사용자가 AI에 대해 경계심을 가지고 있어 스위치를 켜지 않지만, 동시에 오해의 소지가 있는 검색 결과(시맨틱)를 받게 되고 그 사실을 인지하지 못합니다. 커뮤니티의 기본 설정에 대해 무엇이 최선인지 관리자가 결정할 수 있도록 해야 합니다.

4개의 좋아요

누군가가 기본적으로 토글 버튼을 활성화해야 하는 경우를 위한 임시 해결책으로, 테마에 이 스크립트를 추가할 수 있습니다(저는 아래에 배치했습니다). 이 스크립트는 기본적으로 AI 검색 결과의 변경 사항을 감지한 후 AI 결과를 활성화 상태로 전환합니다. 이 코드는 가장 깔끔하지는 않을 수 있으니, @awesomerobot님이 더 우아한 방법을 알고 계실지도 모릅니다.

<script type="text/javascript">
    // 검색이 완료된 후 AI에서 가져온 검색 결과를 포함하도록 토글을 활성화하기 위한 스크립트 - 기본적으로 이 기능을 활성화하는 네이티브 옵션이 생길 때까지 삭제하지 마세요
    console.log('Script loaded. Continually looking for .semantic-search__searching and managing observer.');

    let searchObserver = null; // 관찰자 인스턴스를 저장할 변수

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

      if (searchStatusContainer) {
        // 컨테이너가 발견된 경우
        if (!searchObserver) {
            // 이미 실행 중인 관찰자가 없으면 관찰을 시작합니다
            console.log('.semantic-search__searching found. Starting observation.');

            searchObserver = new MutationObserver(function(mutations) {
              //console.log('Mutation detected in .semantic-search__searching:', mutations);
              mutations.forEach(function(mutation) {
                // 관찰 대상 컨테이너 내에서 관련 변경 사항을 확인합니다
                if (mutation.type === 'characterData') {
                  //console.log('Relevant mutation type detected. Attempting to trigger toggle button functionality. ' + 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('Toggle button click event triggered.');
                      } else {
                        console.log('Toggle button already enabled.');
                      }
                  } else {
                    // 컨테이너가 여전히 존재하는 동안 토글 버튼이 제거된 경우 이 상황이 발생할 수 있습니다
                    console.log('Toggle button not found when trying to trigger functionality.');
                  }
                }
              });
            });

            const config = { childList: true, subtree: true, characterData: true, attributes: true };
            searchObserver.observe(searchStatusContainer, config);
            console.log('MutationObserver started on .semantic-search__searching.');
        } else {
            // 컨테이너가 발견되었고, 이미 해당 컨테이너에 대해 관찰자가 실행 중인 경우
            //console.log('.semantic-search__searching found, observer already active.');
        }
      } else {
        // 컨테이너가 발견되지 않은 경우
        if (searchObserver) {
            // 이전에 관찰자가 실행 중이었다면 컨테이너가 제거된 것을 의미합니다
            console.log('.semantic-search__searching removed. Disconnecting observer.');
            searchObserver.disconnect(); // 관찰을 중단합니다
            searchObserver = null; // 관찰자 변수를 초기화합니다
        } else {
            // 컨테이너가 발견되지 않았고, 활성 관찰자도 없는 경우 (정상 상태)
            //console.log('.semantic-search__searching not found yet.');
        }
      }
    }

    // 컨테이너의 존재 여부를 주기적으로 확인하기 위해 interval을 사용합니다
    const containerCheckInterval = setInterval(observeSearchContainer, 500); // 500밀리초마다 확인
</script>

이 기능이 어떻게 개선될 수 있는지에 대한 끝없는 논의처럼 보이므로 Contribute > Feature 채널로 옮겼습니다.

1개의 좋아요