728x90
이 글에서는 이전에 생성한 .txt 형식의 자연어 문서를 OpenAI의 임베딩 모델을 활용해
벡터로 변환하고 ChromaDB에 저장하는 과정을 실습합니다.
이 벡터는 향후 검색(Retrieval)에서 핵심적인 역할을 하게 됩니다.
🎯 목표
- .txt 문서를 읽어 자연어 텍스트로 로딩
- OpenAI 임베딩 모델을 통해 벡터 생성
- ChromaDB에 벡터를 저장하여 추후 검색 가능하도록 구성
🗂️ 파일 구성 예시
rag-iceberg-project/
├── docs/products.txt ← 이전 글에서 생성된 자연어 문서
├── chroma_db/ ← 벡터 DB 저장 디렉토리
└── src/embed_documents.py ← 이번 글에서 작성할 코드
🧠 Step 1. 텍스트 문서 로딩 및 임베딩 처리 함수
# src/embed_documents.py
import os # 경로 처리를 위한 표준 모듈
from langchain.embeddings import OpenAIEmbeddings # OpenAI 임베딩 클래스
from langchain.vectorstores import Chroma # Chroma 벡터 저장소
def embed_and_store_text(doc_path: str, db_path: str, collection_name: str):
"""
텍스트 문서를 로딩 → 임베딩 → ChromaDB에 저장
"""
# 1. 텍스트 문서 불러오기 (.txt 파일 읽기)
with open(doc_path, "r", encoding="utf-8") as f:
text = f.read() # 전체 내용을 하나의 문자열로 로드
# 2. LangChain 임베딩 모델 초기화 (OpenAI 사용)
embedding_model = OpenAIEmbeddings() # 기본적으로 text-embedding-ada-002 사용
# 3. 텍스트 문서를 임베딩하고 Chroma DB로 저장
vectordb = Chroma.from_texts(
texts=[text], # 벡터화할 텍스트 목록 (리스트 형태)
embedding=embedding_model, # 사용할 임베딩 모델
persist_directory=db_path, # 로컬 DB 저장 경로
collection_name=collection_name # 컬렉션 이름
)
# 4. 벡터 DB 디스크에 저장 (persist 필수)
vectordb.persist()
# 5. 완료 메시지 출력
print(f"✅ 벡터 저장 완료: {db_path}/{collection_name}")
▶️ Step 2. main.py에서 호출 예시
# main.py
from src.embed_documents import embed_and_store_text # 벡터 저장 함수 불러오기
# ✅ 파일 경로 지정
doc_path = "docs/products.txt" # 전처리된 자연어 문서
db_path = "chroma_db" # 벡터 저장 위치
collection_name = "iceberg_tables" # 벡터 컬렉션 이름
# ✅ 실행
embed_and_store_text(doc_path, db_path, collection_name)
✅ 출력 결과:
✅ 벡터 저장 완료: chroma_db/iceberg_tables
Chroma는 지정된 chroma_db/ 경로에 임베딩 데이터를 저장하고, 이후 검색기로 활용할 수 있게 됩니다.
💡 보충 팁: 여러 문서 저장도 가능할까?
물론입니다. texts=[text1, text2, ...] 형식으로 리스트를 구성하면
여러 문서를 동시에 벡터화하고 저장할 수 있습니다.
📎 요약 및 핵심 정리
- .txt 형태의 자연어 문서를 OpenAI 임베딩을 통해 벡터로 변환했습니다.
- ChromaDB에 저장된 벡터는 향후 질문-답변 검색 흐름에서 핵심 역할을 수행합니다.
- embed_and_store_text() 함수는 다양한 문서에도 확장 가능합니다.
728x90
'LLM & Generative AI > RAG in Practice' 카테고리의 다른 글
[LangChain RAG 구축 시리즈 Ep.18] 💬 RetrievalQA 체인을 통해 문서 기반 답변 생성하기 (1) | 2025.04.05 |
---|---|
[LangChain RAG 구축 시리즈 Ep.17] 🔍 ChromaDB에서 문서 검색 및 Retriever 구성하기 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.15] 📄 Iceberg metadata.json 로딩 및 텍스트화 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.14] 🔧 프로젝트 구조 설계 및 의존성 설치 (1) | 2025.04.05 |
[LangChain RAG 구축 시리즈 Ep.13] 🧪 Stuff / MapReduce / Refine 전략 비교 (1) | 2025.04.05 |