본문 바로가기
성경 프로그램/AI tools

LLM과 RAG 결합 툴

by 구봉환 2025. 12. 11.

1. 개념

이 앱은 대규모 언어 모델(LLM)에 검색 증강 생성(RAG, Retrieval-Augmented Generation) 기술을 결합하여, 사용자가 직접 올린 문서(PDF, DOCX, TXT)를 기반으로 정확한 답변과 출처를 제공합니다. 또한 웹브라우징도 통합하여 검색과 LLM 질의 응답을 한 창에서 동시에 진행이 가능합니다.


🚀 앱의 3가지 핵심 특징

1. 다이내믹 컬렉션 및 그룹 관리 기능

  • 유연한 데이터 구조: 문서를 주제별로 분류할 수 있는 컬렉션(Collection)과, 컬렉션을 묶어 관리할 수 있는 그룹(Group) 기능을 제공합니다.
  • 쉬운 접근성: GUI를 통해 새로운 컬렉션을 생성하거나 기존 컬렉션을 삭제할 수 있으며, 인덱싱 타겟을 손쉽게 설정할 수 있습니다.
  • 확장/축소 가능 (NEW!): 그룹 목록은 확장/축소(Expand/Collapse) 토글 버튼을 제공하여, 수많은 컬렉션 중에서도 원하는 정보를 깔끔하게 정리하고 빠르게 찾아볼 수 있습니다.

2. 멀티 소스 RAG 지원 및 정밀한 검색

  • 선택적 검색: 사용자가 체크박스를 통해 여러 컬렉션을 동시에 선택하여 쿼리할 수 있습니다. 예를 들어, '구약' 그룹과 '신학' 그룹을 동시에 검색하여 포괄적인 답변을 얻을 수 있습니다.
  • 청크 크기/개수 조절: RAG 검색에 사용되는 문서 조각(청크)의 크기(Chunk Size)와 검색할 청크의 개수(Num Chunks)를 세밀하게 조정하여 검색 정확도를 최적화할 수 있습니다.

3. 자동 프롬프트 인젝션 및 상세 출처 제공

  • 자동 프롬프트 생성: 사용자가 질문을 입력하고 RAG 버튼을 클릭하면, 검색된 관련 문서 내용(Context)과 질문이 결합된 최종 프롬프트가 자동으로 생성됩니다.
  • LLM Arena 자동 전송: 이 최종 프롬프트는 LM Arena 웹사이트의 프롬프트 입력창에 자동으로 주입(Inject)되고, 입력창의 빈 공간에 키보드의 아무 키나 입력하면 활성화된 제출 버튼을 눌러 전송됩니다.
  • 정확한 인용 요구: 생성된 프롬프트에는 사용된 출처 목록(Sources)이 포함되며, LLM에게 반드시 이 출처 목록을 인용하여 답변하도록 지시합니다. 출처는 [그룹명] 파일명, p. N 또는 [그룹명] 파일명, Chunk #N 형태로 제공되어 답변의 신뢰성을 높입니다.

📝 앱 사용법 요약 (3단계)

1단계: 문서 인덱싱 (데이터베이스 구축)

  1. 컬렉션 선택: RAG Panel의 '📦 Indexing Target' 드롭다운 메뉴에서 문서를 넣을 컬렉션(예: Genesis 또는 Systematic Theology)을 선택합니다.
    • Tip: 필요하다면 '📚 Manage Collections'에서 새로운 컬렉션이나 그룹을 만들 수 있습니다.
  2. 파일 추가: 1. Add File(s) to Selected Collection 버튼을 클릭하여 로컬 디스크의 .pdf, .docx, .txt 파일을 선택합니다.
  3. 인덱싱 완료: 파일 내용이 작은 청크로 쪼개져 선택된 컬렉션의 내부 데이터베이스에 저장됩니다.

 

2단계: 검색 대상 설정

  1. 컬렉션 체크: '2. Search Collections' 섹션에서 질문에 사용하고 싶은 컬렉션이나 그룹의 체크박스를 선택합니다.
    • 선택된 컬렉션에 포함된 문서 목록은 아래 'Loaded Documents'에서 즉시 확인할 수 있습니다.

 

3단계: 질문 및 답변 요청

  1. 질문 입력: 'Your Question' 텍스트 박스에 원하는 질문을 입력합니다.
  2. 프롬프트 생성 및 전송: 3. Generate & Inject Prompt 버튼을 클릭합니다.
  3. 결과 확인: 앱이 관련 컨텍스트를 검색하여 프롬프트를 만들고, LM Arena 웹 브라우저 입력창의 빈 공간에 키보드의 아무 키나 입력하면 활성화된 제출 버튼을 눌러 전송합니다. 브라우저에서 RAG 기술이 적용된 답변을 확인하고, 답변에 포함된 출처 인용을 검토합니다.

 

 

2. 인덱싱 성능과 한계


📄 인덱싱 자료의 한계와 실질적인 제약 조건

1. 파일 개수 및 저장 용량: 이론적 제한 (Disk Space)

사용자님의 RAG App은 ChromaDB를 사용하여 모든 데이터를 로컬 디스크에 저장합니다.

  • 파일 개수: 소프트웨어적으로 인덱싱 할 수 있는 PDF, TXT, DOCX 파일의 개수에 대한 제한은 없습니다. 수천, 수만 개의 파일도 인덱싱 할 수 있습니다.
  • 저장 용량: 인덱싱 된 모든 데이터(원문 텍스트, 메타데이터, 그리고 가장 중요한 벡터 임베딩)는 프로그램이 설치된 폴더 내의 ./chroma_db_data에 저장됩니다. 따라서 용량의 제한은 오직 사용자 컴퓨터의 하드 디스크(SSD/HDD) 공간에 의해 결정됩니다.

