Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
Tags
- chroma
- 프로그래머스
- BFS
- OpenAI
- 스택/큐
- AI
- Algorithm
- modbus
- typescript
- 완전탐색
- React
- retriever
- rag
- DP
- 알고리즘
- queue
- MCP
- Two Pointer
- 파이썬
- frontend
- dfs
- python
- VectoreStore
- 코딩테스트
- InfluxDB
- backend
- heapq
- javascirpt
- LLM
- javascript
Archives
- Today
- Total
DM Log
[AI 실습 #1] Chroma 실습: 벡터DB를 활용한 문서 검색 본문
벡터DB를 활용한 문서 검색 실습
- Chroma를 이용해 문서를 벡터화하고, 검색하는 실습 진행
- Chroma는 설치가 간편하고 LangChain에서 기본적으로 지원하기 때문에, RAG 실습
환경 세팅
1. 필수 라이브러리 설치
pip install langchain langchain-community langchain-openai chromadb
2. OpenAI API Key 설정
export OPENAI_API_KEY="your_api_key_here" # macOS/Linux
setx OPENAI_API_KEY "your_api_key_here" # Windows PowerShell
또는 코드 상단
import os
os.environ["OPENAI_API_KEY"] = "your_api_key_here"
Chroma 기본 실습
1. 임베딩 모델과 텍스트 준비
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import Chroma
# OpenAI 임베딩 모델 초기화
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
# 간단한 문서 데이터
texts = [
"사과는 과일이다.",
"자동차는 바퀴가 달린 탈것이다.",
"바나나는 노란색 과일이다."
]
2. Chroma 벡터스토어 생성
# 벡터스토어에 텍스트 삽입
vectorstore = Chroma.from_texts(texts, embeddings)
3. 유사도 검색 실행
# 질문을 벡터화하여 검색
query = "노란 과일"
results = vectorstore.similarity_search(query, k=2)
# 결과 출력
for doc in results:
print("내용:", doc.page_content, "| 메타데이터:", doc.metadata)
출력 예시:
내용: 바나나는 노란색 과일이다. | 메타데이터: {}
내용: 사과는 과일이다. | 메타데이터: {}
메타데이터 활용
Chroma는 단순 텍스트뿐 아니라 메타데이터를 함께 저장
metadatas = [
{"source": "doc1"},
{"source": "doc2"},
{"source": "doc3"}
]
vectorstore = Chroma.from_texts(texts, embeddings, metadatas=metadatas)
results = vectorstore.similarity_search("과일", k=2)
for doc in results:
print("내용:", doc.page_content, "| 출처:", doc.metadata["source"])
👉 실제 서비스에서는 PDF 파일명, 작성일, 문서 경로 등을 메타데이터로 넣어두면 유용
👉 여기서 texts와 metadatas는 리스트 인덱스 기준으로 1:1 매칭됩니다.
- texts[0] → metadatas[0]
- texts[1] → metadatas[1]
- texts[2] → metadatas[2]
⚠️ texts와 metadatas의 길이가 다르면 오류(ValueError)가 발생하니 주의하세요.
Chroma의 장점과 한계
[Chroma의 장점]
- 로컬 DB라 설치/사용이 간단
- LangChain 기본 통합 지원
- 실험/프로토타입에 최적
[Chroma의 한계]
- 대규모 데이터 확장성 부족 (수억 단위 검색에는 부적합)
- 클라우드 관리형 서비스 없음 (운영 환경에서는 Pinecone, Weaviate 고려 필요)
(부록) 용어 정리
- Chroma: 오픈소스 벡터 DB
- similarity_search: 쿼리 벡터와 가장 가까운 문서 검색
- metadata: 문서의 부가 정보(출처, 작성자 등)
'개발공부 > AI' 카테고리의 다른 글
[AI 실습 #3] PDF 단일 파일 RAG 만들기 (0) | 2025.09.13 |
---|---|
[AI 실습 #2] MCP 소개와 FastMCP 실습 (0) | 2025.09.13 |
[AI 개념 및 이해 #5] RAG: 검색과 생성을 결합하는 기술 (0) | 2025.09.07 |
[AI 개념 및 이해 #4] LangChain: LLM 오케스트레이션 프레임워크 (0) | 2025.09.07 |
[AI 개념 및 이해 #3] 벡터 DB(Vector Database) 개념: Chroma, Pinecone, Weaviate 비교 (0) | 2025.09.07 |