이전 컨텐츠에서 pdf를 청크하여 백터 디비에 넣고 검색까지 해보았다
오늘은 리랭크다 (rerank)
from sentence_transformers import CrossEncoder
# Reranking 모델 로드
# 'cross-encoder/ms-marco-TinyBERT-L-2'는 좋은 성능을 보이는 작은 모델입니다.
# 더 큰 모델을 원한다면 'cross-encoder/ms-marco-MiniLM-L-6-v2' 등을 고려할 수 있습니다.
reranker_model = CrossEncoder('cross-encoder/ms-marco-TinyBERT-L-2')
def rerank_documents(query, documents, reranker, top_k=3):
# 쿼리와 각 문서의 쌍을 생성
pairs = [(query, doc.page_content) for doc in documents]
# Reranking 점수 계산
scores = reranker.predict(pairs)
# 문서와 점수를 묶어서 정렬
scored_documents = sorted(zip(documents, scores), key=lambda x: x[1], reverse=True)
# 상위 top_k 문서 반환
return [doc for doc, score in scored_documents[:top_k]]
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import DocumentCompressor
# 사용자 정의 압축기 (Reranking 로직을 포함)
class RerankCompressor(DocumentCompressor):
def __init__(self, reranker_model, top_n=3):
self.reranker_model = reranker_model
self.top_n = top_n
def compress_documents(self, documents, query, callbacks=None):
if not documents:
return []
reranked_docs = rerank_documents(query, documents, self.reranker_model, self.top_n)
return reranked_docs
# Reranking 압축기 초기화
rerank_compressor = RerankCompressor(reranker_model, top_n=3) # 상위 3개 문서만 선택
# ContextualCompressionRetriever를 사용하여 Qdrant 리트리버와 Reranker 결합
compression_retriever = ContextualCompressionRetriever(
base_retriever=retriever,
base_compressor=rerank_compressor
)
# Reranking이 적용된 QA 체인
qa_rerank_chain = RetrievalQA.from_chain_type(
llm=ollama_llm,
chain_type="stuff",
retriever=compression_retriever,
return_source_documents=True
)
# Reranking 적용 후 질문 및 답변 생성
query_rerank = "당신이 제공하는 주요 서비스는 무엇인가요?" # 질문을 입력하세요
result_rerank = qa_rerank_chain.invoke({"query": query_rerank})
print("\n--- RAG (Rerank 적용) 답변 ---")
print(f"질문: {query_rerank}")
print(f"답변: {result_rerank['result']}")
print("\n--- 참조 문서 (Reranked) ---")
for doc in result_rerank['source_documents']:
print(f"페이지: {doc.metadata.get('page')}, 소스: {doc.metadata.get('source')}")
print(f"내용: {doc.page_content[:200]}...")
print("-" * 20)
Reranker 구현 방식
| 방식 | 설명 | 장점 | 단점 |
|---|---|---|---|
| Bi-Encoder | 질문과 문서를 각각 임베딩 후 유사도 계산 | 빠름 | 정확도 낮음 |
| Cross-Encoder | 질문과 문서를 함께 입력해 유사도 계산 | 정확도 높음 | 느림, 비용 높음 |
대부분의 RAG 시스템은 벡터 검색 → Reranker로 재정렬하는 2단계 전략을 사용함
--- RAG 답변 ---
질문: SAP AI Core에서 모델을 학습시키는 기능이 있나요?
답변: 예, SAP AI Core는 모델을 학습시키기 위한 기능이 있습니다.
--- 참조 문서 ---
페이지: 253, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 14.2 전송 중 암호화
14.1 데이터, 데이터 흐름 및 프로세스의 보안 기능
14.3 사용자 인증 및 관리
보안 조치
백업 및 복원 기능이 구현 및 테스트되었습니다.삼
보안
포즈
전송 제어/통신
2
층
1
목적에 따른 접근 통제 및 분리
설명
지속성 있는 애플리케이션 데이터
4
특권”과 “직무의 ...
--------------------
페이지: 21, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 힘내 레포
기계 학습 모델의 최적화된 배포를 위한 것입니다. 배포 템플릿 사용
아르고 워크플로우
교육을 저장하고 워크플로와 템플릿을 제공하기 위해
KServe 표기법.
SAP AI 런치패드
AI 코어). SAP AI Launchpad는 Generative AI를 통해 생성 AI 기능도 제공합니다.
무엇
...
--------------------
페이지: 281, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 2. {{apiurl}}/v2/admin/repositories 엔드포인트에 GET 요청을 제출합니다. 3. 문제가 지속되면 모니 터링 및 문제 해결
[페이지 266]에 설명된 대로 SAP 지원 센터에 문의하십시오.
1. 모든 환경 변수가 SAP AI Core 서비스 키와 일치하는지 확인하세요. 구체적...
--------------------
페이지: 158, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: Artifacts.ai.sap.com/
<argo_artifact_name>.label s: |
{"ext.ai.sap.com/
Artifacts.ai.sap.com/
이름
, "ext.ai.sap.com/
맞춤키2":"맞춤값2"
맞춤키1":"맞춤값1"
실행 가능 ID입니다. 실행 파일 ID
시나리오.ai.sap.com/설명 (선택 사...
--------------------
페이지: 258, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: Docker 이미지는 가상 머신에 캐시됩니다. 이러한 캐시된 Docker 이미지는 다른 사람이 액세스할 수 없습니다.
테넌트이며 SAP에서는 액세스할 수 없습니다.
AI 콘텐츠에는 워크플로 템플릿과 서빙 템플릿은 물론 여기에 사용되는 Docker 이미지도 포함됩니다.
보안상의 이유로 SAP AI Co...
--------------------
--- RAG (Rerank 적용) 답변 ---
질문: SAP AI Core에서 모델을 학습시키는 기능이 있나요?
답변: SAP AI Core에는 모델을 학습시키는 기능이 있습니다. SAP AI Core는 머신 러닝 및 Deep Learning을 포함한 다양한 머신 러닝 알고리즘과 기계 학습 모델을 제공합니다. 또한, 모델의 배포와 관리를 위한 워크플로 엔진도 지원합니다.
--- 참조 문서 (Reranked) ---
페이지: 281, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 2. {{apiurl}}/v2/admin/repositories 엔드포인트에 GET 요청을 제출합니다. 3. 문제가 지속되면 모니 터링 및 문제 해결
[페이지 266]에 설명된 대로 SAP 지원 센터에 문의하십시오.
1. 모든 환경 변수가 SAP AI Core 서비스 키와 일치하는지 확인하세요. 구체적...
--------------------
페이지: 21, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: 힘내 레포
기계 학습 모델의 최적화된 배포를 위한 것입니다. 배포 템플릿 사용
아르고 워크플로우
교육을 저장하고 워크플로와 템플릿을 제공하기 위해
KServe 표기법.
SAP AI 런치패드
AI 코어). SAP AI Launchpad는 Generative AI를 통해 생성 AI 기능도 제공합니다.
무엇
...
--------------------
페이지: 258, 소스: C:/Users/wclee/rag_env/sap_ai_core.pdf
내용: Docker 이미지는 가상 머신에 캐시됩니다. 이러한 캐시된 Docker 이미지는 다른 사람이 액세스할 수 없습니다.
테넌트이며 SAP에서는 액세스할 수 없습니다.
AI 콘텐츠에는 워크플로 템플릿과 서빙 템플릿은 물론 여기에 사용되는 Docker 이미지도 포함됩니다.
보안상의 이유로 SAP AI Co...
--------------------