LlamaIndex를 통해 Elasticsearch로 데이터를 수집하는 방법

라마인덱스를 사용하여 데이터를 수집하고 검색하는 방법에 대한 단계별 안내입니다.

Elasticsearch를 사용하면 데이터를 빠르고 유연하게 색인화할 수 있습니다. 클라우드에서 무료로 사용해 보거나 로컬에서 실행하여 색인 작업이 얼마나 쉬운지 확인해 보세요.

이 문서에서는 데이터 색인을 생성하기 위해 LlamaIndex를 사용하여 FAQ 검색 엔진을 구현해 보겠습니다. Elasticsearch는 벡터 데이터베이스 역할을 하여 벡터 검색을 가능하게 하고, RAG(검색 증강 세대)는 컨텍스트를 보강하여 보다 정확한 응답을 제공합니다.

라마인덱스란 무엇인가요?

LlamaIndex는 특정 또는 비공개 데이터와 상호 작용할 수 있는 대규모 언어 모델(LLM)로 구동되는 에이전트 및 워크플로우를 쉽게 만들 수 있는 프레임워크입니다. 다양한 소스(API, PDF, 데이터베이스)의 데이터를 LLM과 통합하여 연구, 정보 추출, 문맥에 맞는 응답 생성 등의 작업을 수행할 수 있습니다.

주요 개념:

  • 에이전트: 간단한 응답부터 복잡한 작업까지 다양한 작업을 수행하기 위해 LLM을 사용하는 지능형 어시스턴트입니다.
  • 워크플로우: 고급 작업을 위해 에이전트, 데이터 커넥터 및 도구를 결합하는 다단계 프로세스입니다.
  • 컨텍스트 증강: 외부 데이터로 LLM을 보강하여 학습의 한계를 극복하는 기술입니다.

엘라스틱서치와라마인덱스 통합:

Elasticsearch는 LlamaIndex와 함께 다양한 방식으로 사용할 수 있습니다:

  • 데이터 소스: Elasticsearch Reader를 사용하여 문서를 추출합니다.
  • 임베딩 모델: 시맨틱 검색을 위해 데이터를 벡터로 인코딩합니다.
  • 벡터 저장소: 벡터화된 문서를 검색하기 위한 리포지토리로 Elasticsearch를 사용하세요.
  • 고급 스토리지: 문서 요약 또는 지식 그래프와 같은 구조를 구성하세요.

LlamaIndex와 Elasticsearch를 사용하여 FAQ 검색 구축하기

데이터 준비

Elasticsearch 서비스 FAQ를 예로 들어보겠습니다. 각 문제는 웹사이트에서 추출하여 개별 텍스트 파일에 저장했습니다. 어떤 방식으로든 데이터를 정리할 수 있지만, 이 예에서는 파일을 로컬에 저장하는 방법을 선택했습니다.

예제 파일입니다:

모든 문제를 저장한 후 디렉토리는 다음과 같이 표시됩니다:

종속성 설치

Python 언어를 사용하여 수집 및 검색을 구현할 것이며, 제가 사용한 버전은 3.9입니다. 전제 조건으로 다음 종속성을 설치해야 합니다:

Elasticsearch와 Kibana는 버전 8.16.2를 실행하도록 docker-compose.yml을 통해 구성된 Docker로 생성됩니다. 이렇게 하면 로컬 환경을 더 쉽게 만들 수 있습니다.

LlamaIndex를 사용한 문서 수집

문서는 LlamaIndex를 사용하여 Elasticsearch로 색인됩니다. 먼저 로컬 디렉터리에서 파일을 로드할 수 있는 SimpleDirectoryReader를 사용하여 파일을 로드합니다. 문서를 로드한 후 벡터스토어인덱스를 사용하여 색인을 생성합니다.

라마인덱스의 벡터 스토어는 문서 임베딩의 저장 및 관리를 담당합니다. LlamaIndex는 다양한 유형의 벡터 저장소를 지원하며, 이 경우에는 Elasticsearch를 사용하겠습니다. StorageContext에서 Elasticsearch 인스턴스를 구성합니다. 컨텍스트가 로컬이므로 추가 매개 변수가 필요하지 않았습니다. 다른 환경에서의 구성은 설명서를 참조하여 필요한 매개 변수를 확인하세요: ElasticsearchStore 구성.

