AI 업무 활용

AI가 작성한 업무 이메일을 보내기 전에 점검하는 방법

AI가 작성한 업무 이메일을 원래 자료와 대조해 사실, 숫자, 날짜, 수신자, 어조, 약속 표현을 점검합니다. 간단한 예제로 어떤 항목을 사람이 직접 확인해야 하는지 정리합니다.

목차 보기

이런 분께AI 채팅 도우미로 업무 이메일 초안을 작성하고 발송 전에 반복 가능한 점검 절차를 사용하려는 실무자를 위한 글입니다.

준비사항
  • Python 3.12
  • 텍스트 편집기와 터미널

01AI가 작성한 이메일도 최종 점검이 필요한 이유

AI 채팅 도우미는 메모를 자연스러운 업무 이메일로 빠르게 정리할 수 있지만, 문장이 매끄럽다고 해서 내용까지 정확한 것은 아닙니다. 초안에서 수량이 달라지거나, 두 날짜의 의미가 뒤바뀌거나, 잘못된 사람을 대상으로 작성되거나, 단순한 요청이 확정된 약속처럼 표현될 수 있습니다.

아래 예시는 합성 예제입니다. 핵심은 초안 작성과 검증을 분리하는 것입니다. AI는 문장을 정리하는 데 사용하고, 발송 전에는 원본 자료와 직접 비교해 내용을 확인합니다.

02먼저 확인된 원본 사실을 정리하기

가상의 공급업체에 샘플 부품을 요청하는 이메일을 작성한다고 가정해 보겠습니다. AI에게 초안을 요청하기 전에 절대 바뀌면 안 되는 사실을 먼저 정리합니다.

항목확인된 원본 사실
수신자Mina Park
회사Example Parts
샘플 수량24 units
단가$18.50
계산된 총액$444.00
요청 납기일October 7, 2026
내부 검토일October 9, 2026
확정 여부October 7 is requested, not confirmed

계산은 24 × $18.50 = $444.00입니다. October 7은 공급업체에 요청하는 납기일이고, October 9은 회사 내부 검토일입니다. 원본 메모에는 결제 시점, 향후 주문, 승인 또는 납기 보장을 약속해도 된다는 내용이 없습니다.

03빠진 내용을 추측하지 않도록 AI에 요청하기

좋은 프롬프트에는 확인된 사실을 넣고, 없는 정보는 AI가 임의로 채우지 않도록 명시하는 것이 좋습니다.

일반적인 AI 답변은 다음과 같을 수 있다. 'Hello Mina Park, We would like to request 24 sample units from Example Parts at $18.50 per unit, for a total of $444.00. If possible, please arrange delivery by October 7, 2026, as our internal review is scheduled for October 9, 2026. Please let us know whether this delivery date is feasible. Best regards.' 합리적인 초안이지만 여전히 검증이 필요하다.

04사실, 숫자, 날짜, 수신자, 어조, 약속을 점검하기

  1. 사실: 이름, 회사명, 제품 설명, 프로젝트명과 기타 사실 표현을 원본 자료와 비교합니다.
  2. 숫자: 수량, 가격, 총액, 비율, 치수 등 중요한 값은 초안을 믿지 말고 직접 다시 계산합니다.
  3. 날짜: 날짜 자체뿐 아니라 그 날짜가 무엇을 의미하는지도 확인합니다. 요청일과 확정일은 같은 의미가 아닙니다.
  4. 수신자: 이름과 회사뿐 아니라 실제 이메일 주소를 확인하고, CC와 BCC에 포함된 사람이 정말 필요한 수신자인지도 검토합니다.
  5. 어조: 지나치게 명령조이거나 모호하거나 친근하거나, 실제 사실보다 확신이 강한 표현을 제거합니다.
  6. 약속: guarantee, definitely, confirmed, approved, will pay, will deliver처럼 권한 없이 확정적인 약속으로 해석될 수 있는 표현을 확인합니다.

합성 예제에서는 24 units, $18.50, $444.00, October 7, October 9가 모두 원본 사실과 일치합니다. 또한 'if possible'이라고 표현하고 납기 가능 여부를 확인해 달라고 요청하므로 October 7이 이미 확정됐다고 잘못 표현하지 않습니다.

05Python으로 반복 가능한 1차 점검하기

다음 표준 라이브러리 기반 스크립트는 draft_email.txt를 읽어 합성 예제의 필수 정보가 포함됐는지 확인하고, 총액을 다시 계산하며, 위험할 수 있는 약속 표현을 검색합니다. 결과는 outputs/email_check_report.txt에 기록합니다. 원본 초안은 수정하지 않으며 outputs 폴더가 이미 있으면 기존 결과를 덮어쓰지 않고 중지합니다.

python
from pathlib import Path
from decimal import Decimal
import sys

DRAFT_PATH = Path("draft_email.txt")
OUTPUT_DIR = Path("outputs")
REPORT_PATH = OUTPUT_DIR / "email_check_report.txt"

if not DRAFT_PATH.is_file():
    sys.exit("Missing input file: draft_email.txt")

if OUTPUT_DIR.exists():
    sys.exit("Stop: outputs folder already exists. Remove or rename it manually first.")

recipient = "Mina Park"
company = "Example Parts"
quantity = 24
unit_price = Decimal("18.50")
expected_total = Decimal(quantity) * unit_price
requested_date = "October 7, 2026"
review_date = "October 9, 2026"

required_text = {
    "recipient": recipient,
    "company": company,
    "quantity": "24",
    "unit price": "$18.50",
    "total": f"${expected_total:.2f}",
    "requested delivery date": requested_date,
    "internal review date": review_date,
}

risky_phrases = [
    "guarantee",
    "guaranteed",
    "definitely",
    "delivery is confirmed",
    "we confirm payment",
    "we will place future orders",
]

