10차시. 벡터저장소 이해
6. 실습 ④ — 문서 추가와 삭제
출처: 원본 PDF 10차시_벡터저장소이해.pdf 13쪽 · 쪽 그림 13쪽
실무에서는 문서가 계속 늘어납니다. 매번 전체를 다시 만들 수는 없습니다.
6-1) 새 문서 추가하기
from prepare import prepare_chunks
store = get_store()
# 새로 들어온 문서만 조각내기
new_chunks = prepare_chunks("data/2026_개정약관.pdf")
# 기존 인덱스에 추가 (새 조각만 임베딩됨)
store.add_documents(new_chunks)
#⚠️ 반드시 다시 저장! 안 하면 메모리에서 사라집니다
store.save_local("faiss_index")
print(f"✓ {len(new_chunks)}개 조각 추가 완료")실행 결과 예시 (코드를 읽고 만든 예상 화면입니다. 실제 실행 결과, 특히 모델의 답은 다를 수 있습니다)
→ 저장된 인덱스를 불러옵니다 (비용 0)
✓ 2쪽 로딩 완료 (총 812자)
✓ 조각 11개 생성 (평균 81자, 최소 52자, 최대 99자)
✓ 11개 조각 추가 완료⚠️ save_local을 빼먹는 실수
add_documents는 메모리에만 추가합니다.
저장하지 않고 프로그램을 종료하면
추가한 내용이 전부 사라집니다.
그런데 실행 중에는 검색이 잘 되니까
"어? 아까는 됐는데?" 하며 한참 헤매게 됩니다.
👉
add_documents 다음 줄에는 항상 save_local
6-2) 문서 교체 — 가장 안전한 방법
🔄 수정된 문서를 반영하려면
FAISS는 부분 삭제가 까다롭습니다.
문서 내용이 바뀌었다면 이렇게 하세요.
방법 1 — 전체 재생성 (권장)
get_store(rebuild=True)
→ 확실하고 단순합니다
→ 문서가 많지 않다면 이게 최선입니다
방법 2 — 메타데이터 필터로 회피
구버전 조각에 version="old" 표시를 하고
검색할 때 제외합니다
→ 인덱스는 커지지만 재생성이 필요 없습니다
실무에서는 대개 "밤에 전체 재생성"을 씁니다.