728x90
이 글에서는 앞에서 구축한 **Retriever(문서 검색기)**와
OpenAI GPT 모델을 연결하여,
**문서 기반의 자동 응답 시스템(RetrievalQA Chain)**을 구성합니다.
🎯 목표
- Retriever + LLM(OpenAI) 결합
- 문서 기반 질문 응답 흐름 구성
- 참조 문서와 함께 GPT 응답 출력
🛠️ Step 1. RetrievalQA 체인 구성 함수 만들기
# src/qa_chain.py
from langchain.chains import RetrievalQA # Retrieval QA 체인 클래스
from langchain.chat_models import ChatOpenAI # OpenAI GPT 모델
from langchain.vectorstores import Chroma # 벡터 저장소
from langchain.embeddings import OpenAIEmbeddings # 임베딩 모델
def create_qa_chain(db_path: str, collection_name: str, k: int = 2):
"""
ChromaDB 기반 벡터 검색기와 GPT 모델을 연결한 QA 체인을 생성합니다.
"""
# 1. OpenAI 임베딩 모델 초기화
embedding = OpenAIEmbeddings()
# 2. ChromaDB 벡터 저장소 로딩
vectordb = Chroma(
persist_directory=db_path, # 벡터 저장 위치
embedding_function=embedding, # 동일 임베딩 모델 사용
collection_name=collection_name # 컬렉션 이름
)
# 3. 문서 검색기 생성
retriever = vectordb.as_retriever(
search_kwargs={"k": k} # top-k 설정
)
# 4. GPT 모델 초기화 (gpt-3.5-turbo 사용 예시)
llm = ChatOpenAI(
model_name="gpt-3.5-turbo", # 사용할 LLM 모델명
temperature=0.2 # 응답의 일관성 유지
)
# 5. Retrieval QA 체인 생성
qa_chain = RetrievalQA.from_chain_type(
llm=llm, # 연결할 GPT 모델
retriever=retriever, # 문서 검색기
return_source_documents=True # 참조 문서 함께 반환
)
# 6. 완성된 QA 체인 반환
return qa_chain
💬 Step 2. 사용자 질문을 통한 QA 실행
# main.py
from src.qa_chain import create_qa_chain # QA 체인 생성 함수 불러오기
# ✅ ChromaDB 경로 및 컬렉션 이름 설정
db_path = "chroma_db"
collection_name = "iceberg_tables"
# ✅ QA 체인 생성
qa = create_qa_chain(db_path, collection_name, k=2)
# ✅ 사용자 질문 정의
query = "상품 정보를 담고 있는 테이블이 뭐야?"
# ✅ QA 체인 실행
result = qa(query) # 또는 result = qa.run(query)도 가능
# ✅ GPT의 응답 출력
print("📣 GPT 응답:")
print(result['result']) # 생성된 답변
# ✅ 참조 문서 출력
print("\n📎 참조 문서:")
for doc in result['source_documents']:
print(doc.page_content)
📤 출력 예시
📣 GPT 응답:
상품 정보를 담고 있는 테이블은 'products'입니다. 이 테이블은 product_id, product_name, category 컬럼으로 구성되며, category 기준으로 파티셔닝됩니다.
📎 참조 문서:
📂 테이블명: products
🧾 컬럼 목록:
- product_id (long)
- product_name (string)
- category (string)
🧩 파티션 컬럼: category
✅ GPT는 벡터 검색된 문서를 기반으로 신뢰성 있는 답변을 생성하게 됩니다.
💡 옵션: Temperature 조절로 응답 다양성 조절
# 모델 생성 시 설정
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.7)
Temperature | 설명 |
0.0 ~ 0.3 | 응답이 일관되고 정제됨 (사실 중심) |
0.7 ~ 1.0 | 보다 창의적이지만, 답이 불안정할 수 있음 |
📎 요약 및 핵심 정리
- RetrievalQA는 문서 검색기(Retriever) + GPT 모델을 하나로 연결한 체인입니다.
- 사용자의 질문 → 관련 문서 검색 → LLM 응답 생성의 전체 흐름이 구성됩니다.
- 참조 문서를 함께 출력함으로써 답변의 근거를 확인할 수 있습니다.
728x90