Vespa는 완전한 기능을 갖춘 검색 엔진이자 vector database입니다. vector search(ANN), lexical search, 그리고 구조화된 데이터 검색을 모두 동일한 쿼리에서 지원합니다.이 노트북은
Vespa.ai를 LangChain vector store로 사용하는 방법을 보여줍니다.
이 integration을 사용하려면 pip install -qU langchain-community로 langchain-community를 설치해야 합니다
vector store를 생성하기 위해
pyvespa를 사용하여
Vespa 서비스에 대한 연결을 생성합니다.
pyvespa 패키지를 사용하여
Vespa Cloud instance
또는 로컬
Docker instance에
연결할 수 있습니다.
여기서는 새로운 Vespa application을 생성하고 Docker를 사용하여 배포합니다.
Vespa application 생성하기
먼저 application package를 생성해야 합니다:text와 embedding vector를 보관하는 embedding입니다. text field는 효율적인 텍스트 검색을 위해 BM25 index를 사용하도록 설정되며, 나중에 이것과 hybrid search를 사용하는 방법을 살펴보겠습니다.
embedding field는 텍스트의 embedding 표현을 보관하기 위해 길이 384의 vector로 설정됩니다. Vespa의 tensor에 대한 자세한 내용은
Vespa’s Tensor Guide를
참조하세요.
마지막으로 rank profile을 추가하여
Vespa에게 document를 정렬하는 방법을 지시합니다. 여기서는
nearest neighbor search로 설정합니다.
이제 이 application을 로컬에 배포할 수 있습니다:
Vespa 서비스에 대한 연결을 배포하고 생성합니다. 이미 실행 중인 Vespa application이 있는 경우(예: 클라우드에서), 연결 방법에 대해서는 PyVespa application을 참조하세요.
Vespa vector store 생성하기
이제 일부 document를 로드해 보겠습니다:1536으로 업데이트해야 합니다.
이것들을 Vespa에 공급하려면 vector store가 Vespa application의 field에 어떻게 매핑되어야 하는지 구성해야 합니다. 그런 다음 이 document 세트에서 직접 vector store를 생성합니다:
default ranking function을 사용합니다. similarity_search의 ranking 인수를 사용하여 사용할 ranking function을 지정할 수 있습니다.
자세한 내용은 pyvespa documentation을 참조하세요.
이것은 LangChain에서 Vespa store의 기본 사용법을 다룹니다.
이제 결과를 반환하고 LangChain에서 계속 사용할 수 있습니다.
Document 업데이트하기
from_documents를 호출하는 대신 vector store를 직접 생성하고 여기서 add_texts를 호출할 수 있습니다. 이것은 document를 업데이트하는 데에도 사용할 수 있습니다:
pyvespa 라이브러리에는 Vespa의 콘텐츠를 조작하는 메서드가 포함되어 있으며 이를 직접 사용할 수 있습니다.
Document 삭제하기
delete function을 사용하여 document를 삭제할 수 있습니다:
pyvespa 연결에는 document를 삭제하는 메서드도 포함되어 있습니다.
점수와 함께 반환하기
similarity_search 메서드는 관련성 순서로 document만 반환합니다. 실제 점수를 검색하려면:
"all-MiniLM-L6-v2" embedding model을 사용한 결과입니다(application function의 angular 인수로 제공됨).
다른 embedding function에는 다른 distance function이 필요하며, Vespa는 document를 정렬할 때 사용할 distance function을 알아야 합니다.
자세한 내용은
documentation on distance functions를 참조하세요.
Retriever로 사용하기
이 vector store를 LangChain retriever로 사용하려면 표준 vector store 메서드인as_retriever function을 호출하기만 하면 됩니다:
Metadata
지금까지의 예제에서는 텍스트와 해당 텍스트의 embedding만 사용했습니다. Document에는 일반적으로 추가 정보가 포함되어 있으며, LangChain에서는 이를 metadata라고 합니다. Vespa는 application package에 추가하여 다양한 타입의 많은 field를 포함할 수 있습니다:Custom query
similarity search의 기본 동작이 요구 사항에 맞지 않는 경우 항상 자체 쿼리를 제공할 수 있습니다. 따라서 vector store에 모든 구성을 제공할 필요 없이 직접 작성할 수 있습니다. 먼저 application에 BM25 ranking function을 추가해 보겠습니다:Hybrid search
Hybrid search는 BM25와 같은 기존 term 기반 검색과 vector search를 모두 사용하고 결과를 결합하는 것을 의미합니다. Vespa에서 hybrid search를 위한 새로운 rank profile을 생성해야 합니다:Vespa의 Native embedder
지금까지 텍스트에 대한 embedding을 제공하기 위해 Python의 embedding function을 사용했습니다. Vespa는 embedding function을 기본적으로 지원하므로 이 계산을 Vespa로 연기할 수 있습니다. 한 가지 이점은 대규모 컬렉션이 있는 경우 document를 embedding할 때 GPU를 사용할 수 있다는 것입니다. 자세한 내용은 Vespa embeddings를 참조하세요. 먼저 application package를 수정해야 합니다:hfembedding field에는 hf-embedder를 사용한 embedding 지침이 포함되어 있습니다.
이제 custom query로 쿼리할 수 있습니다:
embed 지침이 포함되어 있습니다.
Approximate nearest neighbor
위의 모든 예제에서는 결과를 찾기 위해 exact nearest neighbor를 사용했습니다. 그러나 대규모 document 컬렉션의 경우 최상의 일치 항목을 찾기 위해 모든 document를 스캔해야 하므로 실행 가능하지 않습니다. 이를 방지하기 위해 approximate nearest neighbors를 사용할 수 있습니다. 먼저 embedding field를 변경하여 HNSW index를 생성할 수 있습니다:approximate 인수를 True로 설정하여 ANN을 사용하여 쉽게 검색할 수 있습니다:
Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.