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질문을 압축하고 리트리버를 사용하여 문맥을 파악합니다;
  • simpleLLM을 직접 사용하는 간단한 채팅 엔진입니다;
  • 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: 여러 모델을 동시에 로드합니다.

예제

  1. 단일 텍스트 질문 및 답변(Q&A)
使用 Ollama+LlamaIndex 搭建本地 RAG 应用
  1. 다중 텍스트 질문 및 답변 세션
使用 Ollama+LlamaIndex 搭建本地 RAG 应用

 

참조:라마 인덱스 문서

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...