Perplexity.AI와 유사한 검색엔진 구현 프로젝트(3)

2024. 9. 19. 18:00AI

신뢰도 높은 데이터..

정확하고 최신화된 정보를 말한다고 생각한다.

 

따라서 최신화된 정보를 VectorDB에 수시로 저장하기에는 주기적인 크롤링 작업을 했다.

그렇다고 해서 크롤링 정보가 완벽하고 신뢰도 높다고 할 수도 없는 것이었다.

 

그래서 여기에 추가로 적용하기로 한 것이 Web Search API이다.

 

 처음에는 Serp API를 활용하여 반환 받은 검색 내용에 대한 JSON 데이터를 LLM 모델이 요약하고 정리하여 사용자에게 응답할 수 있도록 진행하였다.

과정에서 VectorDB를 활용하지 않을 수도 있었지만, Web Search API 요청이 많거나 중복요청이 여러개인 경우 비효율적인 부분을 생각하여 VectorDB의 활용방안에 연구를 진행하였다.

 

그래서 진행한 것이 다음과 같다.

사실상 최종 흐름도

 

설명과 같이 사실상 최종 흐름도 이미지이다. 

중간에 생략된 내용이 있는데 이는 VectorDB 적용 설명 이후 작성해보려고 한다.

 

먼저, VectorDB를 활용하는 것에 어려움이 있던것은 '가장 유사한 내용을 반환한다는 것'이다.

그말인 즉, 유사하다는 것이지 같다는 것이 아니다.

유사한 정도가 99.9%인 경우 어느정도 신뢰할 수 있다. 그러나 가장 유사한 값의 유사정도가 40%도 되지않는다면..?

이는 유사하지도 않은 정보이다. 그러나 이러한 판단은 우리 인간이 내리는 것이지 VectorDB가 할 수 없다.

 

그래서 나는 일정 유사치(Threshold)를 기준으로 넘기는 경우에 VectorDB의 정보를 신뢰하고 바로 LLM 모델에게 전달해주는 형태를 생각해냈다.(Web Search를 하지않고)

그러나 일정 유사치를 넘기지 못하는 경우 Web Search를 진행하고 검색한 결과 값을 VectorDB에 저장함과 동시에 LLM 모델에게 전달해 응답결과의 신뢰도를 높였다.

일정 유사치도 다양한 시도가 있었다.

Threshold > 0.5 부터 시작해서 점점 올리다 보니 0.8수치에서 VectorDB가 어느정도 신뢰할만한 값을 반환해주기 시작했다.

이과정을 토대로 기능을 다듬다보니 생겨난 작업들이 다음들이다.

 

  1. 사용자의 질문 의도분석
  2. 사용자가 요청한 하나의 질문으로 적합한 검색 쿼리 생성
  3. 생성한 LLM을 보호하기 위한 Guard Rail 생성

위와 같은 작업을 추가하면서 서비스는 점차 사용자화 되어갔고, 완벽하지는 않았지만 틀린말은 하지않는 챗봇이되었다.