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();