데이터 무결성 보호: LLMware와 Milvus를 활용한 온프레미스 RAG 배포
Unstructured Data Meetup의 최신 세션에서 저희는 AI Blocks의 CEO인 Darren Oberst를 모실 수 있어 영광이었습니다. 그는 UC Berkeley에서 물리학과 철학 학위를 취득했으며, 현재 금융 및 법률 서비스를 위한 대규모 언어 모델 (LLM) 애플리케이션 개발을 혁신하는 데 집중하고 있습니다. 이 모임에서 Darren은 대형 금융 및 법률 서비스 기업에서 Retrieval Augmented Generation (RAG)을 온프레미스로 배포해야 하는 이유에 대해 논의했습니다.
이 블로그에서는 Darren의 핵심 내용을 요약할 뿐만 아니라 LLMware와 Milvus 벡터 데이터베이스를 사용해 프라이빗 클라우드에서 RAG를 구축하는 실용적인 예제도 제공합니다. 이 예제는 여러분이 이 지식을 자신의 프로젝트에 적용하도록 영감을 주고 동기를 부여하기 위해 설계되었습니다. 또한 YouTube에서 전체 세션을 시청하실 것을 권장합니다.
RAG 배포의 주요 과제
대규모 언어 모델은 일관성이 없을 수 있습니다. 때로는 정확한 답변을 제공하지만 관련 없는 정보를 생성할 수도 있습니다. 이러한 불일치는 LLM이 단어의 의미를 진정으로 이해하지 못한 채 단어 간의 통계적 관계를 이해하기 때문에 발생합니다. 또한 LLM은 오래되고 공개적으로 이용 가능한 데이터로 사전 학습되어 있어, 여러분의 비공개 데이터나 최신 정보에 특화된 정확한 답변을 제공하는 능력이 제한됩니다.
Retrieval Augmented Generation (RAG)은 Milvus와 같은 벡터 데이터베이스에 저장된 외부 지식 소스로 LLM의 응답을 강화하여 콘텐츠 품질을 개선함으로써 이러한 한계를 해결하는 인기 있는 기법입니다. RAG은 탁월한 기법이지만, 이를 배포하는 데에는 과제가 따릅니다.
강연에서 Darren은 많은 기업이 직면하는 일반적인 과제를 공유했습니다.
데이터 개인정보 보호 및 보안 우려: 많은 기업, 특히 금융 및 법률 부문 기업들은 개인정보 보호 및 보안 우려로 인해 퍼블릭 클라우드 서비스 사용을 주저합니다. 또한 기존 솔루션의 상당수는 온프레미스보다는 퍼블릭 클라우드에 초점을 맞추고 있어, 데이터 보안과 규정 준수를 보장해야 하는 기업에 어려움을 야기합니다.
비용 증가: 대규모 모델을 자주 사용하는 퍼블릭 클라우드 인프라는 청구 비용을 크게 증가시킬 수 있습니다. 인프라, 데이터, 애플리케이션에 대한 완전한 통제권과 소유권이 없는 상태에서 이렇게 막대한 비용을 지불하는 것은 모두에게 손해인 상황을 초래합니다.
검색 전략 간과: 자주 간과되는 중요한 측면 중 하나는 RAG 배포에서 검색 전략의 중요성입니다. AI 팀은 생성형 AI 기능에 집중하는 경향이 있지만, 검색된 문서의 품질도 그만큼 중요합니다.
온프레미스 RAG 배포
위에서 논의한 과제들은 하나의 공통된 솔루션, 즉 프라이빗 클라우드에 RAG를 배포하는 방식으로 효과적으로 해결할 수 있습니다. 이 접근 방식은 다음과 같은 방식으로 문제를 해결합니다.
- 더 나은 데이터 보안: 민감한 비즈니스 문서, 규제 정보 및 기타 독점 데이터는 규정 준수 및 보안 표준을 충족하기 위해 프라이빗 클라우드의 안전한 범위 안에 유지되어야 합니다. 모든 것이 비공개로 이루어진다면 침해 사고는 없을 것입니다.
- 더 낮은 비용: 프라이빗 클라우드 인프라에 AI 모델을 배포하면 특히 빈번한 사용이 필요한 경우 퍼블릭 클라우드 서비스보다 더 비용 효율적인 솔루션을 제공할 수 있습니다. 더 작은 모델을 사용하면 더 큰 모델이나 더 많은 리소스를 필요로 하는 모델보다 실용적인 결과를 더 효율적으로 달성하므로 비용은 더욱 낮아집니다. 빠른 혁신과 맞춤화 기능 덕분에 오픈 소스 LLM과 기술은 RAG에 훌륭한 옵션입니다.
- 프라이빗 클라우드에서 검색을 통한 생성 향상: 더 나은 검색 엔진은 제한된 생성 능력을 가진 더 작은 모델을 보완할 수 있습니다. 더 나은 검색 시스템을 구축해야만 문서 파싱, 텍스트 청킹, 의미 기반 쿼리와 같은 AI 애플리케이션의 정확성과 효율성을 크게 향상시킬 수 있습니다.
요약하자면, Darren은 데이터 프라이버시, 비용, 결과와 관련된 우려를 해결하기 위해 AI, 특히 LLM에 프라이빗 클라우드 솔루션을 도입할 것을 지지합니다. 다음으로, Huggingface Transformers 라이브러리에서 RAG를 위해 설계되고 최적화된 Dragon 모델에 대해 논의하겠습니다.
dRAGon (Delivering RAG On) 모델🐉
Dragon은 Retrieval Augmented Generation (RAG)을 위해 특별히 설계된 AI Blocks가 출시한 일련의 모델입니다. 계약서, 규제 문서, 복잡한 금융 정보와 같은 독점 데이터셋으로 파인튜닝된 7개의 오픈소스 모델 시리즈입니다. 모델에는 세 가지 범주가 있습니다:
모델 클래스와 해당 설명
모델 클래스와 해당 설명
- Bling 모델: 빠른 프로토타이핑에 최적화되고 CPU에서 실행할 수 있는 컴팩트한 instruct-tuned 모델로, 초기 테스트 및 개발 단계에 이상적입니다. 10억~30억 개의 매개변수만 포함하므로 메모리 부담이 적습니다.
- Dragon RAG 모델: Llama, Mistral, Red-pajama, Falcon, Deci와 같은 선도적인 60억 및 70억 매개변수 기반 모델의 파인튜닝 버전입니다. 사실 기반 질의응답 및 규제 문서 분석과 같은 작업에 맞춤화되어 있습니다.
- Industry ****BERT**** 모델: 산업별 애플리케이션에 특화된 Industry BERT 모델은 계약 분석과 같은 작업에 맞춤화된 파인튜닝된 sentence transformers입니다.
또한 이러한 모델은 상식적인 RAG 구조 벤치마크를 사용해 엄격하게 벤치마킹되었습니다. MMLU 및 ARC와 같은 과학적 지표에 의존하는 오픈소스 모델과 달리, Dragon 모델은 실제 환경에서의 정확도와 실용적인 사용 사례를 기준으로 테스트됩니다. 이 모델 컬렉션은 아래와 같이 HuggingFace에서 사용할 수 있습니다:
HuggingFace에 호스팅된 LLMware 모델
HuggingFace에 호스팅된 LLMware 모델
이러한 모델을 사용할 때의 주요 이점은 다음과 같습니다:
향상된 정확도: 방대한 데이터셋으로 파인튜닝된 이러한 모델은 문서 파싱, 텍스트 청킹, 의미 기반 쿼리에서 높은 정밀도를 제공합니다.
비용 효율성: 프라이빗 클라우드 인프라에서 사용하도록 최적화된 이러한 모델은 퍼블릭 클라우드의 더 크고 리소스 집약적인 모델에 비해 비용 효율적인 솔루션을 제공합니다.
오픈소스 및 사용자 지정 가능: Hugging Face에서 제공되는 이러한 오픈소스 모델은 특정 기업 요구 사항을 충족하기 위한 빠른 혁신과 사용자 지정을 가능하게 합니다.
프로덕션급 성능: 안정성을 기준으로 벤치마킹된 이러한 모델은 다양한 워크플로 전반에서 일관되고 신뢰할 수 있는 성능을 제공합니다.
원활한 통합: 포괄적인 지원과 사용하기 쉬운 생성 스크립트를 통해 이러한 모델을 기존 워크플로에 통합하는 것은 간단합니다.
이러한 모델은 비용, 정확도 또는 사용자 지정 가능성을 희생하지 않으며, LLMware에 통합되어 있어 쉽게 접근할 수 있습니다.
LLMware 살펴보기
LLMware 는 엔터프라이즈 수준의 LLM 기반 애플리케이션을 위해 설계된 라이브러리입니다. 비공개로 배포하고, 엔터프라이즈 지식 소스와 안전하게 통합하며, 모든 비즈니스 프로세스에 비용 효율적으로 적용할 수 있는 작고 전문화된 모델을 활용합니다. 이 툴킷은 LangChain ****또는 LlamaIndex와 비교할 수 있지만, 엔터프라이즈 환경 내에서 높은 확장성과 강력한 문서 관리를 위해 맞춤화되어 있습니다.
LLMware의 구성 요소:
RAG 파이프라인: 지식 소스를 생성형 AI 모델에 연결하는 전체 수명 주기를 위한 통합 구성 요소를 제공합니다.
전문화된 모델: 사실 기반 질의응답, 분류, 요약, 추출과 같은 엔터프라이즈 작업을 위해 50개 이상의 작고 미세 조정된 모델을 포함합니다. 이러한 모델에는 위에서 논의한 모델들도 포함되며, 다음 섹션의 구현에서 그중 하나를 사용할 것입니다.
LLMware의 기능:
대규모 문서 수집:
확장성: 수십만 개의 문서 수집을 처리하도록 구축된 LLMware는 여러 워커에 걸친 병렬 처리와 분산을 지원합니다.
문서 파싱: 맞춤형 C 기반 파서를 사용하여 PDF, Word 문서, PowerPoint 및 Excel 파일을 파싱하기 위한 전체 사양을 구현합니다.
엔드투엔드 데이터 모델:
영구 데이터 저장소: 영구 데이터 저장을 위해 MongoDB와 통합되어, 텍스트 컬렉션의 효율적인 청킹과 인덱싱을 가능하게 합니다.
엔터프라이즈 통합: 엔터프라이즈 데이터 워크플로에 원활하게 통합되도록 설계되어 안전하고 확장 가능한 데이터 관리를 보장합니다.
LLM 기반 애플리케이션을 위한 프레임워크:
오픈 소스 호환성: 이 기능은 광범위한 오픈 소스 및 Hugging Face 모델 지원을 우선시하여 LLM 애플리케이션을 쉽게 구축하고 배포할 수 있게 합니다.
기능이 풍부한 환경: 엔터프라이즈 환경의 다양한 사용 사례를 지원하는 새로운 기능과 역량을 포함하도록 지속적으로 개발됩니다.
사용 편의성:
예제 및 문서: 사용자가 빠르고 효율적으로 시작할 수 있도록 포괄적인 예제와 문서를 제공합니다.
엔터프라이즈 중심: 문서 관리부터 확장 가능한 처리에 이르기까지 엔터프라이즈 수준 LLM 배포의 고유한 요구를 해결하도록 특별히 구축되었습니다.
Milvus와 LLMware를 사용한 프라이빗 클라우드에서의 검색 증강 생성
이 섹션에서는 온프레미스 RAG 솔루션을 설명하고 구현합니다. LLMware와 Milvus 벡터 데이터베이스를 사용한 RAG의 아키텍처를 살펴보겠습니다.
아키텍처
이 아키텍처 다이어그램은 LLMware와 Milvus를 사용한 온프레미스 RAG의 워크플로를 보여줍니다.
LLMware와 Milvus를 사용한 온프레미스 RAG의 아키텍처 다이어그램
LLMware와 Milvus를 사용한 온프레미스 RAG의 아키텍처 다이어그램
다음은 각 구성 요소에 대한 설명입니다:
문서: 입력 데이터는 처리할 다양한 문서로 구성됩니다. 이 예시에서는 약 80개의 샘플 문서를 S3 버킷에서 가져옵니다.
수집 파이프라인: 이는 문서가 시스템으로 수집되는 초기 단계입니다. 이 파이프라인은 관련 정보를 추출하고 데이터를 정리하거나 형식화하는 등의 전처리 작업을 수행할 가능성을 통해 문서를 추가 처리를 위해 준비합니다.
임베딩 생성: 수집 후 문서는 임베딩 모델로 전달됩니다. 이 경우 Industry BERT 모델은 문서를 텍스트의 의미적 의미를 포착하는 수치 표현(벡터 임베딩)으로 변환합니다.
벡터 데이터베이스: Industry BERT 모델이 생성한 임베딩은 문서와 함께 벡터 데이터베이스인 Milvus에 저장됩니다. 이 특수화된 벡터 데이터베이스는 대규모 벡터 데이터를 처리하고 효율적으로 검색하도록 설계되었습니다.
쿼리: 사용자가 시스템에 쿼리를 제출합니다.
쿼리 임베딩: 이 쿼리도 임베딩으로 변환되어 Milvus에 저장된 문서 임베딩과 비교됩니다.
문서 검색: 쿼리와 문서 임베딩 간의 유사도가 계산되며, 유사도가 높을수록 문서가 더 높은 순위에 배치됩니다.
검색된 문서: 유사도가 높은 관련 문서가 검색됩니다. 검색할 문서 수와 유사도 임계값은 사용자 지정할 수 있습니다.
LLM: 검색된 문서와 쿼리는 LLM으로 전송됩니다. 이 경우 LLM은 Bling 7B입니다.
결과: LLM의 응답이 사용자에게 제공됩니다.
다음 섹션에서는 프라이빗 클라우드에서 RAG 애플리케이션을 구현하는 방법을 보여줍니다.
구현
이 구현에서는 ~80개의 법률 문서를 Milvus 벡터 데이터베이스에 수집하고 LLM을 사용해 질문함으로써 RAG 애플리케이션을 구축합니다. 이 블로그에서는 사용자가 이미 Milvus를 설치했으며 서비스를 시작할 수 있다고 가정합니다.
가져오기
먼저 필요한 라이브러리를 설치하고 환경으로 가져옵니다. llmware와 PyMilvus가 필요합니다. 설치 방법은 다음과 같습니다:
pip install llmware
Pip install pymilvus>=2.4.2
이 단계 후에 llmware에서 필요한 모듈을 가져오겠습니다.
import os
from llmware.library import Library
from llmware.retrieval import Query
from llmware.setup import Setup
from llmware.status import Status
from llmware.prompts import Prompt
from llmware.configs import LLMWareConfig, MilvusConfig
데이터를 가져온 후 구성을 설정합니다.
구성
구성 단계는 매우 간단합니다. 이 단계에서는 임베딩 모델, 벡터 데이터베이스, LLM의 이름을 저장합니다.
embedding_model = "industry-bert-contracts"
vector_db = "milvus"
llm = "llmware/bling-1b-0.1"
설정에는 industry-bert-contracts 임베딩 모델, 벡터 데이터베이스용 Milvus, 그리고 최적화된 AI 기반 문서 처리 및 분석을 위한 llmware/bling-1b-0.1 언어 모델이 포함됩니다.
Milvus 설정하기
통합되어 있기 때문에 llmware를 사용해 Milvus를 설정하는 것은 매우 간단합니다. PyMilvus 설치 후 아래와 같이 vector_db를 Milvus로, active_db를 sqlite로 설정해야 합니다:
LLMWareConfig().set_active_db("sqlite")
MilvusConfig().set_config("lite", True) # No dependency
LLMWareConfig().set_vector_db("milvus")
llmware는 자체 포함형이며 다른 종속성이 필요 없는 Milvus-lite를 지원합니다.
라이브러리 생성
llmware에서 라이브러리는 비정형 정보를 구성하는 주요 구조입니다. 사용자는 다양한 콘텐츠가 포함된 하나의 큰 라이브러리를 만들거나, 특정 주제, 프로젝트, 사례, 거래, 계정, 사용자 또는 부서에 전념하는 여러 라이브러리를 만들 수 있습니다.
라이브러리를 생성하려면 Library 클래스에서 create_new_library함수를 호출하면 되며, 인수로 임의의 이름이 필요합니다. 살펴보겠습니다.
Library_name = "contracts-Rag"
library = Library().create_new_library(library_name)
문서 수집
LLMware의 Setup 클래스는 계약서, 청구서, 재무 보고서 등 다양한 샘플 문서를 포함하여 AWS S3 버킷에서 샘플 파일을 다운로드합니다. load_sample_files를 사용하면 언제든지 이러한 샘플의 최신 버전을 가져올 수 있습니다. 이 예제에서는 “Agreements”를 업로드합니다.
sample_files_path = Setup().load_sample_files(over_write=False)
contracts_path = os.path.join(sample_files_path, "Agreements")
Llmware에는 범용 수집 도구인 add_files라는 유용한 함수가 있습니다. 혼합 파일 형식이 포함된 로컬 폴더를 지정하면, 파일 확장자에 따라 적절한 파서로 자동 라우팅됩니다. 그런 다음 파일이 파싱되고, 텍스트가 청킹되며, 텍스트 컬렉션 데이터베이스에 인덱싱됩니다.
library.add_files(input_folder_path=contracts_path)
문서가 로드되었습니다. 이제 임베딩을 생성해 보겠습니다.
임베딩 생성
이 구현의 모든 것은 비공개로 실행됩니다. 따라서 임베딩 모델은 온프레미스에 다운로드됩니다. 앞서 언급했듯이 임베딩 모델은 industry-bert-contracts이고, Milvus는 벡터 데이터베이스입니다.
library.install_new_embedding(embedding_model_name=embedding_model, vector_db=vector_db)
라이브러리에 임베딩을 설치한 후, 임베딩 상태를 확인하여 업데이트된 임베딩을 검증하고 모델이 정확하게 캡처되었는지 확인할 수 있습니다.
Status().get_embedding_status(library_name, embedding_model)
다음 섹션에서 LLM 호출을 실행하는 방법을 살펴보겠습니다.
대규모 언어 모델 로드
load_model 함수를 사용하여 Bling 모델을 로드하겠습니다. 이 모델들은 작고 빠른 테스트에 적합합니다.
prompter = Prompt().load_model(llm)
문서 검색
Llmware에서 Query 클래스는 검색 및 검색 결과 가져오기에 사용되며, Library를 필수 매개변수로 요구합니다. 이 접근 방식은 검색 결과 가져오기가 Library 추상화를 활용하도록 하여, 다양한 사용 사례, 사용자, 계정 및 권한에 맞춰진 여러 개의 고유한 지식 베이스를 지원합니다.
이 클래스는 텍스트 검색 및 의미 검색과 같은 여러 검색 기능을 제공합니다. 예제에서는 의미 검색을 사용하겠습니다.
query = "what is the executive's base annual salary"
results = Query(library).semantic_query(query, result_count=50, embedding_distance_threshold=1.0)
모든 요소 결합하기
이 섹션에서는 모든 계약서를 반복 처리하고, 관련 결과를 필터링한 다음, LLM을 사용하여 응답을 생성합니다. 코드 스니펫은 다음과 같습니다.
for i, contract in enumerate(os.listdir(contracts_path)):
qr = []
for j, entries in enumerate(results):
if entries["file_source"] == contract:
print("Top Retrieval: ", j, entries["distance"], entries["text"])
qr.append(entries)
source = prompter.add_source_query_results(query_results=qr)
response = prompter.prompt_with_source(query, prompt_name="default_with_context", temperature=0.3)
for resp in response:
if "llm_response" in resp:
print("\nupdate: llm answer - ", resp["llm_response"])
# start fresh for next document
prompter.clear_source_materials()
이에 대한 가이드는 다음과 같습니다.
계약서 반복 처리: 디렉터리의 각 계약서 파일에 대해 관련 쿼리 결과를 저장할 리스트를 초기화합니다.
관련 결과 필터링: 현재 계약서와 일치하는 결과를 필터링하고 상위 검색 결과를 출력합니다.
응답 생성: 필터링된 결과를 사용하여 언어 모델로 응답을 생성하고 생성된 응답을 출력합니다.
다음 계약서를 위한 초기화: 다음 계약서를 준비하기 위해 소스 자료를 지웁니다.
쿼리 결과는 다음과 같이 제공됩니다.
>>> Contract Name: Rhea EXECUTIVE EMPLOYMENT AGREEMENT.pdf
Top Retrieval: 1 0.6237360223214722
The Board (or its compensation committee) will annually review the Executive's base salary following the Employer's standard compensation and performance review policies for senior executives. While the salary may be increased, it cannot be decreased. The specific amount of any yearly increase will be determined based on these policies. For the purposes of this Agreement, "Base Salary" refers to the Executive's base salary as periodically established in accordance with Section 2.2.
여기에는 첫 번째 검색 결과만 표시되어 있다는 점에 유의하세요.
위에서 Milvus와 LLMware를 사용하여 법률 문서용 RAG 애플리케이션을 성공적으로 만들었습니다. 가장 큰 장점은 어떤 데이터도 외부 공급업체로 전송되지 않는다는 것입니다. 벡터 데이터베이스, 임베딩 모델, LLM을 포함한 모든 것이 온프레미스에 있습니다
결론
AI 도입이 증가함에 따라 데이터와 상호작용하는 것이 그 어느 때보다 쉬워졌습니다. 그러나 많은 기업은 여전히 데이터를 클라우드로 보내는 것을 주저하고 있으며, 이는 당연합니다. LLMware는 퍼블릭 클라우드가 아닌 온프레미스에서 AI 시스템을 구축하기 위한 솔루션을 제공합니다. 이 솔루션은 데이터 프라이버시를 보장하고, 비용을 절감하며, 더 많은 제어권을 제공합니다.
LLMware와 Milvus 벡터 데이터베이스를 사용하면 벡터 유사도 검색과 LLM의 힘을 결합하여 비공개 문서에 대해 질문할 수 있습니다. Milvus는 수십억 규모의 벡터 데이터를 저장, 처리, 검색하는 강력한 오픈소스 벡터 데이터베이스입니다. Milvus가 LLM을 위해 가장 관련성 높은 상위 K개 결과를 검색하면, LLM은 사용자의 질의에 답변할 맥락을 갖게 됩니다.
계속 읽기

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

Milvus 2.6.x Now Generally Available on Zilliz Cloud, Making Vector Search Faster, Smarter, and More Cost-Efficient for Production AI
Milvus 2.6.x is now GA on Zilliz Cloud, delivering faster vector search, smarter hybrid queries, and lower costs for production RAG and AI applications.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.



