I Ditched Vector Search for My Coding Agent's Memory. FTS5 Won.
개요
코딩 에이전트의 메모리 검색에 벡터 검색 대신 SQLite의 FTS5 전체 텍스트 검색을 사용하여 성능 및 비용 효율성을 개선한 사례를 소개합니다.
주요 내용
- 기존 벡터 검색 방식의 한계: 대부분의 "에이전트 메모리" 튜토리얼은 문서 분할, 임베딩, 벡터 데이터베이스 저장, 코사인 유사도 검색을 사용하지만, 이는 코딩 에이전트의 툴 출력, git 로그, API 응답 등을 검색하는 데 있어 불필요한 복잡성과 비효율성을 초래할 수 있습니다.
- 코딩 에이전트 검색의 특성: 코딩 에이전트의 검색은 "failing tests", "HTTP 500 errors", "async route handlers"와 같이 특정 키워드 및 오류 코드에 대한 정확한 일치를 요구하는 경우가 많습니다. 이러한 검색은 문맥적 유사성보다는 키워드 기반의 정확한 매칭이 중요합니다.
- FTS5의 장점: SQLite의 FTS5는 별도의 임베딩 모델이나 벡터 데이터베이스 없이 SQL 표준 라이브러리를 사용하여 전체 텍스트 검색 기능을 제공합니다. BM25와 같은 관련성 점수 지정, 토큰화된 인덱싱, 정확하고 근접한 용어 매칭에 최적화되어 있습니다.
- FTS5 적용 사례:
CREATE VIRTUAL TABLE을 사용하여docs테이블을 생성하고,INSERT로 소스 및 내용을 인덱싱하며,MATCH절과snippet()함수를 사용하여 검색합니다. 이를 통해 "HTTP 500 errors"와 같은 쿼리에 대해 가장 관련성 높은 실제 로그 라인을 효율적으로 반환할 수 있습니다. - 벡터 검색과 FTS5의 적합성 비교:
- 벡터 검색: 일반적인 텍스트 문서, 지원 티켓, 채팅 기록 등 의미론적 유사성이 중요한 검색에 적합합니다.
- FTS5: 스택 트레이스, 로그 라인, JSON 키, 오류 코드 등 키워드 밀도가 높고 구조화된 콘텐츠 검색에 더 효과적이며, 비용 효율적입니다.
- 결론: 코딩 에이전트의 툴 출력, 오류 로그, API 응답과 같이 키워드 기반의 정확한 검색이 중요한 경우에는 벡터 검색보다 FTS5와 같은 전체 텍스트 검색이 더 나은 성능과 비용 효율성을 제공합니다.
시사점
코딩 에이전트의 메모리 검색 시, 검색 대상 콘텐츠와 쿼리의 특성을 면밀히 분석하여 벡터 검색이 반드시 필요한지 판단하고, 키워드 기반의 정확한 매칭이 더 중요하다면 FTS5와 같은 전체 텍스트 검색 엔진을 활용하는 것이 효과적입니다.
원문을 불러오는 중...
댓글
GitHub Discussions