[Langchain] MultiQueryRetriever: 사용자의 질문 의도 파악 및 관련 문서 검색
MultiQueryRetriever
거리 기반 벡터DB 검색은 쿼리를 임베드하고 거리 기준으로 유사한 문서를 찾습니다. 그러나 쿼리가 분명하지 않으면 임베딩이 데이터의 의미를 제대로 파악하지 못하고 정확한 답변을 못할 수도 있다. 이러한 문제를 해결하기 위해서 랭체인의 멀티쿼리 리트리버(MultiQueryRetriever)를 사용할 수 있습니다.
멀티쿼리 리트리버는 LLM을 사용해 입력된 쿼리에 대해 서로 다른 관점에서 여러 쿼리를 생성함으로써 프롬프트 튜닝 프로세스를 자동화합니다. 각 생성된 쿼리를 통해 유사 문서를 검색하고 모든 쿼리에서 관련성이 높은 더 큰 문서들을 얻습니다. 멀티쿼리 리트리버는 동일한 질문에 대해 여러 관점을 생성함으로써 거리 기반 검색의 일부 한계를 극복하고 더 풍부한 결과를 얻을 수 있게 됩니다.
출처: https://python.langchain.com/v0.1/docs/modules/data_connection/retrievers/MultiQueryRetriever/
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain.embeddings import HuggingFaceEmbeddings
# 뉴스 기사 크롤링
loader = WebBaseLoader("https://n.news.naver.com/mnews/article/014/0005183344")
text = loader.load()
# 문서 청크 분할
text_splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=0)
splits = text_splitter.split_documents(text)
# 엠베딩 모델
embeddings = HuggingFaceEmbeddings(
model_name="BAAI/bge-m3",
model_kwargs={'device': 'mps'},
encode_kwargs={'normalize_embeddings': False},
)
# VectorDB
vectordb = FAISS.from_documents(documents=splits, embedding=embeddings)
쿼리 생성에 사용할 LLM을 지정하면 나머지는 리트리버가 알아서 처리합니다.
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain_community.chat_models import ChatOllama
# LLM
llm = ChatOllama(
model="EEVE-Korean-10.8B",
temperature=0,
)
# Multi-query retrieval
retriever_from_llm = MultiQueryRetriever.from_llm(
retriever=vectordb.as_retriever(), llm=llm
)
테스트 하기
question = "아이폰 16는 언제 출시되나요?"
unique_docs = retriever_from_llm.invoke(question)
unique_docs
위 코드를 실행하고 로그를 확인하면 아래와 같이 LLM이 3가지 질문을 더 생성하여 쿼리한 것을 확인할 수 있다.
INFO:langchain.retrievers.multi_query:Generated queries: ['1. iPhone 16의 출시일은 언제인가요?', '2. iPhone 16이 예상 출시되는 해는 언제이며, 이 정보를 어디에서 찾을 수 있나요?', '3. 업계에 대한 최신 정보를 가지고 있는 신뢰할 수 있는 소스로부터 iPhone 16의 예상되는 출시일에 대해 알고 싶어요.']
그리고 쿼리된 문서는 아래와 같습니다.
[Document(page_content="마이크로소프트 안드로이드 운영체제(AOS)용 AI 챗봇 '코파일럿' 등도 탑재될 가능성이 있다.'아이폰15 프로처럼' 울트라, 티타늄 외관…플러스 모델에도 12GB 램 탑재", metadata={'source': 'https://n.news.naver.com/article/003/0012317114?sid=105', 'title': "언팩 D-4, 세계 최초 AI폰 '갤S24' 이렇게 나온다", 'language': 'ko'}), Document(page_content="[서울=뉴시스] 삼성전자가 17일 오전 10시(현지시간, 한국 시간 18일 오전 3시) 미국 캘리포니아주 산호세(새너제이)에서 '삼성 갤럭시 언팩 2024'를 열고 갤럭시 S24를 공개한다. 사진은 포르투갈에서 유출된 갤럭시 S24 시리즈 포스터 추정 이미지 (사진=theonecid 엑스 캡처) *재판매 및 DB 금지[서울=뉴시스]윤정민 기자 = 인공지능(AI) 서비스가 대거 탑재될 삼성전자 플래그십 스마트폰 '갤럭시 S24'가 18일 베일을 벗는다. 갤럭시 S23이 전작 대비 카메라, 디자인 등 대폭 개선됐다면, 이번 신작은", metadata={'source': 'https://n.news.naver.com/article/003/0012317114?sid=105', 'title': "언팩 D-4, 세계 최초 AI폰 '갤S24' 이렇게 나온다", 'language': 'ko'}), Document(page_content="[서울=뉴시스] 삼성전자가 17일 오전 10시(현지시간, 한국 시간 18일 오전 3시) 미국 캘리포니아주 산호세(새너제이)에서 열 '삼성 갤럭시 언팩 2024'의 주제는 '모바일 AI의 새로운 시대 개막'이다. 앞서 삼성전자가 AI를 스마트폰 차기작 특징으로 예고했던 만큼 어떤 AI 기능이 실릴지 관심이 쏠린다.삼성전자가 공식적으로 밝힌 AI 서비스는 실시간 통화 통역이다. 이미 SK텔레콤 '에이닷' 등 통화 통역을 지원하는 앱이 있다. 하지만 자체 AI가 탑재될 갤럭시 S24는 별도 앱을 설치하지 않아도 통역 통화를 이용할 수", metadata={'source': 'https://n.news.naver.com/article/003/0012317114?sid=105', 'title': "언팩 D-4, 세계 최초 AI폰 '갤S24' 이렇게 나온다", 'language': 'ko'}), Document(page_content="언팩 D-4, 세계 최초 AI폰 '갤S24' 이렇게 나온다\n\n\n\n\n입력2024.01.14. 오전 8:01\n\n\n수정2024.01.14. 오전 8:10\n\n기사원문\n \n\n\n\n\n윤정민 기자\n\nTALK\n\n\n\n\n\n\n\n\n\n윤정민 기자\n\nTALK\n구독\n구독중\n\n\n\n\n구독자\n0\n\n\n응원수\n0\n\n\n\n더보기\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n추천\n\n\n\n\n쏠쏠정보\n0\n\n\n\n\n흥미진진\n0\n\n\n\n\n공감백배\n0\n\n\n\n\n분석탁월\n0\n\n\n\n\n후속강추\n0\n\n\n \n\n\n\n댓글\n\n\n\n\n\n본문 요약봇", metadata={'source': 'https://n.news.naver.com/article/003/0012317114?sid=105', 'title': "언팩 D-4, 세계 최초 AI폰 '갤S24' 이렇게 나온다", 'language': 'ko'}), Document(page_content='한층 진화된 AI 서비스로 새로운 스마트폰 기준을 제시할 것으로 전망된다.업계 모두가 스마트폰 시장 선두 주자인 삼성전자의 신작을 궁금해하는 만큼 공신력 있는 IT 팁스터(정보유출자)들이 여러 정보를 유출했다. 14일 현재까지 삼성전자가 공개한 스마트폰 신작 정보와 업계에 유출된 내용을 종합해 갤럭시 S24 예상 사양을 정리해 봤다."손안에 만능 비서 담았다"…인터넷 연결 없어도 AI 쓸 수 있는 '온디바이스 AI폰'', metadata={'source': 'https://n.news.naver.com/article/003/0012317114?sid=105', 'title': "언팩 D-4, 세계 최초 AI폰 '갤S24' 이렇게 나온다", 'language': 'ko'})]
RAG 프롬프트 템플릿을 사용하여 LLM이 멀티쿼리 리트리버된 문서를 기반으로 대답하도록 할 수 있습니다.
from langchain import hub
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
prompt = hub.pull("rlm/rag-prompt")
rag_chain = (
{"context": retriever_from_llm | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
question = "아이폰에 AI가 탑재되었을 때 어떤 변화가 있을까요?"
rag_chain.invoke(question)
아이폰에 인공지능(AI)이 통합되면 향상된 기능성과 사용자 경험을 기대할 수 있습니다. 이는 확대된 줌 기능과 이미지 편집, 사진 속 불필요한 개체 제거, 저조도 영상 품질 개선과 같은 새로운 AI 기능을 포함할 것으로 전망됩니다. 또한 통화 중 언급된 작업을 정리하거나 인터넷 연결 없이도 기기에서 AI를 사용할 수 있는 '온디바이스 AI폰'을 기대할 수 있습니다. 삼성전자의 갤럭시 S24와 같이 자체 개발한 생성형 AI 및 스마트폰에 내장된 AI 시스템이 이러한 기능을 가능하게 할 것으로 예상됩니다.
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.
Congratulations, your post has been upvoted by @upex with a 0.21% upvote. We invite you to continue producing quality content and join our Discord community here. Keep up the good work! #upex