잉크프와 밀버스가 더 스마트한 상호작용을 위해 RAG 기반 AI 어시스턴트를 구축한 방법
개발자로서 다양한 플랫폼이나 서비스의 기술 문서를 검색하는 일은 지루할 수 있습니다. 일반적인 기술 문서는 수많은 섹션과 계층 구조로 구성되어 있어 혼란스럽거나 탐색하기 어려울 수 있습니다. 따라서 필요한 답을 찾는 데 상당한 시간을 소비하는 경우가 많습니다. 기술 문서에 AI 어시스턴트를 추가하면 AI에게 질문만 하면 답변을 제공하거나 관련 페이지와 문서로 리디렉션해 주기 때문에 많은 개발자가 시간을 절약할 수 있습니다.
최근 질리즈가 주최한 비정형 데이터 밋업에서 잉크프의 공동 창립자이자 CTO인 로버트 트랜은 잉크프와 질리즈가 문서 사이트를 위한 AI 기반 비서를 구축한 방법에 대해 설명했습니다. 이제 [[질리즈](https://docs.zilliz.com/docs/get-started) 및 [밀버스 문서 사이트 모두에서 이 AI 비서가 작동하는 모습을 볼 수 있습니다.
이 글에서는 로버트 트랜이 제시한 기술적 세부 사항을 살펴보겠습니다. 더 이상 고민하지 않고 기술 문서 페이지에 AI 어시스턴트를 통합하게 된 동기부터 시작하겠습니다.
기술 문서에 AI 어시스턴트를 도입하게 된 동기
기술 문서는 모든 플랫폼이 사용자나 개발자를 지원하기 위해 제공해야 하는 필수 정보 소스입니다. 직관적이고 포괄적이며 모든 경험 수준의 개발자가 플랫폼에서 사용할 수 있는 기능을 사용하도록 안내하는 데 도움이 되어야 합니다.
그러나 플랫폼에 수많은 새로운 기능이 도입됨에 따라 기술 문서가 지나치게 복잡해질 수 있습니다. 이러한 복잡성으로 인해 많은 개발자가 플랫폼의 기술 문서를 탐색할 때 혼란을 겪을 수 있습니다. 개발자는 결과를 신속하게 제공해야 한다는 압박을 받는 경우가 많으며, 기술 문서에서 정보를 검색하는 데 소요되는 시간으로 인해 실제 코딩 및 개발 작업에 집중하지 못할 수 있습니다.
많은 플랫폼이 기술 문서에 기본적인 검색 기능을 제공하여 개발자가 필요한 콘텐츠를 빠르게 찾을 수 있도록 돕는데, 이는 Google에서 검색하는 방식(https://zilliz.com/learn/evolution-of-search-from-traditional-keyword-matching-to-vector-search-and-genai)과 유사합니다. 사용자가 키워드를 입력하면 플랫폼에서 질문에 대한 답변으로 관련성이 있을 수 있는 페이지 목록을 제공합니다. 하지만 이러한 기본적인 검색 기능은 종종 사용자의 쿼리 문맥을 이해하지 못해 관련성이 없거나 불완전한 검색 결과로 이어지기도 합니다.
그림- 개발자들이 Milvus에 대해 자주 묻는 질문 .png](https://assets.zilliz.com/Figure_Typical_questions_asked_by_developers_about_Milvus_e5f5974c96.png)
그림: Milvus에 대한 개발자들의 일반적인 질문_그림
개발자들은 기본적인 검색 기능에 대해 미묘한 차이가 있고 때로는 너무 복잡한 질문을 하는 경우가 많다는 것을 알고 있습니다. 예를 들어, 개발자들은 질리즈의 기술 문서를 탐색할 때 "검색 과정에서 밀집 벡터와 함께 희소 벡터를 포함하는 방법은 무엇인가요?" 또는 "클러스터를 동적으로 확장하는 방법은 무엇인가요?"와 같은 고도의 기술적인 질문을 주로 합니다. 기본 검색 기능으로는 이러한 미묘하고 복잡한 질문에 만족스럽게 대답하지 못하는 경우가 많습니다.
AI 어시스턴트를 추가하면 이러한 문제를 해결할 수 있습니다. AI 어시스턴트는 개발자의 의도와 쿼리의 의미적 의미를 이해할 수 있으므로 개발자는 몇 초 만에 필요한 정보를 얻을 수 있습니다. 개발자는 지루하고 시간이 많이 걸리는 수많은 콘텐츠를 샅샅이 뒤지는 대신 간단히 쿼리를 입력하기만 하면 AI 어시스턴트가 답변을 제공하거나 정확한 관련 페이지로 리디렉션해 줍니다.
또한, AI 어시스턴트는 일반적으로 대규모 언어 모델(LLM), 벡터 검색, 검색 증강 생성(RAG) 등 자연어 처리(NLP)의 최신 발전된 기술로 구동됩니다. 실제로 RAG 접근 방식은 이 AI 어시스턴트의 핵심으로, 사용자의 질문 뒤에 숨겨진 뉘앙스를 이해하고 몇 초 만에 정확하고 관련성 높은 답변을 제공할 수 있도록 해줍니다.
다음 섹션에서는 AI 어시스턴트 뒤에 숨겨진 방법에 대해 설명합니다.
검색 증강 생성(RAG)의 개념
검색 증강 생성(RAG)은 사용자의 쿼리에 대한 정확한 답변을 생성하기 위해 벡터 검색 및 LLM과 같은 고급 NLP 기술을 결합하는 방식입니다.
그림-RAG 워크플로우.png
그림: RAG 워크플로.
간단히 말해, RAG 메서드의 워크플로는 매우 간단합니다. 먼저 사용자가 쿼리를 요청합니다. 다음으로, RAG 메서드는 쿼리에 대한 답변이 포함되어 있을 가능성이 있는 관련 문서를 가져옵니다. 그런 다음 쿼리와 관련 문서가 하나의 일관된 프롬프트로 결합되어 LLM으로 전송됩니다. 마지막으로 LLM은 제공된 관련 문서를 사용하여 쿼리에 대한 답변을 생성합니다.
보시다시피 RAG의 주요 개념은 쿼리에 대한 답변을 위한 관련 컨텍스트를 LLM에 제공하는 것입니다. 이 접근 방식에는 최소한 두 가지 이점이 있습니다. 첫째, 부정확하고 진실하지 않은 응답을 생성하는 LLM 환각의 위험을 줄입니다. 둘째, LLM에 의해 생성된 응답이 보다 맥락에 맞고 쿼리에 맞게 조정됩니다. 이는 내부 문서의 내용에 대해 LLM에 질문할 때 특히 유용합니다.
RAG를 구현할 때는 수집, 인덱싱, 검색, 생성의 네 가지 RAG 단계를 고려해야 합니다.
수집: 데이터를 수집하고 전처리하는 단계입니다. 각 레코드의 관련 정보와 메타데이터도 수집될 수 있습니다.
인덱싱: 빠른 검색을 위해 최적화된 인덱싱 방법으로 데이터를 저장하는 과정을 포함합니다. 이 단계에서는 전처리된 데이터를 임베딩 모델을 사용하여 벡터 임베딩으로 변환한 후, 밀버스와 같은 벡터 데이터베이스 내에 FLAT, FAISS, HNSW 등의 고급 색인 알고리즘을 사용하여 저장합니다.
검색: 사용자의 쿼리와 저장된 데이터를 일치시키기 위한 벡터 검색 작업이 포함됩니다. 이 과정에서 먼저 사용자의 쿼리는 저장된 데이터를 변환하는 데 사용된 것과 동일한 임베딩 모델을 사용하여 벡터 임베딩으로 변환됩니다. 다음으로, 사용자의 쿼리와 저장된 데이터 간에 유사도 검색을 수행하여 벡터 데이터베이스에서 가장 관련성이 높은 정보를 찾습니다.
생성: 최종 응답을 생성하기 위해 LLM을 활용합니다. 먼저 사용자의 쿼리와 검색 단계에서 가장 관련성이 높은 컨텍스트가 프롬프트에 결합됩니다. 그런 다음, LLM은 프롬프트에 제공된 컨텍스트를 기반으로 사용자의 쿼리에 대한 응답을 생성합니다.
_그림: RAG의 단계 _그림
위에서 언급한 각 단계를 구현할 때 고려해야 할 몇 가지 요소가 있습니다. 예를 들어, 수집 단계에서는 데이터의 소스, 데이터 정리 방식, 청킹 방법에 대해 고려해야 합니다. 한편, 색인 단계에서는 사용 사례에 적합한 색인 알고리즘뿐만 아니라 사용하려는 임베딩 모델과 벡터 데이터베이스를 고려해야 합니다.
다음 섹션에서는 잉크프와 질리즈가 질리즈와 밀버스 문서 페이지용 AI 어시스턴트를 구축하기 위해 취한 상세한 RAG 구현에 대해 살펴보겠습니다.
잉크프와 질리즈가 AI 어시스턴트를 구축하는 데 사용한 방법
잉크프와 질리즈는 AI 어시스턴트를 구축하기 위해 다양한 기술을 조합하여 RAG를 구현합니다. Inkeep은 수집과 생성 부분을 처리하고, Zilliz는 인덱싱과 검색 단계에서 Inkeep을 지원합니다.
이전 섹션에서 언급했듯이, RAG 구현의 첫 번째 단계는 수집 단계입니다. 이 단계에서는 기술 문서, 지원 및 FAQ, 깃허브 리포지토리 등 다양한 소스에서 질리즈와 밀버스 관련 텍스트 데이터를 수집합니다. 그런 다음 각 정보가 너무 광범위하거나 너무 세분화되지 않도록 이 텍스트 데이터를 정리하고 청크화합니다.
다음 단계로 넘어가기 전에 청크된 각 레코드의 메타데이터도 수집됩니다. 이러한 메타데이터에는 다음이 포함됩니다:
소스 유형: 데이터가 GitHub 리포지토리, 기술 문서, 지원 및 FAQ 페이지 등에서 가져왔는지 여부.
레코드 유형: 데이터의 버전(예: 텍스트인지 코드인지 여부). 코드인 경우 프로그래밍 언어도 기록됩니다.
계층 참조: 각 데이터 요소의 자식, 부모, 형제자매를 포함합니다. 이는 Zilliz의 웹사이트에서 데이터를 수집하기 때문에 중요합니다.
URL, 태그, 경로: 데이터를 가져온 URL과 같은 정보입니다. 이 메타데이터는 LLM에서 생성된 응답에서 인용 또는 출처에 대한 링크를 제공하는 데 매우 유용합니다.
날짜: 각 데이터의 게시된 날짜와 같은 정보입니다.
Inkeep이 데이터와 메타데이터를 수집하고 나면 다음 단계는 색인 방법입니다.
인덱싱 방법에서는 검색 단계에서 유사성 검색이 가능하도록 전처리된 데이터를 벡터 임베딩으로 변환해야 합니다. 각 데이터 포인트를 벡터 임베딩으로 변환하기 위해 Inkeep과 Zilliz는 전통적인 스파스 임베딩 모델, 딥러닝 기반 스파스 임베딩 모델, 밀도 임베딩 모델 등 세 가지 임베딩 방법을 사용합니다.
그림- 스파스 임베딩과 고밀도 임베딩..png](https://assets.zilliz.com/Figure_Sparse_and_dense_embeddings_42cddb000f.png)
그림: 희소하고 밀집된 임베딩. _그림.
스파스 임베딩은 간단한 키워드 기반 및 부울매칭 프로세스에 특히 유용합니다. 따라서 스파스 임베딩에서 가져온 관련 문서에는 일반적으로 쿼리의 키워드가 포함됩니다. 반면, 밀도 임베딩은 쿼리의 뉘앙스나 의미적 의미를 포착하는 데 더 유용합니다. 고밀도 임베딩에서 가져온 문서에는 쿼리의 키워드가 포함될 수도 있고 포함되지 않을 수도 있지만 콘텐츠는 쿼리와 관련성이 높습니다.
데이터를 희소 임베딩으로 변환하는 데 사용할 수 있는 모델에는 기존/통계 기반 모델과 딥 러닝 기반 모델의 두 가지 유형이 있습니다. 인공지능 어시스턴트의 경우, 잉크프와 질리즈는 BM25를 전통적 기반 모델로, SPLADE/BGE-M3를 딥러닝 기반 모델로 사용하고 있습니다.
데이터를 고밀도 임베딩으로 변환하기 위해 OpenAI의 임베딩 모델, Sentence-Transformers, VoyageAI 등 다양한 딥러닝 모델을 선택할 수 있습니다. AI 어시스턴트의 경우, Inkeep과 Zilliz는 세 가지 임베딩 모델을 사용합니다: MS-MARCO, MPNET, BGE-M3.
모든 데이터가 희소하고 조밀한 임베딩 표현으로 변환되면 임베딩은 벡터 데이터베이스에 저장되어 빠른 검색을 가능하게 합니다. 잉크프와 질리즈는 AI 어시스턴트를 구축하기 위해 Milvus를 벡터 데이터베이스로 사용합니다. 이제 의문은 왜 스파스 임베딩과 고밀도 임베딩 중 하나를 선택해도 충분한데 굳이 스파스 임베딩과 고밀도 임베딩을 함께 사용해야 하는가 하는 점입니다.
그림-하이브리드 검색 예시..png](https://assets.zilliz.com/Figure_Hybrid_search_illustration_d231b60be2.png)
그림: 하이브리드 검색 그림.
스파스 임베딩과 밀도 임베딩을 모두 사용하면 검색 단계에서 유연성을 확보할 수 있습니다. 예를 들어 쿼리가 짧은 경우(5단어 미만)에는 스파스 임베딩을 사용하는 것으로 충분할 수 있습니다. 반면 쿼리가 긴 경우에는 밀집 임베딩을 사용하면 대부분의 경우 더 나은 결과 품질을 얻을 수 있습니다. 또한, 벡터 데이터베이스로 밀버스를 사용하는 경우, 하이브리드 검색의 강력한 기능, 즉 스파스 임베딩과 밀도 임베딩을 조합한 유사도 검색을 활용할 수 있습니다. 또한 원하는 경우 메타데이터 필터링을 사용하여 밀도 또는 희소 임베딩으로 유사도 검색을 수행할 수도 있습니다.
쿼리와 가장 관련성이 높은 콘텐츠를 찾기 위해 하이브리드 검색을 구현할 때는 리랭크 방법도 고려해야 합니다. 서로 다른 두 가지 방법에서 유사도 결과를 얻을 수 있으며, 이러한 결과를 결합하는 접근 방식이 필요하기 때문입니다. 이를 위해 잉크프와 질리즈는 가중치 점수와 상호 순위 융합(RRF)이라는 두 가지 리랭크 방법을 구현했습니다.
가중치 채점의 개념은 간단합니다. 각 방법에 가중치를 할당하는 것입니다. 예를 들어, 밀집 임베딩의 유사도 결과에는 60%의 가중치를, 희소 임베딩의 유사도 결과에는 40%의 가중치를 할당할 수 있습니다. 한편, RRF에서 컨텍스트의 점수는 두 가지 다른 방법의 상호 순위를 합산하여 계산되며, 0으로 나누지 않기 위해 작은 상수 k를 추가하여 계산하는 경우가 많습니다.
함수 RRF 점수.png
여기서 N은 메서드의 개수로, 스파스 임베딩과 밀도 임베딩 사이의 하이브리드 검색을 구현하기 때문에 두 개가 되어야 합니다. 변수 'rank'는 메서드 i에서 컨텍스트의 순위이며, k는 상수입니다.
위의 RRF 공식을 사용하면 각 컨텍스트에 대한 RRF 점수를 계산할 수 있습니다. RRF 점수가 가장 높은 컨텍스트가 쿼리와 가장 관련성이 높은 컨텍스트로 선택됩니다.
관련성 있는 문맥을 가져오면 원래 쿼리와 가장 관련성이 높은 문맥이 하나의 일관된 프롬프트로 결합됩니다. 그런 다음 이 프롬프트가 LLM으로 전송되어 최종 응답을 생성합니다. LLM의 경우, Inkeep은 OpenAI와 Anthropic의 모델을 사용합니다.
Milvus AI 어시스턴트 데모 보기
이 섹션에서는 잉크프와 질리즈가 함께 구축한 AI 어시스턴트를 사용하는 방법을 간략하게 소개합니다. 따라하고 싶으시다면 [[질리즈](https://docs.zilliz.com/docs/get-started) 또는 [밀버스 문서 페이지에서 확인하실 수 있습니다. 이 데모에서는 Milvus 문서 페이지에 있는 AI 어시스턴트를 사용합니다.
Milvus 문서 페이지를 열면 화면 오른쪽 하단에 'AI에게 물어보기' 버튼이 표시됩니다. 이 버튼을 클릭하여 AI 어시스턴트에 액세스합니다.
스크린샷 1.png
그런 다음 팝업 화면이 나타나서 Milvus 문서에서 찾고자 하는 내용을 묻는 메시지가 표시됩니다. 선택적으로 팝업 화면 오른쪽 상단의 '검색' 옵션을 클릭하여 기본 검색을 수행할 수도 있습니다.
Milvus Python SDK와 함께 BGE-M3를 사용하여 데이터를 벡터 임베딩으로 변환하는 방법을 알고 싶다고 가정해 보겠습니다. 질문을 입력하기만 하면 AI 어시스턴트가 답변을 제공합니다.
스크린샷 2.png
AI 어시스턴트는 답변을 제공할 뿐만 아니라 생성된 답변과 관련된 추가 정보를 찾을 수 있는 인용문이나 관련 페이지도 제공합니다.
스크린샷 3.png
결론
잉크프와 질리즈가 구축한 기술 문서에 AI 어시스턴트를 통합한 사례는 고급 AI 솔루션이 개발자의 생산성과 사용자 경험을 어떻게 향상시킬 수 있는지 보여줍니다. RAG는 이 AI 어시스턴트의 핵심 구성 요소로, 미묘하고 복잡한 쿼리에 대해 보다 정확하고 맥락에 맞는 답변을 제공할 수 있도록 도와줍니다.
RAG는 수집, 인덱싱, 검색, 생성의 네 가지 주요 단계로 구성됩니다. Milvus와 같은 벡터 데이터베이스는 색인 및 검색 단계를 수행하는 RAG 파이프라인의 핵심 구성 요소입니다. 각 단계에서 사용되는 방법은 특정 사용 사례에 따라 신중하게 고려해야 합니다. 이 글에서는 Inkeep과 Zilliz가 각 RAG 단계에서 다양한 전략을 구현하여 정교한 AI 어시스턴트를 구축한 사례를 살펴보았습니다.
Milvus와 Inkeep이 이 AI 비서를 구축한 방법에 대해 자세히 알아보려면 YouTube에서 로버트 강연 다시 보기를 참조하세요.
더 읽어보기
제너레이티브 AI 리소스 허브 | 질리즈](https://zilliz.com/learn/generative-ai)
밀버스로 AI 앱 빌드하기: 튜토리얼 및 노트북](https://zilliz.com/learn/milvus-notebooks)
밀버스 AI 개발자 커뮤니티 가입하기](https://zilliz.com/community)
계속 읽기

Build for the Boom: Why AI Agent Startups Should Build Scalable Infrastructure Early
Explore strategies for developing AI agents that can handle rapid growth. Don't let inadequate systems undermine your success during critical breakthrough moments.

ColPali + Milvus: Redefining Document Retrieval with Vision-Language Models
When combined with Milvus's powerful vector search capabilities, ColPali becomes a practical solution for real-world document retrieval challenges.

Vector Databases vs. Time Series Databases
Use a vector database for similarity search and semantic relationships; use a time series database for tracking value changes over time.
