본문 바로가기
AI/개발일지

[Simon] 챗봇개발일지 - (1)

by AI미남홀란드 2024. 1. 11.
728x90

RAG 챗봇을 구축하는 과정에서 그냥 Langchain 으로 Document 로더를 통해서 , Finecon, 크로마DB 와 같은 Vector DB 로 임베딩을 한 후 코사인 시밀러 서치를 통해 값을 가져오면 끝? 간단하게 생각을 했다. 사실 아직 제대로 챗봇을 구성해보진 않았다 왜냐면 데이터가 정제가 잘 안되어있는 문제도 있을 뿐더러, 자꾸 만들지도 않고 성능개선에 대한 문제점만 생각을 했다.

처음에 랭체인의 Cookbook 을 따라 쳐보면서 클론코딩을 하면서 어느정도 라이브러리에 대한 이해도를 키웠는데 지금은 많이 이해한 상태이다. 그렇다면 우리 회사의 데이터는 다양한 파일이 존재하는데 이걸 어떻게 결합하지 그 의문이 사실 들었었다. 웹의형태도 있을거고, 

그냥 문서를 로드하는 경우도 있을것이다. 그런 경우 데이터 병합이 필요할텐데 Loader 가 처리를 해주나? 계속 고민을 했었는데 

 

오픈카톡방에 돌아다니면서도 물어보고 랭체인 강의의 질의를 하기도 했다. 내가 원하는 속 시원한 답변은 아니었던거 같다. 심지어 AI 인프런 모델 같은 경우에는 pandas 로 병합하라는데? 이샛기가? 라는 생각이 들었다 왜냐 다 테이블 형식의 데이터가 아니고, 심지어 그냥 Text 문자열만 있는 데이터도 있을 것이다 그거에 대한 고민을 하던 찰나에.. 

인프런 랭체인강의

 

운 좋게 Langchain Docs 를 통해서 merge 가 된다는 사실을 알게 되었다. 보통 저런강의도 그렇고, 기본 쿡북예제에서는 머지를 잘 하는 경우가 없었기 때문에 이런 기능이 있는지 몰랐었다. 그래서 독스를 뒤져보다가 우연하게 발견하였고 단 코드 두줄에 데이터가 머지 되는것이었다. 왜 이걸 몰라서 그렇게 고민을 했는지 참 한심했습니다. Pandas 형식처럼 머지를 해준다.

Merge Documents Loader

 

나중에 머지를 해서 한번 해보고 리뷰를 해보겠지만,  또 문제가 저는 항상 제품군별 챗봇의 성능을 높이기 위해서 생각을 많이 했는데 오늘 오픈카톡방에서 고수분의 제안을 받았다. 벡터디비를 나누고, 그 관련된 정보만 넣어서 신뢰성을 높히는 것이죠 기존의 로더방식은 그냥 순차적으로 들어가기 때문에 DB에 할루시네이션 과 시밀러 서치로 쿼리를 찾을때 높은 확률이 나올수가 없다고 나도 생각은 하고 있었는데 새로운방식이 맘에 들었다. 그러나 이건 또다른 나같은 개발뉴비에게 엄청어려운 DevOps 영역인것 같았다. 즉 오케스트레이션 관리를 해주어야하는데 저희회사 자체도 그렇고 SW 개발자가 있지도 않고, 제가 해야되는 부분이기도 하고 처음해보는 영역이고 백엔드지식도 많아야 할것 같다.

 

큰 그림은 이렇다

 

유저 : W5500의 정보 스펙이 궁금해요.

챗봇 : 네 잠시만 기다려주세요.

-> 그럼 챗봇은 W5500 에 관련된 텍스트 유사도를 통해서  W5500에 관련된 Vector DB로 접근을 합니다.

-> 그 Vector DB에서 W5500의  정보, 스펙 관련된 내용을 시밀러서치를 통해서 문장을 가져옵니다.

 

방법이 2가지가 있을거같은데 텍스트유사도를 검색해주는 모델을 만들어서 하는 방법과

GPT 에게 Prompt 를 통해서 연관된 벡터DB로 접근하는 프롬프트를 넣는 방법이 있을거같다(이건 뇌피셜)

 

이렇게 보면은 그냥 하나 추가된거네 뭐가어려워 하겠지만? Ops 관련 파이프라인을 해본적이 없기 떄문에 저 연결고리 역할하는 부분이 핵심인데 저게 너무 어려울거 같다. 일단 계속 공부를 해봐야겠지만. 먼저 오늘 찾은 머지 도큐멘트로 병합해서 그냥 하나의 덩어리의 벡터디비와, 나중에 분산 벡터디비 시스템을 구축한 오케스트레이션 형식의 챗봇을 테스트 해보면 좋을거 같다.

 

 

728x90