멍냥잇 AI 활용 제작 기록 · 가상 회의록으로 검증한 실습
AI 회의록 할 일 정리기 만들기: 결정·제안 구분과 원문 검증
회의가 끝난 뒤 메모에서 할 일을 옮겨 적을 때 가장 위험한 실수는 제안을 확정된 결정으로 바꾸거나, 원문에 없는 담당자와 기한을 채우는 것입니다. 이를 줄이려고 회의록 한 파일을 읽어 결정과 할 일을 분리하고, 각 항목에 원문 인용을 붙여 사람이 확인하는 로컬 도구를 만들었습니다. 회의 내용을 메일이나 메신저로 자동 발송하지는 않습니다.
가상 회의록 TXT → Gemini 추출 → 인용 구절·담당자·기한 검증 → 검토 화면에서 수정·확인 → CSV·Markdown 내보내기
가상 회의록 한 건에서 확인한 결과
2026년 10월 1일 가상 제품팀 회의록을 Gemini API에 보내 두 차례 시험했습니다. 첫 결과에는 기한이 없는 할 일 하나가 빠졌습니다. 발언을 순서대로 살피고 기한이 없어도 명시적으로 약속한 일은 포함하도록 지시문을 바꿨습니다. 재시험 결과는 확정된 결정 2건과 할 일 2건이었습니다. 설문 기능을 추가하자는 제안과 이미 끝난 배너 수정은 결과에 들어가지 않았습니다.
| 원문 표현 | 검토 초안 | 담당자·기한 |
|---|---|---|
| “이번 공개에서는 새 통계 기능을 넣지 않고…” | 로그인 오류 안내 개선을 우선한다는 결정 | 미정 · 미정 |
| “로그인 오류 메시지 목록을 10월 3일까지 정리해서 공유하겠습니다.” | 오류 메시지 목록 정리·공유 | 지훈 · 10월 3일 |
| “사용자 안내 문구 초안을 작성하겠습니다. 기한은 아직 정하지 못했습니다.” | 안내 문구 초안 작성 | 민서 · 기한 미정 |
| “공개 여부는 내부 테스트 결과를 보고 다음 회의에서 결정합니다.” | 공개 여부를 다음 회의에서 정한다는 결정 | 미정 · 미정 |
표는 결과를 읽기 쉽게 줄인 것입니다. 내려받는 예제의 output/review.html에는 AI가 반환한 문장과 각 항목의 실제 원문 인용이 표시됩니다. 회의록 한 건의 재시험 결과이며, 다른 문서에서도 네 항목을 빠짐없이 찾는다는 정확도 수치는 아닙니다.
코드와 가상 자료로 따라 하기
전체 코드·가상 회의록·검토 화면·테스트 ZIP 내려받기. 압축 파일에는 meeting_actions.py, review_template.html, sample-meeting.txt, 테스트 6개, README와 실제 재시험에서 생성한 가상 결과 화면이 들어 있습니다. API 키와 실제 업무 회의록은 넣지 않았습니다. Python 3.11 이상이 필요하며, 추가 Python 패키지는 사용하지 않습니다.
압축을 푼 폴더에서 PowerShell을 열고 먼저 AI를 호출하지 않는 모드를 실행합니다.
py .\meeting_actions.py --input .\sample-meeting.txt --output .\output
이 모드의 output/review.html은 AI 미사용이라고 표시하는 빈 검토 화면입니다. 직접 항목을 추가하고 원문 인용을 시험할 수 있습니다. 압축 파일에 포함된 가상 재시험 화면을 계속 보고 싶다면 새 출력 폴더를 지정하세요.
Gemini 추출을 다시 시험하려면 본인 프로젝트의 API 키를 현재 PowerShell 세션에만 입력합니다. 모델 제공 여부와 이용 한도는 계정 설정에서 확인해야 합니다.
$env:GEMINI_API_KEY = Read-Host 'Gemini API 키'
py .\meeting_actions.py --input .\sample-meeting.txt --output .\output --ai
Remove-Item Env:GEMINI_API_KEY
기본 모델은 당시 시험에 사용한 gemini-3.5-flash-lite입니다. 계정에서 이용 가능한 다른 모델을 쓰려면 --model 인수로 지정할 수 있습니다. --ai를 붙인 경우에만 입력한 회의록 원문이 Gemini API로 전송됩니다.
‘확정’과 ‘제안’을 왜 나눴나
샘플의 “이용자 설문 기능도 추가하면 어떨까요?”는 질문이지 실행 약속이 아닙니다. “지난주에 기존 안내 배너 수정은 완료했습니다”는 이미 끝난 작업입니다. 둘을 새 할 일로 내보내면 회의록 정리가 오히려 일을 만들어 냅니다. 그래서 모델에는 명시적으로 확정된 결정과 앞으로 수행할 업무만 요청했습니다. 다만 문장의 뜻을 해석하는 일은 AI에 의존하므로, 이 규칙만으로 모든 제안과 약속을 완벽히 가를 수는 없습니다.
첫 호출에서 기한 없는 업무가 빠진 점도 중요했습니다. 처음부터 성공한 결과만 남기지 않고, 빠진 문장을 찾아 지시문을 바꾼 뒤 다시 시험했습니다. 실제 회의록에서도 모델이 아예 누락한 항목은 출력된 항목의 정확성 검사만으로 발견할 수 없습니다.
AI 응답을 그대로 업무표에 쓰지 않은 이유
Gemini의 구조화 출력으로 항목의 종류·내용·담당자·기한·인용 구절을 받습니다. 형식이 맞는 JSON이라도 내용이 원문에 있다는 보장은 없습니다. 프로그램은 인용 구절이 입력 텍스트에 실제로 존재하는지 확인하고, 담당자나 기한이 인용 안에 없으면 그 필드를 빈칸으로 바꿉니다. 같은 내용이 두 번 나오면 중복을 제외합니다.
if owner and normalize(owner) not in evidence:
owner = ""
if due and normalize(due) not in evidence:
due = ""
예를 들어 모델이 민서의 할 일에 임의로 “10월 5일”을 붙여도 인용 구절에 없으면 기한은 비워집니다. “다음 주” 같은 상대 표현을 임의의 달력 날짜로 바꾸지 않고 원문 표현대로 남깁니다. 반대로 인용이 원문에 존재한다는 사실은 문맥과 의미가 맞다는 보증이 아닙니다. 검토 화면에서 원문과 항목을 나란히 보여 주는 이유입니다.
사람이 확인한 결과만 내보내기
프로그램은 draft.json과 로컬 review.html을 만듭니다. 화면에서 결정·할 일을 수정하거나 삭제하고, 빠진 항목을 추가할 수 있습니다. 각 항목의 ‘원문과 대조함’과 마지막 전체 확인을 선택해야 CSV·Markdown 내보내기 버튼이 활성화되도록 구현했습니다. 필드를 다시 고치면 확인 표시가 풀립니다. CSV에서 수식처럼 해석될 수 있는 선두 문자는 이스케이프합니다.
수정 내용은 브라우저 메모리에만 남으므로 화면을 닫기 전에 파일로 내려받아야 합니다. 이 도구가 캘린더, 메신저, WordPress에 자동으로 기록하거나 발송하지는 않습니다. 2026년 10월 8일 격리된 headless Chrome에서 가상 회의록의 네 항목을 확인하고 전체 확인란을 체크한 뒤 CSV와 Markdown 파일을 실제로 내려받았습니다. 다른 브라우저와 실제 회사 회의록 처리까지 시험한 것은 아닙니다.
시험 범위와 남은 한계
2026년 10월 8일 로컬 자동 검사 6개를 다시 실행해 모두 통과했습니다. 원문에 없는 인용, 지원되지 않는 담당자·기한, 중복 항목, 누락 가능 발언 경고, 잘못된 파일 형식, 스크립트 문자열의 HTML 처리를 확인했습니다. 검토 화면의 JavaScript 구문을 검사했고, 격리된 Chrome에서 내보내기 버튼이 처음에는 비활성화되었다가 네 항목과 전체 확인을 마치면 활성화되는 것을 확인했습니다. CSV와 Markdown 파일에 담당자와 기한이 들어 있는지도 검사했습니다. 여러 브라우저의 시각적 배치는 아직 검증하지 못했습니다.
py -m unittest discover -s tests -v
공개 ZIP에 tests 폴더를 포함해 내려받은 사람도 같은 자동 검사를 실행할 수 있게 했습니다. AI 호출을 다시 확인하려면 별도 API 키와 사용 가능 한도가 필요합니다. 네 항목의 검토와 두 파일 다운로드를 시험했지만 항목 추가·삭제, 모든 편집 경로와 실제 업무 자료까지 자동 시험한 것은 아닙니다. 자신의 자료로 만든 CSV·Markdown은 공유 전 다시 열어 확인해야 합니다.
실제 회사 회의록에는 개인정보와 내부 결정이 있을 수 있습니다. 외부 AI 서비스로 전송하기 전에 조직의 자료 처리 기준을 확인해야 합니다. review.html에도 원문이 들어가므로 실제 자료로 만든 결과 파일은 별도로 보관해야 합니다. 이 첫 버전의 역할은 회의 결정을 확정해 주는 것이 아니라, 근거가 보이는 검토 초안을 빠르게 만드는 것입니다.
