IT 인터넷

🎙️ Whisper로 음성 명령까지 처리하는 오프라인 GPT 챗봇 만들기

fnm 2025. 5. 3. 18:08
반응형

 

🎙️ Whisper로 음성 명령까지 처리하는 오프라인 GPT 챗봇 만들기

음성으로 GPT 챗봇을 조작할 수 있다면 어떨까요?
그것도 인터넷 없이, 스마트폰 안에서만 작동하는 구조라면?

이번 글에서는 로컬 환경에서 작동하는 음성 인식 + GPT 챗봇을 만드는 방법을 소개합니다. 핵심은 바로 Meta의 Whisper 모델을 사용한 STT(Speech-to-Text)와 LLaMA 기반 LLM을 연결하는 것입니다.

📌 목표 기능

  • 🎙️ 스마트폰 마이크로 음성 입력
  • 🧠 Whisper로 로컬에서 텍스트 변환
  • 🤖 GPT가 입력 내용을 이해하고 응답
  • 📴 전 과정 오프라인 처리

🧩 시스템 구성요소

기능 기술 스택 역할
음성 녹음 Flutter Sound / MediaRecorder 사용자 마이크 입력 저장
STT 변환 Whisper.cpp 오디오 → 텍스트
질문 응답 llama.cpp + LLaMA2 GPT 응답 생성

🛠️ 설치 전 준비사항

  • 📱 Android NDK 설치 (Whisper.cpp, llama.cpp 빌드용)
  • 🧠 모델 준비: ggml-base.en.bin (Whisper) + llama-7b.Q4_K_M.gguf
  • 🧩 JNI 인터페이스를 통해 두 모델 연결

📲 Flutter 구현 흐름

  1. 음성 녹음 버튼 UI → WAV 파일 저장
  2. MethodChannel로 Whisper.cpp 호출
  3. 텍스트 결과를 GPT로 전달
  4. GPT 응답을 화면에 출력 또는 음성합성 (TTS) 추가 가능

📂 예시 코드 조각

// Flutter (main.dart)
ElevatedButton(
  onPressed: () async {
    await startRecording();
  },
  child: Text("🎙️ 녹음 시작"),
)

Future<void> processAudio() async {
  final text = await whisperChannel.invokeMethod("transcribe", {"file": "audio.wav"});
  final response = await llamaChannel.invokeMethod("respond", {"prompt": text});
  setState(() => outputText = response);
}

💡 성능 팁

  • 🔉 16kHz mono PCM 형식으로 저장해야 Whisper 호환
  • ⚙️ Whisper.cpp는 base.en 모델 기준 평균 3초 이내 텍스트 변환
  • 📦 전체 APK 빌드 시 모델 압축 고려 (zip+split)

📌 Whisper.cpp 설치 요약 (Linux 기준)

git clone https://github.com/ggerganov/whisper.cpp
cd whisper.cpp
make
./main -m models/ggml-base.en.bin -f samples/audio.wav

📱 실제 활용 예시

  • 👨‍🏫 수업 내용을 질문하면 요약해주는 AI
  • 🛠️ 현장에서 장비 설명서 없이도 음성으로 도움 요청
  • 👩‍🍳 요리 중 손대지 않고 레시피 질의
  • 🚗 운전 중 길안내나 차량 매뉴얼 질문

🔚 마무리

Whisper를 통해 스마트폰에서도 충분히 정밀한 음성 인식을 구현할 수 있고, llama.cpp와 연동하면 GPT 수준의 응답까지도 오프라인에서 가능합니다.
이 모든 기능을 손바닥 안에 담는 일은 이제 누구나 도전할 수 있습니다.

다음 글에서는 여기에 GPT가 음성으로 직접 말하게 하는 TTS(Text-to-Speech) 연동까지 소개드릴 예정입니다. 🎧

반응형