한국어 임베딩과 제미니AI를 이용한 무료 RAG 시스템 구축하기

반응형

이 글에서는 랭체인(LangChain)의 RAG 문서를 참고하여 RAG 시스템을 구현하는 방법을 소개합니다.


필요한 패키지 설치하기

아래의 명령어를 사용하여 필요한 패키지를 설치합니다. 이러한 패키지들은 검색-증강 생성 과정을 구현하는 데 필요한 도구와 라이브러리를 제공합니다.

pip install --upgrade --quiet langchain faiss-cpu tiktoken langchain-google-genai

패키지 가져오기

다음으로, 구현에 필요한 패키지들을 Python 코드 내로 가져옵니다. 이 과정에서 각각의 모듈에서 필요한 클래스와 함수를 임포트합니다.

from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_google_genai import ChatGoogleGenerativeAI

한국어 임베딩 모델 구성하기

임베딩 과정에는 jhgan/ko-sroberta-multitask 모델을 사용하여 한국어 텍스트의 벡터 표현을 생성합니다. 이 모델은 한국어 문장을 임베딩하는데 효과적입니다.

hf = HuggingFaceEmbeddings(model_name='jhgan/ko-sroberta-multitask')

다음으로, 임베딩 모델을 사용하여 벡터 저장소를 생성하고, 이를 통해 검색 기능을 구현합니다.

docs = [
    "오늘은 정말 바쁜 하루였다. 아침에 일찍 일어나서 친구와 만나기로 한 약속을 지켰다.",
    "최근 인공지능 기술의 발전으로 많은 산업 분야에서 혁신이 일어나고 있다. 특히 자연어 처리 기술의 진보가 눈부시다.",
    "제주도는 한국에서 가장 인기 있는 관광지 중 하나다. 아름다운 해변과 푸른 자연이 매력적인 곳이다.",
    "한국의 김치는 세계적으로 유명한 발효 음식이다. 매콤하고 시원한 맛이 특징이며 다양한 요리에 활용된다.",
    "정기적인 운동과 균형 잡힌 식단은 건강을 유지하는 데 필수적이다. 매일 조금씩이라도 몸을 움직이는 습관을 들이자.",
    "온라인 학습 플랫폼의 발전으로 어디서나 다양한 지식을 접할 수 있게 되었다. 평생교육의 중요성이 점점 더 커지고 있다.",
    "지속 가능한 생활을 위해서는 일회용품 사용을 줄이고 재활용을 적극적으로 실천해야 한다.",
    "축구는 전 세계적으로 사랑받는 스포츠 중 하나다. 팀워크와 개인 기술이 조화를 이루어야 승리할 수 있다.",
    "한국의 전통 문화 중 하나인 한복은 그 아름다움으로 많은 사람들에게 사랑받고 있다. 특별한 날에 한복을 입는 것은 큰 의미가 있다.",
    "최근 글로벌 경제는 여러 도전에 직면해 있다. 변동성이 큰 시장에서 기업과 개인은 더욱 신중한 결정을 내려야 한다."
]

vectorstore = FAISS.from_texts(docs, embedding=hf)
retriever = vectorstore.as_retriever()

프롬프트 구성하기

사용자의 질문에 답하기 위해 고려할 문맥을 정의하는 프롬프트를 설정합니다

template = """Answer the question based only on the following context:
{context}

Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)

모델 설정하기

Google Generative AI를 사용하여 Gemini Pro 모델을 설정합니다. 이 모델은 RAG 과정에서 AI 답변 생성을 담당합니다.

model = ChatGoogleGenerativeAI(model="gemini-pro")

실행 체인 구성하기

마지막으로, 위에서 설정한 구성요소들을 연결하여 전체 실행 체인을 구성합니다. 이 체인은 사용자의 질문을 입력으로 받아, 검색-증강 생성 과정을 통해 답변을 생성합니다.

chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()
)

체인 실행하기

구성된 체인을 사용하여 실제 질문에 대한 답변을 생성해 봅시다.

chain.invoke("건강을 유지하려면 어떻게 해야하나요?")
'정기적으로 운동하고 균형 잡힌 식단을 유지하는 것이 필수적이다.'

참고

or

[카카오페이로 후원하기] [토스페이로 후원하기]

반응형