질문이 접수되면 애플리케이션은 먼저 Elasticsearch 인덱스에서 관련 문서를 검색합니다. 이는 질문에 대한 희소 벡터 임베딩을 생성한 다음 인덱스에서 문서의 구절과 연관된 가장 가까운 임베딩을 검색하여 이루어집니다.
수집 단계에서와 마찬가지로, Elasticsearch 인덱스는 Langchain과의 통합( ElasticsearchStore )을 통해 관리됩니다:
질문에 대한 임베딩을 생성한 다음 검색하는 작업은 이 모든 작업을 수행하고 찾은 가장 관련성이 높은 문서 목록을 반환하는 Langchain의 검색 인터페이스의 invoke() 메서드에 의해 모두 잘 추상화되어 있습니다:
여기에서 반환된 구절이 클라이언트에 소스로 전송되는 방식을 확인할 수 있습니다. React 애플리케이션은 답변 아래에 "검색 결과" 로 표시합니다.
ElasticsearchStore 클래스에서 사용되는 strategy 인수는 수집 중에 사용되는 전략과 일치해야 한다는 점에 유의하세요. 이 예제에서 SparseVectorRetrievalStrategy 는 Elastic의 ELSER 모델에서 스파스 벡터를 생성하고 검색합니다. 평가할 수 있는 또 다른 흥미로운 옵션은 고밀도 벡터 임베딩을 사용하는 ApproxRetrievalStrategy 을 사용하는 것입니다.