Milvus와 Databricks DBRX로 RAG 애플리케이션 구축하기
소개
대규모 언어 모델(LLMs)은 빠르게 발전하고 있으며, 이전 버전보다 향상된 기능을 갖춘 새로운 모델들이 정기적으로 출시되고 있습니다. 2024년 3월, 선도적인 데이터 플랫폼인 Databricks는 정교한 mixture-of-experts (MoE) 아키텍처를 갖춘 새로운 최첨단 모델인 첫 오픈소스 모델 DBRX를 출시했습니다. 이 transformer 기반 디코더 전용 모델은 MMLU, 프로그래밍(HumanEval), 수학(GSM8K)과 같은 여러 벤치마크에서 뛰어난 성능을 보였습니다.
DBRX를 실제 애플리케이션에 통합함으로써 검색 증강 생성(RAG) 시스템과 같은 강력한 GenAI 앱을 구축할 수 있는 새로운 가능성이 열렸습니다. 이러한 시스템은 LLM의 문맥 이해 능력과 효율적인 정보 검색 메커니즘을 결합하여, 복잡한 질의에도 매우 정확하고 문맥적으로 관련성 높은 응답을 제공합니다.
이 튜토리얼에서는 유사도 검색에 최적화된 확장 가능한 벡터 데이터베이스인 Milvus와 DBRX의 기능을 결합하여 견고한 RAG 애플리케이션을 구축하는 방법을 살펴보겠습니다. Milvus는 대규모 임베딩의 효율적인 처리와 질의를 가능하게 하며, DBRX는 최첨단 자연어 처리(NLP) 기능을 제공합니다. 이 둘은 함께 지식 관리, 고객 지원, 개인화 추천과 같은 애플리케이션에 이상적인 시너지를 만들어냅니다.
가장 흥미로운 부분으로 바로 이동하세요:
RAG 이해하기
Milvus 소개
Databricks DBRX 소개
MoE 아키텍처 소개
Milvus와 DBRX로 RAG 구축하기: 단계별 가이드
검색 증강 생성(RAG) 이해하기
검색 증강 생성(RAG)은 외부 정보 검색 시스템을 통합하여 LLM의 성능을 향상시키는 하이브리드 접근 방식입니다. 기존 LLMs는 응답을 생성하기 위해 사전 학습된 지식과 파인튜닝에만 의존하는데, 이는 최신 정보나 도메인 특화 정보가 필요한 질의에 직면했을 때 효과를 제한할 수 있습니다. RAG는 추론 중에 벡터 데이터베이스나 문서 저장소와 같은 외부 소스에서 관련 문맥이나 데이터를 가져오는 검색 메커니즘을 통합하여 이러한 한계를 해결합니다.
RAG 시스템은 일반적으로 두 가지 핵심 구성 요소로 이루어집니다:
검색기: 이 구성 요소는 질의나 입력을 기반으로 대규모 코퍼스 또는 데이터베이스에서 관련 정보를 가져오는 역할을 합니다. 텍스트 데이터를 임베딩으로 변환함으로써, 검색기는 Milvus나 Zilliz와 같은 벡터 데이터베이스를 지식 베이스 저장 시스템으로 활용하여 시맨틱 검색을 가능하게 하고, 가장 관련성 높은 정보 조각을 효율적으로 식별합니다.
생성기: 검색된 문맥을 입력으로 사용하여, LLM은 외부 데이터에 기반하면서도 입력 질의와 일관된 응답을 생성합니다. 이를 통해 응답이 정확할 뿐만 아니라 가장 관련성 높고 최신의 정보에 근거하도록 보장합니다.
RAG 아키텍처
그림 1: RAG 아키텍처
검색과 생성을 결합함으로써, RAG 시스템은 더 정확하고, 맥락을 인식하며, 사실에 기반한 응답을 생성할 수 있어 다음과 같은 사용 사례에서 매우 가치가 있습니다:
지식 베이스 쿼리: 크고 비정형적인 데이터셋에서 상세하고 정확한 답변을 제공합니다.
고객 지원: 특정 지식 베이스를 참조하여 개인화되고 정확한 응답을 제공합니다.
콘텐츠 생성: 맥락적으로 관련 있는 정보를 소싱하여 창의적 또는 기술적 글쓰기를 지원합니다.
과학 연구: 학술 논문이나 데이터베이스에서 가져와 연구 결과를 요약하거나 도메인별 쿼리에 답변합니다.
Milvus 벡터 데이터베이스
Milvus는 대규모 벡터 임베딩을 효율적으로 관리, 저장 및 쿼리하도록 설계된 오픈 소스 벡터 데이터베이스입니다. Retrieval-Augmented Generation (RAG) 파이프라인, 추천 시스템, 챗봇, 의미 검색 엔진 등과 같이 유사도 검색과 의미 검색이 필요한 애플리케이션에서 널리 사용됩니다.
왜 Milvus가 RAG 시스템에 이상적인가요?
RAG 시스템에서 Milvus와 같은 벡터 데이터베이스는 검색기 구성 요소의 중추 역할을 합니다. 아키텍처에 어떻게 들어맞는지는 다음과 같습니다:
효율적인 저장: Milvus는 텍스트 또는 멀티모달 데이터에서 생성된 10억 규모의 고차원 임베딩을 저장할 수 있어, 방대한 지식 베이스를 간결하고 효율적으로 표현할 수 있습니다.
빠른 검색: 쿼리가 시스템에 입력되면, Milvus는 가장 관련성 높은 임베딩을 검색하기 위해 의미 검색을 수행하고, 이 임베딩은 이후 생성기 모델에 맥락을 제공하는 데 사용됩니다.
확장성: Milvus는 지식 베이스의 규모가 커지더라도 검색 프로세스가 높은 성능을 유지하도록 보장하여, RAG 시스템이 엔터프라이즈 요구 사항에 맞게 확장될 수 있게 합니다.
DBRX 소개
DBRX는 Databricks가 2024년 3월에 출시한 새로운 LLM으로, 고급 AI 기술의 성장하는 생태계에 대한 이 회사의 첫 오픈 소스 기여입니다. 두 가지 버전으로 제공됩니다: 기본 모델(DBRX Base)과 파인튜닝된 모델(DBRX Instruct). 트랜스포머 기반의 디코더 전용 아키텍처로 구축된 DBRX는 기존의 많은 모델과 차별화되는 세분화된 전문가 혼합(MoE) 설계를 사용합니다. 이 혁신적인 아키텍처를 통해 DBRX는 다양한 작업이나 쿼리에 계산 리소스를 동적으로 할당할 수 있어, 다양한 사용 사례에 매우 효율적이고 적응력이 뛰어납니다. DBRX를 자세히 살펴보기 전에, Mixture of Expert (MoE) 아키텍처의 몇 가지 기본 사항을 알아보겠습니다.
전문가 혼합(MoE) 아키텍처
전문가 혼합은 계산 워크로드를 여러 전문화된 하위 모델, 즉 "전문가"에 분산하는 신경망 아키텍처입니다. 추론 중 모든 계층과 파라미터를 균일하게 활성화하는 기존 모델과 달리, MoE는 주어진 입력과 가장 관련성이 높은 전문가의 하위 집합만 동적으로 선택하고 활성화합니다. 이러한 선택적 활성화는 효율성과 전문화를 모두 도입합니다.
MoE 아키텍처에는 아래의 핵심 구성 요소가 포함됩니다:
전문가 네트워크: 여러 신경망 모듈로, 각각 서로 다른 유형의 입력이나 작업에 특화되도록 훈련됩니다. 이러한 전문가들은 특정 데이터 도메인을 처리하거나 특정 문제 유형을 해결하기 위한 고유한 역량을 개발합니다.
라우터 메커니즘: 정교한 게이팅 메커니즘이 주어진 입력에 가장 적합한 전문가를 동적으로 선택하고 활성화합니다. 이 라우팅 시스템은 학습 가능한 파라미터를 사용하여 주어진 작업에 가장 관련성이 높은 전문가를 결정합니다.
희소 활성화: 각 입력에 대해 활성화할 전문가의 일부만 활성화하여, 높은 성능을 유지하면서 계산 복잡도를 크게 줄입니다. 이 접근 방식은 모든 모델 파라미터가 동시에 사용되지 않도록 보장합니다.
Figure 2: Mixture of Experts (MoE) layer
그림 2: 전문가 혼합(MoE) 레이어 | 출처
MoE 아키텍처에는 다음을 포함한 다양한 장점이 있습니다:
계산 효율성: 각 입력에 대해 전문가의 일부만 활성화하여 전체 계산 요구 사항을 줄입니다.
심층 전문화: 개별 전문가 네트워크가 고도로 집중된 역량을 개발할 수 있도록 합니다.
확장 가능한 아키텍처: 더 많은 전문가를 추가하여 모델 역량을 더 쉽게 확장할 수 있게 합니다.
동적 리소스 할당: 입력을 가장 적절한 계산 리소스로 지능적으로 라우팅합니다.
DBRX의 주요 이점
DBRX는 주요 벤치마크에서 뛰어난 결과를 달성했습니다:
MMLU (Massive Multitask Language Understanding): 광범위한 일반 지식과 추론 능력을 보여줍니다.
프로그래밍 작업(HumanEval): 코드를 생성하고 이해하는 데 뛰어나 소프트웨어 개발 지원에 이상적입니다.
수학 작업(GSM8K): 복잡한 수학 문제를 해결하는 데 강한 적성을 보여줍니다.
Figure 3: DBRX Benchmarks
그림 3: DBRX 벤치마크 (출처)
확장성 및 효율성:
DBRX는 MoE 설계 덕분에 대규모 배포와 리소스가 제한된 환경 모두에 최적화되어 있으며, 초당 처리되는 토큰 수 측면에서 높은 속도를 보장합니다.
그 확장성은 엔터프라이즈급 시스템부터 더 작고 도메인 특화된 설정에 이르기까지 광범위한 애플리케이션에 적합함을 보장합니다.
Figure 4: DBRX Inference
그림 4: DBRX 추론 (출처)
오픈 소스 접근성:
오픈 소스 모델인 DBRX는 개발자와 조직이 독점 생태계에 묶이지 않고 실험하고, 적응시키고, 혁신할 수 있도록 지원합니다.
개발의 투명성은 모델 개선 및 통합에 대한 커뮤니티 주도 접근 방식을 장려합니다.
RAG 시스템에서의 DBRX
DBRX는 검색된 정보를 기반으로 문맥상 정확하고 일관된 응답을 생성할 수 있는 능력 덕분에 검색 증강 생성(Retrieval-Augmented Generation, RAG) 시스템에 매우 적합합니다. 주요 장점은 다음과 같습니다:
문맥 적응성: DBRX는 검색된 문맥을 생성 출력에 원활하게 통합하여, 응답이 쿼리와 매우 관련성이 높고 구체적이도록 보장합니다.
도메인 특화 미세 조정: DBRX는 기본 상태에서도 매우 뛰어난 성능을 발휘하지만, 특화된 애플리케이션을 위해 정확성과 관련성을 더욱 향상시키도록 도메인 특화 데이터로 미세 조정할 수도 있습니다.
복잡한 작업에서의 효율성:.MoE 아키텍처를 통해 DBRX는 특화된 전문가를 효율적으로 활용하여 복잡하고 다면적인 쿼리를 처리할 수 있으므로, 까다로운 RAG 시스템에 이상적입니다.
Milvus와 DBRX를 사용한 RAG 애플리케이션
이 노트북 튜토리얼은 Milvus를 벡터 저장소로, DBRX를 언어 모델로, LangChain을 프레임워크로 사용하여 검색 증강 생성(RAG) 파이프라인을 구현하는 방법을 보여줍니다. 모델의 크기를 고려하여, 이 구현은 Databricks 워크스페이스 서빙 엔드포인트를 활용합니다. 또는 Ollama나 Hugging Face Transformers 라이브러리를 통해 모델을 다운로드할 수 있지만, 이 경우 고성능 GPU가 필요합니다.
1단계: 데이터 로드
이 튜토리얼의 데이터 소스는 공식 Databricks DBRX 릴리스 블로그입니다. 문서는 재귀적 텍스트 분할 방법을 사용하여 로드되고 관리 가능한 청크로 분할됩니다.
# 문서 로드 및 분할
loader = WebBaseLoader("https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=2000, chunk_overlap=200)
docs = text_splitter.split_documents(documents)
2단계: 임베딩 로드
다음으로, 검색 목적으로 문서 콘텐츠를 인코딩하기 위해 Hugging Face의 오픈 소스 임베딩을 활용합니다.
# 임베딩 로드
embeddings = HuggingFaceBgeEmbeddings(
model_name = "BAAI/bge-small-en-v1.5")
3단계: Milvus Retriever 생성
Milvus는 벡터 저장소로 구성되어 효율적인 유사도 검색을 가능하게 합니다. 설정이 완료되면 샘플 쿼리로 retriever를 테스트합니다.
# Milvus Retriever 생성
vectorstore = Milvus.from_documents(documents=docs,
embedding=embeddings,
collection_name='my_collection',
connection_args={
"uri": "./milvus_demo.db"}
)
retriever = vectorstore.as_retriever()
# retriever 테스트
query = "What is DBRX?"
vectorstore.similarity_search(query, k=1)
```
출력:
[Document(metadata={'description': '', 'language': 'en-US', 'pk': 454492864071335939, 'source': 'https://www.databricks.com/blog/introducing-dbrx-new-state-art-open-llm', 'title': 'Introducing DBRX: A New State-of-the-Art Open LLM | Databricks Blog'}, page_content='and GPT-3.5 Turbo on RAG tasks.Training mixture-of-experts models is hard. We had to overcome a variety of scientific and performance challenges to build a pipeline robust enough
```
4단계: RAG 파이프라인 구현
RAG 파이프라인은 질문-답변 작업을 위해 Databricks DBRX 모델을 통합합니다. Databricks 워크스페이스 외부에서 모델을 사용하려면 Databricks 호스트 URL과 토큰을 설정해야 합니다. 또한 파이프라인에는 간결하고 컨텍스트에 특화된 응답을 위한 프롬프트 템플릿이 포함되어 있습니다.
# 환경 변수 로드
DATABRICKS_HOST = userdata.get('DATABRICKS_HOST')
DATABRICKS_TOKEN = userdata.get('DATABRICKS_TOKEN')
# Databricks DBRX로 RAG 파이프라인 설정
llm = ChatDatabricks(endpoint="dbrx-instruct",
max_tokens=200)
PROMPT_TEMPLATE = """
Human: You are an AI assistant,that provides answers to questions related to Databricks.
Use the following pieces of information to provide a concise answer to the question enclosed in <question> tags.
If you don't know the answer, just say that you don't know, don't try to make up an answer.
<context>
{context}
</context>
<question>
{question}
</question>
The response should be specific and use only reliable Databricks information.
Assistant:"""
prompt = PromptTemplate(
template=PROMPT_TEMPLATE, input_variables=["context", "question"]
)
def format_docs(docs):
return "nn".join(doc.page_content for doc in docs)
마지막으로, 검색 및 생성 프로세스를 처리하도록 RAG 체인이 구성됩니다. 체인은 retriever를 사용하여 쿼리를 처리하고, 결과를 형식화하며, DBRX 모델을 사용해 답변을 생성합니다.
# RAG(검색 증강 생성) 체인 정의
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
res = rag_chain.invoke(query)
res
```
출력:
'DBRX는 다음 토큰 예측을 사용해 학습된 트랜스포머 기반 디코더 전용 대규모 언어 모델(LLM)입니다. 총 132B개의 매개변수를 가진 세분화된 전문가 혼합(MoE) 아키텍처를 사용하며, 이 중 36B개의 매개변수가 주어진 입력에 대해 활성화됩니다. DBRX는 12T개의 텍스트 및 코드 데이터 토큰으로 사전 학습되었으며, 회전 위치 인코딩(RoPE), 게이트 선형 유닛(GLU), 그룹화된 쿼리 어텐션(GQA)을 사용합니다. 또한 GPT-4 토크나이저를 사용합니다. DBRX는 효율성으로 잘 알려져 있으며, 추론 속도가 LLaMA2-70B보다 최대 2배 빠르고, 전체 및 활성 매개변수 수 측면에서 Grok-1 크기의 약 40%입니다. GPT-3.5를 능가하고 Gemini 1.0 Pro와 경쟁할 수 있으며, 특히 코드 모델로서 뛰어난 역량을 보여 프로그래밍 작업에서 CodeLLaMA-70B 같은 특화 모델을 능가합니다.'
```
이 튜토리얼은 다음 노트북에서 확인할 수 있습니다.
결론
DBRX의 혁신적인 전문가 혼합(MoE) 아키텍처와 Milvus의 확장 가능한 벡터 데이터베이스의 결합은 지능적이고 컨텍스트 인식형 AI 시스템을 구축하기 위한 견고한 기반을 마련합니다. DBRX의 세분화된 MoE 설계는 다양한 작업에 동적으로 적응할 수 있게 하여, 다양한 사용 사례 전반에서 계산 효율성과 탁월한 성능을 보장합니다. 이러한 역량은 검색 증강 생성(RAG) 시스템에서 특히 중요하며, 여기서는 문맥적으로 정확하고 도메인 특화된 응답을 생성하는 능력이 무엇보다 중요합니다.
Milvus는 RAG 시스템이 방대한 지식 베이스를 쉽게 처리할 수 있도록 함으로써 이 아키텍처를 보완합니다. 이러한 결합은 지식 관리, 고객 지원, 콘텐츠 생성, 과학 연구와 같은 분야의 애플리케이션을 강화하여, 가장 정확하고 최신의 정보에 기반한 관련성 높은 결과를 제공합니다. 개발자와 조직에게 이는 기술적 진보이자 더 지능적이고, 응답성이 뛰어나며, 컨텍스트를 인식하는 시스템을 구축할 기회를 의미합니다.
관련 리소스
계속 읽기

Introducing Business Critical Plan: Enterprise-Grade Security and Compliance for Mission-Critical AI Applications
Discover Zilliz Cloud’s Business Critical Plan—offering advanced security, compliance, and uptime for mission-critical AI and vector database workloads.

The Great AI Agent Protocol Race: Function Calling vs. MCP vs. A2A
Compare Function Calling, MCP, and A2A protocols for AI agents. Learn which standard best fits your development needs and future-proof your applications.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.



