TL;DR

  • RagIndex 0.2.3은 문서 인덱싱부터 컨텍스트 구성까지 브라우저에서 처리하는 클라이언트 전용 검색 증강 생성(RAG) 앱으로, 문서가 사용자 컴퓨터 밖으로 나가지 않음.
  • BM25와 Lunr.js로 문장을 검색한 뒤 모델이 후보의 관련성을 0~5점으로 평가해 순위를 조정하며, 임베딩이나 인덱스 변경이 필요하지 않음.
  • Child Chunks로 문장을 정밀하게 검색하고, Parent Chunks로 문단 전체를 AI에 전달해 맥락을 유지함.
  • 빌드 시스템이나 백엔드 없이 정적 웹 서버에서 실행하며, Gemini·Mistral·Groq·OpenRouter·HuggingFace API에 클라이언트에서 직접 연결함.
  • 문서 업로드와 인덱싱, AI 대화 시작, 대화 이어가기의 3단계 흐름을 제공하고, 모델 선택·테스트와 작업 중단 기능을 포함함.

RagIndex: 클라이언트 전용 검색 증강 생성

  • RagIndex 0.2.3은 사용자 브라우저에서 완전히 실행되는 RAG 웹 애플리케이션임.
  • 데이터가 클라이언트 밖으로 나가지 않아 개인정보 보호와 자율성을 보장함.
  • 기능과 기술 구현 소개는 static/ragindex.html에서 확인하며, 로컬 설치 안내는 static/installazione.html에 있음.
  • 프로젝트 코드는 git clone https://github.com/uaorg/ragindex.git으로 내려받거나 GitHub 페이지에서 ZIP 파일로 받을 수 있음.

빠른 설정

  • 순수 정적 애플리케이션이므로 Webpack이나 Vite 같은 복잡한 빌드 시스템과 백엔드가 필요하지 않음.
  • 프로젝트 루트에서 정적 웹 서버를 실행해야 하며, 예시로 python3 -m http.server, npx http-server ., VS Code의 Live Server 확장 기능이 제시됨.
  • 브라우저에서 로컬 루트 주소를 열면 index.html이 static/ragindex.html 소개 페이지로 자동 이동하며, 소개 페이지에서 앱이 있는 static/index.html로 이동할 수 있음.
  • 사이드 메뉴의 ‘API Keys Default’를 선택하면 로컬 파일에 저장된 기본 테스트 키를 불러오며, ‘Gestisci API Key’를 선택하면 Gemini, Mistral, Groq, OpenRouter, HuggingFace의 개인 키를 입력할 수 있음.
  • API 키는 브라우저의 IndexedDB에만 저장되며, AI 통신은 중간 서버 없이 사용자 컴퓨터에서 제공업체로 직접 이뤄짐.

주요 기능

  • 문서 처리의 인덱싱부터 컨텍스트 구성까지 모두 로컬에서 이뤄지며, 문서는 사용자 컴퓨터 밖으로 나가지 않음.
  • 계층형 Parent-Child 분할을 사용함.
  • Child Chunks: 개별 문장을 인덱싱해 정밀 검색에 활용함.
  • Parent Chunks: 전체 문단을 AI에 전달해 맥락을 유지함.
  • 순수 프런트엔드 애플리케이션으로, 클라이언트에서 LLM API를 직접 사용하며 백엔드 의존성이 없음.
  • BM25 어휘 검색은 Lunr.js를 활용해 브라우저에서 빠르고 안정적으로 인덱싱함.
  • BM25 검색 후 모델이 후보의 실제 관련성을 0~5점으로 평가해 컨텍스트 순서를 조정함. 동의어와 바꿔 쓴 표현은 순위가 올라가고, 어휘상 일치하지만 관련 없는 결과는 순위가 내려감.
  • 임베딩을 사용하지 않으며 인덱스를 변경하지 않음.

세 단계 작업 흐름

  • 앱은 번호가 붙은 버튼을 사용하는 세 단계 순차 흐름으로 설계됨.
  • (1) 지식 베이스 생성: PDF, TXT, DOCX 문서를 불러오고 버튼 (1)을 누르면 로컬 검색 인덱스를 생성함.
  • (2) 대화 시작: 질문을 입력하고 버튼 (2)을 누르면 관련 조각을 추출해 AI에 질문함.
  • (3) 대화 이어가기: 버튼 (3)을 눌러 대화를 이어가며, AI는 전체 대화 기록을 고려해 응답함.

LLM 모델 관리

  • LLM 초기화: 로컬 파일에 지정된 기본 모델 선택을 복원함.
  • LLM 업데이트: 사용자 키로 제공업체의 모델을 찾고 테스트한 뒤, 점수 6 이상인 모델을 선택 화면에 표시함.
  • LLM 선택: 내려받아 테스트한 모델만 표시함. 저장은 기존 선택을 대체하고, 추가는 기존 선택에 합침.
  • LLM 테스트: 선택한 제공업체의 모델에 프롬프트를 시험하고 최종 요약을 표시함.
  • STOP: 처리나 검색 중 대기 아이콘(STOP)을 눌러 진행 중인 작업을 중단함.

코드 아키텍처

  • UI 컨트롤러: static/js/app_ui.js — DOM 및 이벤트 관리.
  • RAG 엔진: static/js/rag_engine.js — RAG 흐름 조정.
  • 워커: static/js/rag_worker.js — 집중 연산을 백그라운드에서 처리.
  • LLM 클라이언트: static/js/llmclient/ — Gemini, Mistral, Groq, OpenRouter, HuggingFace의 5개 제공업체 지원.
  • 로컬 데이터베이스: static/js/services/idb_mgr.js — Dexie.js를 통한 데이터 지속성 관리. 원문에는 이 항목이 두 번 기재됨.
  • 테스트: static/test_providers.html은 메뉴 ☰의 ‘Test Provider’를 통해 브라우저에서 실행하거나 페이지를 직접 열어 실행함. test/test_providers.js는 Node.js에서 실행되며 test/providers_report.html에 HTML 보고서를 생성함.
  • 두 테스트 모두 static/data/api_x.json의 키를 사용해 설정된 모든 제공업체와 모델을 테스트함.

프로젝트 방향

  • RagIndex는 클라이언트 측 AI의 개인정보 보호와 효율성에 초점을 둔 프로젝트임.