retrieval-augmentation-advisor

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를 활용해서 최선의 답변을 생성하도록 한다.