로컬 RAG 설정 시작하기: 올라마 및 밀버스와 함께 라마 3 랭체인 사용 초보자 가이드
라마 3, 미스트랄, 젬마 등과 같은 오픈 소스 LLM이 등장하면서 로컬에서 실행할 때도 대규모 언어 모델(LLM)이 유용할 수 있다는 것이 분명해졌습니다. 이 접근 방식은 실용적일 뿐만 아니라 GPT-3 또는 GPT-4와 같은 상용 LLM으로 확장할 때 비용이 급증할 수 있기 때문에 필수적인 요소가 되었습니다.
이 실습 가이드에서는 특정 정보에 대한 질문에 답변할 수 있는 질의응답(Q&A) 챗봇을 만들기 위해 검색 증강 생성(RAG)을 배포하는 방법을 살펴봅니다. 이 설정에서는 벡터 저장소로 Milvus에서 제공하는 Ollama 및 Llama 3을 사용합니다. 일반적인 구현에는 Llama 3용 텍스트 생성 파이프라인을 설정하는 것이 포함됩니다.
이 검색 증강 생성(래그) 설정을 구축하기 위한 다양한 도구는 다음과 같습니다:
Ollama: Ollama는 로컬 머신에서 Llama 3를 관리할 수 있는 오픈 소스 도구입니다. 이 도구는 LLM의 강력한 기능을 노트북에 제공하여 로컬 작업을 간소화합니다.
LangChain LangChain은 LLM 기반 애플리케이션 개발을 간소화하는 프레임워크입니다. 에이전트를 생성하고 데이터와 상호 작용하는 데 사용하는 프레임워크입니다.
는 관련 데이터를 효율적으로 저장하고 검색하는 데 사용하는 벡터 데이터베이스입니다.
Llama 3는 Meta에서 개발한 오픈 소스 대규모 언어 모델이며, LLM 라인업의 최신 버전입니다. 사용자 상호작용을 위한 복잡한 프롬프트 형식을 제공하며 '시스템', '사용자', '어시스턴트' 등 여러 사용자 역할을 지원합니다.
RAG와의 Q&A
RAG(검색 증강 생성)를 사용하여 정교한 질의응답(Q&A) 챗봇을 구축할 예정입니다. 이를 통해 특정 정보에 대한 질문에 답변할 수 있습니다.
검색 증강 생성이란 정확히 무엇인가요?
RAG, 즉 검색 증강 생성은 추가 데이터 소스를 통합하여 LLM을 향상시키는 기술입니다. 일반적인 RAG 애플리케이션에는 다음이 포함됩니다:
색인 - 소스에서 데이터를 수집하고 색인하기 위한 파이프라인으로, 일반적으로 Milvus에 데이터를 로드, 분할, 저장하는 단계로 구성됩니다. Milvus에 저장된 데이터는 벡터 임베딩 형태로 데이터를 표현한 것입니다. 임베딩은 콘텐츠의 본질을 포착하여 키워드 검색에 비해 더 관련성 높은 검색 결과를 제공합니다.
- 검색 및 생성 - 검색 증강 생성 시스템은 답변을 생성하기 전에 벡터 데이터베이스에서 관련 문맥을 검색하고 이를 LLM에 전달하여 답변의 품질을 향상시킵니다. 컨텍스트가 주어지면 LLM은 환각을 생성하는 것을 방지합니다. 보다 구체적으로, 런타임에 RAG가 사용자의 쿼리를 처리하고 Milvus에 저장된 인덱스에서 관련 데이터를 가져오면 LLM이 이 강화된 컨텍스트를 기반으로 응답을 생성합니다.
이 가이드는 로컬 LLM을 사용하여 RAG 애플리케이션을 설정하는 방법을 보여주는 실용적이고 실무적인 내용으로 구성되어 있습니다. 전문가뿐만 아니라 초보자도 바로 시작하여 자신만의 Q&A 챗봇을 구축할 수 있습니다. 지금 바로 시작해보세요!
전제 조건
튜토리얼의 다양한 구성 요소 설정을 시작하기 전에 시스템에 다음 사항이 있는지 확인하세요:
- Docker & Docker-Compose - 시스템에 Docker와 Docker-Compose가 설치되어 있는지 확인합니다.
- 밀버스 스탠드얼론 - 여기서는 Docker Compose를 통해 관리하기 쉬운 밀버스 스탠드얼론을 사용하며, 설치 방법은 문서에서 확인하시기 바랍니다. 올라마 - 시스템에 올라마를 설치합니다. 최신 설치 가이드는 웹사이트를 참조하세요.
##랑체인 설정
모든 필수 구성요소를 설치했으면 RAG 애플리케이션을 설정할 준비가 된 것입니다:
- 다음 명령어로 Milvus 독립형 인스턴스를 시작합니다: 도커-컴포즈 업 -d. `
- 이 명령은 Milvus 인스턴스를 분리 모드로 시작하여 백그라운드에서 조용히 실행합니다.
- 다음을 통해 LLM 모델을 가져옵니다:
ollama pull <name_of_model>- 해당 라이브러리를 통해 사용 가능한 모델 목록을 확인합니다.
- 예:
ollama pull llama3
- 이 명령은 모델의 기본(일반적으로 가장 작은 최신) 버전을 다운로드합니다.
- 명령줄에서 모델과 직접 대화하려면
ollama run <모델 이름>을 사용하세요.
벡터 스토어에 대한 종속성 설치
이 애플리케이션을 실행하려면 파이썬 라이브러리를 설치해야 합니다. Github에서 코드를 직접 사용하는 경우 Poetry를 사용하거나 원하는 경우 pip으로 설치할 수 있습니다.
pip 설치 랭체인 파이밀버스 올라마 pypdf 랭체인허브 랭체인-커뮤니티 랭체인-실험용
llm 기반 애플리케이션을 위한 ## RAG 애플리케이션
앞서 말했듯이 RAG의 주요 구성 요소 중 하나는 데이터 색인화입니다.
- PyPDFLoader를 사용하여 PDF에서 데이터 수집으로 시작하세요.
langchain_community.document_loaders에서 PyPDFLoader를 가져옵니다.
loader = PyPDFLoader(
"https://d18rn0p25nwr6d.cloudfront.net/CIK-0001813756/975b3e9b-268e-4798-a9e4-2a9a7c92dc10.pdf"
)
data = loader.load()
- 데이터 분할
RecursiveCharacterTextSplitter`를 사용하여 로드된 데이터를 관리 가능한 청크로 분할합니다.
langchain.text_splitter에서 RecursiveCharacterTextSplitter를 가져옵니다.
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)
- 임베딩을 가져와 Milvus에 데이터 저장하기
다음으로 Jina AI의 작은 영어 임베딩을 이용해 텍스트 데이터를 벡터 임베딩으로 변환하고, 이를 Milvus에 저장합니다.
langchain_community.embeddings.jina에서 JinaEmbeddings를 가져옵니다.
langchain.vectorstores.milvus에서 Milvus를 가져옵니다.
embeddings = JinaEmbeddings(
jina_api_key=JINA_AI_API_KEY, model_name="jina-embeddings-v2-small-en"
)
벡터 저장소 = Milvus.from_documents(문서=모든_분할, 임베딩=임베딩)
- LLM 로드
Ollama를 사용하면 로컬에서 LLM을 쉽게 로드하고 사용할 수 있습니다. 이 예제에서는 메타의 Llama 3을 사용하며, 로드하는 방법은 다음과 같습니다:
langchain_community.llms에서 Ollama를 가져옵니다.
langchain.callbacks.manager에서 콜백 매니저를 가져옵니다.
langchain.callbacks.streaming_stdout에서 StreamingStdOutCallbackHandler를 가져옵니다.
llm = Ollama(
model="llama3",
callback_manager = 콜백 관리자(
[StreamingStdOutCallbackHandler()]]
),
stop=["<|eot_id|>"],
)
- Langchain으로 QA 체인 구축하기
마지막으로 사용자 쿼리를 처리하고 응답하기 위해 QA 체인을 구축합니다:
에서 랭체인 가져오기 허브
langchain.chains에서 RetrievalQA를 가져옵니다.
query = 입력("\nQuery: ")
prompt = hub.pull("rlm/rag-prompt")
qa_chain = RetrievalQA.from_chain_type(
llm, retriever=vectorstore.as_retriever(), chain_type_kwargs={"prompt": prompt})
)
result = qa_chain({"query": query})
print(result)
애플리케이션 실행
결과 변수가 있는 마지막 셀로 RAG 애플리케이션을 실행합니다.
RAG 애플리케이션을 실행하여 실행합니다: python rag_ollama.py`를 실행합니다.
QA 상호작용의 예시:
Query: 이 문서는 무엇에 관한 문서인가요?
이 문서는 SEC 제출용 104페이지 표지 대화형 데이터 파일로 보입니다. 회사의 재무제표 및 인증에 대한 정보가 포함되어 있습니다.{'쿼리': '이 문서는 무엇에 관한 문서인가요?', '결과': "이 문서는 SEC 제출용 104페이지 표지 대화형 데이터 파일로 보입니다. 이 문서에는 회사의 재무제표 및 인증에 대한 정보가 포함되어 있습니다."}
이제 완료되었습니다! 방금 Ollama와 Llama 3, Langchain, Milvus를 사용하여 정교한 로컬 LLM을 설정했습니다. 이 설정을 통해 대규모 데이터 세트를 효율적으로 처리할 수 있을 뿐만 아니라 응답성이 뛰어난 로컬 질문-답변 시스템을 구현할 수 있습니다.
밀버스](https://zilliz.com/what-is-milvus), 깃허브에서 코드를 확인하고, 디스코드에 가입하여 커뮤니티와 경험을 공유해 주세요.
검색된 컨텍스트 요약
이 가이드에서는 로컬 LLM(대규모 언어 모델)을 사용하여 검색 증강 생성(RAG) 애플리케이션을 설정하는 방법을 안내했습니다. Ollama, Llama 3, LangChain, Milvus와 같은 도구를 활용하여 벡터 스토어에서 검색된 컨텍스트로 특정 정보 쿼리를 처리할 수 있는 강력한 질의응답(Q&A) 챗봇을 만드는 방법을 보여드렸습니다.
주요 내용은 다음과 같습니다:
RAG 개요: RAG는 외부 데이터 소스를 통합하여 LLM 기능을 향상시킵니다. 여기에는 Milvus를 사용하여 데이터를 벡터 임베딩으로 색인하고 쿼리 처리 중에 관련 컨텍스트를 검색하여 정확하고 정보에 입각한 응답을 생성하는 것이 포함됩니다.
도구 하이라이트:
올라마는 로컬에서 라마 3 모델을 관리하고 실행하는 작업을 간소화합니다.
LangChain은 LLM 기반 애플리케이션 개발을 위한 직관적인 프레임워크를 제공합니다.
Milvus는 벡터 저장소로서 벡터화된 데이터를 효율적으로 저장하고 검색하여 정밀한 쿼리 처리를 가능하게 합니다.
- Meta에서 개발한 Llama 3는 다중 역할 상호 작용 및 사용자 지정 가능한 시스템 프롬프트와 같은 기능을 통해 고급 기능을 지원합니다.
설정 프로세스는 필수 단계를 다루었습니다:
전제 조건: Docker, Milvus Standalone, Ollama 및 필수 Python 라이브러리 설치.
데이터 인덱싱: PyPDFLoader 및 RecursiveCharacterTextSplitter와 같은 도구를 사용하여 데이터를 로드, 분할 및 벡터화합니다.
임베딩 저장소: Jina AI 모델을 사용하여 텍스트를 임베딩으로 변환하고 Milvus 벡터 스토어에 저장합니다.
QA 체인 구축하기: LangChain을 통해 라마 3와 벡터 스토어를 통합하고, 사용자 쿼리를 처리하고 응답할 수 있도록 맞춤형 시스템 프롬프트를 구성합니다.
사용자는 애플리케이션을 실행하여 로컬 챗봇과 상호 작용하여 특정 데이터 세트에서 상황에 맞는 정확한 답변을 검색할 수 있습니다. 관련 문서가 검색되면 효과적인 방법으로 입증된 답변 생성을 위해 LLM으로 전달됩니다. 이 가이드는 초보자와 전문가 모두의 접근성을 보장하는 실용성에 중점을 두었습니다. 최적의 검색을 위해 애플리케이션의 특성에 따라 매개변수를 미세 조정해야 할 수도 있다는 점에 유의하세요.
오픈 소스 LLM의 중요성이 커지면서 이 설정은 현지화된 구현이 어떻게 비용을 절감하고 보안을 강화하며 정보 검색 및 생성을 위한 확장 가능한 솔루션을 제공하는지 강조합니다. GitHub 리포지토리를 살펴보고 Discord 커뮤니티에 참여하여 여러분의 경험과 인사이트를 공유하세요!
계속 읽기

Zero-Downtime Migration Now Available in Zilliz Cloud Private Preview
Zero-Downtime Migration enables seamless cluster-to-cluster migrations within Zilliz Cloud while maintaining full service availability.

VidTok: Rethinking Video Processing with Compact Tokenization
VidTok tokenizes videos to reduce redundancy while preserving spatial and temporal details for efficient processing.

Top 5 AI Search Engines to Know in 2025
Discover the top AI-powered search engines of 2025, including OpenAI, Google AI, Bing, Perplexity, and Arc Search. Compare features, strengths, and limitations.
