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

실행·검증 기록

2026-09-21 · hand-checked example · Python 3.12

  • 24 × $18.50 = $444.00인지 손으로 계산해 확인했습니다.
  • October 7, 2026은 요청 납기일이고 October 9, 2026은 내부 검토일임을 확인했습니다.
  • 예시 초안이 October 7을 확정됐다고 표현하지 않고 가능 여부를 묻도록 작성됐는지 확인했습니다.
  • 스크립트가 draft_email.txt를 수정하지 않고 읽기만 하도록 구성됐는지 확인했습니다.
  • 생성되는 파일이 outputs/email_check_report.txt 하나인지 확인했습니다.
  • outputs 폴더가 이미 존재하면 스크립트가 중지되도록 구성됐는지 확인했습니다.
  • 스크립트가 Python 3.12 표준 라이브러리만 사용하는지 확인했습니다.
검증 범위의 한계
  • 코드는 검토했고 작은 예제의 값은 손으로 계산했지만, 이 코드를 직접 실행하지는 않았습니다.
  • 단순 문자열 검색만으로 문장의 사실 여부를 증명할 수는 없습니다.
  • 위험 표현 목록만으로 모든 약속, 보장, 승인 또는 확정 표현을 탐지할 수는 없습니다.
  • 스크립트는 실제 To, CC, BCC 주소, 첨부파일, 조직 내 권한 또는 전체 이메일 스레드의 맥락을 검증할 수 없습니다.
  • 법률, 계약, 재무, 안전, 기밀 또는 규제 대상 커뮤니케이션은 조직에서 요구하는 공식 검토 절차를 사용해야 합니다.

사이트 전체의 작성·검증 원칙

참고 출처

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