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를 사용해 생성기를 더 큰 로컬 모델이나 클라우드 모델로 교체할 수 있음. 이 경우에도 검색은 로컬에서 비공개로 유지되며, 최종 생성 단계가 클라우드에서 이루어지더라도 문서 모음은 기기 밖으로 나가지 않음.
다음 단계
- 이 파이프라인은 이미 텍스트로 된 자료를 처리함.
- 다음에는 몇 시간 분량의 오디오를 입력으로 다루는 방향을 제시함.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요