|
|
|
|
|
-
Backend
- Python
- Django 4.2.27
- Django REST Framework 3.16.1
- django-cors-headers 4.9.0
-
Database
- PostgreSQL
- pgvector (Vector similarity search)
- psycopg2-binary (PostgreSQL adapter)
-
LLM / RAG
- LangChain (langchain · langchain-core · langchain-community)
- OpenAI API (openai · langchain-openai)
- Anthropic Claude API (anthropic · langchain-anthropic)
-
Embeddings / NLP
- Sentence-Transformers
- PyTorch
- Tokenizers
-
Data / Utilities
- NumPy
- requests
- python-dotenv
-
Infrastructure
- Docker (컨테이너)
git clone https://github.com/hansung-sw-capstone-2025-2/2025_8_B_BE.git
cd 2025_8_B_BE
# 가상환경 생성
python -m venv venv
# 가상환경 활성화
source venv/Scripts/activate
# 라이브러리 설치
pip install -r requirements.txt
.env 파일을 생성하고 다음 변수를 설정하세요:
# Django
SECRET_KEY=your_django_secret_key
DEBUG=True
# LLM API KEY
ANTHROPIC_API_KEY=your_claude_api_key
OPENAI_API_KEY=your_openai_api_key
# Database (RDB)
DB_DEFAULT_PASSWORD=your_db_password
# Database (Vector DB - pgvector)
DB_VEC_PASSWORD=your_vecdb_password
# Logging
LOG_LEVEL=INFO
DJANGO_PROJ
├── apis/ # 공통 API (유저/마이페이지 등)
│ ├── models.py # 사용자 관련 DB 모델
│ ├── urls.py # apis 라우팅
│ └── views_save.py # 사용자 데이터 저장/조회 API 로직
│
├── insight/ # Insight 생성
│ ├── db_routers.py # DB 라우팅
│ ├── models.py # VecDB 모델 (RAG용)
│ ├── urls.py # insight 라우팅
│ └── views_insight.py # Stage3 결과 기반 인사이트 생성
│
├── panel/ # Panel 추출 파이프라인 (Stage1~3)
│ ├── models.py # 패널 메타/응답 RDB + 설문 응답 VecDB 모델(민감 데이터로 인한 제거)
│ ├── urls.py # panel 라우팅
│ ├── views_api.py # Stage1: 자연어 → SQL / opinion / main / sub 변환
│ ├── views_panel.py # Stage2/3: SQL DirectFilter + Vec 유사도 기반 추출
│ └── views_checkbox.py # 체크박스 기반 DirectFilter
│
├── swproject_backend/ # 프로젝트 설정 (Django core)
│ ├── settings.py # 환경설정
│ ├── urls.py # 프로젝트 루트 라우팅
│ └── wsgi.py # WSGI 엔트리포인트
│
├── manage.py # Django 관리 커맨드 엔트리
└── requirements.txt # Python 패키지 의존성 목록
POST /api/v1/auth/login- 로그인POST /api/v1/auth/signup- 회원가입
GET /api/v1/mypage- 마이페이지 조회PATCH /api/v1/mypage/password- 프로필 비밀번호 변경
PATCH /api/v1/user/profile- 프로필 변경
GET /api/v1/segments- 저장된 세그먼트 리스트DELETE /api/v1/segments/delete- 세그먼트 삭제
POST /api/v1/save/save_segment- 세그먼트 저장
GET /api/v1/insights/<int:segment_id>- 저장된 세그먼트 인사이트 조회
POST /api/v1/panels/search- 체크박스(DirectFilter) 기반 패널 검색
POST /api/v1/insight/from-text- 인사이트 생성
POST /api/v1/search/text- 심플/복잡 질의 결과 반환POST /api/v1/search/sql- 심플/복잡 질의 결과 반환
-
Stage1 변환 (NL → SQL/Opinion/Main/Sub):
자연어 질의를sql,opinion,main,sub로 변환하고,opinion이null이면 Direct Filtering 방식으로 패널을 추출합니다. -
Opinion 기반 고정밀 패널 추출:
opinion이 존재하면sql로 1차 후보군을 필터링한 뒤,main/sub카테고리에 해당하는 응답을 가진 후보 중에서
opinion 유사도가 평균 이상인 후보군을 교집합하여 최종 적합 패널을 추출합니다. -
Checkbox 기반 Direct Filtering:
체크박스 필터 또한 Direct Filtering 방식을 채택하여 5초 내 적합한 패널을 빠르게 추출합니다. -
Loyalty 기반 우선순위 제공 (Direct Filtering 전용):
sql만으로 패널을 추출하는 경우loyalty값을 부여해 충성도가 높은 고품질 패널을 우선 제공합니다.(Direct Filtering 방식에서만 적용) -
적합 패널 인사이트 생성:
주관이 포함된 자연어 질의의 경우 적합 그룹의 설문 응답을 바탕으로 적절한 인사이트를 생성합니다. -
적합V전체 인사이트 생성:
적합 그룹의 설문 특징과 전체 그룹의 설문 특징을 비교 분석하여 차별화된 인사이트를 제공합니다. -
질의 추천 (3개):
- 유사 질의 2개 추천
-
비유사(반대 선상) 질의 1개 추천
적합 그룹의 특징을 더 명확히 파악할 수 있도록 지원합니다. - (예: 좋아하는 ↔ 싫어하는)
-
세그먼트 저장:
생성된 인사이트를 세그먼트 형태로 저장하여 추후 재활용할 수 있습니다.
- claude-haiku-4-5 : 사용자 자연어 질의 판별
- gpt-4o : 인사이트 생성
본 프로젝트는 한성대학교 기업연계 SW캡스톤디자인 수업에서 진행되었습니다.





