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

 
 
 

Contributors

Languages

  • Python 99.8%
  • Dockerfile 0.2%