질문에 대한 데이터를 검색하면 질문과 관련된 많은 문서(청크)가 검색될 수 있습니다.
유료 LLM를 사용할 경우 검색된 많은 문서(청크)를 그대로 사용하면 많은 비용이 발생하게 됩니다.
그래서 검색된 많은 문서(청크)를 그대로 사용하지 않고 질문의 맥락에 맞게 검색된 문서(청크)를 압축하여 사용하면 비용을 줄 일 수 있습니다.

Advanced RAG – Post-Retrieval
ContextualCompressionRetriever (문맥 압축 검색기)
기본 리트리버를 래핑하고 결과를 압축하는 리트리버입니다.

LLMChainExtractor (LLM 체인 추출기)
LLM 체인을 사용하여 문서(청크)에서 관련 부분을 추출합니다.

project3에 QnA3.ipynb 파일에 검색 결과 압축 코드를 추가합니다.

[Code]
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import LLMChainExtractor
# LLM 체인 추출기
compressor = LLMChainExtractor.from_llm(model)
# 문맥 압축 검색기
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
compressed_docs = compression_retriever.invoke("중학생의 수학 기초학력 미달률은?")
print(compressed_docs)
검색된 문서(청크)입니다.
- 교육부의 ‘2023 국가수준 학업성취도평가’에 따르면 중학생의 기초학력 미달률은 9.1%, 영어 6.0%, 수학 13.0%였으며 고등학생은 국어 8.6%, 영어 8.7%, 수학
- 8.6%, 영어 8.7%, 수학 16.6%로 집계됐다. 특히 수학의 기초학력 부진이 가장 높아 학습 격차 해소를 위한 지원이 필요한 상황이다.
- 테크빌교육 체더스, 기초학력 부진 해결을 위한 코스웨어 기획전 진행
- 기초 학력 향상에 특화된 에듀테크 솔루션을 특별 할인가로 제공한다.이번 기획전에서는 AI 수학 학습 플랫폼 ‘매쓰홀릭 T’, AI 영어 학습 솔루션 ‘원아워’, 국어 문해력 학습 프로그램 ‘리드포스쿨’ 등 기초 학력 향상에 특화된 에듀테크
검색된 문서(청크)를 압축한 결과입니다.
[gpt-4o-mini를 사용한 경우]
[Document(metadata={'source': 'data/test.txt'}, page_content='중학생의 기초학력 미달률은 9.1%, 수학 13.0%였으며'), Document(metadata={'source': 'data/test.txt'}, page_content='수학 16.6%로 집계됐다. 특히 수학의 기초학력 부진이 가장 높아 학습 격차 해소를 위한 지원이 필요한 상황이다.')]
[exaone3.5:7.8b를 사용한 경우]
[Document(metadata={'source': 'data/test.txt'}, page_content='중학생의 기초학력 미달률은 9.1%, 수학은 13.0%였습니다. \n\n*Note: The extracted part directly addresses the question regarding the middle school mathematics foundational achievement rate while keeping the provided context intact.*'), Document(metadata={'source': 'data/test.txt'}, page_content='수학 16.6%')]
참고: 발췌한 부분은 제공된 맥락을 그대로 유지하면서 중학교 수학 기초 성취도에 대한 질문을 직접 다루고 있습니다.
한국어 LLM 사용시 ContextualCompressionRetriever 대신 프롬프트를 이용하여 추출하기
1. project3에 QnA3.ipynb 파일에 프롬프트로 추출하는 코드를 추가합니다.
[Code]
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import StrOutputParser
# 프롬프트 (한국어)
prompt_template = PromptTemplate.from_template(
"""다음은 입력 문장과 여러 개의 보기 문장입니다.
입력 문장과 의미가 유사하거나 거의 같은 내용을 가진 보기 문장을 **그대로** 추출하세요.
추론하거나 새로운 문장을 생성하지 말고, 보기 문장 중 유사한 문장을 **있는 그대로** 출력하세요.
### 입력 문장:
{question}
### 보기 문장:
{context}
### 출력 형식:
보기 문장 그대로 출력하세요.
부가 설명은 추가하지 마세요.
"""
)
texts = "\n\n".join(result_text.page_content for result_text in result_texts)
question = "중학생의 수학 기초학력 미달률은?"
chain = (
prompt_template
| model
| StrOutputParser()
)
response = chain.invoke({"context": texts, "question": question})
print(response)
2. 프롬프트로 추출하는 코드를 실행합니다.

검색 결과 압축 실행 결과입니다.
[exaone3.5:7.8b를 사용한 경우]
교육부의 ‘2023 국가수준 학업성취도평가’에 따르면 중학생의 기초학력 미달률은 9.1%, 영어 6.0%, 수학 13.0%였으며 고등학생은 국어 8.6%, 영어 8.7%, 수학 16.6%, 영어 8.7%, 수학 16.6%로 집계됐다. 특히 수학의 기초학력 부진이 가장 높아 학습 격차 해소를 위한 지원이 필요한 상황이다.
'LLM Application > LangChain' 카테고리의 다른 글
| LangChain – Advanced RAG, Post-Retrieval, Reranker (0) | 2026.07.30 |
|---|---|
| LangChain – Advanced RAG, Pre-Retrieval(한국어 LLM 사용) (0) | 2026.07.30 |
| LangChain – Advanced RAG, Pre-Retrieval (0) | 2026.07.30 |
| 랭체인 - Chat Prompt Template, LCEL(LangChain Expression Language) (0) | 2026.07.26 |
| 랭체인 - LangChain Message (SystemMessage, HumanMessage, AIMessage) (0) | 2026.07.26 |