아동 언어치료 현장의 음성 기록, 전사, 발화 분석, 치료 리포트 작성을 보조하기 위한 AI 기반 언어치료 지원 플랫폼
UtterAI는 언어치료 세션에서 발생하는 음성 데이터를 기반으로
아동, 치료사, 보호자의 발화를 구분하고, 음성을 텍스트로 전사한 뒤,
언어 발달 지표와 치료 기록 작성에 필요한 정보를 자동으로 정리하는 서비스입니다.
기존 언어치료 현장에서는 아동의 발화를 직접 듣고 받아 적거나,
수작업으로 치료 기록지를 작성해야 하는 경우가 많습니다.
이 과정은 시간이 오래 걸리고, 치료사마다 기록 방식이 달라질 수 있으며,
세션 이후 행정 업무 부담이 커지는 문제가 있습니다.
UtterAI는 이러한 문제를 해결하기 위해
음성 처리 AI, STT, 화자 분리, RAG 기반 참고 문서 검색, 계산 지표 분석을 결합하여
치료사가 더 빠르고 일관성 있게 기록을 작성할 수 있도록 돕는 것을 목표로 합니다.
- 언어치료 세션 음성을 업로드하면 자동으로 분석 흐름을 수행합니다.
- 아동, 치료사, 보호자의 발화를 구분합니다.
- 음성을 텍스트로 전사합니다.
- 치료 기록에 필요한 언어 분석 지표를 계산합니다.
- RAG를 활용하여 참고 문서나 기준표를 검색합니다.
- 최종적으로 치료사가 검토 가능한 리포트 초안을 생성합니다.
| 문제 | 설명 |
|---|---|
| 수기 전사의 부담 | 치료사가 세션 음성을 직접 듣고 받아 적어야 함 |
| 화자 구분의 어려움 | 아동, 보호자, 치료사 발화가 섞이면 분석이 어려움 |
| 기록 품질의 편차 | 치료사마다 기록 방식과 표현이 달라질 수 있음 |
| 리포트 작성 시간 증가 | 치료 이후 행정 업무에 많은 시간이 소요됨 |
| 참고 문서 탐색 비용 | 검사 기준, 치료 기준, 문서 근거를 매번 찾아야 함 |
| 사용자 | 주요 사용 목적 |
|---|---|
| 언어치료사 | 세션 음성 전사, 발화 분석, 치료 기록 초안 생성 |
| 언어치료 센터 | 치료 기록 관리, 업무 효율화, 데이터 기반 상담 지원 |
| 보호자 | 치료 결과 요약 확인, 아동 발화 변화 이해 |
| 관리자 | 사용자, 세션, 리포트, 시스템 상태 관리 |
[사용자]
|
v
[음성 파일 업로드]
|
v
[VAD: 음성 구간 탐지]
|
v
[화자 분리: 치료사 / 아동 / 보호자 구분]
|
v
[ASR/STT: 음성 -> 텍스트 전사]
|
v
[전사 결과 정리 및 후처리]
|
v
[언어 분석 지표 계산]
|
v
[RAG 기반 참고 문서 검색]
|
v
[리포트 초안 생성]
|
v
[치료사 검토 및 수정]
|
v
[최종 리포트 저장 / 다운로드]
- 치료 세션 음성 파일을 업로드합니다.
- 업로드된 음성은 분석 파이프라인의 입력으로 사용됩니다.
- 원본 음성, 처리 상태, 결과 파일을 분리하여 관리합니다.
VAD는 Voice Activity Detection의 약자입니다.
음성 파일에서 사람이 말한 구간과 침묵 구간을 구분합니다.
예시:
전체 음성: 0초 ~ 600초
탐지 결과:
- 12.3초 ~ 18.5초: speech
- 24.1초 ~ 30.7초: speech
- 45.0초 ~ 51.2초: speech
VAD를 먼저 수행하면 이후 STT와 화자 분리 과정에서
불필요한 침묵 구간을 줄일 수 있습니다.
화자 분리는 하나의 음성 파일 안에서
누가 언제 말했는지를 구분하는 작업입니다.
예시:
00:00:12 ~ 00:00:18 SPEAKER_00
00:00:19 ~ 00:00:22 SPEAKER_01
00:00:25 ~ 00:00:29 SPEAKER_00
서비스에서는 이후 단계에서 다음과 같이 매핑할 수 있습니다.
SPEAKER_00 -> 치료사
SPEAKER_01 -> 아동
SPEAKER_02 -> 보호자
ASR은 Automatic Speech Recognition의 약자입니다.
STT는 Speech To Text의 약자입니다.
즉, 음성을 텍스트로 바꾸는 기술입니다.
예시:
입력: 아동 음성
출력: "엄마랑 같이 공원에 갔어요."
STT 결과는 그대로 사용하기 어렵기 때문에
서비스에서 다음과 같은 후처리를 수행합니다.
- 문장 단위 분리
- 화자별 발화 정리
- 시간 구간 매핑
- 불필요한 반복 제거
- 특수 기호 정리
- 치료 기록에 맞는 표현으로 정돈
전사된 아동 발화를 기반으로
언어 발달 분석에 필요한 지표를 계산합니다.
예시 지표:
| 지표 | 설명 |
|---|---|
| 발화 수 | 아동이 말한 전체 발화 개수 |
| 평균 발화 길이 | 발화당 평균 단어 수 또는 형태소 수 |
| 어휘 다양도 | 사용한 서로 다른 단어의 비율 |
| 응답 지연 | 치료사 질문 이후 아동이 응답하기까지 걸린 시간 |
| 발화 비율 | 전체 세션 중 아동 발화가 차지하는 비율 |
| 침묵 비율 | 세션 중 침묵 구간의 비율 |
RAG는 Retrieval-Augmented Generation의 약자입니다.
생성형 AI가 답변을 만들기 전에, 관련 문서를 먼저 검색하고
그 검색 결과를 근거로 답변을 생성하는 방식입니다.
UtterAI에서는 다음과 같은 자료를 검색 대상으로 둘 수 있습니다.
- 언어 발달 검사 기준 문서
- 치료 기록 작성 가이드
- 센터 내부 템플릿
- 언어치료 관련 참고 자료
- 평가 항목 설명 문서
흐름:
사용자 질문 또는 리포트 생성 요청
|
v
문서 검색
|
v
관련 문단 추출
|
v
LLM에 근거 문서와 함께 전달
|
v
근거 기반 리포트 초안 생성
| 단계 | 모델 / 도구 | 역할 | 입력 | 출력 |
|---|---|---|---|---|
| 1 | Silero VAD | 음성 구간 탐지 | 원본 음성 | speech start/end |
| 2 | pyannote speaker diarization | 화자 분리 | 음성 파일 | speaker별 시간 구간 |
| 3 | Whisper 계열 ASR | 음성 전사 | 발화 구간 음성 | 텍스트 |
| 4 | Kiwi | 한국어 형태소 분석 | 전사 텍스트 | 형태소, 품사 |
| 5 | Vector DB | 문서 검색 | 임베딩 벡터 | 관련 문서 |
| 6 | LLM | 리포트 초안 생성 | 전사 결과 + 계산 지표 + 검색 문서 | 리포트 초안 |
초기에는 개발과 검증이 쉬운 구조를 우선하고,
이후 사용량과 보안 요구사항에 따라 확장하는 방향으로 설계합니다.
[Client]
|
v
[CloudFront]
|
v
[S3 Static Hosting]
|
v
[API Gateway or ALB]
|
v
[Backend API Service]
|
+--------------------+
| |
v v
[AI Inference Service] [RAG Service]
| |
v v
[Model Storage] [Vector DB]
|
v
[Object Storage: Audio / Result Files]
[Backend API Service]
|
v
[RDS PostgreSQL]
[All Services]
|
v
[CloudWatch Logs / Metrics]
| 영역 | AWS 서비스 | 역할 |
|---|---|---|
| 정적 웹 호스팅 | S3, CloudFront | 프론트엔드 배포 |
| API 진입점 | API Gateway 또는 ALB | 클라이언트 요청 라우팅 |
| 백엔드 실행 | ECS Fargate 또는 EKS | API 서버 실행 |
| AI 추론 | ECS, EKS, EC2 GPU Worker | 모델 추론 실행 |
| 비동기 처리 | SQS | 음성 분석 작업 큐 |
| 파일 저장 | S3 | 음성 파일, 분석 결과 저장 |
| 메타데이터 DB | RDS PostgreSQL | 사용자, 세션, 리포트 정보 저장 |
| 벡터 검색 | OpenSearch, pgvector, Pinecone 등 | RAG 문서 검색 |
| 로그/모니터링 | CloudWatch | 로그, 메트릭, 알람 |
| 보안 | IAM, Secrets Manager, WAF | 권한, 비밀값, 웹 보안 |
| CI/CD | GitHub Actions, ECR | 이미지 빌드 및 배포 |
현재 조직은 기능별 repository를 분리하여 관리합니다.
| Repository | 역할 |
|---|---|
UtterAI_FE |
프론트엔드 애플리케이션 |
UtterAI_BE |
백엔드 API 서버 |
UtterAI_AI |
AI 모델 추론 및 분석 파이프라인 |
UtterAI_Infra |
AWS 인프라, Terraform, 배포 구성 |
UtterAI_Docs |
프로젝트 문서, 회의록, 설계 자료 |
프론트엔드 애플리케이션을 관리합니다.
주요 역할:
- 로그인 / 회원가입 화면
- 음성 파일 업로드 화면
- 분석 상태 확인 화면
- 전사 결과 확인 화면
- 리포트 조회 및 수정 화면
- 관리자 화면
예상 기술 스택:
React
TypeScript
Vite
Tailwind CSS
Axios
TanStack Query
서비스의 핵심 API 서버를 관리합니다.
주요 역할:
- 사용자 인증
- 음성 파일 업로드 API
- 분석 작업 생성
- AI 서비스 호출
- 리포트 저장 및 조회
- RAG 검색 요청 처리
- 관리자 기능 제공
예상 기술 스택:
FastAPI 또는 Spring Boot
PostgreSQL
Redis
S3 SDK
JWT
OpenAPI / Swagger
AI 모델 추론 및 분석 파이프라인을 관리합니다.
주요 역할:
- VAD 실행
- 화자 분리 실행
- STT 실행
- 한국어 형태소 분석
- 언어 분석 지표 계산
- RAG 검색용 임베딩 생성
- 분석 결과 JSON 생성
예상 기술 스택:
Python
FastAPI
PyTorch
ONNX Runtime
Whisper
pyannote.audio
Kiwi
LangChain or LangGraph
Vector DB
AWS 인프라와 배포 자동화를 관리합니다.
주요 역할:
- VPC 구성
- ECS 또는 EKS 구성
- RDS 구성
- S3 구성
- CloudFront 구성
- API Gateway 또는 ALB 구성
- IAM Role 구성
- GitHub Actions OIDC 구성
- Terraform 상태 관리
예상 기술 스택:
Terraform
AWS
Docker
ECR
ECS Fargate
CloudWatch
GitHub Actions
프로젝트 문서와 설계 자료를 관리합니다.
주요 역할:
- 기획 문서
- 요구사항 정의서
- API 명세
- ERD
- 아키텍처 설계서
- 회의록
- 발표 자료
- 기술 조사 자료
git clone https://github.com/UtterAI-aws13/UtterAI_FE.git
cd UtterAI_FE
npm install
npm run devgit clone https://github.com/UtterAI-aws13/UtterAI_BE.git
cd UtterAI_BE
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reloadgit clone https://github.com/UtterAI-aws13/UtterAI_AI.git
cd UtterAI_AI
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reloadgit clone https://github.com/UtterAI-aws13/UtterAI_Infra.git
cd UtterAI_Infra
terraform init
terraform plan기본 브랜치 전략은 다음과 같이 시작합니다.
main
└── develop
├── feature/login
├── feature/audio-upload
├── feature/stt-pipeline
├── feature/report
└── fix/upload-error
| 브랜치 | 역할 |
|---|---|
main |
배포 가능한 안정 버전 |
develop |
개발 통합 브랜치 |
feature/* |
기능 개발 |
fix/* |
버그 수정 |
docs/* |
문서 수정 |
infra/* |
인프라 변경 |
feat: 새로운 기능 추가
fix: 버그 수정
docs: 문서 수정
style: 코드 포맷팅
refactor: 리팩토링
test: 테스트 코드 추가
chore: 설정 변경
infra: 인프라 코드 변경
예시:
git commit -m "feat: add audio upload api"
git commit -m "docs: update ai pipeline description"
git commit -m "infra: add ecs service terraform module"PR 작성 시 다음 내용을 포함합니다.
## 작업 내용
- 구현한 기능
- 수정한 내용
- 변경된 파일
## 테스트 결과
- 로컬 실행 여부
- API 테스트 결과
- 화면 캡처 또는 로그
## 확인 필요 사항
- 리뷰어가 확인해야 할 부분
- 아직 미완성인 부분Issue는 다음과 같이 분류합니다.
| Label | 설명 |
|---|---|
feature |
새로운 기능 |
bug |
오류 수정 |
docs |
문서 작업 |
infra |
인프라 작업 |
ai |
AI 모델 관련 작업 |
backend |
백엔드 작업 |
frontend |
프론트엔드 작업 |
question |
논의 필요 |
User
Session
AudioFile
Transcript
SpeakerSegment
AnalysisResult
Report
Document
Embedding
User 1 : N Session
Session 1 : N AudioFile
Session 1 : N Transcript
Session 1 : N AnalysisResult
Session 1 : N Report
Document 1 : N Embedding
UtterAI는 음성 데이터와 치료 기록을 다루기 때문에
개인정보와 민감 정보 보호를 중요하게 고려합니다.
- 최소 권한 IAM 적용
- 음성 파일 접근 권한 제한
- S3 버킷 public access 차단
- 전송 구간 HTTPS 적용
- 민감 정보 로그 출력 금지
- Secrets Manager 또는 Parameter Store로 비밀값 관리
- 관리자 API 접근 제한
- 사용자별 데이터 접근 제어
로그에는 다음 정보를 남기지 않습니다.
- 원본 음성 내용
- 전체 전사 텍스트
- 개인정보
- 민감한 상담 내용
- 보호자 연락처
대신 다음과 같은 메타데이터 중심 로그를 남깁니다.
- request_id
- user_id
- session_id
- processing_status
- latency_ms
- error_code
- model_version
음성 분석은 시간이 오래 걸릴 수 있으므로
API 요청에서 즉시 모든 분석을 끝내기보다 비동기 처리 구조를 사용합니다.
[Client]
|
v
[Upload API]
|
v
[S3에 음성 저장]
|
v
[SQS에 분석 작업 등록]
|
v
[AI Worker가 작업 수신]
|
v
[VAD / Diarization / STT / Analysis 실행]
|
v
[결과 저장]
|
v
[Client가 상태 조회]
장점:
- 긴 분석 작업으로 인한 API timeout 방지
- 작업 재시도 가능
- AI Worker 수평 확장 가능
- 대용량 음성 처리에 유리
Frontend: S3 + CloudFront
Backend: ECS Fargate
AI Service: ECS Fargate or EC2
Database: RDS PostgreSQL
Storage: S3
CI/CD: GitHub Actions
Frontend: S3 + CloudFront
Backend: EKS
AI Worker: EKS Node Group or GPU EC2
Database: RDS Multi-AZ
Queue: SQS
Vector DB: OpenSearch or pgvector
Observability: CloudWatch + Prometheus + Grafana
GitHub Actions를 사용해 자동 빌드 및 배포를 구성합니다.
[GitHub Push]
|
v
[GitHub Actions]
|
v
[Test]
|
v
[Docker Build]
|
v
[Push to ECR]
|
v
[Deploy to ECS or EKS]
보안상 AWS Access Key를 직접 저장하지 않고,
GitHub Actions OIDC를 사용하여 AWS IAM Role을 Assume하는 방식을 권장합니다.
서비스 운영 시 다음 지표를 수집합니다.
| 지표 | 설명 |
|---|---|
| API latency | API 응답 시간 |
| API error rate | API 오류율 |
| Upload success rate | 음성 업로드 성공률 |
| STT processing time | STT 처리 시간 |
| AI job failure rate | AI 분석 실패율 |
| Queue depth | 대기 중인 분석 작업 수 |
| DB connection count | DB 연결 수 |
| S3 upload size | 업로드 파일 크기 |
| Report generation time | 리포트 생성 시간 |
| 상황 | 처리 |
|---|---|
| 음성 파일 업로드 실패 | 재업로드 안내 |
| 지원하지 않는 파일 형식 | 파일 형식 오류 반환 |
| AI 분석 실패 | 작업 상태를 failed로 변경 |
| STT 결과 없음 | 빈 전사 결과 안내 |
| RAG 검색 실패 | 참고 문서 없이 기본 리포트 생성 |
| 리포트 생성 실패 | 재시도 버튼 제공 |
- 프론트엔드 기본 화면 구현
- 백엔드 기본 API 구현
- 음성 업로드 기능
- STT 단일 모델 연동
- 전사 결과 조회
- 기본 리포트 생성
- VAD 적용
- 화자 분리 적용
- 형태소 분석 적용
- 언어 지표 계산
- AI 분석 결과 JSON 표준화
- 참고 문서 업로드
- 문서 chunking
- 임베딩 생성
- Vector DB 저장
- 리포트 생성 시 근거 문서 검색
- S3 + CloudFront 프론트엔드 배포
- ECS 기반 백엔드 배포
- RDS PostgreSQL 구성
- S3 음성 파일 저장
- CloudWatch 로그 수집
- SQS 기반 비동기 분석
- AI Worker 수평 확장
- 관리자 대시보드
- 알람 구성
- 비용 최적화
- 보안 정책 강화
프로젝트 문서는 UtterAI_Docs repository에서 관리합니다.
추천 구조:
UtterAI_Docs/
├── 01_planning/
│ ├── project-overview.md
│ ├── user-persona.md
│ └── requirements.md
├── 02_architecture/
│ ├── system-architecture.md
│ ├── cloud-architecture.md
│ └── ai-pipeline.md
├── 03_api/
│ ├── backend-api.md
│ └── ai-api.md
├── 04_database/
│ ├── erd.md
│ └── schema.md
├── 05_meeting/
│ └── weekly-meeting.md
└── 06_presentation/
└── final-presentation.md
- 모든 작업은 Issue 기반으로 관리합니다.
- 기능 개발은 feature 브랜치에서 진행합니다.
- main 브랜치에는 직접 push하지 않습니다.
- PR은 최소 1명 이상의 리뷰 후 merge합니다.
- 문서 변경도 PR을 통해 기록합니다.
- API 변경 시 문서를 함께 수정합니다.
- 인프라 변경 시 plan 결과를 PR에 첨부합니다.
현재 프로젝트는 팀 내부 개발 단계입니다.
라이선스는 추후 프로젝트 공개 범위에 따라 결정합니다.
UtterAI는 언어치료 세션 음성을 AI로 분석하여
전사, 화자 분리, 언어 지표 계산, RAG 기반 리포트 생성을 지원하는
클라우드 기반 언어치료 업무 보조 플랫폼입니다.