langchain-weaviate 패키지를 사용하여 LangChain에서 Weaviate vector store를 시작하는 방법을 다룹니다.
Weaviate는 오픈소스 vector database입니다. 좋아하는 ML 모델의 데이터 객체와 vector embedding을 저장하고, 수십억 개의 데이터 객체로 원활하게 확장할 수 있습니다.이 통합을 사용하려면 실행 중인 Weaviate database 인스턴스가 필요합니다.
최소 버전
이 모듈은 Weaviate1.23.7 이상이 필요합니다. 그러나 최신 버전의 Weaviate를 사용하는 것을 권장합니다.
Weaviate에 연결하기
이 노트북에서는http://localhost:8080에서 실행 중인 로컬 인스턴스가 있고 gRPC traffic을 위해 포트 50051이 열려 있다고 가정합니다. 따라서 다음과 같이 Weaviate에 연결합니다:
기타 배포 옵션
Weaviate는 Weaviate Cloud Services (WCS), Docker 또는 Kubernetes를 사용하는 등 다양한 방식으로 배포할 수 있습니다. Weaviate 인스턴스가 다른 방식으로 배포된 경우, Weaviate에 연결하는 다양한 방법에 대해 여기에서 자세히 읽어보세요. 다양한 helper 함수를 사용하거나 custom 인스턴스를 생성할 수 있습니다.weaviate.WeaviateClient객체를 생성하는v4client API가 필요합니다.
인증
WCS에서 실행되는 인스턴스와 같은 일부 Weaviate 인스턴스는 API key 및/또는 username+password 인증과 같은 인증이 활성화되어 있습니다. 자세한 내용은 client 인증 가이드와 심층 인증 구성 페이지를 참조하세요.기존 collection에 연결하기 (index 재사용)
로컬 Weaviate 인스턴스에 이미 collection을 생성한 경우 직접 연결할 수 있습니다:설치
환경 설정
이 노트북은OpenAIEmbeddings를 통해 OpenAI API를 사용합니다. OpenAI API key를 얻어 OPENAI_API_KEY라는 이름의 환경 변수로 export하는 것을 권장합니다.
이 작업이 완료되면 OpenAI API key가 자동으로 읽힙니다. 환경 변수가 처음이라면 여기 또는 이 가이드에서 자세히 읽어보세요.
사용법
유사도로 객체 찾기
다음은 데이터 import부터 Weaviate 인스턴스 쿼리까지 query와의 유사도로 객체를 찾는 방법의 예시입니다.1단계: 데이터 import
먼저, 긴 텍스트 파일의 내용을 로드하고 청크로 나누어Weaviate에 추가할 데이터를 생성합니다.
weaviate_client 객체를 사용합니다. 예를 들어, 아래와 같이 문서를 import할 수 있습니다:
2단계: 검색 수행
이제 유사도 검색을 수행할 수 있습니다. 이는 Weaviate에 저장된 embedding과 query 텍스트에서 생성된 동등한 embedding을 기반으로 query 텍스트와 가장 유사한 문서를 반환합니다.k를 제공하는 것도 가능합니다.
결과 유사도 정량화
선택적으로 관련성 “score”를 검색할 수 있습니다. 이는 검색 결과 풀 중에서 특정 검색 결과가 얼마나 좋은지를 나타내는 상대적 점수입니다. 이것은 상대적 점수이므로 관련성 임계값을 결정하는 데 사용해서는 안 됩니다. 그러나 전체 검색 결과 세트 내에서 서로 다른 검색 결과의 관련성을 비교하는 데 사용할 수 있습니다.검색 메커니즘
similarity_search는 Weaviate의 hybrid search를 사용합니다.
hybrid search는 vector 검색과 keyword 검색을 결합하며, alpha는 vector 검색의 가중치입니다. similarity_search 함수를 사용하면 kwargs로 추가 인수를 전달할 수 있습니다. 사용 가능한 인수는 이 참조 문서를 참조하세요.
따라서 아래와 같이 alpha=0을 추가하여 순수 keyword 검색을 수행할 수 있습니다:
지속성
langchain-weaviate를 통해 추가된 모든 데이터는 구성에 따라 Weaviate에 지속됩니다.
예를 들어 WCS 인스턴스는 데이터를 무기한 지속하도록 구성되어 있으며, Docker 인스턴스는 volume에 데이터를 지속하도록 설정할 수 있습니다. Weaviate의 지속성에 대해 자세히 읽어보세요.
Multi-tenancy
Multi-tenancy를 사용하면 단일 Weaviate 인스턴스에서 동일한 collection 구성으로 많은 수의 격리된 데이터 collection을 가질 수 있습니다. 이는 각 최종 사용자가 자신의 격리된 데이터 collection을 갖는 SaaS 앱 구축과 같은 다중 사용자 환경에 적합합니다. multi-tenancy를 사용하려면 vector store가tenant 매개변수를 인식해야 합니다.
따라서 데이터를 추가할 때 아래와 같이 tenant 매개변수를 제공하세요.
tenant 매개변수를 제공하세요.
Retriever 옵션
Weaviate는 retriever로도 사용할 수 있습니다Maximal marginal relevance search (MMR)
retriever 객체에서 similaritysearch를 사용하는 것 외에도mmr을 사용할 수 있습니다.
LangChain과 함께 사용하기
대규모 언어 모델(LLM)의 알려진 한계는 학습 데이터가 오래되었거나 필요한 특정 도메인 지식을 포함하지 않을 수 있다는 것입니다. 아래 예시를 살펴보세요:- Question answering
- Retrieval-augmented generation (RAG)
출처가 있는 Question Answering
langchain의 question answering은 vector store를 사용하여 향상될 수 있습니다. 이것이 어떻게 수행되는지 살펴보겠습니다. 이 섹션은 Index에서 문서를 조회하는RetrievalQAWithSourcesChain을 사용합니다.
먼저, 텍스트를 다시 청크로 나누고 Weaviate vector store로 import합니다.
Retrieval-Augmented Generation
LLM과 vector store를 결합하는 또 다른 매우 인기 있는 애플리케이션은 retrieval-augmented generation (RAG)입니다. 이는 retriever를 사용하여 vector store에서 관련 정보를 찾은 다음 LLM을 사용하여 검색된 데이터와 prompt를 기반으로 출력을 제공하는 기술입니다. 유사한 설정으로 시작합니다:마무리 및 리소스
Weaviate는 확장 가능하고 프로덕션 준비가 완료된 vector store입니다. 이 통합을 통해 Weaviate를 LangChain과 함께 사용하여 강력한 데이터 저장소로 대규모 언어 모델의 기능을 향상시킬 수 있습니다. 확장성과 프로덕션 준비 상태는 LangChain 애플리케이션의 vector store로 훌륭한 선택이 되며, 프로덕션까지의 시간을 단축할 수 있습니다.Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.