벡터 DB 연동은 RAG와 사내 AI 검색을 서비스에 붙이는 표준 경로입니다. 문서를 임베딩해 두고 질의와 가까운 청크를 꺼내 모델에 넘기면, 학습 시점 이후 자료와 비공개 문서를 근거로 답할 수 있습니다.
품질은 Pinecone·Weaviate·Chroma 이름보다 청크 전략, 임베딩 모델, 권한과 갱신에 더 많이 갈립니다. 선택 기준부터 프레임워크 연동, ChatGPT·Claude·Gemini 연결, 운영 점검까지 이어서 봅니다. 운영 중에 권한 필터가 빠지면 검색 품질보다 먼저 사고가 납니다.
벡터 DB가 AI 연동에서 하는 역할과 선택 기준

벡터 DB는 임베딩을 보관하고 질의 벡터와 가까운 문장 조각을 돌려주는 저장소입니다. RAG는 그 조각을 프롬프트에 붙여 ChatGPT·Claude·Gemini가 근거를 보고 답하게 합니다. 검색 품질은 엔진 이름만으로 정해지지 않습니다.
Pinecone은 클러스터를 직접 운영하지 않는 완전 관리형 클라우드입니다. Weaviate와 Chroma는 오픈소스로 셀프호스팅이 가능하고, Weaviate는 벡터 유사도와 BM25를 결합한 하이브리드 검색과 내장 벡터화 모듈을 제공합니다. 트래픽과 보안 요구에 맞춰 고르시면 됩니다.
| 구분 | Pinecone | Weaviate | Chroma |
|---|---|---|---|
| 운영 형태 | 완전 관리형 클라우드 | 오픈소스 셀프호스트 가능 | 오픈소스 셀프호스트 가능 |
| 검색 기능 | 벡터 검색 중심 | 벡터와 BM25 하이브리드, 내장 벡터화 | 벡터 검색, 로컬 검증에 자주 사용 |
| 고르는 때 | 인프라 운영을 줄일 때 | 키워드 결합과 모듈이 필요할 때 | 개발 초기에 빠르게 붙여 볼 때 |
임베딩 모델과 청크 전략을 맞추는 연동 설계
(출처: 온톡 Onto-K)
RAG 품질은 벡터 DB나 임베딩 모델 선택만큼, 저장 전에 청크를 어떻게 나누는지에 크게 좌우됩니다. Weaviate는 검색이 질의 임베딩과 청크 임베딩을 비교하므로 데이터 준비가 성능의 핵심이라고 설명합니다.
사전 청킹은 조각을 미리 나눠 벡터 DB에 넣고, 사후 청킹은 문서 단위로 임베딩한 뒤 질의 시점에 나눕니다. 사전 청킹은 조회가 빠르고, 사후 청킹은 실제로 꺼낸 문서만 나눠 첫 접근 비용을 줄입니다. 임베딩 모델의 토큰 한도를 청크 크기 상한으로 잡으시면 됩니다.
문서 분할 단위와 메타데이터
분할 단위는 문단이나 소제목 블록을 기본으로 두고, 표와 코드는 의미를 깨지 않게 한 덩어리로 유지합니다. 청크마다 출처 URL, 문서 버전, 공개 범위 같은 메타데이터를 붙이면 필터와 인용에 바로 쓸 수 있습니다. 필터 키를 처음부터 통일해 두지 않으면 나중에 권한 조건을 넣기 어렵습니다.
청크 겹침은 보통 크기 대비 10~20%를 출발점으로 씁니다. 겹침이 너무 작으면 문장 경계에서 맥락이 잘리고, 너무 크면 저장량과 임베딩 비용이 늘어납니다. 도메인 용어가 많은 매뉴얼은 조금 더 겹치게 시험해 보시면 됩니다.
유사도 검색 품질을 올리는 팁
같은 내용을 질문 말투와 설명 말투로 나눠 넣어 보면, 짧은 질의에도 관련 청크가 잘 올라옵니다. 임베딩 모델은 문서 언어와 도메인에 맞는 것을 고르고, 인덱싱과 질의에 같은 모델을 쓰셔야 합니다. 질의와 문서에 서로 다른 모델을 쓰면 가까운 청크가 밀려납니다.
하이브리드 검색은 고유명사와 오류 코드처럼 벡터만으로 놓치기 쉬운 토큰을 BM25가 보완합니다. 상위 k를 너무 크게 잡으면 노이즈가 프롬프트에 섞이므로, 재순위 전에 5~10개 정도로 자르는 편이 안전합니다. 평가 질의 세트를 고정해 두고 청크와 모델을 바꿔 비교하시면 됩니다.
LangChain·LlamaIndex로 벡터 DB 붙이기
LlamaIndex는 문서를 VectorStoreIndex로 임베딩·인덱싱한 뒤 as_query_engine으로 LLM 질의 엔진을 만듭니다. Vertex AI 예제도 from_documents 다음에 as_query_engine에 llm을 넘겨 같은 순서를 따릅니다.
LangChain은 이 쿼리 엔진을 도구로 감싸 에이전트 루프에 붙이는 구성이 흔합니다. LlamaIndex가 인덱싱과 검색을 맡고, LangChain·LangGraph가 도구 호출과 추론 순서를 맡습니다. 벡터스토어 어댑터만 바꾸면 Pinecone·Weaviate·Chroma를 같은 흐름으로 시험할 수 있습니다.
ChatGPT·Claude·Gemini 앱에 RAG 검색 연결하기
앱 쪽에서는 검색을 모델 바깥에서 먼저 돌린 뒤, 상위 청크만 메시지에 붙이는 방식이 가장 단순합니다. Assistants나 함수 호출로 검색 도구를 노출하면 모델이 필요할 때만 조회를 요청합니다. 시스템 지시에는 청크에 없는 내용을 단정하지 말라고 명시하시면 됩니다.
같은 RAG 백엔드를 ChatGPT·Claude·Gemini에 재사용하려면 임베딩과 필터 규칙을 서버에 고정하는 편이 낫습니다. 모델마다 컨텍스트 한도가 달라서, 토큰 예산을 넘는 청크는 요약하거나 잘라야 합니다. 인용 번호와 출처 필드를 함께 넘기면 답변에 근거를 남기기 쉽습니다.
프롬프트에 검색 결과를 넣는 패턴
흔한 패턴은 시스템 메시지에 역할과 인용 규칙을 두고, 사용자 질문 아래에 검색 결과를 번호와 함께 붙이는 형태입니다. 각 조각에는 본문과 출처 식별자만 넣고, 관련 없는 문장은 넣지 않습니다. 긴 청크는 앞부분만 자르지 말고 질의와 겹치는 구간을 우선합니다.
점수가 낮으면 청크를 버리고 자료에 없다고 답하게 하는 임계값을 두면 환각이 줄어듭니다. 도구 호출 패턴에서는 모델이 질의를 다시 써 검색하게 할 수 있으나, 재작성 전후 임베딩이 어긋나지 않게 같은 전처리를 쓰셔야 합니다. 답변 후에는 사용한 번호만 출처로 남기게 하시면 됩니다.
운영 이슈: 업데이트, 권한, 비용 최적화
문서가 바뀌면 해당 청크만 다시 임베딩해야 전체 재색인을 피할 수 있습니다. 삭제된 문서는 벡터와 메타데이터를 같이 지워야 오래된 조항이 답에 남지 않습니다. 버전 필드를 두면 롤백과 감사 추적이 쉬워집니다. 부분 실패를 대비해 재시도 큐를 두면 빈 인덱스가 남는 일을 줄입니다.
권한은 검색 단계에서 메타데이터 필터로 걸러야 모델이 못 보는 문서를 받지 않습니다. 임베딩·저장·쿼리 과금은 청크 수와 차원에 비례하므로, 중복 문장 제거와 차원 축소로 비용을 낮출 수 있습니다. 야간 배치로 대량 갱신하고 주간에는 증분 업데이트만 돌리시면 됩니다.
벡터 DB 연동 실전 체크리스트와 정리
벡터 DB 연동은 저장소 선택, 청크와 임베딩 정렬, 프레임워크 연결, 프롬프트 삽입, 운영 필터가 한 줄로 맞아야 서비스에 남습니다. 사전 청킹과 10~20% 겹침을 기본으로 두고, 하이브리드 검색과 상위 k 제한으로 노이즈를 줄이시면 됩니다.
LlamaIndex로 인덱스를 만들고 LangChain 도구로 에이전트에 붙인 뒤, ChatGPT·Claude·Gemini에는 같은 검색 API를 연결하면 재사용이 쉽습니다. 갱신·삭제·권한을 검색 레이어에서 처리하고 비용은 청크 수와 차원으로 관리하십시오. 체크리스트를 배포 전에 한 번 더 확인하시면 됩니다.