포스트

PaperDot: 같은 논문에 질문이 반복될 때 RAG가 다시 할 일

논문별 PDF와 검색 인덱스의 재사용, 요약 조회와 재생성 분기를 구현한 경험.

PaperDot: 같은 논문에 질문이 반복될 때 RAG가 다시 할 일

2024 · 팀 프로젝트 · AI·데이터 개발 담당
Python · FastAPI · LangChain · FAISS

PaperDot은 논문을 요약하고 논문에 관해 질문할 수 있는 서비스입니다. 저는 팀에서 AI·데이터 개발을 맡아 PDF 처리, 검색 기반 질의응답, 요약 생성 기능을 구현했습니다.

논문을 읽는 사용자는 같은 문서에 여러 질문을 이어서 던집니다. 질문은 달라져도 원문과 검색용 문서 벡터는 같을 수 있습니다. 이 사용 흐름에 맞춰 문서 준비와 매번 필요한 질문 처리를 구분했습니다.

문서 준비 결과를 논문별로 재사용

논문별 PDF와 FAISS 인덱스를 저장하고, 해당 인덱스의 존재 여부로 처리 경로를 나눴습니다.

상태수행하는 처리
준비된 인덱스가 없는 논문PDF 준비·분할·문서 임베딩·인덱스 저장 후 질문 처리
이미 인덱스가 있는 논문저장된 인덱스를 불러와 질문 처리
매번 들어오는 질문질문 벡터 계산·관련 내용 검색·답변 생성

후속 질문에서 문서 처리 전체를 반복하지 않도록 한 구조입니다. 질문 자체의 검색과 답변 생성은 여전히 요청마다 수행합니다. 재사용하는 단위가 무엇인지 구분해야 비용이나 응답 흐름을 정확하게 설명할 수 있습니다.

요약은 조회와 재생성을 구분

요약 기능에서는 기존 요약이 있고 재생성을 요청하지 않았다면 저장된 결과를 반환합니다. 요약이 없거나 명시적으로 재생성을 요청하면 생성 후 저장합니다.

사용자가 다시 열어 보는 행동과 새로운 결과를 요구하는 행동을 구분한 선택입니다. 이 처리 경로는 초기 구현부터 반영했습니다.

구현 근거

공개 저장소에서 팀 역할과 실제 분기를 확인할 수 있습니다.

적용 범위를 넓힐 때 남는 문제

문서가 수정되면 기존 인덱스를 언제 갱신할지, 여러 요청이 동시에 같은 논문을 준비하면 어떻게 조정할지는 별도 설계가 필요합니다. 이 구현을 문서 변경의 자동 감지나 동시 요청 제어까지 완성한 것으로 설명하지 않습니다.

이 경험으로 AI 서비스의 사용 흐름을 처리 단위로 나누는 기준을 쌓았습니다. 어떤 결과를 저장하고, 무엇을 다시 계산하며, 어떤 요청이 재생성을 뜻하는지 정하는 일이 서비스 설계의 일부가 되었습니다.

다른 프로젝트 보기

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.