들어가며: 오프라인 회의 비서 AI가 필요한 이유
아직도 회의는 업무 시간의 상당 부분을 차지하지만, 그 내용을 효율적으로 문서화하는 것은 늘 시간을 많이 필요로 하는 루틴한 업무 중 하나이다. 특히 재택과 사무실을 오가는 하이브리드 근무 환경에서는 모든 팀원이 회의 내용을 정확히 파악하는 것이 더욱 중요해졌다. 하지만 수동으로 회의록을 작성하는 일은 누군가의 집중력을 분산시키고, 사람의 기억에 의존하다 보니 중요한 내용이 누락되기도 한다.
이런 문제를 해결하기 위해 AI 기반 회의 비서 시스템이 등장했지만, 대부분의 솔루션은 클라우드 의존적이라 기업 내부 정보가 외부로 유출될 위험이 있고, 구독형 서비스라 비용 부담도 있다.
그래서 오늘은 이러한 한계를 극복한 자체 호스팅 가능한 오프라인 회의 비서 AI라고 할 수 있는 n8n 워크플로우를 소개하려고 한다.
가장 쉽게 위 워크플로우를 구현하는 방법은 OpenAI API를 유료로 구매해서 사용하는 것이다. 그러면 누구나 쉽게 구현이 가능할 것이다. 하지만, 매번 회의시마다 일정 금액이 나가야 하기 때문에 단순하게 회의 내용 전체를 오디오에서 텍스트로 변환하고자 한다면 유료로 OpenAI API를 구독하지 않고 로컬로 Whisper라는 라이브러리를 설치해서 사용하면 된다.
아래에서는 오픈소스 워크플로우 자동화 도구인 n8n, 로컬에서 실행 가능한 Whisper 음성 인식 엔진, 그리고 자체 호스팅 가능한 LLM(Large Language Model) 또는 선택적으로 클라우드 LLM API를 조합하여 강력한 회의 비서 시스템을 구축하는 방법을 단계별로 안내해 보도록 하겠다.
오프라인 회의 비서 AI 시스템 개요
우리가 만들 오프라인 회의 비서 AI는 다음과 같은 흐름으로 작동합니다:
- 오디오 입력: 회의실 마이크 또는 녹음 파일에서 음성 데이터 수집
- 음성 인식: Whisper.cpp 또는 OpenAI Whisper API를 사용한 실시간/배치 음성-텍스트 변환
- 회의록 가공: LLM(로컬 또는 클라우드)을 사용한 텍스트 요약 및 핵심 포인트 추출
- 배포: n8n을 통해 이메일, 슬랙, 노션 등으로 자동 배포
각 단계별로 로컬(오프라인) 옵션과 클라우드 옵션을 모두 제공하여, 각자의 상황과 요구사항에 맞게 구성할 수 있습니다.
1. 시스템 구성 요소 선택하기
하드웨어 요구사항
가장 먼저 고려해야 할 것은 하드웨어입니다. 완전 오프라인 방식을 채택한다면 다음과 같은 사양이 권장됩니다:
- 최소 요구사항: Intel N100 또는 AMD 동급 프로세서, 16GB RAM, 128GB SSD
- 권장 요구사항: Core i5/Ryzen 5 이상, 32GB RAM, 256GB 이상 SSD, NVIDIA GPU(선택사항)
저전력 미니PC에서도 기본적인 기능은 충분히 구현 가능하지만, 대용량 LLM이나 실시간 전사 기능을 활용하려면 더 높은 사양이 필요할 수 있습니다.
소프트웨어 구성요소
- n8n: 워크플로우 자동화 도구로, 다양한 서비스와 앱을 코드 없이 연결
- Whisper 엔진:
- 로컬 옵션: Whisper.cpp (C++ 기반 경량화 버전)
- 클라우드 옵션: OpenAI Whisper API
- LLM(텍스트 요약 및 정리):
- 로컬 옵션: Ollama(Llama 3), DeepSeek-R1, OpenChat 등
- 클라우드 옵션: OpenAI GPT 모델, Claude, PaLM API 등
2. n8n 설치하기
n8n은 노드 기반 워크플로우 자동화 도구로, 다양한 앱과 서비스를 연결하여 복잡한 자동화 시나리오를 구현할 수 있게 해줍니다. Docker를 사용한 설치 방법이 가장 간편하고 권장됩니다.
Docker를 이용한 n8n 설치
- Docker와 Docker Compose가 설치되어 있는지 확인합니다.
- 다음 내용으로 docker-compose.yml 파일을 생성합니다:
version: "3"
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=password
- N8N_HOST=localhost
- WEBHOOK_TUNNEL_URL=http://localhost:5678/
volumes:
- ~/.n8n:/home/node/.n8n
- 다음 명령어로 n8n을 실행합니다:
docker-compose up -d
- 브라우저에서 http://localhost:5678로 접속하여 n8n 대시보드에 로그인합니다.
직접 설치 방법 (Node.js 환경)
Node.js 환경이 있다면 다음과 같이 간단히 설치할 수도 있습니다:
npm install n8n -g
n8n
3. Whisper 음성 인식 설정하기
음성을 텍스트로 변환하는 Whisper는 로컬 설치와 API 사용 두 가지 방식으로 활용 가능합니다.
로컬 Whisper.cpp 설치 및 설정
Whisper.cpp는 OpenAI의 Whisper를 C++로 구현하여 최적화한 버전으로, GPU 없이도 CPU에서 효율적으로 실행됩니다.
- Whisper.cpp 저장소 클론하기:
git clone https://github.com/ggerganov/whisper.cpp.git
cd whisper.cpp
- 컴파일하기:
make
- 모델 다운로드:
# small 모델 다운로드 (권장)
bash ./models/download-ggml-model.sh small
# 또는 medium 모델 (정확도 높음)
bash ./models/download-ggml-model.sh medium
- 마이크에서 실시간 음성 인식 테스트:
# 실시간 마이크 입력을 SRT 형식으로 출력
./stream -m models/ggml-small.bin -f mic -ot srt -np
OpenAI Whisper API 설정 (클라우드 옵션)
클라우드 방식을 선호하거나 로컬 리소스가 제한적이라면, OpenAI의 Whisper API를 활용할 수 있습니다.
- OpenAI API 키를 발급받습니다 (https://platform.openai.com).
- API 키를 환경 변수로 설정합니다:
export OPENAI_API_KEY="your-api-key"
n8n에서는 별도 설정 과정 없이 HTTP Request 노드를 사용하여 Whisper API에 직접 요청을 보낼 수 있습니다.
4. LLM 설정하기 - 텍스트 요약 및 정리
회의 전사본을 요약하고 핵심 포인트를 추출하기 위해 LLM(대규모 언어 모델)을 사용합니다. 로컬 LLM과 클라우드 LLM 중 선택할 수 있습니다.
로컬 LLM 설정 (Ollama + Llama 3)
Ollama는 로컬에서 다양한 LLM을 쉽게 실행할 수 있게 해주는 도구입니다.
- Ollama 설치:
# macOS 또는 Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows는 공식 웹사이트에서 설치 프로그램 다운로드
- Llama 3 모델 다운로드:
ollama pull llama3
- 모델 실행 및 테스트:
ollama run llama3
OpenAI API 설정 (클라우드 LLM 옵션)
높은 품질의 요약이 필요하거나 로컬 리소스가 제한적인 경우, OpenAI의 GPT 모델을 사용할 수 있습니다.
- 앞서 발급받은 OpenAI API 키를 사용합니다.
- n8n에서 OpenAI 노드를 추가하고, API 키를 입력합니다.
5. n8n 워크플로우 구축하기
이제 n8n을 사용하여 전체 파이프라인을 연결하는 워크플로우를 만들어보겠습니다.
1) 로컬 Whisper를 이용한 워크플로우
A. Execute Command 노드를 사용한 방법
- 새 워크플로우 생성
- 트리거 노드 추가 (예: Webhook, 스케줄 등)
- Execute Command 노드 추가 및 설정:
- 명령어: cd /path/to/whisper.cpp && ./stream -m models/ggml-small.bin -f mic -ot srt -of /path/to/output.srt -np
B. Python 스크립트를 통한 방법
- 다음과 같은 Python 스크립트 생성 (whisper_transcribe.py):
import sys
import json
import whisper
def transcribe_audio():
# 명령줄 인수로 오디오 파일 경로 받기
if len(sys.argv) < 2:
print(json.dumps({"error": "오디오 파일 경로를 입력해주세요"}))
sys.exit(1)
audio_path = sys.argv[1]
# 추가 옵션 (있을 경우)
model_size = "medium"
language = "ko"
if len(sys.argv) > 2:
model_size = sys.argv[2]
if len(sys.argv) > 3:
language = sys.argv[3]
try:
# Whisper 모델 로드
model = whisper.load_model(model_size)
# 음성 파일 변환
result = model.transcribe(audio_path, language=language)
# 결과 반환 (JSON 형식)
output = {
"text": result["text"],
"segments": [{"start": segment["start"], "end": segment["end"], "text": segment["text"]}
for segment in result["segments"]]
}
print(json.dumps(output))
except Exception as e:
print(json.dumps({"error": str(e)}))
sys.exit(1)
if __name__ == "__main__":
transcribe_audio()
- Execute Command 노드에서 스크립트 실행:
- 명령어: python3 /path/to/whisper_transcribe.py /path/to/audio.mp3 medium ko
2) OpenAI API를 이용한 워크플로우
- 새 워크플로우 생성
- 트리거 노드 추가
- HTTP Request 노드 추가 및 설정:
- URL: https://api.openai.com/v1/audio/transcriptions
- 메소드: POST
- 인증: Bearer Token (OpenAI API 키)
- 바이너리 데이터 전송 활성화 (파일 필드: file)
- 추가 파라미터: model: whisper-1, language: ko
3) LLM을 이용한 요약 단계
A. 로컬 LLM (Ollama)
- HTTP Request 노드 추가:
- URL: http://localhost:11434/api/generate
- 메소드: POST
- 바디:
{ "model": "llama3", "prompt": "다음 회의 내용을 요약하고, 주요 논의 사항과 액션 아이템을 추출해주세요:\n\n{{$node.WhisperOutput.json.text}}", "stream": false}
B. OpenAI API (GPT 모델)
- OpenAI 노드 추가:
- 작업: Create Chat Completion
- 모델: gpt-4o-mini 또는 gpt-4
- 메시지: 시스템 역할에 "회의 내용을 요약하고 주요 논의 사항과 액션 아이템을 추출하는 비서입니다."를 입력
- 사용자 메시지에 {{$node.WhisperOutput.json.text}}를 입력
4) 결과 배포 단계
- Markdown 노드 추가:
- Markdown 형식으로 요약 내용 구성
- 배포 노드 추가 (선택):
- Email 노드: 팀에 이메일로 전송
- Slack 노드: 슬랙 채널에 게시
- Google Drive 노드: 구글 드라이브에 저장
- Notion 노드: 노션 데이터베이스에 추가
6. 성능 최적화 팁
음성 인식 품질 향상
- 고품질 마이크 사용: 지향성 콘퍼런스 마이크 또는 노이즈 캔슬링 기능이 있는 마이크 사용
- 샘플링 품질: 16 kHz 이상, 16-bit PCM으로 녹음
- Whisper 설정 최적화:
- small 또는 medium 모델 사용 (N100급 미니PC에서도 real-time × 1.05 속도로 동작)
- --step 0.25 옵션으로 프레임 길이 조정
- --max-line-length 0으로 긴 발언도 분절 없이 처리
LLM 요약 품질 향상
- 컨텍스트 제공: 회의 주제, 참석자 정보 등 요약 전에 LLM에 컨텍스트 제공
- 프롬프트 최적화: 구체적인 지시 포함 (예: "다음 사항을 포함해 요약: 1) 주요 논의사항 2) 결정사항 3) 액션 아이템")
- 청크 처리: 긴 회의는 15-20분 단위로 나누어 처리 후 통합
시스템 성능 최적화
- 병렬 처리: 음성 인식과 요약 과정을 병렬화
- 배치 처리: 실시간이 필요 없다면 회의 후 배치 처리
- 캐싱: 반복적인 LLM 요청은 결과를 캐싱하여 비용 절감
7. 시스템 확장 아이디어
- 발언자 구분: Pyannote 또는 다른 화자 분할(diarization) 도구 통합
- 실시간 슬라이딩 윈도우 요약: 5분마다 실시간 요약 업데이트
- RAG(Retrieval-Augmented Generation): 이전 회의록 참조하여 요약에 컨텍스트 추가
- 다국어 지원: 다양한 언어로 회의 전사 및 요약 제공
- 질문-응답 기능: 회의록을 기반으로 질문에 답하는 기능 추가
비용 비교: 로컬 vs 클라우드
로컬 솔루션 비용
- 초기 하드웨어 투자: 미니PC(N100) 기준 약 30-50만원
- 전력 소모: 일 8시간 사용 기준 월 약 5-10천원
- 유지 보수: 시스템 관리 및 업데이트에 시간 투자 필요
클라우드 솔루션 비용
- Whisper API: 1시간 오디오당 약 $0.60
- GPT-4.1 mini API: 회의 요약시 약 $0.10-0.20/회의
- 월간 비용 추정: 월 20회 (각 1시간) 회의 기준 약 $15-20
하이브리드 접근법 (추천)
N100급 미니PC에서도 충분히 구동 가능한 로컬 Whisper + 클라우드 LLM 조합이 비용과 성능 면에서 좋은 균형을 제공합니다:
- 전사는 로컬에서 처리하여 데이터 보안 강화 및 API 비용 절감
- 요약은 클라우드 LLM을 사용하여 높은 품질 확보
마치며
이 글에서는 n8n, Whisper, LLM을 활용하여 자체 호스팅 가능한 오프라인 회의 비서 AI 시스템을 구축하는 방법을 살펴보았다.
완전 로컬 솔루션부터 하이브리드 방식, 그리고 클라우드 기반 솔루션까지 다양한 방법으로 조합을 할 수 있어서, 각자의 환경과 요구사항에 맞게 선택해야 하는 문제 아닌 문제가 있었다. 선택권이 많으니 실제 적용하려면 약간의 고생이 필요할 듯 싶다.
오픈소스 도구들을 조합하여 구축한 이 시스템은 비용 효율적이며, 데이터 프라이버시를 보장하면서도 상용 솔루션에 필적하는 기능을 제공할 것이라고 생각한다. 특히 중소기업이나 프리랜서, 학술 기관에서 유용하게 활용할 수 있을 것이다.
앞으로도 Whisper나 LLM 모델이 발전함에 따라 이 시스템의 성능은 계속 향상될 것이다.
한번 만들어서 활용해 보면 어떨까 싶다.
참고 자료:
- GitHub: ggerganov/whisper.cpp
- GitHub: Zackriya-Solutions/meeting-minutes
- n8n 공식 문서: n8n.io/docs
- Ollama 공식 웹사이트: ollama.com
- OpenAI API 문서: platform.openai.com/docs
'파이썬으로 할 수 있는 일 > 실사용' 카테고리의 다른 글
아이폰 녹음 파일에서 텍스트 자동 추출하기: 로컬 PC에서 faster-whisper와 n8n으로 구축한 무료 자동화 시스템 (0) | 2025.05.17 |
---|---|
초보자를 위한 n8n 설치 완벽 가이드 : AI 자동화 워크플로우 구축하기(2025년) (8) | 2025.04.22 |
MCP로 구현하는 AI 개인비서: Claude와 구글 워크스페이스 통합으로 일상 업무 자동화하기 (0) | 2025.04.21 |
2025 노코드 AI 업무 자동화 완벽 가이드: n8n 적용 예제 (2) | 2025.04.17 |
AI 에이전트의 핵심 기술 MCP 이해하기: 비개발자를 위한 쉬운 설명 (8) | 2025.04.16 |