Facebook AI Similarity Search (Faiss)는 밀집 벡터의 효율적인 유사도 검색 및 클러스터링을 위한 라이브러리입니다. RAM에 맞지 않을 수 있는 크기를 포함하여 모든 크기의 벡터 집합에서 검색하는 알고리즘을 포함합니다. 또한 평가 및 파라미터 튜닝을 위한 지원 코드도 포함되어 있습니다. The FAISS Library 논문을 참조하세요.Faiss documentation. 이 integration을 사용하려면
pip install -qU langchain-community로 langchain-community를 설치해야 합니다.
이 노트북은 asyncio를 사용하여 FAISS vector database와 관련된 기능을 사용하는 방법을 보여줍니다.
LangChain은 동기 및 비동기 vector store 함수를 구현했습니다.
동기 버전은 여기를 참조하세요.
OpenAIEmbeddings를 사용하려면 OpenAI API Key를 가져와야 합니다.
score를 포함한 유사도 검색
FAISS 전용 메서드가 몇 가지 있습니다. 그 중 하나는similarity_search_with_score로, 문서뿐만 아니라 쿼리와 문서 간의 거리 점수도 반환할 수 있습니다. 반환되는 거리 점수는 L2 거리입니다. 따라서 점수가 낮을수록 좋습니다.
similarity_search_by_vector를 사용하여 주어진 embedding 벡터와 유사한 문서를 검색하는 것도 가능합니다.
저장 및 로드
FAISS index를 저장하고 로드할 수도 있습니다. 이는 사용할 때마다 다시 생성할 필요가 없어 유용합니다.bytes로 직렬화 및 역직렬화
이 함수들을 사용하여 FAISS Index를 pickle할 수 있습니다. 90mb 크기의 embeddings 모델(sentence-transformers/all-MiniLM-L6-v2 또는 다른 모델)을 사용하는 경우, 결과 pickle 크기는 90mb 이상이 됩니다. 모델의 크기도 전체 크기에 포함됩니다. 이를 극복하려면 아래 함수를 사용하세요. 이 함수들은 FAISS index만 직렬화하므로 크기가 훨씬 작아집니다. SQL과 같은 데이터베이스에 index를 저장하려는 경우 유용할 수 있습니다.병합
두 개의 FAISS vectorstore를 병합할 수도 있습니다.필터링을 사용한 유사도 검색
FAISS vectorstore는 필터링도 지원할 수 있습니다. FAISS는 기본적으로 필터링을 지원하지 않으므로 수동으로 수행해야 합니다. 이는 먼저k보다 많은 결과를 가져온 다음 필터링하는 방식으로 수행됩니다. metadata를 기반으로 문서를 필터링할 수 있습니다. 또한 검색 메서드를 호출할 때 fetch_k 파라미터를 설정하여 필터링 전에 가져올 문서 수를 설정할 수 있습니다. 다음은 간단한 예제입니다:
page = 1만 필터링합니다.
max_marginal_relevance_search에서도 동일하게 수행할 수 있습니다.
similarity_search를 호출할 때 fetch_k 파라미터를 설정하는 방법의 예제입니다. 일반적으로 fetch_k 파라미터는 k 파라미터보다 훨씬 크게 설정하는 것이 좋습니다. fetch_k 파라미터는 필터링 전에 가져올 문서의 수이기 때문입니다. fetch_k를 낮은 숫자로 설정하면 필터링할 충분한 문서를 얻지 못할 수 있습니다.
$eq(같음)$neq(같지 않음)$gt(보다 큼)$lt(보다 작음)$gte(크거나 같음)$lte(작거나 같음)$in(리스트 내 포함)$nin(리스트 내 미포함)$and(모든 조건이 일치해야 함)$or(어떤 조건이든 일치해야 함)$not(조건의 부정)
삭제
id를 삭제할 수도 있습니다. 삭제할 id는 docstore의 id여야 합니다.Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.