TL;DR

  • Markdown 문서 폴더를 대상으로 청킹부터 답변 생성까지 모든 단계를 로컬에서 처리하는 순수 PHP RAG 참조 구현임.
  • ai-toolkit의 재귀 청커가 문단 경계를 우선 보존하고, 각 청크에 원본 경로와 제목 경로 메타데이터를 연결함.
  • Qwen3-Embedding-0.6B-Q8_0.gguf와 1024차원 4비트 양자화 인덱스로 문서를 색인하며, 검색은 네트워크 연결 없이 한 자릿수 밀리초 단위로 수행됨.
  • 검색된 상위 5개 청크를 문맥으로 제공하고, 온도 0, 출처 인용, 답을 모를 때 이를 밝히는 지침으로 답변을 근거에 고정함.
  • 1B 미만 모델도 제공된 문맥을 읽고 종합하는 작업에 활용할 수 있으며, 더 강한 생성 모델로 바꾸더라도 검색은 로컬과 비공개 상태로 유지됨.

Markdown 문서에 질문하기

  • 검색 증강 생성(RAG)은 질문과 관련된 문서를 찾아 프롬프트에 넣고, 모델이 그 문서를 바탕으로 답하게 하는 방식임.
  • 관련 데이터 원천은 자체 문서, 위키, 지식 베이스이며, 응답에는 학습 데이터로 만든 환각 대신 직접적인 출처 인용을 제공하는 방식임.
  • rag-over-markdown은 Markdown 파일 폴더를 대상으로 이 과정을 구현한 참조 구현이며, 임베딩과 생성에는 ext-infer, 검색에는 ext-turbovec, 연결에는 ai-toolkit을 사용함. 모든 단계가 로컬에서 실행됨.

1단계: 청킹

  • 문서 전체를 하나의 벡터로 임베딩하면 여러 주제가 평균화되어 어느 주제와도 잘 맞지 않을 수 있음.
  • 문서 모음은 ai-toolkit의 재귀 청커로 나뉘며, 문단 경계를 먼저 사용하고 섹션이 지나치게 길 때만 문장 및 문자 단위로 나누는 방식임.
  • Markdown의 제목과 문단 구조 덕분에 경계가 명확하게 나뉘며, 각 청크에는 인용 구성을 위한 원본 파일 경로와 제목 경로가 메타데이터로 보존됨.

2단계: 임베딩 및 색인

  • ext-infer에서 models/Qwen3-Embedding-0.6B-Q8_0.gguf 임베딩 모델을 불러오고, 차원 1024, 비트 폭 4인 IdMapIndex를 구성함.
  • 각 청크의 텍스트를 임베딩한 뒤 벡터를 패킹해 청크 ID와 함께 색인에 추가하고, 결과를 corpus.tvim에 저장함.
  • 색인은 한 번 또는 변경 시 배치 작업으로 생성하며, 저장된 색인은 이후 즉시 불러옴. 청크 ID는 텍스트와 메타데이터를 담은 별도 테이블의 항목에 대응함.

3단계: 검색

  • 질문을 동일한 임베딩 모델로 벡터화한 뒤 색인에서 상위 5개 결과를 검색하고, 반환된 ID를 이용해 청크 저장소에서 텍스트를 가져옴.
  • 양자화된 색인을 대상으로 한 검색은 네트워크 연결 없이 한 자릿수 밀리초 단위로 수행됨.

4단계: 근거에 기반한 생성

  • 검색된 청크를 문맥으로 프롬프트에 넣고, 제공된 문맥만 사용해 답하며 파일 경로로 출처를 인용하고 문맥에 답이 없으면 그렇다고 밝히도록 지시함.
  • 생성 설정은 최대 토큰 512개, 온도 0.0임.
  • 세 가지 설정이 답변을 근거에 고정함.
  • 온도 0은 창의성보다 결정성이 필요한 근거 기반 질의응답에 적용됨.
  • 검색 결과가 답을 뒷받침하지 못하면 답을 모른다고 밝히도록 함으로써 확신에 찬 조작 답변보다 미응답을 우선함.
  • 1단계에서 연결한 메타데이터를 바탕으로 모델이 출처를 인용하므로, 각 답변을 원본 파일에서 확인할 수 있음.

소형 모델이 할 수 있는 일과 할 수 없는 일

  • 1B 미만 생성 모델은 최첨단 대화형 챗봇이 아님.
  • RAG를 사용하면 모델이 모든 내용을 미리 알고 있을 필요 없이 관련 문단 다섯 개를 읽고 그 내용에서 답을 종합하면 됨.
  • 제공된 문맥을 읽고 이해하는 작업은 소형 모델이 규모 이상의 성능을 보일 수 있는 영역이며, 생성 모델의 크기보다 검색 품질이 더 중요함.
  • 더 강한 종합 능력이 필요하면 ai-contracts를 사용해 생성기를 더 큰 로컬 모델이나 클라우드 모델로 교체할 수 있음. 이 경우에도 검색은 로컬에서 비공개로 유지되며, 최종 생성 단계가 클라우드에서 이루어지더라도 문서 모음은 기기 밖으로 나가지 않음.

다음 단계

  • 이 파이프라인은 이미 텍스트로 된 자료를 처리함.
  • 다음에는 몇 시간 분량의 오디오를 입력으로 다루는 방향을 제시함.