Vertex AI Search & Conversation을 사용한 RAG 챗봇 구현

김민형·2023년 12월 23일
4

GCP - AI,ML

목록 보기
10/17
post-custom-banner

Vertex AI Search & Conversation

Vertex AI Search & Conversation이란 쉽게 GCP의 Managed RAG 아키텍처 서비스라고 생각하면 된다.

그렇다면 RAG란?

RAG
우리가 가진 정보를 DB(벡터 DB)에 저장해두고, 사용자의 질의가 들어올 때 (ex) 챗봇을 통해 은행 계좌를 개설하는 방법을 물었을 때 등등) 관련된 정보를 검색하여 해당 정보가 담긴 문서들을 프롬프트를 통해 LLM에 전달하는 방식

PDF나 docs와 같이 자연어로 이루어진 문서들을 DB에 저장하려면, 일반적으로 숫자 형태로 변환해야 하고 이를 임베딩이라고 했었다.
이렇게 임베딩된 벡터값들과 우리가 가진 정보들이 저장되어 있는 벡터 DB를 좌표평면에 그렸을 때 가장 가까운 값을 가져오는 즉, 가장 유사한 값의 데이터를 가져와 사용자에게 보여주는 것이 모든 RAG 아키텍처의 기본 flow이다.

하지만 이를 위해선 우리의 정보를 벡터화하여 벡터 DB에 넣어놓는 작업, 들어오는 사용자 질의를 임베딩하여 우리의 DB와 매핑해주는 작업이 필요하다. GCP의 Vertex AI Search & Conversation은 이 모든 과정을 관리형으로 제공하여 코드 하나 없이 구현할 수 있다.

아키텍처

여기선 Bankstown Community College Institute student handbook 이 PDF를 Cloud Storage에 넣어놓고 이 정보를 활용한 Chatbot을 구현해볼 것이다.
(그냥 인터넷에서 구할 수 있는 아무 PDF다,,,)

데이터 준비

우선 PDF를 여러 페이지로 나눠줄 것이다. PyPDF2 라이브러리가 없다면 아래 명령어로 설치해주자.

pip install PyPDF2

split-pdf.py

from PyPDF2 import PdfWriter, PdfReader

inputpdf = PdfReader(open("student-handbook.pdf", "rb"))

for i in range(len(inputpdf.pages)):
    output = PdfWriter()
    output.add_page(inputpdf.pages[i])
    with open("./<폴더명>/document-page%s.pdf" % i, "wb") as outputStream:
        output.write(outputStream)

파일 실행 결과

아래 명령어를 통해 Search & Conversation의 데이터 스토어로 쓸 Cloud Storage 버킷에 업로드.

gsutil cp ./* gs://<버킷명>/

콘솔에서 확인

챗봇 구현

Vertex AI Search & Conversation 화면으로 이동 후 데이터 스토어 먼저 생성

PDF 파일이 있는 버킷 선택

이제 앱을 만들어줄 것이다. 단순 검색이 아닌 사용자와 대화를 하는 챗봇을 구현해야 하므로 채팅 앱을 선택해준다.

이전에 만들어놓은 데이터 스토어 연결.

여기서 미리보기를 누르면 Dialogflow CX라는 서비스의 콘솔로 연결되어 챗봇 환경으로 넘어간다.

Start Page 클릭.

Data Store를 누르면 연결된 데이터 스토어를 확인할 수 있고 지금 연결된 데이터 스토어 뿐 아니라 여러 데이터 스토어를 추가할 수 있다.

Generators 설정

Generators는 쉽게 말해서 Vertex AI Studio의 Context와 비슷한 개념이라고 보면 된다.
이전 포스팅 중 Generative AI Studio 사용해보기를 참고하면 알 수 있듯이 답변의 컨셉을 지정해주는 것이다.

내가 여기서 준 프롬프트는 아래 내용인데 요약하면 student-handbook을 기반으로 학생들에게 정중하게 답변하라는 뜻이다.

$conversation, $last-user-utterance, $request.knowledge.answers는 Dialogflow CX의 매개변수

You are a virtual assistant who works at The Bankstown Community College. You will provide general advice to the student based on the student handbook. Always respond politely and with constructive language.
The previous conversation: $conversation \n
This is the user's question $last-user-utterance \n
Here are some contextual knowledge that you need to know: $request.knowledge.answers \n
You answer:

Input Parameter에 $last-user-utterance를 입력하면 위의 프롬프트에서 지정해줬으니 사용자의 질문이 Generators에 전달된다. 그리고 대답이 출력될 Output Parameter를 지정해주자. 여기선 $request.generative.student-assistant-response로 설정

Agent responses에서 Output Parameter를 넣어준다.
이제 Generators에서 컨셉에 맞게 생성된 대답이 Agent responses를 통해 사용자에게 출력될 것이다.

왼쪽 탭의 Manage에서 Integration을 누르면 이 챗봇 설정이 어떤 어플리케이션과 통합할 수 있는지 확인할 수 있다.
페이스북 메신저, 라인 등등 생각보다 다양한 툴들과 연동이 되네..

하지만 여기서 바로 테스트를 해보기 위해 Dialogflow Messenger를 선택.

필요한 API 활성화

웹사이트에 삽입하기 위한 html 코드도 알아서 보여준다!

Try it now를 클릭하면 아래처럼 챗 아이콘이 활성화될 것이다.

채팅 테스트

정확한 답변을 해줬겠지만.. 혹시 몰라 답변에서 알려준 전화번호를 구글에 검색해봤더니.. 역시나 올바른 정보를 알려줬다.

하지만 주의할 점!! 2024.01 기준 Dialogflow CX는 한국어 지원이 되지 않는다..
(한국어 질의 불가능)

[Vertex AI Search & Conversation을 사용한 RAG 챗봇 구현 참고]
https://pub.towardsai.net/use-google-vertex-ai-search-conversation-to-build-rag-chatbot-d5d893c02fec

profile
Solutions Architect (rlaalsgud97@gmail.com)
post-custom-banner

0개의 댓글