pre-retrieval-modules

Pre-Retrieval

RetrievalAugmentationAdvisor를 구성하는 모듈의 한 부분 최상의 검색 결과를 얻이 위해 Query를 처리하는 모듈

Query Transformation

query를 검색을 효과적이게 할 수 있도록 변형하는 방법

  • query를 변환하기 위해 llm을 사용하는데 이때 temperature를 낮게 설정하는 것이 좋음

CompressionQueryTransformer

query와 대화 history를 암축하여 하나의 query로 변환한다.

Query query = Query.builder()
        .text("And what is its second largest city?")
        .history(new UserMessage("What is the capital of Denmark?"),
                new AssistantMessage("Copenhagen is the capital of Denmark."))
        .build();

QueryTransformer queryTransformer = CompressionQueryTransformer.builder()
        .chatClientBuilder(chatClientBuilder)
        .build();

Query transformedQuery = queryTransformer.transform(query);

RewriteQueryTransformer

User Query의 애매하고 불확실한 부분을 없애는 등의 작업을 통해, 검색에 좋은 Query로 변환한다.

Query query = new Query("I'm studying machine learning. What is an LLM?");

QueryTransformer queryTransformer = RewriteQueryTransformer.builder()
        .chatClientBuilder(chatClientBuilder)
        .build();

Query transformedQuery = queryTransformer.transform(query);

TranslationQueryTransformer

특정 언어로 번역을 해준다. 임베딩 모델이 특정 언어에 성능이 더 좋을 때 유용하다.

Query query = new Query("Hvad er Danmarks hovedstad?");

QueryTransformer queryTransformer = TranslationQueryTransformer.builder()
        .chatClientBuilder(chatClientBuilder)
        .targetLanguage("english")
        .build();

Query transformedQuery = queryTransformer.transform(query);

Query Expansion

query를 query list로 확장한다. 관련된 정보를 검색하는 query를 생성하거나, 복잡한 문제를 풀기 위한 sub-query들로 변환 시킨다.

MultiQueryExpander

llm을 사용해서 Query를 의미적으로 다양한 여러개의 질문으로 확장시킨다.

MultiQueryExpander queryExpander = MultiQueryExpander.builder()
    .chatClientBuilder(chatClientBuilder)
    .numberOfQueries(3)
    .build();
List<Query> queries = queryExpander.expand(new Query("How to run a Spring Boot app?"));
  • 기본적으로 original query가 포함되지만, .includeOriginal()를 통해서 제외시킬 수 있다.
MultiQueryExpander queryExpander = MultiQueryExpander.builder()
    .chatClientBuilder(chatClientBuilder)
    .includeOriginal(false)
    .build();