LangChain, FastAPI, Azure OpenAI를 사용해 부동산 질문에 대해 답하는 학습용 챗봇입니다. 질문에 대한 적절한 답변을 하도록 프롬프트 엔지니어링과 가드레일 설정을 하였습니다.
이 프로젝트는 부동산 관련 학습용 챗봇으로, 사용자가 입력한 질문을 Azure OpenAI(LLM)에 전달해 “핵심 개념 → 실생활 예시 → 추가 질문” 세 가지 요소를 담은 JSON 응답을 생성합니다. FastAPI 서버를 통해 클라이언트와 비동기 통신하며, LangChain을 활용해 프롬프트 엔지니어링과 Pydantic 검증(가드레일)을 함께 적용하여 안정적으로 동작합니다.
-
LangChain + Azure OpenAI
AzureChatOpenAI인스턴스를 통해 GPT 모델(gpt-4o-mini 등)을 호출- LangChain의
with_structured_output(RealEstateResponse)를 통해 Pydantic 스키마 검증을 자동화
-
FastAPI 서버
POST /api/estate엔드포인트에 JSON{ "content": "<질문>" }형식으로 요청- 비동기로 모델 호출
- 커스텀 예외 처리
-
Prompt‐level 가드레일
SystemPrompt에서 질문에 대한 응답을 JSON 형태로 출력하도록 프롬프트 엔지니어링- 비부동산 질문 시
부동산 관련 질문이 아닙니다. 부동산과 관련된 질문을 해주세요. 😁로 거절
-
LLM‐기반 분류기
LLM분류 모델을 통해 질문이 부동산 관련인지 판단- 부동산 관련 질문이 아니면 거절
- “부동산 키워드가 포함되어도, 문맥상 부동산이 아니면” 거절
-
Pydantic 스키마 검증 (Output Validation)
- 모델 응답 문자열을
parse_raw()로 검증하여 “키 누락”이나 “잘못된 형식” 발생 시 503 예외 처리 - 필요 시 추가 내용 검증(부동산 키워드 포함 여부 등) 삽입 가능
- 모델 응답 문자열을
-
Error Handling & Logging
- 모델 호출 실패, 파싱 오류, 가드레일 위반 등 모든 예외 상황을 로깅해 원인 분석 및 가드레일 강화에 활용
- FastAPI의
add_exception_handler로BaseCustomException등록
real-estate-studybot-ai/
├─ app/
│ ├─ config/
│ │ └─ model.py
│ ├─ domain/
│ │ └─ estate/
│ │ ├─ core.py
│ │ ├─ classifier.py
│ │ ├─ exception.py
│ │ ├─ prompt.py
│ │ ├─ router.py
│ │ └─ schema/
│ │ └─ dto.py
│ ├─ error/
│ │ ├─ code.py
│ │ └─ handler.py
│ └─ main.py
├─ .env
└─ README.md
# 실행
uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
# 운영 환경 백그라운드 실행
nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 > uvicorn.log 2>&1 &
pip install fastapi uvicorn python-dotenv openai pydantic langchain-openai langchain-core langchain

