Xata x LangChain: new vector store and memory store integrations
Quick Summary
Xata와 LangChain은 PostgreSQL·Elasticsearch 기반 Xata를 Python 및 TypeScript/JavaScript용 벡터 저장소와 대화 메모리 저장소로 연결하는 4개 통합을 공개하고, 후속 질문을 처리하는 대화형 Q&A 구현을 제시했다.
🖼️ 인포그래픽

🖼️ 4컷 인포그래픽

💡 한 줄 요약
Xata와 LangChain은 PostgreSQL·Elasticsearch 기반 Xata를 Python 및 TypeScript/JavaScript용 벡터 저장소와 대화 메모리 저장소로 연결하는 4개 통합을 공개하고, 후속 질문을 처리하는 대화형 Q&A 구현을 제시했다.
📌 핵심 요약
- Xata는 원본 데이터를 PostgreSQL에 저장하고 Elasticsearch로 자동 복제해 ACID 트랜잭션·조인·제약 조건과 BM25 전문 검색·벡터 검색·하이브리드 검색을 하나의 서버리스 API로 제공한다.
- 공개된 4개 통합은 LangChain과 LangChain.js에서 각각 Xata를 벡터 저장소와 메모리 저장소로 사용하는 Python 및 TypeScript/JavaScript 연동이다.
- 벡터 저장소 연동은 문서와 임베딩을 Xata의 docs 테이블에 저장하고 벡터 검색을 수행하며, Xata 열로 표현된 메타데이터를 이용한 필터링도 지원한다.
- 메모리 저장소 연동은 대화 메시지를 Xata의 memory 테이블에 저장하고 세션 ID로 이전 메시지를 불러와 후속 질문에서 대화 문맥을 유지한다.
- TypeScript 예제는 OpenAIEmbeddings, XataVectorSearch, XataChatMessageHistory, ChatOpenAI, ConversationalRetrievalQAChain을 결합하며, 유사한 Python 구현은 Jupyter 노트북으로 제공된다.
🧩 주요 포인트
- PostgreSQL의 정합성 기능과 Elasticsearch의 검색 기능을 동일한 Xata API로 제공한다는 사실은 AI 애플리케이션이 트랜잭션 데이터와 검색 데이터를 하나의 플랫폼에서 다룰 수 있음을 의미한다.
- LangChain과 LangChain.js에 벡터·메모리 역할별 4개 통합이 제공된다는 사실은 Python과 TypeScript/JavaScript에서 검색 기반 응답과 지속적인 대화 문맥을 함께 구성할 수 있음을 보여준다.
- docs 테이블의 문서 검색과 memory 테이블의 세션 ID 기반 이력을 ConversationalRetrievalQAChain으로 연결한 구조는 데이터 기반 답변 뒤에도 후속 질문의 맥락을 이어 가는 대화형 Q&A를 가능하게 한다.
🧠 상세 정리
1. Xata와 LangChain의 통합 공개
이 글은 Xata 팀과 LangChain 팀이 공동으로 작성했으며, 2023년 8월 29일 Xata 출시 주간에 맞춰 최근 LangChain 저장소에 병합된 4개 통합을 소개한다. 핵심 목적은 Xata가 AI 애플리케이션의 데이터 기반으로 적합한 이유를 설명하고, 벡터 저장소와 메모리 저장소를 하나의 예제에서 함께 사용하는 방법을 보여주는 것이다. 예제는 Xata 데이터베이스의 정보를 검색해 질문에 답하고, 대화 기록을 장기 메모리로 저장해 후속 질문까지 처리하는 대화형 Q&A 챗봇이다. 각 통합 문서에는 최소 하나의 코드 예제가 있으며, 본문은 그보다 복잡한 TypeScript 구현을 중심으로 설명하고 같은 용도의 Python Jupyter 노트북도 안내한다.
2. PostgreSQL과 Elasticsearch를 결합한 Xata
Xata는 원본 데이터를 PostgreSQL에 보관하면서 해당 데이터를 Elasticsearch로 자동 복제하는 데이터베이스 플랫폼이다. 이를 통해 PostgreSQL의 ACID 트랜잭션, 조인, 제약 조건과 Elasticsearch의 BM25 전문 검색, 벡터 검색, 하이브리드 검색을 동일한 서버리스 API 뒤에서 제공한다. 글은 이러한 구성이 다수의 AI 애플리케이션에 필요한 데이터 및 검색 기능을 포괄하며, PostgreSQL과 Elasticsearch를 기반으로 신뢰성과 확장성을 갖춘다고 설명한다. Xata는 TypeScript/JavaScript와 Python용 클라이언트 SDK를 제공하고 GitHub, Vercel, Netlify와도 통합되며, OpenAI를 활용한 데이터 기반 ChatGPT 용도의 연동도 제공한다.
3. 벡터 저장소와 메모리 저장소 4개 통합
공개된 통합은 Python용 LangChain과 TypeScript/JavaScript용 LangChain.js에 각각 벡터 저장소와 메모리 저장소를 연결하는 총 4개 구성이다. Python 벡터 연동은 문서와 임베딩을 Xata 테이블에 저장하고 벡터 검색을 수행하며, 새로 정식 제공된 Python SDK를 활용한다. 메타데이터는 Xata의 열로 표현되어 필터링에 사용할 수 있고, LangChain.js 벡터 연동도 같은 기능을 TypeScript/JavaScript 애플리케이션에 제공한다. 메모리 연동은 AI 채팅 세션의 메시지 이력을 Xata에 저장해 LLM 애플리케이션의 대화 메모리로 사용하며, 이 역시 LangChain과 LangChain.js 양쪽에 제공된다. 향후에는 Xata 키워드 검색과 하이브리드 검색을 위한 사용자 정의 검색기와 Xata Ask AI 엔드포인트 연동을 추가할 계획이라고 밝혔다.
4. 문서 임베딩과 벡터 검색 구성
TypeScript 예제는 XataVectorSearch에 OpenAIEmbeddings, Xata 클라이언트, docs 테이블을 전달해 벡터 저장소를 생성한다. 이후 PostgreSQL 기반 서버리스 데이터 플랫폼, 내장 벡터 유형, 유사도 검색에 관한 세 개의 샘플 문서를 추가하고 생성된 문서 ID를 보관한다. 예제 코드에는 문서를 추가한 뒤 2초 동안 기다리는 단계도 포함되어 있으며, 실제 애플리케이션에서는 수만 개의 문서를 색인할 수 있다고 설명한다. 이 문서들은 챗봇이 사용자 질문에 대한 답을 찾을 때 검색하는 자료가 되고, 본문 코드에는 나타나지 않지만 사용자 정의 메타데이터 열도 추가할 수 있다. Xata UI에서는 docs 테이블에 문서 내용이 담긴 content 열과 vector 유형의 embedding 열이 생성된 모습을 확인할 수 있다.
5. 세션 메모리와 대화형 Q&A 체인
대화 메모리는 BufferMemory와 XataChatMessageHistory를 이용해 memory 테이블에 구성하며, 각 대화에는 고유한 세션 ID가 부여된다. 예제는 현재 시각의 문자열을 세션 ID로 사용하고 createTable을 false로 설정하며, 저장된 이전 메시지를 세션별로 다시 불러와 대화 문맥이 사라지지 않도록 한다. 답변 모델로는 ChatOpenAI를 초기화하고, 이를 Xata 벡터 저장소의 검색기 및 메모리와 함께 ConversationalRetrievalQAChain에 연결한다. 코드는 먼저 Xata가 무엇인지 질문한 다음 벡터 검색 가능 여부를 후속 질문으로 전달해 앞선 대화를 활용하는 흐름을 보여준다. 실행을 마치면 저장했던 문서 ID를 이용해 벡터 데이터를 삭제하고 memory.clear를 호출해 대화 메모리도 비운다.
6. 저장 결과와 후속 확장
예제가 실행되는 동안 Xata UI에는 docs와 memory라는 두 테이블이 나타나며, 두 저장소의 역할이 데이터 구조로 구분된다. docs 테이블에는 질문 답변의 근거가 되는 문서 내용과 벡터 임베딩이 저장되고, memory 테이블에는 사용자와 AI가 주고받은 질문과 답변이 축적된다. 글은 전체 코드를 LangChain과 Xata 애플리케이션의 시작점으로 사용할 수 있는 저장소에서 제공하고, Python 사용자를 위한 별도의 Jupyter 노트북도 연결한다. 출시 주간에는 애플리케이션 제작, 블로그 작성, 동영상 녹화 등에 참여해 상품을 받을 수 있는 콘텐츠 해커톤도 진행하며, 구현 관련 질문과 아이디어는 Discord 또는 Twitter를 통해 공유할 수 있다고 안내한다.
🧾 핵심 주장 / 시사점
- Xata가 PostgreSQL 원본 데이터와 Elasticsearch 검색 복제본을 하나의 API로 묶은 구조는 정형 데이터 처리와 검색 기반 AI 응답을 동일한 데이터 플랫폼에서 연결한다.
- 벡터 검색과 세션별 대화 메모리를 함께 제공하는 구성은 단발성 문서 검색을 넘어 이전 문맥을 반영하는 후속 질문 처리까지 지원한다.
- 동일한 벡터·메모리 기능을 Python과 TypeScript/JavaScript에 각각 제공함으로써 LangChain과 LangChain.js에서 공통된 대화형 Q&A 구조를 구현할 수 있다.
✅ 액션 아이템
- Xata와 LangChain의 4개 통합 가운데 Python 또는 TypeScript/JavaScript 환경에 맞는 벡터·메모리 조합 검토.
- docs 테이블의 문서 검색과 memory 테이블의 세션 ID 기반 문맥 유지 구조 확인.
- OpenAIEmbeddings, XataVectorSearch, XataChatMessageHistory, ChatOpenAI, ConversationalRetrievalQAChain 연결을 통한 대화형 Q&A 동작 검증.
❓ 열린 질문
- Xata의 PostgreSQL·Elasticsearch 결합이 대상 대화형 Q&A의 트랜잭션 및 검색 요구를 모두 충족하는가?
- Python과 TypeScript/JavaScript 중 Xata와 LangChain의 4개 통합을 적용할 언어는 무엇인가?
- memory 테이블의 세션 ID 기반 대화 메모리가 후속 질문에 필요한 문맥을 충분히 유지하는가?