Study/AI

[LangChain] MultiQueryRetriever, 사용자 질문 확장하기

hongeeii 2025. 8. 24.
728x90
반응형

MultiQueryRetriever

주어진 사용자 입력 쿼리에 대해 다양한 관점에서 여러 쿼리를 자동으로 생성하는 LLM을 활용해 프롬프트를 만들어준다.

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import CharacterTextSplitter

text_splitter = CharacterTextSplitter(
    separator="\n",
    chunk_size=1, # seperator로만 청크를 나누게 된다.
    chunk_overlap=0
)

loader = TextLoader("../docs/travel.txt", encoding="utf-8")

documents = loader.load_and_split(text_splitter=text_splitter)

from langchain_chroma import Chroma

db = Chroma.from_documents(documents, hf_embeddings)
 
from langchain.retrievers.multi_query import MultiQueryRetriever

retriever = MultiQueryRetriever.from_llm(retriever=db.as_retriever(), llm=llm)
 

=>

  • 여행 일정을 어떻게 짜면 좋을까요?
  • 여행 준비를 위해 필요한 단계는 무엇인가요?
  • 추천하는 여행 코스나 팁이 있을까요?
    이렇게 세 가지로 질문해 답을 가져오는것을 볼 수 있다.
[chain/start] [retriever:MultiQueryRetriever > chain:RunnableSequence] Entering Chain run with input:
{
  "question": "여행 계획 세우기"
}
[chain/start] [retriever:MultiQueryRetriever > chain:RunnableSequence > prompt:PromptTemplate] Entering Prompt run with input:
{
  "question": "여행 계획 세우기"
}
[chain/end] [retriever:MultiQueryRetriever > chain:RunnableSequence > prompt:PromptTemplate] [1ms] Exiting Prompt run with output:
[outputs]
[llm/start] [retriever:MultiQueryRetriever > chain:RunnableSequence > llm:ChatOpenAI] Entering LLM run with input:
{
  "prompts": [
    "Human: You are an AI language model assistant. Your task is \n    to generate 3 different versions of the given user \n    question to retrieve relevant documents from a vector  database. \n    By generating multiple perspectives on the user question, \n    your goal is to help the user overcome some of the limitations \n    of distance-based similarity search. Provide these alternative \n    questions separated by newlines. Original question: 여행 계획 세우기"
  ]
}
[llm/end] [retriever:MultiQueryRetriever > chain:RunnableSequence > llm:ChatOpenAI] [1.57s] Exiting LLM run with output:
{
  "generations": [
    [
      {
        "text": "여행 일정을 어떻게 짜면 좋을까요?  \n여행 준비를 위해 필요한 단계는 무엇인가요?  \n추천하는 여행 코스나 팁이 있을까요?  ",
        "generation_info": {
          "finish_reason": "stop",
          "logprobs": null
...
    "여행 준비를 위해 필요한 단계는 무엇인가요?  ",
    "추천하는 여행 코스나 팁이 있을까요?"
  ]
}
728x90
반응형

추천 글