Skip to content

munwalk/dialog-ai

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎙️ DialoG AI Server

AI 기반 회의 관리 플랫폼 DialoG의 AI 서버 (FastAPI)


🛠️ 기술 스택

카테고리 기술 스택 용도
언어 & 프레임워크 Python FastAPI Uvicorn AI 서버 개발
AI/ML 서비스 NAVER CLOVA Speech
NAVER HyperCLOVA X
CLOVA Chatbot Builder
실시간 STT, 화자 구분
회의 요약, 액션 아이템, 챗봇
IT 용어 FAQ
데이터베이스 MySQL (AWS RDS)
Redis
회의 데이터 저장 (RDS 호스팅)
컨텍스트 관리, 세션 저장
통신 프로토콜 gRPC
WebSocket
REST API
실시간 STT 스트리밍
양방향 통신
HTTP/JSON 통신
인프라 & 배포 Docker AWS GitHub Actions 컨테이너화
EC2 서버 호스팅
CI/CD 자동화
클라우드 스토리지 NAVER Object Storage 음성 파일 저장



📋 목차




👥 팀원 소개

이름 담당 업무
김나운 실시간 STT 개발 (WebSocket 기반)
화자 구분 분석 시스템 구현
장문선 챗봇 시스템 개발 (회의 검색 + IT 용어 FAQ)
CI/CD 파이프라인 구축 (GitHub Actions)
지승엽 HyperCLOVA X 회의 요약 생성
액션 아이템 자동 추출 기능 개발



📦 주요 라이브러리

FastAPI & 웹

fastapi==0.121.0
uvicorn==0.33.0
websockets==13.1
python-multipart

데이터베이스 & 캐시

pymysql
mysql-connector-python
redis

AI & API 통신

httpx==0.27.0          # 비동기 HTTP 클라이언트
grpcio==1.70.0         # gRPC 통신
protobuf==5.29.5       # 직렬화

음성 처리

pydub==0.25.1          # 오디오 변환
soundfile==0.13.1      # 오디오 I/O

AWS & 클라우드

boto3==1.6.19          # AWS SDK

유틸리티

python-dotenv==1.0.1   # 환경 변수
pydantic==2.10.6       # 데이터 검증
loguru==0.7.3          # 로깅
arrow                  # 날짜 처리
python-dateutil        # 날짜 파싱



📁 프로젝트 구조

dialog-ai-server/
│
├── 📄 main.py                    # FastAPI 메인 엔드포인트
│
├── 🎤 STT 관련
│   ├── sttStreaming.py           # 실시간 STT (WebSocket gRPC)
│   ├── sttSpeaker.py             # 화자 구분 분석
│   ├── nest.proto                # gRPC 프로토콜 정의
│   └── nest_pb2.py               # gRPC 생성 코드
│
├── 📝 요약 & 액션 아이템
│   ├── summary_service.py        # 회의 요약 생성
│   └── action_service.py         # 액션 아이템 생성
│
├── 🤖 챗봇 시스템
│   │
│   ├── 📂 chatbotFAQ/
│   │   ├── 📂 data/
│   │   │   └── terms_database.json   # IT 용어 데이터베이스
│   │   └── chatbotFAQMain.py     # IT 용어 FAQ 챗봇
│   │
│   └── 📂 chatbotSearch/
│       ├── chatbotSearchMain.py  # 회의 검색 챗봇 (메인)
│       ├── search.py             # 회의 검색 로직
│       ├── selection.py          # 쿼리 타입 분류
│       ├── formatting.py         # 응답 포맷팅
│       ├── llm.py                # HyperCLOVA X API 호출
│       ├── database.py           # MySQL 연결 관리
│       ├── context.py            # Redis 컨텍스트 관리
│       ├── models.py             # Pydantic 데이터 모델
│       └── config.py             # 환경 변수 설정
│
└── 🚀 배포
    ├── Dockerfile                # 컨테이너 이미지
    ├── deploy.yml                # GitHub Actions CI/CD
    ├── requirements.txt          # Python 라이브러리
    └── .env                      # 환경 변수



✨ 핵심 기능

🎤 1. 실시간 STT (Speech-to-Text)

담당: 김나운

  • CLOVA Speech API 활용한 실시간 음성 인식
  • WebSocket 기반 gRPC 스트리밍
  • 실시간 텍스트 변환 및 전송
# sttStreaming.py
# WebSocket으로 실시간 음성 데이터 수신 → gRPC로 CLOVA에 전송 → 텍스트 반환


👥 2. 화자 구분 분석

담당: 김나운

  • CLOVA Speech ExternalURL Async API 활용
  • OBS(Object Storage)를 통한 비동기 처리
  • 발화자별 발언 시간, 비율 통계 제공

지원 기능:

  • ✅ 최소 2명 ~ 최대 10명 화자 자동 인식
  • ✅ 발화자별 발언 시간 및 비율 계산
  • ✅ 타임스탬프 기반 세그먼트 분리


