45

실습: Chroma로 제조 문서 벡터 DB 구축

Day 3: 벡터 DB (Chroma, Pinecone)

학습 목표
  • Chroma 컬렉션을 생성하고 문서를 저장할 수 있다
  • 메타데이터 필터를 활용한 검색을 구현할 수 있다
  • LangChain과 Chroma를 연동할 수 있다

Chroma 실습

로컬에서 Chroma를 띄우고 제조 문서를 검색한다. 그리고 지금 그 검색을 누가 하고 있는지 확인한다.


환경 설정

pip install chromadb langchain langchain-community langchain-chroma
pip install langchain-openai          # LangChain 연동을 실제로 돌릴 때
pip install sentence-transformers     # 다국어 모델 비교용 (완성 코드)

실습 순서

  1. 컬렉션을 만들고 제조 문서 10건을 저장한다.
  2. 한국어 질의로 검색하고 Top-1 적중률을 잰다.
  3. 메타데이터 필터로 범위를 좁혀 다시 검색한다.
  4. 버전이 올라간 문서를 갱신하고 검색 결과가 바뀌는지 본다.
  5. 완성 코드에서 임베딩 모델만 바꿔 같은 숫자를 다시 잰다.

Chroma는 임베딩 함수를 주지 않으면 기본값(all-MiniLM-L6-v2)을 쓴다. 영어로 학습된 모델이다. 어제 "한국어 문서에는 다국어 모델"이라 배웠으니, 그 말이 이 화면에서 몇 퍼센트짜리 차이인지 직접 확인한다.

이 실습은 문서를 한 번도 밖으로 내보내지 않는다. 임베딩도 검색도 이 컴퓨터 안에서 끝난다. 데이터 반출이 막힌 공장에서 Chroma를 고르는 이유가 이것이다.

에디터 로딩 중...
힌트 보기
  • Chroma의 distance는 hnsw:space를 cosine으로 두면 (1 - 코사인 유사도)다. 유사도로 보려면 1에서 빼야 한다.
  • 임베딩 함수를 지정하지 않으면 기본값이 조용히 쓰인다. 무엇으로 색인했는지 코드에 남겨 두어야 나중에 검색과 어긋나지 않는다.
  • get_or_create_collection은 같은 이름이면 기존 컬렉션을 돌려준다. 임베딩을 바꿔 비교할 때는 컬렉션 이름도 함께 바꾼다.
  • $and, $or 연산자로 메타데이터 조건을 조합할 수 있다. 조건이 하나뿐일 때는 $and로 감싸지 않아도 된다.
정답 보기
에디터 로딩 중...
AI로 학습하기 — 꿀팁
Chroma 메타데이터 필터 쿼리 생성AI 학습 팁

AI에게 제조 문서(설비명·라인번호·문서유형) 메타데이터 기반 Chroma 필터 검색 코드를 스캐폴딩하도록 요청하세요.

설비명, 생산라인 번호, 문서유형(SOP/매뉴얼/품질기록)을 메타데이터로 저장한 제조 문서 Chroma 컬렉션에서, 특정 설비·특정 라인의 SOP만 필터링해서 유사도 검색하는 Python 코드를 구현해줘. 메타데이터 필터 조건 조합 예시도 포함해줘.
이 팁이 도움이 됐나요?
실습 — 직접 해보기
Vector Store
전수 비교와 HNSW의 거리 계산 횟수를 나란히 놓고 읽는다. 이 화면에서 가장 믿을 만한 숫자가 그것이다. 볼 것: 벡터를 늘렸을 때 두 방식의 계산 횟수가 각각 몇 배로 늘어나는가. 의심할 것: 화면 아래에 임베딩 모델 이름이 적혀 있지만 이 시뮬레이터는 브라우저 안에서 벡터를 만든다. 개발자 도구의 네트워크 탭을 열어 두고 검색해 보면 밖으로 나가는 호출이 없다는 것을 확인할 수 있다.
용어