본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 10. 05:42

digithree/ollama-rag

요약

본 프로젝트는 Ollama를 활용하여 사설 로컬 환경에서 대규모 언어 모델(LLM) 에이전트를 위한 사용자 정의 RAG 구현체입니다. PDF 파일 수집을 위한 정적 메모리와 이전 대화를 기억하는 동적 메모리를 모두 사용하여, 마치 사람과 대화하듯 복잡한 상호작용을 시뮬레이션합니다.

핵심 포인트

  • Ollama 기반의 로컬 LLM 에이전트 구현체입니다.
  • RAG를 통해 PDF 참조 및 장기/단기 기억 기능을 제공합니다.
  • Streamlit 인터페이스와 Python 스크립트로 쉽게 구성하고 실행할 수 있습니다.
  • Mac 또는 Linux 환경에서 Ollama 설치가 필수적입니다.

이 프로젝트는 Ollama를 사용하여 사설 로컬 인스턴스의 대규모 언어 모델(LLM) 에이전트를 위한 사용자 정의 검색 증강 생성(RAG) 구현체이며, 편리한 웹 인터페이스를 제공합니다. 이 프로젝트는 PDF 수집을 위해 구현된 정적 메모리와 일일 시간 기록이 있는 이전 대화를 기억하는 동적 메모리를 모두 사용합니다.

다시 말해, 이 프로젝트는 이전 대화를 기억하고 여러 개의 PDF 파일을 참조할 수 있는 사람과 대화하는 것을 시뮬레이션하는 챗봇입니다.

이는 Python으로 작성되었으며, 이 Medium 게시물에서 설명된 간단한 pdfchat 예제 프로젝트를 기반으로 합니다. Harjot / SonicWarrior1에게 감사합니다.

  • 스크립트를 사용하거나 Modelfile을 직접 탐색하여 에이전트(챗봇) 구성

  • 스크립트로 챗봇에 사용되는 모델 구성

  • (선택 사항) 편리한 스크립트로 PDF 컬렉션을 쉽게 스크래핑하고 수집

  • Streamlit을 사용하여 챗봇 에이전트를 실행하고 상호 작용하기 위한 간단한 인터페이스

  • 장기 메모리: 일일 시간 기록을 사용해 압축하고 검색 가능하게 만듦

  • 챗봇이 좋은 답변을 내놓지 못할 때 웹 검색 (기본적으로 비활성화)

  • 컴퓨터는 Mac 또는 Linux입니다. Windows에서도 약간의 조정으로 작동할 것입니다.

  • Ollama가 설치되어 있어야 합니다. https://ollama.com/download를 참조하세요.

  • 기본 모델(들)이 설치되어 있어야 합니다. 예를 들어, 기본값은 qwenmistral입니다. 바이너리를 가져오려면 예시로 ollama run qwen을 사용하십시오. 몇 GB에 달합니다 - Python 3+가 설치되어 환경에서 사용 가능해야 하며, 최고의 결과를 위해 pyenv를 사용하세요.

pyenv는 개발자에 의해 사용되었으며 Python 3.10.2용으로 구성되었습니다.

  • 다음을 사용하여 Python 종속성 설치:
    pip install -r requirements.txt

  • (선택 사항)
    웹 검색을 위한 ddgr, DuckDuckGo 검색 엔진의 셸 클라이언트입니다. https://github.com/jarun/ddgr를 참조할 수 있지만 Brew로도 설치할 수 있습니다.

구성하기 전에 Ollama 서비스가 실행 중인지 확인하십시오.

python setup.py

  • 이것은 에이전트를 생성하는 데 필요한 세부 정보를 요청하여 이를 config.json에 작성합니다.

이는 메인 스크립트인 converse.pyapp.py에서 필요로 하는 것입니다.

만약 다시 실행하고 싶다면, 기존의 config.json 파일을 삭제하세요.

  • (선택 사항) PDF를 크롤링하려면 아래 섹션을 참조하세요.

실행하기 전에 Ollama 서비스가 실행 중인지 확인하세요.

./run.sh

  • 기본 브라우저에서 챗봇을 실행합니다.
    또는
    ./cleanRun.sh
  • 로컬 동적 메모리를 지우고(정적 메모리는 유지) 다시 실행합니다.

ollama rm ragmain

  • 이 프로젝트에 사용된 Ollama의 사용자 정의 LLM을 제거합니다.

기여는 환영하지만, 저는 이 프로젝트에 큰 포부를 가지고 있지 않으므로 그냥 포크(forking)하는 것이 더 좋을 것 같습니다. 제 Python 실력이 좋지 않으니 양해 부탁드립니다.

또한 ChromaDB 파일과 JSON 및 TXT 파일은 .gitignore에서 무시된다는 점도 참고하세요.

Ollama는 많은 인기 모델들이 준비된 다양한 저장소들을 구성할 수 있는 편리한 LLM 러너입니다. CPU로 작동하기 때문에, 만약 약간 오래된 MacBook Pro(저처럼)를 사용하고 있다면 로컬에서 LLM을 실행할 수 있습니다.

