포스트

Langchain PDF Chatbot 만들기 - 18 - LLMChainFilter

목차

  1. LLMChainFilter란?
  2. LLMChainFilter 사용 목적
  3. LLMChainFilter 장,단점
  4. LLMChainFilter Code

LLMChainFilter란?

LangChain의 LLMChainFilter는 검색된 문서 중에서 사용자의 쿼리와 관련성이 높은 문서만 필터링하는 문서 압축기입니다.

LLMChainFilter 사용 목적

관련성 필터링: 검색된 많은 문서 중에서 실제로 쿼리와 관련된 문서만 선별
노이즈 감소: 검색 결과에서 관련 없는 정보를 제거하여 품질 향상
컨텍스트 최적화: LLM에 전달되는 context window를 효율적으로 사용

LLMChainFilter 장,단점

1) 장점

1) 정밀한 필터링

  • LLM의 언어 이해 능력을 활용하여 문서의 관련성과 중요도를 보다 정밀하게 평가할 수 있습니다.

2) 비용 및 시간 절감

  • 불필요한 정보를 미리 제거함으로써 후속 처리(예: 검색, 질의응답 등)의 연산 비용과 시간을 줄여줍니다.

2) 단점

1) LLM 의존성

  • 결과의 정확성이 LLM의 성능에 크게 좌우되므로 모델이 부정확한 판단을 내릴 경우 중요한 정보가 잘못 필터링될 위험이 있습니다.

2) 추가 연산 비용

  • LLM을 사용하는 과정에서 추가적인 계산 자원이 필요해, 비용 및 처리 시간이 늘어날 수 있습니다.

LLMChainFilter Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from langchain.retrievers import ContextualCompressionRetriever, EnsembleRetriever
from langchain.retrievers.document_compressors import LLMChainFilter


ensemble_retriever = EnsembleRetriever(retrievers=[bm25_retriever, multi_query_retriever], weights=[0.4, 0.6])
document_compressor = LLMChainFilter.from_llm(llm=llm)
compression_retriever = ContextualCompressionRetriever(base_compressor=document_compressor,
                                                        base_retriever=ensemble_retriever)

chat_input = (RunnablePassthrough.assign(docs=itemgetter("question") | compression_retriever)
              ) | {"context": itemgetter("docs") | RunnableLambda(reorder_documents),
                  "question": itemgetter("question"),
                  "chat_history": itemgetter("chat_history")}

chain = (chat_input
        | prompt
        | llm
        | StrOutputParser())