draft = DRAFT_PATH.read_text(encoding="utf-8")
draft_lower = draft.lower()

lines = []
lines.append("AI EMAIL DRAFT CHECK")
lines.append("====================")
lines.append(f"Calculated total: {quantity} x ${unit_price:.2f} = ${expected_total:.2f}")
lines.append("")
lines.append("Required details:")

for label, value in required_text.items():
    status = "PASS" if value.lower() in draft_lower else "CHECK"
    lines.append(f"{status}: {label} -> {value}")

lines.append("")
lines.append("Risky promise phrases:")
found_risk = False

for phrase in risky_phrases:
    if phrase in draft_lower:
        found_risk = True
        lines.append(f"CHECK: found phrase -> {phrase}")

if not found_risk:
    lines.append("PASS: none of the listed phrases were found")

lines.append("")
lines.append("Manual checks still required:")
lines.append("- Verify the actual To, CC, and BCC addresses in the mail client.")
lines.append("- Confirm that October 7 is presented as requested, not guaranteed.")
lines.append("- Confirm tone and context against the original conversation.")
lines.append("- Check for commitments not covered by this phrase list.")
lines.append("- Verify attachments before sending.")

OUTPUT_DIR.mkdir()
REPORT_PATH.write_text("\n".join(lines) + "\n", encoding="utf-8")
print(f"Created: {REPORT_PATH}")

초안을 draft_email.txt로 저장하고 스크립트를 email_check.py로 저장한 뒤 python email_check.py 명령을 실행합니다. PASS는 필요한 문자열을 찾았거나 목록에 있는 위험 표현이 발견되지 않았다는 뜻일 뿐입니다. 이메일 내용이 승인됐거나 그대로 보내도 안전하다는 의미는 아닙니다.

06자주 발생하는 실수를 확인하기

  • 대화의 다른 부분에 25라는 숫자가 등장했다는 이유로 수량이 24에서 25로 바뀝니다.
  • 단가는 맞지만 총액이 잘못 복사되거나 계산됩니다.
  • October 9이 내부 검토일이 아니라 공급업체 납기일처럼 작성됩니다.
  • October 7까지 가능한지 확인해 달라는 요청이 October 7 납기가 확정됐다는 문장으로 바뀝니다.
  • 원본 메모에 없던 결제 시점, 승인, 향후 구매 수량 또는 다른 약속을 AI가 추가합니다.
  • 본문에는 Mina Park가 정확히 적혀 있지만 To 필드에는 이름이 비슷한 다른 사람의 주소가 들어갑니다.

키워드 점검에는 분명한 한계가 있습니다. 이메일에 '$444.00'이 포함되어 있어도 잘못된 문맥에서 사용됐을 수 있고, 위험 표현 목록에 없는 다른 문장으로 약속을 만들어낼 수도 있습니다. 자동 점검은 단순한 오류를 찾는 데 도움이 되지만 최종 사람이 읽는 절차를 대체할 수 없습니다.

07발송 버튼을 누르기 전에 최종 체크리스트 사용하기

  1. 원본 메모나 기록을 초안 옆에 열어 둡니다.
  2. 모든 이름, 회사, 제품, 수량, 금액, 날짜를 확인합니다.
  3. 중요한 계산은 독립적으로 다시 계산합니다.
  4. 날짜가 포함됐는지만 보지 말고 각 날짜의 의미도 확인합니다.
  5. 약속, 승인, 보장, 확정 표현이 있는지 별도로 읽어 봅니다.
  6. 실제 To, CC, BCC와 첨부파일을 확인합니다.
  7. 발송 전 최종 문장을 수신자 입장에서 한 번 더 읽습니다.

실무에서는 AI가 문장을 다듬도록 하고, 사실 확인과 조직이 실제로 약속할 수 있는 범위는 사람이 판단하는 방식으로 역할을 나누는 것이 적절합니다. 계약, 법적 의무, 기밀 정보, 규제 대상 의사결정, 안전 문제 또는 큰 금액이 관련된 이메일은 이 간단한 점검표에만 의존하지 말고 조직의 공식 검토 및 승인 절차를 따라야 합니다.

실행·검증 기록

ChatGPT Python tool · Python 3.x · standard library pathlib, decimal, sys

  • 스크립트가 성공적으로 실행되어 outputs/email_check_report.txt를 생성했다.
  • 수정된 이메일 초안에는 Mina Park, Example Parts와 연도를 포함한 두 날짜(October 7, 2026 및 October 9, 2026)가 있습니다. 필수 정보 7개와 위험한 약속 표현 검사가 모두 통과했습니다.
  • 목록에 있는 위험한 약속 표현은 감지되지 않았다.
  • 계산된 총액은 정확히 24 x $18.50 = $444.00이었다.
  • draft_email.txt는 실행 후에도 바이트 단위로 완전히 동일했다.
  • 두 번째 실행은 outputs가 이미 존재하여 중단되었고, 보고서는 덮어쓰지 않았다.
  • 2026-09-21 Python 3.12.14로 로컬 재검증: 수정된 예제가 통과했고 원본 보존과 덮어쓰기 방지도 확인했습니다.
검증 범위의 한계
  • 스크립트는 실제 To, CC, BCC 필드, 첨부 파일, 조직 내 권한, 문체, 또는 고정 목록에 없는 표현으로 이루어진 약속을 검증할 수 없다.
  • Python 환경에서 관련 없는 스프레드시트 런타임 워밍업 경고가 stderr에 출력되었지만 문서 스크립트나 결과에는 영향을 주지 않았다.

참고 출처

설명과 예제는 직접 작성했습니다. 관련 동작과 개념은 아래 공식 자료에서 확인할 수 있습니다.