ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [5월 3주차-5/20(2)]🎙️ Whisper + GPT-4로 회의록 자동 생성 시스템 만들기 (요약부터 교정, 워드 저장까지)
    Why Not SW CAMP 5기/수업 기록 2025. 5. 20. 15:19

    회의 내용을 자동으로 요약하고, STT 오류를 교정한 뒤, 마크다운/워드 문서로 저장해주는 자동화 파이프라인을 Python + OpenAI API로 구현해보았습니다.


    🧩 프로젝트 개요

    회의록을 작성하다 보면 시간이 오래 걸리고, 말이 빠르거나 누가 말했는지 혼동되는 경우가 많습니다. 그래서 다음과 같은 전체 플로우를 자동화해봤습니다:

    STT 기반 회의록 → 요약 → 발언별 교정 → 마크다운 및 워드 저장


    🧪 사용 기술

    • Python
    • pandas, json, python-docx
    • OpenAI GPT-4o API
    • Whisper STT (사전 생성된 CSV 사용)
    • dotenv (API 키 관리용)

    🧱 전체 구조

    flowchart TD
        A[CSV 기반 회의 STT 파일 로딩] --> B[화자 이름 매핑]
        B --> C[요약용 JSON 포맷 생성]
        C --> D[GPT-4o로 요약 요청]
        D --> E[요약 결과 저장 (Markdown)]
        E --> F[발언별 오류 교정 (GPT-4o)]
        F --> G[교정 결과 JSON 저장]
        G --> H[Markdown 변환]
        G --> I[Word 문서 생성]
    

    1. 회의록 불러오기 및 화자 매핑

    import pandas as pd
    
    df_rttm = pd.read_csv("audio/싼기타_비싼기타_final.csv", sep='|')
    
    name_dict = {
        "SPEAKER_00": "AI",
        "SPEAKER_01": "홍길동",
    }
    df_rttm["name"] = df_rttm["speaker_id"].apply(lambda x: name_dict[x])
    

    Whisper STT 결과에서 "SPEAKER_00"과 같이 표기된 부분을 사람이 읽기 쉬운 이름으로 바꿉니다.


    2. 요약용 포맷 구성 & GPT 요청

    meeting_note_txt = df_rttm[['start', 'end', 'name', 'text']].to_json(orient='records', force_ascii=False)
    
    system_prompt = f'''
    너는 회의 내용을 요약하는 봇이다. 아래 회의록을 읽고 주요 내용을 요약하라.
    
    # 회의 제목
    ## 주요 내용
    ## 참석자별 입장
    ## 결정 사항
    
    =============== 이하 회의록 ===============
    { meeting_note_txt }
    '''
    

    이 프롬프트를 OpenAI GPT-4o에 보냅니다.

    response = client.chat.completions.create(
        model='gpt-4o',
        messages=[{"role": "system", "content": system_prompt}]
    )
    summary = response.choices[0].message.content.strip()
    

    3. 요약 결과 저장

    with open('audio/guitar_summary.md', 'w', encoding='utf-8') as f:
        f.write(summary)
    

    📂 결과물: guitar_summary.md


    4. 녹취 교정: 문장 하나씩 GPT에게 요청

    for row in meeting_note_dict:
        correction_prompt = f'''
        너는 STT 오류를 교정하는 봇이다.
        회의 요약문: {summary}
        원본: {row['text']}
        '''
        response = client.chat.completions.create(...)
        row['corrected_text'] = response.choices[0].message.content.strip()
    

    💡 왜 요약문을 함께 제공하나요?

    화자가 바뀌었거나, 문맥이 이상한 경우도 GPT가 더 잘 파악할 수 있도록 도와주기 위해서입니다.


    5. 다양한 포맷으로 저장

    ✔ JSON

    with open('audio/guitar_meeting_note_corrected.json', 'w', encoding='utf-8') as f:
        json.dump(meeting_note_dict, f, ensure_ascii=False, indent=4)
    

    ✔ 마크다운

    for row in meeting_note_dict:
        md_template += f"- **{row['name']}** : {row['corrected_text']}\n"
    

    ✔ Word 문서 (python-docx)

    document = Document()
    document.add_heading('회의록', level=1)
    ...
    document.save('audio/guitar_meeting_note_corrected.docx')
    

    📌 정리

    단계 설명

    1. CSV 로딩 STT 결과 불러오기
    2. 화자 이름 매핑 SPEAKER → 사람 이름
    3. GPT 요약 요청 전체 회의 내용을 요약
    4. 발언 교정 각 문장별 오류 수정
    5. 결과 저장 JSON, Markdown, Word 형식

    ✨ 마무리하며

    단순한 STT 텍스트를 넘어서, 회의 문서화 전과정을 자동화하는 데 성공했습니다. GPT-4의 문맥 파악 능력과 Whisper의 STT 출력, Python의 편리한 처리 능력이 만나 강력한 워크플로우를 구축할 수 있었어요.

     

Designed by Tistory.