📝 3. 회의 요약 생성

담당: 지승엽

  • HyperCLOVA X 기반 AI 요약

생성 항목 (5가지):

항목 설명 예시
회의 목적 한 문장 요약 "Q4 예산 확정 및 일정 논의"
주요 안건 3~5개 키워드 "예산 확정, 일정 조율, 인력 배치"
전체 요약 서술형 3문장 "Q4 예산은 1억으로 확정되었으며..."
중요도 HIGH/MEDIUM/LOW + 사유 "HIGH - 예산 결정으로 프로젝트 착수 가능"
키워드 핵심 명사 5개 "예산, 일정, 인력, API, 데이터베이스"

직무별 페르소나 지원:

  • 🔧 프로젝트 매니저 (PM)
  • 🎨 프론트엔드 개발자
  • ⚙️ 백엔드 개발자
  • 🗄️ 데이터베이스 관리자 (DBA)
  • 🔒 보안 전문가
  • 📋 일반 (기본값)


✅ 4. 액션 아이템 생성 (내 할 일)

담당: 지승엽

  • 회의 내용에서 사용자의 할 일 자동 추출
  • 날짜 자동 계산 (회의 날짜 기준)
  • 담당자 자동 매핑 (화자 → 실명 변환)

추출 유형 (3가지):

1️⃣ 본인 작업      "API 명세서 작성 (장문선) [2025-12-15]"
2️⃣ 지시받은 작업   "DB 스키마 설계 (장문선) [2025-12-20]"
3️⃣ 팀 전체 작업   "[백엔드팀] 서버 성능 최적화 (담당자 미지정) [2025-12-30]"


🔍 5. 회의 검색 챗봇

담당: 장문선

  • Template 기반 RAG 아키텍처 (비용 최적화)
  • Redis 기반 컨텍스트 관리 (다회차 대화 지원)
  • 자연어 질문 → SQL 쿼리 자동 변환

기본 검색 유형 (4가지):

검색 유형 예시 질문 처리 방식
날짜 검색 "어제 회의 보여줘", "지난주 회의" meeting_date 조건 검색
키워드 검색 "API 관련 회의", "데이터베이스 논의" keywords, purpose, agenda LIKE 검색
참가자 검색 "김나운님 참석한 회의" participants 컬럼 검색
할 일 검색 "내 할 일", "미완료 업무" action_items 테이블 조인

고급 기능:

1️⃣ 조합 질문 처리

"지난주 김나운님이 참석한 API 관련 회의"
→ 날짜 + 참가자 + 키워드 조합 검색

2️⃣ 단계적 완화 (검색 결과 없을 때)

1차 시도: 모든 조건 만족하는 회의 검색
   ↓ 결과 없음
2차 시도: 일부 조건 완화 (예: 날짜 범위 확대)
   ↓ 결과 없음
3차 시도: 핵심 키워드만으로 재검색

3️⃣ 상태별 분리 표시

  • 완료된 할 일 - 체크 표시와 함께 표시
  • 예정된 할 일 - 마감일 강조 표시
  • ⚠️ 지연된 할 일 - 경고 표시

4️⃣ 자연어 날짜 파싱

"이번주" → 2025-12-09 ~ 2025-12-15
"10월 27일부터 오늘" → 2025-10-27 ~ 2025-12-09
"어제" → 2025-12-08
"지난주 금요일" → 2025-12-06

5️⃣ 확인 질문 처리 (컨텍스트 기반)

사용자: "어제 회의 뭐했어?"
챗봇: [회의 2개 표시]

사용자: "그거 하나야?"
챗봇: "네, 어제는 총 2개의 회의가 있었습니다."

사용자: "더 없어?"
챗봇: "어제 회의는 이것이 전부입니다."

주요 기능:

  • ✅ 페르소나 커스터마이징 (직무별 맞춤 응답)
  • ✅ 컨텍스트 유지 (이전 질문 기억)
  • ✅ 자연스러운 대화체 응답
  • ✅ 복합 조건 검색 지원
  • ✅ 지능형 오류 복구 (단계적 완화)


💬 6. IT 용어 FAQ 챗봇

담당: 장문선

  • 3-tier 폴백 시스템 (비용 최적화)
┌─────────────────────────────────────┐
│  Tier 1: JSON 데이터베이스 검색      │  ← 무료 (우선 시도)
│         (terms_database.json)       │
└─────────────────────────────────────┘
              ↓ 실패 시
┌─────────────────────────────────────┐
│  Tier 2: CLOVA Chatbot Builder      │  ← 저비용
└─────────────────────────────────────┘
              ↓ 실패 시
┌─────────────────────────────────────┐
│  Tier 3: HyperCLOVA X               │  ← 고비용 (최종 폴백)
└─────────────────────────────────────┘

주요 기능:

  • ✅ 100개 이상 IT 용어 데이터베이스
  • ✅ 유사 용어 자동 매칭
  • ✅ 오타 처리 및 비공식 표현 지원



