Ollama+LlamaIndex로 로컬 RAG 애플리케이션 구축하기
개요
이 문서에서는 로컬 RAG(검색 증강 생성) 애플리케이션을 구축하기 위해 LlamaIndex 프레임워크를 사용하는 방법을 자세히 설명합니다. LlamaIndex와 통합하면 로컬 애플리케이션을 구축할 수 있습니다. RAG 검색 및 생성 기능을 결합하여 정보 검색의 효율성과 생성된 콘텐츠의 관련성을 개선하는 시스템입니다. 로컬 지식창고 경로를 사용자 지정하고 LlamaIndex를 통해 색인을 생성한 다음 문맥에 맞는 대화에 사용할 수 있습니다.
참고: 이 문서에는 핵심 코드 스니펫과 자세한 설명이 포함되어 있습니다. 전체 코드는 다음 링크에서 확인할 수 있습니다. 노트북 .
1. 모델 다운로드
이 예제에서는 llama3.1
모델을 선택하면 자신의 컴퓨터 구성에 따라 적절한 모델을 사용할 수 있습니다.
ollama pull llama3.1
ollama pull nomic-embed-text
2. 종속성 설치
pip install llama-index-llms-ollama
pip install llama-index-embeddings-ollama
pip install -U llama-index-readers-file
3. 데이터 로드
현재 디렉터리의 데이터 폴더에 있는 모든 문서를 메모리에 로드합니다.
documents = SimpleDirectoryReader("data").load_data()
4. 인덱스 구성
Settings.embed_model = OllamaEmbedding(model_name="nomic-embed-text")
Settings.llm = Ollama(model="llama3.1", request_timeout=360.0)
index = VectorStoreIndex.from_documents(
documents,
)
Settings.embed_model
: 글로벌embed_model
속성을 추가합니다. 이 예제 코드는 생성된 임베디드 모델을 글로벌embed_model
속성;Settings.llm
: 글로벌llm
속성을 추가합니다. 이 예제 코드는 생성된 언어 모델을 글로벌llm
속성;VectorStoreIndex.from_documents
이전에 로드한 문서를 사용하여 색인을 생성하고 빠른 검색을 위해 벡터로 변환합니다.
통과(청구서 또는 검사 등) Settings
전역 속성은 이후 인덱스 구축 및 쿼리 프로세스에서 해당 모델이 기본적으로 사용되도록 설정됩니다.
5. 데이터 쿼리
query_engine = index.as_query_engine()
response = query_engine.query("Datawhale是什么?")
print(response)
index.as_query_engine()
이전에 구성한 인덱스를 기반으로 쿼리 엔진을 생성합니다. 이 쿼리 엔진은 쿼리를 수신하고 검색된 응답을 반환할 수 있습니다.
6. 대화를 위한 컨텍스트 검색
검색된 컨텍스트가 사용 가능한 많은 수의 LLM 컨텍스트를 차지할 수 있으므로 채팅 기록을 더 작게 구성해야 합니다. 토큰 제한 사항!
# 检索上下文进行对话
from llama_index.core.memory import ChatMemoryBuffer
memory = ChatMemoryBuffer.from_defaults(token_limit=1500)
chat_engine = index.as_chat_engine(
chat_mode="context",
memory=memory,
system_prompt=(
"You are a chatbot, able to have normal interactions."
),
)
response = chat_engine.chat("Datawhale是什么?")
print(response)
chat_mode
사용 시나리오에 따라 적절한 모드를 선택할 수 있으며, 지원되는 모드는 다음과 같습니다:
best
(기본값): 쿼리 엔진 도구와 함께 프록시(react 또는 openai)를 사용합니다;context
리트리버를 사용하여 컨텍스트를 가져옵니다;condense_question
: 질문을 압축합니다;condense_plus_context
질문을 압축하고 리트리버를 사용하여 문맥을 파악합니다;simple
LLM을 직접 사용하는 간단한 채팅 엔진입니다;react
: 쿼리 엔진 도구와 함께 리액트 에이전트를 사용합니다;openai
쿼리 엔진 도구와 함께 openai 에이전트를 사용합니다.
7. 벡터 인덱스 저장 및 로드하기
storage_context.persist
벡터 인덱스를 저장합니다.load_index_from_storage
벡터 인덱스를 로드합니다.
# 存储向量索引
persist_dir = 'data/'
index.storage_context.persist(persist_dir=persist_dir)
# 加载向量索引
from llama_index.core import StorageContext, load_index_from_storage
storage_context = StorageContext.from_defaults(persist_dir=persist_dir)
index= load_index_from_storage(storage_context)
8. 간소화된 애플리케이션
이 예제는 또한 스트림라이트 애플리케이션을 구현하며, 이 애플리케이션은 app.py
필수 종속성은 다음과 같습니다:
llama_index==0.10.62
streamlit==1.36.0
참고
존재 app.py
연속된 대화 상자에서 모델을 다시 로드하지 않으려면 환경 변수를 구성할 수 있습니다. OLLAMA_NUM_PARALLEL
노래로 응답 OLLAMA_MAX_LOADED_MODELS
첫 번째는 여러 모델 로딩을 지원하므로 최소 8G의 RAM이 추가로 필요합니다.
OLLAMA_NUM_PARALLEL
단일 모델에 대한 여러 요청을 동시에 처리합니다.
OLLAMA_MAX_LOADED_MODELS
: 여러 모델을 동시에 로드합니다.
예제
- 단일 텍스트 질문 및 답변(Q&A)

- 다중 텍스트 질문 및 답변 세션

참조:라마 인덱스 문서
© 저작권 정책
기사 저작권 AI 공유 서클 모두 무단 복제하지 마세요.
관련 문서
댓글 없음...