RetrievalAugmentationAdvisor
- 의존성
implementation "org.springframework.ai:spring-ai-rag"
Example
Advisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
.documentRetriever(VectorStoreDocumentRetriever.builder()
.similarityThreshold(0.50)
.vectorStore(vectorStore)
.build())
.build();
String answer = chatClient.prompt()
.advisors(retrievalAugmentationAdvisor)
.user(question)
.call()
.content();
- 기본적으로 검색된 context가 비어있는 것을 허용하지 않는다.
- 아래와 같이 Query Augmenter에서 허용 가능하다.
Advisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
.documentRetriever(VectorStoreDocumentRetriever.builder()
.similarityThreshold(0.50)
.vectorStore(vectorStore)
.build())
.queryAugmenter(ContextualQueryAugmenter.builder()
.allowEmptyContext(true)
.build())
.build();
String answer = chatClient.prompt()
.advisors(retrievalAugmentationAdvisor)
.user(question)
.call()
.content();
- vector store documents의 metadata를 기반으로 검색에 포함될 documents를 filtering 할 수 있다.
Advisor retrievalAugmentationAdvisor = RetrievalAugmentationAdvisor.builder()
.documentRetriever(VectorStoreDocumentRetriever.builder()
.similarityThreshold(0.50)
.vectorStore(vectorStore)
.build())
.build();
String answer = chatClient.prompt()
.advisors(retrievalAugmentationAdvisor)
.advisors(a -> a.param(VectorStoreDocumentRetriever.FILTER_EXPRESSION, "type == 'Spring'"))
.user(question)
.call()
.content();
- 또한 Query Transformer, Document Post Processor 등을 사용해서 검색이 잘 되도록 Query를 최적화 하거나, 검색된 Document를 후처리 하여서 관련 없어나 중복된 문서를 제거하는 등의 작업을 할 수 있다.
Modules
RetrievalAugmentationAdvisor는 Modular architecture를 통해서 구현되었다. 모듈들은 크게 4개의 종류로 나눌 수 있고 아래와 같다.
- Pre-Retrieval
- 검색 전 Query를 처리해서, 검색 결과를 향상 시킨다.
- Retrieval
- 여러 Data Source에 검색을 수행하고, 결과를 합친다.
- Post-Retrieval
- Document들을 요약하고 노이즈를 제거하고 재배치 해서 LLM이 잘 이해하고 활용할 수 있는 형태로 변환한다.
- Generation
- User Query와 검색된 Documents를 활용해서 최선의 답변을 생성하도록 한다.