Skip to content

Latest commit

 

History

History
295 lines (265 loc) · 9.56 KB

File metadata and controls

295 lines (265 loc) · 9.56 KB

🎬DB Bridge

자연어 질의를 통한 고품질의 패널 추출

▶️ GitHub에서 시연 영상 바로 재생하기


Preview


👥 Members


🛠 Tech Stack

  • 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 (컨테이너)

🚀Getting Started

Installation

git clone https://github.com/hansung-sw-capstone-2025-2/2025_8_B_BE.git
cd 2025_8_B_BE

가상환경 설정 (bash)

# 가상환경 생성
python -m venv venv
# 가상환경 활성화
source venv/Scripts/activate
# 라이브러리 설치
pip install -r requirements.txt

Environment Variables

.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

🧩Project Structure


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 패키지 의존성 목록

📌API Endpoints

Auth API (/api/v1/auth)

  • POST /api/v1/auth/login - 로그인
  • POST /api/v1/auth/signup - 회원가입

MyPage API (/api/v1/mypage)

  • GET /api/v1/mypage - 마이페이지 조회
  • PATCH /api/v1/mypage/password - 프로필 비밀번호 변경

User API (/api/v1/user)

  • PATCH /api/v1/user/profile - 프로필 변경

Segments API (/api/v1/segments)

  • GET /api/v1/segments - 저장된 세그먼트 리스트
  • DELETE /api/v1/segments/delete - 세그먼트 삭제

Save API (/api/v1/save)

  • POST /api/v1/save/save_segment - 세그먼트 저장

Insights API (/api/v1/insights)

  • GET /api/v1/insights/<int:segment_id> - 저장된 세그먼트 인사이트 조회

Panel API (/api/v1/panels)

  • POST /api/v1/panels/search - 체크박스(DirectFilter) 기반 패널 검색

Insight Generation API (/api/v1/insight)

  • POST /api/v1/insight/from-text - 인사이트 생성

Search API (/api/v1/search)

  • POST /api/v1/search/text - 심플/복잡 질의 결과 반환
  • POST /api/v1/search/sql - 심플/복잡 질의 결과 반환

🔑Key Features

  • Stage1 변환 (NL → SQL/Opinion/Main/Sub):
    자연어 질의를 sql, opinion, main, sub로 변환하고, opinionnull이면 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개 추천
      적합 그룹의 특징을 더 명확히 파악할 수 있도록 지원합니다. - (예: 좋아하는 ↔ 싫어하는)
  • 세그먼트 저장:
    생성된 인사이트를 세그먼트 형태로 저장하여 추후 재활용할 수 있습니다.

LLM Models

  • claude-haiku-4-5 : 사용자 자연어 질의 판별
  • gpt-4o : 인사이트 생성

License

본 프로젝트는 한성대학교 기업연계 SW캡스톤디자인 수업에서 진행되었습니다.