재순위화는 검색 결과를 재분석하여 최적의 순서로 정렬하는 고도화된 기술
이중 단계 프로세스로 기본 검색 후 정교한 기준으로 재평가를 진행
사용자의 검색 의도에 맞는 정확도 향상을 통해 검색 품질을 개선
검색 결과의 품질을 높이기 위한 체계적인 최적화 방법론
# 벡터 저장소 로드
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
chroma_db = Chroma(
collection_name="db_korean_cosine_metadata",
embedding_function=embeddings,
persist_directory="./chroma_db",
)
# 기본 retriever 초기화
chroma_k_retriever = chroma_db.as_retriever(
search_kwargs={"k": 5}
)
query = "테슬라 트럭 모델이 있나요?"
retrieved_docs = chroma_k_retriever.invoke(query, config={"callbacks": [langfuse_handler]})
for doc in retrieved_docs:
print(f"{doc.page_content} [출처: {doc.metadata['source']}]")
print("="*200)
- 출력
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Cybertruck:** 2019년 11월에 처음 발표된 풀사이즈 픽업 트럭. 후륜 구동, 듀얼 모터 전륜 구동, 트리 모터 전륜 구동의 세 가지 모델이 제공됩니다. [출처: data\테슬라_KR.md]
...
Cross-Encoder 모델을 활용하여 검색 결과의 정밀한 재정렬을 수행함
데이터를 쌍(pair) 단위로 처리하여 문서와 쿼리 간의 관계를 분석함 (예: 두 개의 문장 또는 문서)
통합 인코딩 방식으로 검색 쿼리와 검색된 문서 간 유사도를 더 정확하게 계산함
참고: https://www.sbert.net/examples/applications/cross-encoder/README.html
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder
# CrossEncoderReranker 모델 초기화
model = HuggingFaceCrossEncoder(model_name="BAAI/bge-reranker-v2-m3")
# CrossEncoderReranker 모델을 사용한 re-ranker 초기화 (top_n: 3)
re_ranker = CrossEncoderReranker(model=model, top_n=3)
# CrossEncoderReranker를 사용한 retriever 초기화
cross_encoder_reranker_retriever = ContextualCompressionRetriever(
base_compressor=re_ranker,
base_retriever=chroma_k_retriever,
)
# CrossEncoderReranker를 사용한 retriever를 사용하여 검색
query = "테슬라 트럭 모델이 있나요?"
retrieved_docs = cross_encoder_reranker_retriever.invoke(query, config={"callbacks": [langfuse_handler]})
for doc in retrieved_docs:
print(f"{doc.page_content} [출처: {doc.metadata['source']}]")
print("="*200)
- 출력
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Cybertruck:** 2019년 11월에 처음 발표된 풀사이즈 픽업 트럭. 후륜 구동, 듀얼 모터 전륜 구동, 트리 모터 전륜 구동의 세 가지 모델이 제공됩니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Model Y:** 싱글 모터, 후륜 구동 또는 듀얼 모터, 전륜 구동 레이아웃을 갖춘 5인승 및 7인승 구성으로 제공되는 중형 크로스오버 SUV. 이 차량은 고급 Model X SUV보다 저렴하도록 설계되었습니다. Model Y 프로토타입은 2019년 3월에 처음 공개되었으며 배송은 2020년 3월에 시작되었습니다.
- **Tesla Semi:** Tesla Semi는 Tesla, Inc.의 클래스 8 세미 트럭으로, 트리 모터, 후륜 구동 레이아웃을 갖추고 있습니다. Tesla는 Semi가 일반적인 디젤 세미 트럭보다 약 3배 더 강력하고 주행 거리가 500마일(800km)이라고 주장합니다. 초기 배송은 2022년 12월 1일에 PepsiCo에 이루어졌습니다. [출처: data\테슬라_KR.md]
...
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMListwiseRerank
from langchain_openai import ChatOpenAI
# ChatOpenAI 모델 초기화
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# LLMListwiseRerank 모델 초기화 (top_n: 3)
re_ranker = LLMListwiseRerank.from_llm(llm, top_n=3)
# LLMListwiseRerank 모델을 사용한 re-ranker 초기화
llm_reranker_retriever = ContextualCompressionRetriever(
base_compressor=re_ranker,
base_retriever=chroma_k_retriever,
)
# LLMListwiseRerank 모델을 사용한 retriever를 사용하여 검색
query = "테슬라 트럭 모델이 있나요?"
retrieved_docs = llm_reranker_retriever.invoke(query, config={"callbacks": [langfuse_handler]})
for doc in retrieved_docs:
print(f"{doc.page_content} [출처: {doc.metadata['source']}]")
print("="*200)
- 출력
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Cybertruck:** 2019년 11월에 처음 발표된 풀사이즈 픽업 트럭. 후륜 구동, 듀얼 모터 전륜 구동, 트리 모터 전륜 구동의 세 가지 모델이 제공됩니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Model Y:** 싱글 모터, 후륜 구동 또는 듀얼 모터, 전륜 구동 레이아웃을 갖춘 5인승 및 7인승 구성으로 제공되는 중형 크로스오버 SUV. 이 차량은 고급 Model X SUV보다 저렴하도록 설계되었습니다. Model Y 프로토타입은 2019년 3월에 처음 공개되었으며 배송은 2020년 3월에 시작되었습니다.
- **Tesla Semi:** Tesla Semi는 Tesla, Inc.의 클래스 8 세미 트럭으로, 트리 모터, 후륜 구동 레이아웃을 갖추고 있습니다. Tesla는 Semi가 일반적인 디젤 세미 트럭보다 약 3배 더 강력하고 주행 거리가 500마일(800km)이라고 주장합니다. 초기 배송은 2022년 12월 1일에 PepsiCo에 이루어졌습니다. [출처: data\테슬라_KR.md]
...
맥락적 압축 기술은 검색된 문서를 그대로 반환하는 대신, 쿼리 관련 정보만을 선별적으로 추출
이중 구조 시스템으로 기본 검색과 문서 압축 과정을 수행
효율적인 처리를 통해 LLM 비용 절감과 응답 품질 향상을 달성
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainFilter
from langchain_openai import ChatOpenAI
# ChatOpenAI 모델 초기화
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# LLMChainFilter 모델 초기화
context_filter = LLMChainFilter.from_llm(llm)
# LLMChainFilter 모델을 사용한 retriever 초기화
llm_filter_compression_retriever = ContextualCompressionRetriever(
base_compressor=context_filter, # LLM 기반 압축기
base_retriever=chroma_k_retriever, # 기본 검색기
)
# LLMListwiseRerank 모델을 사용한 retriever를 사용하여 검색
query = "테슬라 트럭 모델이 있나요?"
compressed_docs = llm_filter_compression_retriever.invoke(query, config={"callbacks": [langfuse_handler]})
for doc in compressed_docs:
print(f"{doc.page_content} [출처: {doc.metadata['source']}]")
print("="*200)
- 출력
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Cybertruck:** 2019년 11월에 처음 발표된 풀사이즈 픽업 트럭. 후륜 구동, 듀얼 모터 전륜 구동, 트리 모터 전륜 구동의 세 가지 모델이 제공됩니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
| Tesla 모델 | | | |
| :--------- | :------- | :---- | :--------------- |
| 이름 | 제조년도 | 좌석 | 참고 |
| Roadster | 2008 | 2 | 2012년에 단종 |
| Model S | 2012 | 5/7 | |
| Model X | 2015 | 5/6/7 | |
| Model 3 | 2017 | 5 | |
| Model Y | 2020 | 5/7 | |
| Semi | 2022 | 2 | |
| Cybertruck | 2023 | 5 | |
| Roadster 2 | | 2/4 | 2025년 출시 예정 |
| Cybercab | | 2 | 2026년 출시 예정 |
| Robovan | | 20 | 명시된 기간 없음 |
### 사용 가능한 제품 [출처: data\테슬라_KR.md]
...
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor
from langchain_openai import ChatOpenAI
# ChatOpenAI 모델 초기화
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# LLMChainExtractor 모델 초기화
compressor = LLMChainExtractor.from_llm(llm)
# LLMChainExtractor 모델을 사용한 retriever 초기화
llm_extractor_compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, # LLM 기반 압축기
base_retriever=cross_encoder_reranker_retriever, # 기본 검색기 (Re-rank)
)
# LLMChainExtractor 모델을 사용한 retriever를 사용하여 검색
query = "테슬라 트럭 모델이 있나요?"
compressed_docs = llm_extractor_compression_retriever.invoke(query, config={"callbacks": [langfuse_handler]})
for doc in compressed_docs:
print(f"{doc.page_content} [출처: {doc.metadata['source']}]")
print("="*200)
- 출력
- **Cybertruck:** 2019년 11월에 처음 발표된 풀사이즈 픽업 트럭. 후륜 구동, 듀얼 모터 전륜 구동, 트리 모터 전륜 구동의 세 가지 모델이 제공됩니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
- **Tesla Semi:** Tesla Semi는 Tesla, Inc.의 클래스 8 세미 트럭으로, 트리 모터, 후륜 구동 레이아웃을 갖추고 있습니다. Tesla는 Semi가 일반적인 디젤 세미 트럭보다 약 3배 더 강력하고 주행 거리가 500마일(800km)이라고 주장합니다. 초기 배송은 2022년 12월 1일에 PepsiCo에 이루어졌습니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
| Semi | 2022 | 2 | |
| Cybertruck | 2023 | 5 | | [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
from langchain.retrievers.document_compressors import EmbeddingsFilter
# 임베딩 기반 압축기 초기화
embeddings_filter = EmbeddingsFilter(embeddings=embeddings, similarity_threshold=0.4)
# 임베딩 기반 압축기를 사용한 retriever 초기화
embed_filter_compression_retriever = ContextualCompressionRetriever(
base_compressor=embeddings_filter, # 임베딩 기반 압축기
base_retriever=cross_encoder_reranker_retriever, # 기본 검색기 (Re-rank)
)
query = "테슬라 트럭 모델이 있나요?"
compressed_docs = embed_filter_compression_retriever.invoke(query, config={"callbacks": [langfuse_handler]})
for doc in compressed_docs:
print(f"{doc.page_content} [출처: {doc.metadata['source']}]")
print("="*200)
- 출력
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Cybertruck:** 2019년 11월에 처음 발표된 풀사이즈 픽업 트럭. 후륜 구동, 듀얼 모터 전륜 구동, 트리 모터 전륜 구동의 세 가지 모델이 제공됩니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
| Tesla 모델 | | | |
| :--------- | :------- | :---- | :--------------- |
| 이름 | 제조년도 | 좌석 | 참고 |
| Roadster | 2008 | 2 | 2012년에 단종 |
| Model S | 2012 | 5/7 | |
| Model X | 2015 | 5/6/7 | |
| Model 3 | 2017 | 5 | |
| Model Y | 2020 | 5/7 | |
| Semi | 2022 | 2 | |
| Cybertruck | 2023 | 5 | |
| Roadster 2 | | 2/4 | 2025년 출시 예정 |
| Cybercab | | 2 | 2026년 출시 예정 |
| Robovan | | 20 | 명시된 기간 없음 |
### 사용 가능한 제품 [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Model Y:** 싱글 모터, 후륜 구동 또는 듀얼 모터, 전륜 구동 레이아웃을 갖춘 5인승 및 7인승 구성으로 제공되는 중형 크로스오버 SUV. 이 차량은 고급 Model X SUV보다 저렴하도록 설계되었습니다. Model Y 프로토타입은 2019년 3월에 처음 공개되었으며 배송은 2020년 3월에 시작되었습니다.
- **Tesla Semi:** Tesla Semi는 Tesla, Inc.의 클래스 8 세미 트럭으로, 트리 모터, 후륜 구동 레이아웃을 갖추고 있습니다. Tesla는 Semi가 일반적인 디젤 세미 트럭보다 약 3배 더 강력하고 주행 거리가 500마일(800km)이라고 주장합니다. 초기 배송은 2022년 12월 1일에 PepsiCo에 이루어졌습니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
from langchain.retrievers.document_compressors import DocumentCompressorPipeline
from langchain_community.document_transformers import EmbeddingsRedundantFilter
# 임베딩 기반 필터 초기화 - 중복 제거
redundant_filter = EmbeddingsRedundantFilter(embeddings=embeddings)
# 임베딩 기반 필터 초기화 - 유사도 기반 필터 (임베딩 유사도 0.2 이상)
relevant_filter = EmbeddingsFilter(embeddings=embeddings, similarity_threshold=0.2)
# Re-ranking 모델 초기화
re_ranker = LLMListwiseRerank.from_llm(llm, top_n=2)
# DocumentCompressorPipeline 초기화 (순차적으로 redundant_filter -> relevant_filter -> re_ranker 적용)
pipeline_compressor = DocumentCompressorPipeline(
transformers=[redundant_filter, relevant_filter, re_ranker]
)
# DocumentCompressorPipeline을 사용한 retriever 초기화
pipeline_compression_retriever = ContextualCompressionRetriever(
base_compressor=pipeline_compressor, # DocumentCompressorPipeline 기반 압축기
base_retriever=chroma_k_retriever, # 기본 검색기
)
query = "테슬라 트럭 모델이 있나요?"
compressed_docs = pipeline_compression_retriever.invoke(query, config={"callbacks": [langfuse_handler]})
for doc in compressed_docs:
print(f"{doc.page_content} [출처: {doc.metadata['source']}]")
print("="*200)
- 출력
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Cybertruck:** 2019년 11월에 처음 발표된 풀사이즈 픽업 트럭. 후륜 구동, 듀얼 모터 전륜 구동, 트리 모터 전륜 구동의 세 가지 모델이 제공됩니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================
[출처] 이 문서는 테슬라에 대한 문서입니다.
----------------------------------
- **Model Y:** 싱글 모터, 후륜 구동 또는 듀얼 모터, 전륜 구동 레이아웃을 갖춘 5인승 및 7인승 구성으로 제공되는 중형 크로스오버 SUV. 이 차량은 고급 Model X SUV보다 저렴하도록 설계되었습니다. Model Y 프로토타입은 2019년 3월에 처음 공개되었으며 배송은 2020년 3월에 시작되었습니다.
- **Tesla Semi:** Tesla Semi는 Tesla, Inc.의 클래스 8 세미 트럭으로, 트리 모터, 후륜 구동 레이아웃을 갖추고 있습니다. Tesla는 Semi가 일반적인 디젤 세미 트럭보다 약 3배 더 강력하고 주행 거리가 500마일(800km)이라고 주장합니다. 초기 배송은 2022년 12월 1일에 PepsiCo에 이루어졌습니다. [출처: data\테슬라_KR.md]
========================================================================================================================================================================================================