이것은 시뮬레이션된 대화의 입력/출력이 컴퓨터를 벗어나지 않는다는 점에서 특히 멋집니다. 스스로 로컬에서 실행할 수 있다는 것은 데이터에 대한 긍정적인 소유권을 가지게 하고, 개인 정보를 보호하며, 더 큰 자신감을 가지고 자유롭게 실험할 수 있게 해줍니다.

하지만 CPU로 작동하기 때문에 훨씬 느릴 것이니 이 점을 염두에 두세요.

이 프로젝트는 ChromaDB라는 일종의 벡터 데이터베이스를 사용하는데, 이는 제한된 하드웨어(예: 믿음직하지만 약간 오래된 MacBook Pro)에서도 방대한 데이터셋을 빠르게 탐색할 수 있게 해줍니다.

이는 LLM에게 마치 실제 컨텍스트 창보다 더 많은 연속적인 메모리와 컨텍스트를 제공하는 것처럼 보이게 함으로써 LLM의 유용성을 증폭시킵니다. 현재 로컬에서 실행되는 LLM의 경우 이 컨텍스트 창이 상당히 작기 때문입니다.

그 효과는 시뮬레이션된 대화에 더 현실적이고 인간적인 느낌을 부여할 뿐만 아니라, PDF 컬렉션을 검색(즉, '대화')하는 방법으로 유용할 수 있으며, 여러 세션에 걸쳐 장기간 동안 일련의 관련 대화를 유지할 수 있게 합니다.

PDF를 가져오는(ingestion) 과정은 매우 간단하며, 제가 기반으로 삼은 프로젝트인 pdfchat 예제 프로젝트의 많은 부분을 활용합니다.

제가 추가한 내용은 다음과 같습니다:

./scrape-pdf-list.sh <디렉토리>

  • 주어진 디렉토리(및 모든 하위 디렉토리)에서 모든 PDF 파일을 스크랩하여 pdf-files.txt 파일로 출력합니다.

이때, 이 파일에 내용을 추가(append)하므로 여러 위치에서 여러 번 실행할 수 있으며, 다시 실행하기 전에 필요하다면 내용을 지울 수도 있습니다.

python ingest-pdf.py

  • pdf-files.txt에 나열된 PDF들을 ChromaDB로 실제로 스크랩(가져오기)합니다. 이 데이터베이스는 ./chroma_db_pdfs 디렉토리에 존재합니다.

적당한 수의 PDF만으로도 몇 GB 크기의 DB가 생성될 수 있으며, 대규모 컬렉션은 수십 GB에 달할 수 있습니다. 또한 CPU 처리로 인해 시간이 오래 걸리며, 수백 개의 PDF 파일의 경우 몇 시간 정도, 수천 개는 하루 이상이 소요될 수 있습니다. 하지만 처리가 완료되면 빠르게 검색할 수 있으며, 터미널에서 진행률 백분율 로그를 확인할 수 있습니다.

ChromaDB는 기본적으로 SQLite 3 위에 만들어진 래퍼(wrapper)이기 때문에 SQLite 뷰어로 DB 파일을 살펴볼 수는 있지만, 변경하는 것은 권장하지 않습니다.

장기 기억(long term memory) 기능 역시 ChromaDB 인스턴스를 사용합니다. 요약하자면, 사용자님이 챗봇에게 무언가를 '말할' 때 다음 과정을 거칩니다:

  • 사용자가 말한 내용이 중요한지 여부를 판단합니다.
  • 중요하다고 판단되면 몇 개의 단어로 압축하여 타임스탬프와 함께 저장합니다.
  • 챗봇 응답을 생성합니다.
  • 이 응답을 몇 개의 단어로 압축하여 타임스탬프와 함께 저장합니다.

챗봇 응답을 생성할 때:

  • 시간 제한이 있는 타임스탬프(예: 오늘, 어제, 3일 전, 지난주, 지난달 등)를 추가하여 메모리를 조회합니다.
  • 이 정보를 다른 컨텍스트(PDF에서 가져온 정적 메모리, 웹 검색 결과 등)와 함께 결합합니다.

converse.py에는 세 개의 플래그가 있습니다. 모두 기본적으로 비활성화되어 있지만, True로 설정하여 활성화할 수 있습니다:

WEB_SEARCH_ENABLED = False

  • 이 기능이 활성화되면 LLM(대규모 언어 모델)이

  • enabled인 경우, 응답을 음성으로 말하기 위해 Mac의 내장 say 명령어를 사용합니다. 기본 설정된 목소리를 사용하며, 추가 목소리 다운로드, 말하는 속도 설정 등은 Mac의 '음성으로 말하기' 설정에서 확인할 수 있습니다.
    DEBUG_ENABLED = False

  • RAG 시스템이 '메모리'에서 무엇을 가져오는지, 메모리를 위해 무엇(그리고 여부를) 추출하는지, 웹 검색 키워드 등을 보여주는 로그 정보를 기록합니다.
    이 기능 사용에 신중하시기를 권장합니다. 이 기능을 통해 좋은 아이디어가 아닐 수도 있는 많은 것을 할 수 있습니다. 이것은 기술 실험을 위한 장난감 프로젝트입니다. 정신 건강이나 타인의 정신 건강을 해치는 데 사용하지 마십시오.

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0