🔄 워크플로우

📊 1. 회의 진행 워크플로우

┌────────────────┐
│  회의 시작      │
└────────┬───────┘
         │
         ▼
┌─────────────────────────────────────┐
│  실시간 STT (sttStreaming.py)        │  ← WebSocket + gRPC
│  음성 → 텍스트 변환                  │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│  회의 종료 → 음성 파일 OBS 업로드     │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│  화자 구분 분석 (sttSpeaker.py)      │  ← Async 처리
│  발화자 정보 추출                    │
└────────┬────────────────────────────┘
         │
         ├──────────────────┬──────────────────┐
         │                  │                  │
         ▼                  ▼                  ▼
┌─────────────────┐  ┌──────────────┐  ┌──────────────┐
│  AI 요약 생성    │  │ 액션 아이템   │  │ 중요도 평가  │
│ (5가지 항목)     │  │ 생성         │  │ (HIGH/LOW)   │
└────────┬────────┘  └──────┬───────┘  └──────┬───────┘
         │                  │                  │
         └──────────────────┴──────────────────┘
                            │
                            ▼
                   ┌─────────────────┐
                   │  MySQL 저장     │
                   └─────────────────┘

🤖 2. 회의 검색 챗봇 워크플로우

┌─────────────────────┐
│  사용자 질문 입력    │  예: "어제 회의 뭐했어?"
└──────────┬──────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  세션 확인 (Redis)                    │
│  - 이전 대화 컨텍스트 로드             │
└──────────┬───────────────────────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  쿼리 타입 분류 (selection.py)        │
│  → 날짜 / 키워드 / 참가자 / 할일       │
└──────────┬───────────────────────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  Template 기반 검색 (search.py)       │  ← HyperCLOVA X 없이 처리
│  - SQL 쿼리 자동 생성                 │     (비용 0원)
│  - MySQL 검색 실행                    │
└──────────┬───────────────────────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  응답 포맷팅 (formatting.py)          │
│  - 검색 결과 → 자연어 변환             │
└──────────┬───────────────────────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  컨텍스트 저장 (Redis, TTL 10분)      │
└──────────┬───────────────────────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  사용자에게 응답 반환                 │
└──────────────────────────────────────┘

💡 3. IT 용어 챗봇 워크플로우

┌─────────────────────┐
│  사용자 용어 질문    │  예: "REST API가 뭐야?"
└──────────┬──────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  Tier 1: JSON DB 검색                │  ✅ 무료
│  (terms_database.json)               │
└──────────┬───────────────────────────┘
           │
           │ 매칭 실패 시
           ▼
┌──────────────────────────────────────┐
│  Tier 2: CLOVA Chatbot Builder       │  💰 저비용
└──────────┬───────────────────────────┘
           │
           │ 매칭 실패 시
           ▼
┌──────────────────────────────────────┐
│  Tier 3: HyperCLOVA X                │  💰💰 고비용
└──────────┬───────────────────────────┘
           │
           ▼
┌──────────────────────────────────────┐
│  응답 반환                            │
└──────────────────────────────────────┘



💰 비용 최적화 전략

1️⃣ Template 기반 RAG (회의 검색)

기존 방식: 모든 질문 → HyperCLOVA X → 💰💰💰
최적화 방식: Template 패턴 사용 → 💰 (0원)

✅ 결과: 80% 비용 절감

2️⃣ 3-tier 폴백 시스템 (IT 용어)

Tier 1: JSON 검색 (무료)         ← 대부분 여기서 해결
Tier 2: CLOVA Chatbot Builder    ← 저비용
Tier 3: HyperCLOVA X             ← 최종 수단

3️⃣ 병렬 처리 (요약 생성)

# 5개 항목을 순차 호출 → 25초
# 5개 항목을 병렬 호출 → 5초 (asyncio.gather 사용)결과: 응답 시간 80% 단축 + 서버 리소스 절약

4️⃣ Redis 캐싱 (컨텍스트 관리)

- 컨텍스트 TTL: 10분
- 불필요한 DB 조회 감소
- 빠른 응답 속도



🎯 주요 특징

확장 가능한 아키텍처

  • ✅ 서비스별 모듈 분리 (summary_service, action_service, chatbot)
  • ✅ 직무별 페르소나 확장 가능
  • ✅ 새로운 검색 유형 추가 용이

안정적인 오류 처리

  • ✅ 모든 API 호출에 try-except 적용
  • ✅ 타임아웃 설정 (30초)
  • ✅ 상세한 에러 로깅 (loguru)

실시간 처리

  • ✅ WebSocket 기반 실시간 STT
  • ✅ 비동기 처리 (asyncio, httpx)
  • ✅ 병렬 API 호출

비용 효율성

  • ✅ Template 우선 → LLM 최소화
  • ✅ 3-tier 폴백 시스템
  • ✅ Redis 캐싱

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.8%
  • Dockerfile 0.2%