협업 여행 서비스의 AI 기능을 담당하는 FastAPI 서버다.
Spring Boot BE와 분리된 독립 서버로, 채팅 요약과 여행 맥락 기반 AI 응답을 처리한다.
- 채팅 메시지를 기반으로 rolling structured summary 생성
- 일정, 북마크, 최근 대화 맥락을 반영한 AI 응답 생성
- 장소 추천 요청 시 Google Places 기반 후보 조회
- 여행 도메인 외 질문은
unsupportedintent로 분리
| Method | Path | Description |
|---|---|---|
POST |
/v1/ai/context/summaries |
이전 summary와 신규 메시지로 요약 갱신 |
POST |
/v1/ai/chat/plan |
사용자 질문을 intent별로 처리하고 AI 응답 생성 |
app/
├─ main.py
├─ dependencies.py
├─ core/
│ └─ config.py
├─ schemas/
│ ├─ chat.py
│ └─ planner.py
├─ clients/
│ ├─ openai_travel.py
│ └─ google_places.py
└─ services/
├─ context_selection.py
├─ summary.py
└─ orchestrator.py
- 채팅 요약 API는
previous_summary + messages_since_last_summary를 받아 rolling structured summary를 만든다. - 채팅 플랜 API는
summary + delta + recent_messages + request_message를 받아 intent를 분기한다. - intent는
place_recommendation,conversation_summary,travel_general_chat,unsupported4개로 고정했다. - 장소 추천은 북마크/일정 맥락을 우선 반영하고, 필요 시 Google Places 후보를 최대 3개 반환한다.
- OpenAI 호출은 summary 생성, intent 분기, 최종 답변 생성에 structured-output 프롬프트를 사용한다.
OPENAI_API_KEYGOOGLE_MAPS_API_KEY
cp .env.example .env
pip install -e .uvicorn app.main:app --reload기본 주소는 http://127.0.0.1:8000 이고 Swagger는 /docs 에서 확인할 수 있다.
개발 환경은 .env, 운영 환경은 .env.prod 파일을 사용한다. 개발 환경 예시는
.env.example, 운영 환경 예시는 .env.prod.example를 참고한다.
cp .env.example .env
docker compose -f compose.dev.yaml up --buildcp .env.prod.example .env.prod
docker compose -f compose.prod.yaml pull
docker compose -f compose.prod.yaml up --wait --wait-timeout 120