PaperDot: 같은 논문에 질문이 반복될 때 RAG가 다시 할 일
논문별 PDF와 검색 인덱스의 재사용, 요약 조회와 재생성 분기를 구현한 경험.
2024 · 팀 프로젝트 · AI·데이터 개발 담당
Python · FastAPI · LangChain · FAISS
PaperDot은 논문을 요약하고 논문에 관해 질문할 수 있는 서비스입니다. 저는 팀에서 AI·데이터 개발을 맡아 PDF 처리, 검색 기반 질의응답, 요약 생성 기능을 구현했습니다.
논문을 읽는 사용자는 같은 문서에 여러 질문을 이어서 던집니다. 질문은 달라져도 원문과 검색용 문서 벡터는 같을 수 있습니다. 이 사용 흐름에 맞춰 문서 준비와 매번 필요한 질문 처리를 구분했습니다.
문서 준비 결과를 논문별로 재사용
논문별 PDF와 FAISS 인덱스를 저장하고, 해당 인덱스의 존재 여부로 처리 경로를 나눴습니다.
| 상태 | 수행하는 처리 |
|---|---|
| 준비된 인덱스가 없는 논문 | PDF 준비·분할·문서 임베딩·인덱스 저장 후 질문 처리 |
| 이미 인덱스가 있는 논문 | 저장된 인덱스를 불러와 질문 처리 |
| 매번 들어오는 질문 | 질문 벡터 계산·관련 내용 검색·답변 생성 |
후속 질문에서 문서 처리 전체를 반복하지 않도록 한 구조입니다. 질문 자체의 검색과 답변 생성은 여전히 요청마다 수행합니다. 재사용하는 단위가 무엇인지 구분해야 비용이나 응답 흐름을 정확하게 설명할 수 있습니다.
요약은 조회와 재생성을 구분
요약 기능에서는 기존 요약이 있고 재생성을 요청하지 않았다면 저장된 결과를 반환합니다. 요약이 없거나 명시적으로 재생성을 요청하면 생성 후 저장합니다.
사용자가 다시 열어 보는 행동과 새로운 결과를 요구하는 행동을 구분한 선택입니다. 이 처리 경로는 초기 구현부터 반영했습니다.
구현 근거
공개 저장소에서 팀 역할과 실제 분기를 확인할 수 있습니다.
적용 범위를 넓힐 때 남는 문제
문서가 수정되면 기존 인덱스를 언제 갱신할지, 여러 요청이 동시에 같은 논문을 준비하면 어떻게 조정할지는 별도 설계가 필요합니다. 이 구현을 문서 변경의 자동 감지나 동시 요청 제어까지 완성한 것으로 설명하지 않습니다.
이 경험으로 AI 서비스의 사용 흐름을 처리 단위로 나누는 기준을 쌓았습니다. 어떤 결과를 저장하고, 무엇을 다시 계산하며, 어떤 요청이 재생성을 뜻하는지 정하는 일이 서비스 설계의 일부가 되었습니다.