요약: 하드 디스크 용량만 충분하다면, 몇 테라바이트(TB)의 문서도 인덱싱할 수 있습니다.

 

2. 실질적인 한계: 성능 (Performance)

사용자님께서 예상하신 것처럼, 파일의 양이 많아지면 응답 시간 지연이 발생하며, 이는 프로그램 사용 경험에 영향을 미치는 실질적인 한계가 됩니다.

인덱싱 시간 길어짐. 문서의 양이 많을수록 텍스트 분할(Chunking) 및 벡터화(Embedding)에 걸리는 시간이 선형적으로 증가합니다.
RAG 질의 속도 느려짐. 질문을 던졌을 때, ChromaDB는 전체 벡터 공간(수만~수십만 개의 청크)에서 가장 유사한 청크를 검색해야 합니다. 데이터셋이 클수록 검색 시간이 길어져 응답 속도가 지연됩니다.
메모리(RAM) 부하 증가. RAG App은 all-MiniLM-L6-v2 임베딩 모델을 사용하며, 이 모델은 쿼리나 인덱싱 시 RAM을 사용합니다. 수백만 개의 벡터를 검색하거나 관리할 때 RAM 사용량이 증가하여 컴퓨터의 반응이 느려질 수 있습니다.

 

3. 용량 관리에 대한 참고 사항 (벡터 임베딩)

벡터 데이터베이스에 저장되는 용량은 원본 텍스트 파일 크기보다 더 클 수 있습니다.

  • all-MiniLM-L6-v2 모델은 각 청크를 384차원 벡터로 변환합니다. 이 벡터 데이터는 텍스트 자체보다 공간을 더 많이 차지하는 경우가 많습니다.
  • 예를 들어, 1GB의 텍스트 파일을 인덱싱하면 벡터 데이터베이스는 1GB보다 훨씬 큰 공간(예: 2~4GB)을 차지할 수 있습니다.

 

📌 결론 및 권장 사항

  1. 제한은 하드 디스크 용량입니다. 소프트웨어적인 파일 개수 제한은 없으니 용량 걱정 없이 인덱싱을 진행하셔도 됩니다.
  2. 데이터 분리 관리 (권장): 수만 개의 문서를 하나의 컬렉션(예: "Common Sources")에 모두 넣기보다는, 현재 코드처럼 "Chapter 1", "Chapter 2" 등으로 나누어 관리하는 것이 좋습니다.
    • 질문할 때 관련된 컬렉션만 선택하면, 검색 대상이 좁혀져 RAG 질의 속도가 훨씬 빨라집니다.
  3. 성능 예측: 일반적인 PC 환경에서 수백만 개의 청크(Chunk)가 넘어가면 쿼리 응답 시간이 눈에 띄게 느려질 수 있다는 점을 염두에 두시는 것이 좋습니다.

 

3. 스샷

 
1. MacOS Sequoia


* 좌측 상단 웹브라우징 버튼, 혹은 그 아래 주소줄 입력으로 로고스 웹앱에 접속한 모습입니다. 이렇게 하면 로고스의 ai 검색 결과와 사용자의 개인 문서에 기반한 RAG 검색 결과를 비교, 통합하여 글쓰기를 할 수 있습니다.

 


2. Rocky Linux 10

 

 

* 코드 실행시 첫 화면입니다. Lmarena.ai 의 배틀 모드로 접속합니다. RAG 검색 및 프롬프트 입력은 이곳으로 인젝션됩니다. 해당 프롬프트, 혹은 로고스 검색 결과와 통합한 새로운 프롬프트를 복사/붙여넣어 새로운 질의를 할 수 있습니다. 컨트롤 판넬과 웹브라우징 창 사이에 커서가 조정 가능하도록 변합니다. 용도에 맞게 창 크기를 조절할 수 있습니다. 또한  컨트롤 판넬 우측의 스크롤바를 이동시켜 판넬의 끝 부분까지 갈 수 있습니다. 컬렉션이 많아지면, 이론적으로는 무제한, 컨트롤 판넬 부분이 세로로 엄청 길어지지만 그래도 마지막 부분까지 이동 가능합니다.  

 


3. 윈도우 11

 

 

* 코드 실행 후 좌측 컨트롤 판넬을 아래 끝까지 스크롤한 모습입니다.  코드 실행 시 가끔 메모리 덤프 메시지가 출력되고 실행되지 않는 경우가 있습니다. 이는 가상환경이 아닌 경우 발생하는 문제입니다. 반드시 가상환경으로 진입한 후 잠시 기다린 후 실행하면 됩니다. 
 

 

 

💻 OS별 가상 환경 활성화 및 실행 명령어

 

1. 윈도우 (Windows)

작업 PowerShell (권장) Command Prompt (CMD)
가상 환경 활성화 .\venv\Scripts\Activate.ps1 venv\Scripts\activate.bat
코드 실행 python lmarena_rag_app.py python lmarena_rag_app.py
비활성화 deactivate deactivate

 

 

2. 맥 (macOS) 및 리눅스 (Linux)

작업 명령어
가상 환경 활성화 source venv/bin/activate
코드 실행 python3 lmarena_rag_app.py
비활성화 deactivate