Elasticsearch는 업계 최고 수준의 생성형 AI 도구 및 다양한 공급업체와 기본적으로 연동됩니다. Elastic 벡터 데이터베이스를 활용해 진행 중인 RAG 기본 넘어서기 또는 프로덕션 수준 앱 구축 웨비나를 확인해 보세요.
사용 사례에 가장 적합한 검색 솔루션을 구축하려면 무료 클라우드 체험판을 시작하거나 로컬 기기에서 Elastic을 지금 사용해 보세요.
Microsoft Semantic Kernel 팀과 협력하여,Microsoft Semantic Kernel (.NET) 사용자를 위한 Semantic Kernel Elasticsearch 벡터 스토어 커넥터의 출시를 발표합니다. 시맨틱 커널은 벡터 스토어의 보다 관련성 높은 데이터 기반 응답으로 대규모 언어 모델(LLM)을 개선하는 기능을 포함하여 엔터프라이즈급 AI 에이전트 구축을 간소화합니다. Semantic Kernel은 Elasticsearch와 같은 벡터 저장소와 상호 작용하기 위한 원활한 추상화 계층을 제공하여 레코드 컬렉션 생성, 나열, 삭제, 개별 레코드 업로드, 검색, 삭제와 같은 필수 기능을 제공합니다.
즉시 사용 가능한 Semantic Kernel Elasticsearch 벡터 저장소 커넥터는 개발자가 AI 에이전트를 구축하는 동안 매우 쉽게 Elasticsearch를 벡터 저장소로 플러그인할 수 있도록 Semantic Kernel 벡터 저장소 추상화를 지원합니다.
Elasticsearch는 오픈 소스 커뮤니티에서 강력한 기반을 가지고 있으며 최근 AGPL 라이선스를 채택했습니다. 이러한 도구는 오픈 소스 Microsoft 시맨틱 커널과 결합하여 강력하고 엔터프라이즈급 솔루션을 제공합니다. 다음 명령 curl -fsSL https://elastic.co/start-local | sh (자세한 내용은 start-local 참조)을 실행하여 몇 분 안에 Elasticsearch를 시작하여 로컬에서 시작할 수 있으며, AI 에이전트를 프로덕션하는 동안 클라우드 호스팅 또는 자체 호스팅 버전으로 이동할 수 있습니다.
이 블로그에서는 시맨틱 커널을 사용할 때 시맨틱 커널 Elasticsearch 벡터 저장소 커넥터를 사용하는 방법을 살펴봅니다. 향후 파이썬 버전의 커넥터가 제공될 예정입니다.
높은 수준의 시나리오: 시맨틱 커널로 RAG 앱 구축하기 & Elasticsearch
다음 섹션에서는 예시를 살펴보겠습니다. 저희는 사용자의 질문을 입력으로 받아 답변을 반환하는 RAG(검색 증강 생성) 애플리케이션을 구축하고 있습니다. LLM으로 Azure OpenAI(로컬 LLM도 사용 가능)를 사용하고, 벡터 저장소로 Elasticsearch를, 모든 구성 요소를 하나로 묶는 프레임워크로 Semantic Kernel(.net)을 사용할 것입니다.
RAG 아키텍처에 익숙하지 않다면 이 문서 (https://www.elastic.co/search-labs/blog/retrieval-augmented-generation-rag)를 통해 간단히 소개할 수 있습니다.
답변은 질문과 관련된 컨텍스트가 제공된 LLM에 의해 생성되며, 이는 Elasticsearch 벡터스토어에서 검색됩니다. 응답에는 LLM에서 컨텍스트로 사용한 소스도 포함됩니다.
RAG 예제
이 구체적인 예에서는 사용자가 내부 호텔 데이터베이스에 저장된 호텔에 대해 질문할 수 있는 애플리케이션을 구축합니다. 사용자는 예를 들어 다양한 기준에 따라 특정 호텔을 검색하거나 호텔 목록을 요청할 수 있습니다.
예제 데이터베이스의 경우, 100개의 항목이 포함된 호텔 목록을 생성했습니다. 커넥터 데모를 최대한 쉽게 사용해 볼 수 있도록 샘플 크기는 의도적으로 작게 만들었습니다. 실제 애플리케이션에서 Elasticsearch 커넥터는 특히 매우 많은 양의 데이터로 작업할 때 'InMemory' 벡터 저장소 구현과 같은 다른 옵션에 비해 그 장점을 보여줄 것입니다.
전체 데모 애플리케이션은 Elasticsearch 벡터 스토어 커넥터 리포지토리에서 확인할 수 있습니다.
필요한 NuGet 패키지를 추가하고 프로젝트에 지시문을 사용하는 것부터 시작하겠습니다:
이제 데이터 모델을 생성하고 시맨틱 커널 특정 속성을 제공하여 저장소 모델 스키마를 정의하고 텍스트 검색을 위한 몇 가지 힌트를 제공할 수 있습니다:
저장 모델 스키마 속성(`VectorStore*`)은 Elasticsearch 벡터 스토어 커넥터의 실제 사용과 가장 관련이 있습니다:
VectorStoreRecordKey를 사용하여 레코드 클래스의 속성을 벡터 저장소에 레코드가 저장되는 키로 표시할 수 있습니다.VectorStoreRecordData를 사용하여 레코드 클래스의 프로퍼티를 '데이터'로 표시할 수 있습니다.VectorStoreRecordVector를 사용하여 레코드 클래스의 속성을 벡터로 표시할 수 있습니다.
이러한 모든 속성은 스토리지 모델을 추가로 사용자 지정하는 데 사용할 수 있는 다양한 선택적 매개변수를 허용합니다. 예를 들어 VectorStoreRecordKey 의 경우 다른 거리 함수 또는 다른 인덱스 유형을 지정할 수 있습니다.
이 예제의 마지막 단계에서는 텍스트 검색 속성(TextSearch*)이 중요합니다. 나중에 다시 설명하겠습니다.
다음 단계에서는 시맨틱 커널 엔진을 초기화하고 핵심 서비스에 대한 참조를 얻습니다. 실제 애플리케이션에서는 서비스 컬렉션에 직접 액세스하는 대신 종속성 주입을 사용해야 합니다. 하드코딩된 구성 및 비밀도 마찬가지이며, 대신 구성 공급자를 사용하여 읽어야 합니다:
이제 vectorStoreCollection 서비스를 사용하여 컬렉션을 생성하고 몇 가지 데모 레코드를 수집할 수 있습니다:
이는 시맨틱 커널이 어떻게 복잡한 벡터 저장소 사용을 몇 가지 간단한 메서드 호출로 줄이는지 보여줍니다.
내부적으로는 Elasticsearch에서 새 인덱스가 생성되고 필요한 모든 속성 매핑이 만들어집니다. 그런 다음 데이터 세트가 완전히 투명하게 스토리지 모델에 매핑되고 최종적으로 인덱스에 저장됩니다. 아래는 Elasticsearch에서 매핑이 어떻게 표시되는지 보여줍니다.
embeddings.GenerateEmbeddingsAsync() 호출은 구성된 Azure AI 임베딩 생성 서비스를 투명하게 호출합니다.
이 데모의 마지막 단계에서는 더 많은 마법을 볼 수 있습니다.
사용자가 데이터에 대해 질문할 때 InvokePromptAsync 으로 한 번만 호출하면 다음 작업이 모두 수행됩니다:
1. 사용자의 질문에 대한 임베딩이 생성됩니다.
2. 벡터 스토어에서 관련 항목을 검색합니다.
3. 쿼리 결과가 프롬프트 템플릿에 삽입됩니다.
4. 최종 프롬프트 형태의 실제 쿼리가 AI 채팅 완성 서비스로 전송됩니다.
이전에 데이터 모델에 정의했던 TextSearch* 속성을 기억하시나요? 이러한 속성을 사용하면 벡터 스토어에 있는 항목의 정보로 자동으로 채워지는 프롬프트 템플릿에서 해당 자리 표시자를 사용할 수 있습니다.
질문 "에 대한 최종 답변은 다음과 같습니다." 루프톱 바가 있는 호텔을 모두 보여주세요:
정답은 hotels.csv의 다음 항목을 참조합니다.
이 예는 Microsoft 시맨틱 커널을 사용하면 잘 고안된 추상화를 통해 복잡성을 크게 줄일 수 있을 뿐만 아니라 매우 높은 수준의 유연성을 구현할 수 있다는 것을 잘 보여줍니다. 예를 들어 코드 한 줄만 변경하면 코드의 다른 부분을 리팩터링하지 않고도 벡터 저장소나 사용되는 AI 서비스를 교체할 수 있습니다.
동시에 이 프레임워크는 '인보크프롬프트' 기능이나 템플릿 또는 검색 플러그인 시스템과 같은 방대한 고급 기능 세트를 제공합니다.
전체 데모 애플리케이션은 Elasticsearch 벡터 스토어 커넥터 리포지토리에서 확인할 수 있습니다.
Elasticsearch로 가능한 다른 기능
- Elasticsearch의 새로운 의미론적 텍스트 매핑: 시맨틱 검색 간소화
- 검색기를 사용한 Elasticsearch의 시맨틱 재랭크
- 고급 RAG 기술 1부: 데이터 처리
- 고급 RAG 기술 2부: 쿼리 및 테스트
- Llama 3 오픈 소스 및 Elastic으로 RAG 구축하기
- LangGraph, LLaMA3 및 Elasticsearch 벡터 저장소를 사용하여 로컬 에이전트를 처음부터 구축하는 튜토리얼
Elasticsearch & 시맨틱 커널: 다음 단계는 무엇인가요?
- .NET에서 GenAI 애플리케이션을 구축하는 동안 Elasticsearch 벡터 저장소를 Semantic Kernel에 쉽게 연결할 수 있는 방법을 보여드렸습니다. 다음 파이썬 통합을 기대해 주세요.
- Semantic Kernel은 하이브리드 검색과 같은 고급 검색 기능에 대한 추상화를 구축하므로, .NET 개발자는 Elasticsearch 연결을 통해 Semantic Kernel을 사용하면서 이를 쉽게 구현할 수 있습니다.
자주 묻는 질문
Microsoft 시맨틱 커널이란 무엇인가요?
Microsoft 시맨틱 커널은 가벼운 오픈 소스 개발 키트로, AI 에이전트를 쉽게 빌드하고 최신 AI 모델을 C#, Python 또는 Java 코드베이스에 통합할 수 있습니다.




