brunch

You can make anything
by writing

C.S.Lewis

by 김길원 May 01. 2023

노션을 기반으로 한 개인화 챗봇 만들기

Langchain, LLM, ChatGPT

내 노션에 저장되어 있는 데이터를 기반으로 ChatGPT가 대답을 해줄까? 

노션을 사용한 지도 수년이 흘렀고 데이터가 많이 쌓이다 보니 어디에 무엇을 적어 놓았는지 잊어버린다.

노션에 쌓아 놓은 정보를 기반으로 묻고 답할 수 있는 챗봇을 만들고 싶었다. 


ChatGPT 출현 이후에 수많은 애플리케이션이 쏟아지면서 Langchain을 사용한 활용 사례가 하나둘씩 만들어지기 시작했다. Langchain은 LLM 모델에 날개를 달아주는 애플리케이션이다. 




먼저 웹 서치를 통해 노션 데이터를 이용한 프로젝트가 있는지 서치 해보았다. 역시 있었다.

참고한 깃허브: https://github.com/hwchase17/notion-qa


코딩 언어는 파이썬을 사용하였고 프로젝트의 기술적 흐름은 다음과 같다. 


1. 노션 텍스트 정보를 Vector화 시킴

Vector화 시킨다는 의미는 '텍스트'를 'Vector Data'로 포맷 변경하는 기술이다. 

예를 들면 "너의 이름이 뭐니?"라는 텍스트가 [0.01, 0.02, 0.03]으로 포맷 변경한다. 


이를 활용하는 이유는 AI가 텍스트보다 숫자를 더 효율적으로 인식하기 때문이다. 

ChatGPT도 이런 벡터 데이터를 활용하여 답을 한다고 한다. 

아래 3분짜리 영상에서 기초적인 개념을 잘 설명해 준다. 

https://www.youtube.com/watch?v=klTvEwg3oJ4&list=LL&index=1



2. 쪼갠 벡터 데이터 -> Faiss에 저장

개인 노션에 있는 텍스트 정보를 Vector로 쪼개어 Faiss에 저장한다.

Faiss는 쪼갠 벡터 데이터를 저장한다. Faiss 외에도 Pinecone, Chroma 같은 서비스도 있지만 해당 예제에서 Faiss를 사용했기에 그냥 따라가기로 했다. 


두 과정을 임베딩이라고 함


3. Langchain으로 질문(query)에 대한 백터 데이터를 찾아 답변

쪼개진 벡터 데이터를 찾고 LLM과 연결하는 일은 Langchain이 맡는다. 

Langchain은 질문과 노션 데이터를 이어주는 다리 역할한다. 

이로서 개인화된 챗봇 준비 끝!




OPENAI API KEY를 연결하고 질문 몇 가지를 돌려보고 인사이트를 정리해 보았다.


Insight 1. 숫자 정보가 들어간 정보는 왠지 할루시네이션(환각)이 생기는 듯?

노션에 고객 병원의 계약 종료 일자를 모아둔 데이터가 있다. 

OO병원 계약 종료 일자를 알려달라고 질문했으나 틀린 답변이 돌아왔다.

돌아온 답변은 2024년 1월 13일, 그러나 어디에도 1월 13일에 계약이 끝나는 병원은 없었다.



Insight 2. [step by step] 프롬프트가 먹힌다?

ChatGPT 프롬트에 [step by step]을 넣어서 질문하면 좀 더 정확한 답변을 준다.

사람처럼 단계 별로 과정의 흐름에 따라 설명하기 때문이다. 

이 현상은 개인 데이터에 질문을 하는 것에도 동일하게 나타났다. 

[step by step] 질문시 디테일한 답변을 한다.


위 답변을 실제 노션 매뉴얼과 비교해본다면? 

얼추 비슷하다!

실제 노션 사내 매뉴얼과 비교했을 때!



Insight 3. 노션 데이터 이외의 질문을 하면 먹통?

'태양은 어디서 뜨지?'라는 질문을 했더니 'I don't know'라는 답변이 돌아온다. 

노션 데이터의 임베딩에서 해당하는 Vector data를 찾지 못한 당연한 결과이다.


노션 DB에 없는 질문은 답을 못한다.

I don't know 라는 답변이 아쉽진 않았다. 모르면 모른다고 답변해주는 것이 오히려 다행이다. 

ChatGPT로 무언가를 물어봤을 때 경계해야할 점은 할루시네이션(환각)이다. 

정보가 없으면 없다고 답해주어서 안심이 되었다.



여기까지 작동 원리를 이해하기 위한 내용이었고 꽤 흥미로웠다. 

이를 통해 개인화 데이터를 기반으로 한 챗봇이 작동됨을 확인했다.


현재는 VS Code 터미널로 질문하고 답변을 받는 것은 사용성이 좋지 않기에 웹으로 옮겨서 사용할 예정이다. 다음 스텝은 다음과 같다. 


인터넷으로 옮겨 챗봇과 같은 서비스를 만들자. 

간단한 질문 답변 말고 챗봇처럼 대화가 가능한 수준까지 간다면 아래와 같은 애플리케이션이 나올 것 같다. 

(1) 고객 컨설팅 시뮬레이션

(2) 신입사원+팀원 온보딩 매뉴얼

(3) 고객 매뉴얼 챗봇



지속적으로 우리만의 데이터수집하고 가꾸고 만들자. 

퀄리티 있는 데이터를 쌓고 잘 가꿀수록 챗봇의 질은 높아질 것이라 생각된다.

잘 가꾼 데이터를 고객에게 배포하고 편의성을 높이는 일을 하자. 



참고한 유튜브: https://www.youtube.com/watch?v=MJrR8EGGRDc



브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari