AI 음성 인식
[OpenNote]시스템 설계 및 서버 구조
yc7764
2025. 2. 24. 14:00
OpenNote: https://opennote.duckdns.org/
(비용 문제로 GPU 서버를 구축하지 못해 화자 분할 및 STT 처리에 다소 시간이 걸림)
1. 기술 스택
- Django
- 오픈 소스 기반 웹 프레임워크
- 반응형 웹 UI를 위해 bootstrap 사용을 고려했으나 직접 UI 디자인 및 개발 진행
- 계정 로그인 시 개인 정보 문제와 편의성을 위해 소셜 계정 로그인 기능 추가(네이버, 카카오톡, github, google)
- Django ORM 활용 시 내장 DB인 SQLite가 아닌 PostgreSQL 사용
- RabbitMQ
- AMQP를 구현한 오픈 소스 기반 메시지 브로커 소프트웨어
- 사용자가 웹서버를 통해 데이터를 업로드 시, AI를 활용한 처리를 위해 활용
- GPU 서버 부족으로 사용량에 따라 consumer를 추가할 수 있도록하여 추후 AI 서버 추가 가능
- durable을 True로 설정하여 queue의 데이터를 디스크에 저장하여 안정성 및 지속성 향상
- PostgreSQL
- 객체-관계형 데이터베이스 관리 시스템
- 안정성 및 효율을 위해서 Django의 내장 DB가 아닌 PostgreSQL을 사용
- AI
- Whisper
- OpenAI에서 개발한 STT(Speech To Text) 모델
- 성능과 처리속도를 고려하여 가장 최근에 배포된 "large-v3-turbo"모델 활용
- 추후 파인튜닝 진행 예정
- Pyannote
- 화자 분할을 위한 오픈 소스 툴킷
- 화자 분할(Speaker Diarization) 분야에서 SOTA 모델에 속하는 Pyannote 활용
- 가장 최근에 배포된 "pyannote/speaker-diarization-3.1" 모델 활용
- Mitral AI
- 오픈 소스 기반 LLM 모델을 활용할 수 있는 서비스
- 웹 기반 서비스 이외에도 API 서비스를 제공하기 때문에 API 키 발급 후 무료로 API 활용 가능
- 서비스에서 제공된 모델 중 "mistral-medium"를 활용
- Whisper
2. 서버 구조
- WEB 서버
- Django 기반 웹 서버로 사용자 정보 및 음원 데이터를 DB서버에 저장
- 새로운 노트 생성 시 RabbitMQ의 큐에 AI 처리 요청 메시지 전송
- AI 서버
- RabbitMQ의 큐에서 요청 메시지 수신 후 AI 모델 로딩 후 데이터 처리
- 음원 파일을 STT 처리하고, 화자 분할하여 json 결과 생성
- mistral AI의 API를 활용해 json 결과를 전송하고 요약 및 키워드 추출 결과 수신
- 가용 서버 자원 부족으로 요약 및 키워드 추출 API 활용 중이지만 추후 수정 예정
- 처리된 결과를 순차적으로 DB 서버에 전송
- Database 서버
- PostgreSQL 기반의 DB 서버로 사용자 및 노트 정보 저장
- 비밀번호를 비롯한 개인 정보는 암호화되어 저장
- Oauth2를 활용한 소셜 계정 로그인 시 최소한의 정보 활용으로 개인 정보 최소화
- RabbitMQ 서버
- STT 및 화자 분할 요청 메시지 큐와 요약을 위한 요청 메시지 큐 분리
- 큐의 지속성을 부여하기 위해 durable을 True로 설정
- 메시지의 유실 방지 및 안정적인 처리를 위해 큐의 메타데이터를 디스크에 저장하도록 설정