강의 및 실습 정리/LLM 강의
[인프런 강의] 3.2 LangChain과 Chroma를 활용한 RAG 구성
조조링
2024. 10. 17. 18:41
728x90
반응형
이 내용은 인프런의 "RAG를 활용한 LLM Application 개발 (feat. LangChain)[링크]" 강의 기반으로 GPT4o을 이용해서 정리한 내용입니다.
실습은 소득세법 파일(tax.docx)을 대상으로 진행합니다.
1. 문서 읽기
- 문서는 리스트 형태로 저장되며, 이를 쪼개서 사용해야 합니다.
from langchain_community.document_loaders import Docx2txtLoader
loader = Docx2txtLoader("tax.docx")
document = loader.load()
2. 문서 쪼개기
- 주로 사용하는 함수는 RecursiveCharacterTextSplitter()와 CharacterTextSplitter()입니다.
- RecursiveCharacterTextSplitter()는 여러 구분자를 리스트로 제공해 더 나은 성능을 제공합니다.
from langchain_text_splitters import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(
chunk_size = 1500, # 하나의 chunk가 가질 수 있는 최대 토큰 수
chunk_overlap = 200 # 중복 허용 토큰 수
)
document_list = loader.load_and_split(text_splitter=text_splitter)
3. 임베딩 및 벡터 데이터베이스 저장
- 문서 리스트를 임베딩한 결과를 벡터 데이터베이스에 저장합니다.
from dotenv import load_dotenv
from langchain_openai import OpenAIEmbeddings
load_dotenv() # API Key 불러오기
embedding = OpenAIEmbeddings(model='text-embedding-3-large')
from langchain_chroma import Chroma
database = Chroma.from_documents(documents=document_list, embedding=embedding)
4. 질문(query)으로 유사한 문서 검색
query = '연봉 5천만원인 직장인의 소득세는 얼마인가요?'
retrieved_docs = database.similarity_search(query, k=4)
5. LLM을 통해 답변 생성
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model='gpt-4o')
prompt = f""" [Identity]
- 당신은 최고의 한국 소득세 전문가입니다.
- [Context]를 참고해서 사용자의 질문에 답변해주세요.
[Context]
{retrieved_docs}
Question: {query}
"""
ai_message = llm.invoke(prompt)
print(ai_message.content)
[답변]
'연봉 5천만원인 직장인의 소득세를 계산하기 위해서는 과세표준과 공제 항목을 고려해야 합니다. 대략적인 소득세는 약 428.25만원입니다. 그러나 개인의 공제 항목과 세액공제에 따라 차이가 있을 수 있으니 정확한 계산은 전문가의 도움을 받는 것이 좋습니다.'
LangChain Hub를 통한 더 나은 프롬프트 작성
- 템플릿에 페르소나가 이미 포함되어 있어, 프롬프트 작성이 간단해집니다.
from langchain import hub
prompt = hub.pull("rlm/rag-prompt")
from langchain.chains import RetrievalQA
qa_chain = RetrievalQA.from_chain_type(
llm,
retriever=database.as_retriever(),
chain_type_kwargs={"prompt":prompt}
)
ai_message = qa_chain({"query": query})
print(ai_message["result"])
[대답]
'연봉 5천만원인 직장인의 소득세는 공제 항목에 따라 달라질 수 있으며, 정확한 계산을 위해 추가 정보가 필요합니다. 구체적인 소득세 금액은 세무 전문가의 도움을 받는 것이 좋습니다.'
728x90
반응형