기본적으로 LlamaIndex는 OpenAI 텍스트 임베딩-ada-002 모델을 사용하여 임베딩을 생성합니다. 하지만 이 예제에서는 텍스트 임베딩 3-소형 모델을 사용합니다. 이 모델을 사용하려면 OpenAI API 키가 필요하다는 점에 유의하세요.

아래는 문서 수집을 위한 전체 코드입니다.

실행 후 문서가 아래와 같이 FAQ 색인에 색인됩니다:

RAG로 검색

검색을 수행하기 위해 ElasticsearchStore 클라이언트를 구성하여 index_namees_url 필드를 Elasticsearch URL로 설정합니다. retrieval_strategy에서 벡터 검색을 위한 AsyncDenseVectorStrategy를 정의했습니다. AsyncBM25Strategy (키워드 검색) 및 AsyncSparseVectorStrategy (희소 벡터)와 같은 다른 전략도 사용할 수 있습니다. 자세한 내용은 공식 문서에서 확인할 수 있습니다.

다음으로, VectorStoreIndex 객체가 생성되며, 여기서 ElasticsearchStore 객체를 사용하여 vector_store를 구성합니다. as_retriever 메서드를 사용하면 유사성_top_k 매개변수를 통해 반환되는 결과의 수를 5로 설정하여 쿼리와 가장 관련성이 높은 문서를 검색합니다.

다음 단계는 RAG입니다. 벡터 검색 결과는 LLM을 위한 형식화된 프롬프트에 통합되어 검색된 정보에 따라 상황에 맞는 응답이 가능합니다.

프롬프트 템플릿에서는 프롬프트 형식을 정의하며, 여기에는 다음이 포함됩니다:

  • 컨텍스트 ({context_str}): 검색기가 검색한 문서입니다.
  • 쿼리 ({query_str}): 사용자의 질문입니다.
  • 지침: 모델이 외부 지식에 의존하지 않고 상황에 따라 대응할 수 있도록 하는 지침입니다.

마지막으로 LLM이 프롬프트를 처리하고 상황에 맞는 정확한 응답을 반환합니다.

전체 코드는 아래와 같습니다:

이제 검색을 수행할 수 있습니다(예: "Elastic 서비스가 무료인가요?" ) 그리고 FAQ 데이터 자체를 기반으로 상황에 맞는 답변을 얻을 수 있습니다.

이 응답을 생성하기 위해 다음 문서가 사용되었습니다:

결론

LlamaIndex를 사용해 벡터 데이터베이스로서 Elasticsearch를 지원하는 효율적인 FAQ 검색 시스템을 만드는 방법을 시연했습니다. 임베딩을 사용해 문서를 수집하고 색인을 생성하여 벡터 검색을 가능하게 합니다. 프롬프트 템플릿을 통해 검색 결과가 컨텍스트에 통합되어 LLM으로 전송되면 검색된 문서를 기반으로 정확한 문맥에 맞는 응답을 생성합니다.

이 워크플로는 정보 검색과 상황에 맞는 응답 생성을 통합하여 정확하고 관련성 높은 결과를 제공합니다.

참고 자료

https://www.elastic.co/guide/en/cloud/current/ec-faq-getting-started.html

https://docs.llamaindex.ai/en/stable/api_reference/readers/elasticsearch/

https://docs.llamaindex.ai/en/stable/module_guides/indexing/vector_store_index/

https://docs.llamaindex.ai/en/stable/examples/query_engine/custom_query_engine/

https://www.elastic.co/search-labs/integrations/llama-index

자주 묻는 질문

라마인덱스란 무엇인가요?

LlamaIndex는 특정 또는 비공개 데이터와 상호 작용할 수 있는 대규모 언어 모델(LLM)로 구동되는 에이전트 및 워크플로우를 쉽게 만들 수 있는 프레임워크입니다.

LlamaIndex를 Elasticsearch와 통합할 수 있나요?

예, 데이터 소스(Elasticsearch Reader를 사용하여 문서 추출), 임베딩 모델(의미 검색을 위해 데이터를 벡터로 인코딩), 벡터 스토리지(벡터화된 문서 검색을 위한 저장소로 Elasticsearch 사용), 고급 스토리지(문서 요약 또는 지식 그래프와 같은 구조 구성) 등 다양한 방식으로 LlamaIndex와 함께 Elasticsearch를 사용할 수 있습니다.

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요