소개
ChatGPT 의 도움을 받아서 내가 생각하는 회의록 작성 AI Agent 의 구상의 도움을 받고자 했습니다.
회의록 작성 AI Agent 의 중요 역할은 다음과 같습니다.
녹음된 회의록을 음성인식을 통해 텍스트로 만들기. 단, 언어 인식이 필요
음성인식의 오류를 수정하고 요약본 만들기
요약된 내용은 다국어로 번역하여 저장하기. 단, 번역에서는 기존 번역을 참고하여 번역할 것
진행 방법
OpenAI ChatGPT o1 을 이용해서 도움을 받았습니다. 아이디어만 얻을 예정이여서 중요 내용만 적어서 요청했습니다.
n8n 을 이용해서 회의록 관리 워크플로우를 만들고 싶어. 회의록은 녹음된 파일을 사용하고 업로드를 하면 STT 를 통해 텍스트로 만든 후 작업해야해. 텍스트는 STT 를 통해 작성되었기 때문에 회의 맥락을 확인하여서 일부 오류로 보이는 부분을 수정하는 작업을 하고 회의록 원본으로 저장해야해. 그리고 다음으로는 회의록 원본을 통해 회의의 배경, 논의 아젠다, 논의사항, Action Item 등을 요약정리해야해. 다음으로는 회의록을 영어, 한국어, 일본어 3개의 버전으로 번역해서 저장해야해. 번역할 때는 기존 번역 사항을 참고해서 번역해야해. 3개의 버전으로 번역된 회의록은 마크업으로 작성해서 md 파일로 만들었으면 해.
결과와 배운 점
ChatGPT 결과
아래는 n8n을 활용하여 오디오 파일 업로드부터 STT, 오타/오역 교정, 원본 회의록 저장, 요약, 여러 언어 번역, 번역본 마크업(md) 작성까지의 전 과정을 자동화하는 예시 워크플로우 설계입니다. 큰 그림을 먼저 잡고, 이후에 노드 구체 예시를 적어볼게요.
1. 전체적인 워크플로우 구조
파일 업로드 트리거
사용자가 녹음된 오디오 파일을 업로드하면 워크플로우를 시작합니다.
예) n8n의 Webhook Node를 활용하거나, FTP Node, Google Drive Trigger Node 등을 사용할 수 있습니다.
STT 서비스 호출
업로드된 오디오 파일을 STT API로 전달해서 텍스트로 변환합니다.
예) HTTP Request Node로 구글 클라우드 STT, 네이버 CLOVA Speech, Azure Speech 등 원하는 STT 서비스를 호출합니다.
초기 회의록 텍스트 저장
STT 결과물(텍스트)은 회의록 원본 후보로 저장해야 합니다(오류가 있을 수 있으므로).
예) DB(Node)나 Google Sheets(Node)에 임시로 저장합니다.
오류 교정(수동 확인 단계)
STT로 작성된 텍스트는 완벽하지 않을 수 있으므로, 사람이 교정하는 단계가 필요합니다.
n8n에서는 Wait / Pause 후에 수동으로 교정된 텍스트를 다시 입력받는 방식을 쓸 수도 있고, Google Docs 등을 연동해서 교정을 진행한 뒤, 교정된 결과를 다시 가져올 수도 있습니다.
교정된 최종 텍스트를 “회의록 원본”으로 다시 저장합니다.
요약(회의 배경, 아젠다, Action Item 등)
교정된 원본 텍스트를 기반으로 AI 요약(예: GPT API)을 수행합니다.
HTTP Request Node를 이용해 OpenAI의 ChatGPT API나 Azure OpenAI를 호출하여, “배경 / 논의 아젠다 / 논의사항 / Action Item” 등을 구조화해서 추출할 수 있습니다.
구조화된 요약 결과를 DB 등 원하는 저장소에 보관합니다.
기존 번역 기록 참조 & 3개 언어(영/한/일) 번역
번역을 위해서는 번역 메모리(Translation Memory)가 있다면, 이를 DB나 구글 시트, 혹은 사전에 로드한 JSON 파일 형태로 가지고 있을 수 있습니다.
번역 API(Google Translate, Papago, DeepL, Azure Translator, GPT 등)와 연동할 때, 우선 번역 메모리에 등록된 기존 번역이 있는 키워드/문장이 있는지 확인 후, 없으면 번역 API를 통해 번역을 수행합니다.
n8n에서는 이를 여러 노드로 쪼갤 수 있습니다.
요약 텍스트에서 문장 단위 분할
DB/Sheet에서 기존 번역(메모리) 매칭
매칭 안 된 문장만 번역 API 호출
최종 결과 합치기
최종적으로 영어, 한국어, 일본어 총 3가지 버전의 번역된 회의록 텍스트가 생성됩니다.
Markdown 형식 파일로 저장
번역된 각 언어별 텍스트를 Markdown 형태로 변환하고 파일(.md)로 저장합니다.
저장 방식:
n8n의 File Node로 Markdown 파일을 생성하고,
S3 Node(Amazon S3)나 FTP Node 또는 Git으로 push하는 방식으로 저장할 수 있습니다.
2. 노드별 예시 구성
아래는 “Webhook + Google Cloud STT + Manual Correction + OpenAI GPT 요 약 + 번역 + MD파일 저장”이라는 흐름으로 예시를 잡아보겠습니다.
(1) Webhook Node - 파일 업로드 트리거
이벤트: 사용자가 웹훅 URL로 오디오 파일을 업로드하면, JSON 혹은 multipart/form-data 형태로 파일이 전송됨.
설정:
HTTP Method:
POST
Response: 파일 수신 성공 여부 반환 등
(2) STT 호출 Node (HTTP Request Node)
목적: 예) Google Cloud Speech-to-Text API 호출
설정 (대략적인 예시):
URL:
https://speech.googleapis.com/v1p1beta1/speech:recognize?key=YOUR_API_KEY
Method:
POST
Body: JSON 형태로 오디오 인코딩 정보와 함께 Base64 인코딩된 음성 데이터를 전달
Response: 변환된 텍스트
(3) DB(Node) - 임시 STT 결과 저장
예시:
Collection:
MeetingNotesTemp
Fields:
id
,filename
,stt_text
,timestamp
Output: DB에 저장한 후, 저장된
stt_text
를 다음 단계에 전달
(4) Manual Correction 단계
구현방식 1: n8n Manual Trigger 또는 이메일/슬랙 전송 후, 사람이 교정한 텍스트를 다시 n8n 웹훅으로 제출
구현방식 2: Google Docs/Sandbox 등 편집환경으로 보내고, 교정이 끝나면 n8n이 주기적으로 폴링 또는 Google Docs Trigger로 변경 사항을 받아옴
결과: 교정된 최종 텍스트(“회의록 원본”)
(5) DB(Node) - 교정된 회의록 저장
예시:
Collection:
MeetingNotes
(최종본)Fields:
meeting_id
,original_text
,created_at
Output:
original_text
→ Summarization 단계로 전달
(6) 요약 (OpenAI / 기타 LLM) Node
HTTP Request Node로 OpenAI ChatGPT API를 호출하는 예시:
URL:
https://api.openai.com/v1/chat/completions
Method:
POST
Headers:
Authorization: Bearer <API_KEY>
Body (예시):
{ "model": "gpt-3.5-turbo", "messages": [ { "role": "system", "content": "You are an AI assistant that extracts structured meeting summaries." }, { "role": "user", "content": "다음 회의록을 분석해서 회의 배경, 논의 아젠다, 논의사항, 그리고 Action Items를 정리해줘:\n\n{{original_text}}" } ] }
Response: ChatGPT로부터 요약(예: JSON 형태로 반환하도록 system prompt에 지시)
(7) 번역(Translation)
1차: 요약 결과를 문장 단위로 분할
2차: 번역 메모리가 있다면, DB에 “원문 → 기존 번역” 매핑 정보를 조회
3차: 매핑 안 된 문장들만 번역 API(DeepL, Google, Papago, GPT 등)에 호출
4차: 조합 후 완성 →
summary_ko
,summary_en
,summary_jp
이렇게 3개 필드 생성
만약 모두 GPT를 쓴다면, 문장 또는 텍스트 블록을 다음과 같이 번역:
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are an excellent translator with knowledge of existing translations. If there is a matching translation in the provided memory, use it exactly."
},
{
"role": "user",
"content": "원문: {{문장}}\n 기존 번역 메모리: {{JSON 형태 또는 key-value}}\n 이 문장을 영어/일본어/한국어 3개로 번역"
}
]
}
번역 결과가 오면, ko
, en
, jp
필드로 각각 저장.
(8) Markdown 파일 생성 및 저장
Markdown 변환:
summary_ko
,summary_en
,summary_jp
각각에 대해 Markdown 템플릿을 미리 정해두고 문자열을 합성해서.md
형태 내용 생성예)
# 회의 요약(한국어) - **회의 배경**: {{background}} - **논의 아젠다**: {{agenda}} - **논의사항**: {{discussion}} - **Action Items**: {{actionItems}}
File Node: 만들어진 문자열을 “파일 컨텐츠”로 받아
.md
파일 생성업로드: S3 Node, FTP Node, Git 등 원하는 저장소로 업로드
3. 구현 시 유의사항
STT API 요금/제공 범위
Google Cloud, Naver CLOVA, Azure Speech 등 각종 STT API의 요금 체계와 한도(분/월) 확인
STT 품질이 서비스별로 다르므로 테스트를 통해 가장 적절한 API 선택
AI 요약 품질 제어
회의록의 길이가 너무 길면, LLM에서 토큰 초과 문제 발생 가능
토큰을 줄이기 위해 전처리나 슬라이싱 필요 (예: 4,000~8,000 토큰 제한 고려)
번역 메모리
중복된 문장/키워드가 많으면 번역 메모리를 활용해 API 호출 비용과 시간을 절약
매칭 로직(정확도, 유사도)을 어떻게 구성할지 고민 필요 → 단순 exact match or fuzzy match
파일 보안
음성 파일과 회의록은 민감 정보일 수 있으므로, HTTPS/Webhook 인증, DB 보안(암호화) 주의
API 호출 시에도 개인정보가 노출되지 않도록 마스킹할 부분이 있는지 확인
수동 교정 단계의 편의성
n8n에서 사람 손을 거치는 부분(Manual Trigger, Wait/Resume, Google Docs)에 대해 UX 고려
특정 단계에서 워크플로우가 일시정지됐다가 교정본을 입력받으면 재개되는 식으로 구성
4. 요약
1) 업로드 → 2) STT → 3) 임시 저장 → 4) 교정 → 5) 최종 원본 저장 → 6) 요약 → 7) 번역(기존 번역 참조) → 8) Markdown 생성 및 저장
각 단계마다 n8n의 HTTP Request Node, Database Node, Manual Trigger Node 등을 적절히 연결합니다.
번역 및 요약에 GPT 계열 모델을 쓰고자 한다면, n8n에서 제공하는 OpenAI Node를 쓰거나, HTTP Request Node로 직접 API를 호출하는 방법 중 하나를 선택합니다.
위 과정을 참고하시면, 녹음 파일을 업로드 → STT 변환 → 교정 → 요약 → 번역 → md파일 저장 전체 파이프라인을 n8n에서 자동화할 수 있습니다. 필요하신 세부 작업(번역 메모리 구현, S3 업로드, Git commit 등)은 노드 구성을 커스텀하여 맞춰주시면 됩니다.
이렇게 구성하면 사람이 반드시 확인해야 할 부분(오타 교정, 번역 품질 점검 등)만 제외하고, 대부분의 반복 작업을 자동화할 수 있으니 업무 효율을 크게 높일 수 있을 것입니다.
위의 내용을 참고해서 구상 한 사항을 대략적으로 그려 보았습니다.
생각보다 n8n 으로 작성하는데 많은 도움을 받을 수 있었습니다. 우선 생각한 것을 어떻게 구현할지 방향성을 잡았습니다. 일부 부분은 현실적인 것을 고려하여 수정해야 하는 것들이 있었습니다. 예를 들어 비용을 낮추기 위해서 셀프 호스팅을 이용할 것들이 있습니다. 번역의 경우 전문 번역사가 고민하고 있는 내용을 참고해서 이것을 잘 만들면 번역사에게도 도움이 될 듯 싶네요.