AI 업무 활용

AI 주간 업무보고서 작성: CSV 업무일지 정리와 수치 검증

CSV 업무일지로 AI 주간 업무보고서를 작성하고 Python으로 시간과 완료 건수를 대조합니다. 복사할 요청문으로 완료·진행·계획·차단 사항을 구분하고 누락을 확인하세요.

목차 보기

이런 분께짧은 일일 업무 로그를 기록하고 있으며, 작업시간과 완료 건수를 직접 검증하면서 AI로 주간 보고서를 작성하고 싶은 사람을 위한 글입니다.

준비사항
  • Python 3.12
  • 일일 업무 로그가 들어 있는 일반 CSV 파일

01AI가 작성한 주간 보고서의 수치를 왜 다시 대조해야 할까?

AI는 짧고 단편적인 업무 기록을 읽기 쉬운 문장으로 재구성하는 데 유용하지만, 계산 결과의 기준 자료로 사용해서는 안 됩니다. 주간 보고서의 문장은 자연스러워도 총합이 바뀌거나, 같은 작업을 두 번 세거나, 예정된 작업을 완료된 것으로 표현할 수 있습니다. 더 안전한 방법은 문장 작성과 수치 대조를 분리하는 것입니다.

  • 업무 로그를 사실 확인의 기준 자료로 사용합니다.
  • AI에는 로그에 있는 내용만 요약하도록 요청합니다.
  • 작업시간과 건수는 구조화된 데이터에서 별도로 계산합니다.
  • AI 보고서의 수치와 독립적으로 계산한 결과를 비교합니다.
  • 보고서를 보내거나 게시하기 전에 차이가 있으면 수정합니다.

02작은 합성 업무 로그로 시작하기

다음 업무 로그는 합성 데이터입니다. 각 행에는 하나의 작업, 해당 작업에 사용한 시간, 그리고 그 주 안에 완료되었는지가 기록되어 있습니다. 이런 항목을 구조화해 두면 나중에 수치를 대조하기가 훨씬 쉽습니다.

datetaskhoursstatus
2026-09-14Clean customer CSV2.0completed
2026-09-14Draft import script1.5completed
2026-09-15Test import script2.5completed
2026-09-16Investigate duplicate IDs1.0completed
2026-09-17Update validation rules2.0completed
2026-09-18Prepare user notes1.5in progress

손으로 계산하면 작업시간은 2.0 + 1.5 + 2.5 + 1.0 + 2.0 + 1.5 = 10.5시간입니다. 6개 작업 중 5개가 completed 상태이므로 완료 작업 수는 5개입니다. 마지막 작업은 아직 in progress 상태이므로 완료 작업으로 세면 안 됩니다.

03기억이 아니라 로그만 바탕으로 보고서를 작성하게 하기

업무 로그를 AI 채팅 도우미에 붙여 넣고, 제공된 데이터만 다시 정리하도록 명확히 제한합니다. 또한 나중에 검증할 수 있도록 AI가 계산한 총 작업시간과 완료 건수도 함께 쓰게 합니다.

AI에게 요청할 내용: 아래 업무 로그만 사용해서 간결한 주간 보고서를 작성해줘. 보고서는 완료한 업무, 진행 중인 업무, 주간 합계의 세 부분으로 구성해줘. 기록에 없는 결과나 작업은 만들지 마. 총 기록시간과 완료한 작업 수를 명시하고, 원래 작업의 의미는 바꾸지 마.

일반적인 AI 답변은 다음과 비슷할 수 있습니다. 이번 주에는 고객 데이터를 정리하고, 가져오기 스크립트를 작성하고 테스트했으며, 중복 ID를 조사하고 검증 규칙을 업데이트했습니다. 사용자 안내문 작성은 아직 진행 중입니다. 총 기록시간은 10.5시간이며 완료된 작업은 5개입니다.

04대조용 구조화 데이터를 따로 유지하기

같은 합성 예제를 date, task, hours, status 열을 가진 work_log.csv로 저장합니다. 대조 스크립트는 AI가 작성한 문장에서 숫자를 다시 추출하지 않고 이 원본 파일을 직접 읽어야 합니다.

항목로그에서 계산한 예상값
행 수6
총 작업시간10.5
완료 작업 수5
진행 중 작업 수1

이 구분이 중요합니다. CSV는 근거 데이터이고, 주간 보고서는 그 근거를 읽기 쉽게 표현한 결과물입니다.

05Python으로 작업시간과 건수 다시 계산하기

다음 Python 3.12 스크립트는 work_log.csv를 읽고, 필수 열을 확인하고, 총 작업시간과 상태별 건수를 계산한 뒤 outputs/weekly_reconciliation.txt에 대조 결과를 저장합니다. 기존 outputs 디렉터리는 덮어쓰지 않습니다.

python
from pathlib import Path
import csv

input_path = Path("work_log.csv")
output_dir = Path("outputs")

if output_dir.exists():
    raise SystemExit("outputs already exists; remove or rename it before running again")

if not input_path.exists():
    raise SystemExit("work_log.csv was not found")

required_fields = {"date", "task", "hours", "status"}
rows = []

with input_path.open("r", encoding="utf-8", newline="") as f:
    reader = csv.DictReader(f)

    if reader.fieldnames is None:
        raise SystemExit("CSV has no header")

    missing = required_fields - set(reader.fieldnames)
    if missing:
        raise SystemExit(f"Missing columns: {sorted(missing)}")

    for line_number, row in enumerate(reader, start=2):
        try:
            hours = float(row["hours"])
        except ValueError:
            raise SystemExit(f"Invalid hours value on line {line_number}")

        if hours < 0:
            raise SystemExit(f"Negative hours on line {line_number}")

        status = row["status"].strip().lower()
        if status not in {"completed", "in progress"}:
            raise SystemExit(f"Unexpected status on line {line_number}: {status}")

        rows.append({
            "date": row["date"].strip(),
            "task": row["task"].strip(),
            "hours": hours,
            "status": status,
        })

total_hours = sum(row["hours"] for row in rows)
completed_count = sum(row["status"] == "completed" for row in rows)
in_progress_count = sum(row["status"] == "in progress" for row in rows)

output_dir.mkdir()
report_path = output_dir / "weekly_reconciliation.txt"

report = (
    f"Rows: {len(rows)}\n"
    f"Total hours: {total_hours:.1f}\n"
    f"Completed activities: {completed_count}\n"
    f"In-progress activities: {in_progress_count}\n"
)

report_path.write_text(report, encoding="utf-8")

print(report, end="")
print(f"Saved: {report_path}")

06AI 보고서와 계산 결과 비교하기

이 예제에서 독립적으로 확인한 값은 총 작업시간 10.5시간과 완료 작업 5개입니다. AI 초안에 포함된 모든 수치 표현을 이 값과 비교합니다.

확인 항목로그 결과AI 초안판정
총 작업시간10.510.5일치
완료 작업 수55일치
진행 중 작업 수1사용자 안내문 작성은 진행 중내용 일치
  1. AI 보고서에 있는 모든 숫자를 대조 결과와 비교합니다.
  2. 완료 작업과 진행 중 작업이 섞이지 않았는지 확인합니다.
  3. 작업 설명을 원본 로그와 비교해 AI가 결과를 새로 만들어내지 않았는지 확인합니다.
  4. AI가 계산한 합계와 로그 계산값이 다르면 구조화된 로그의 계산값을 기준으로 보고서 문장을 수정합니다.

07자주 하는 실수와 한계

  • 원본 로그가 아니라 AI 보고서 안의 숫자를 다시 더해 총합을 확인하는 것.
  • 일부 행이 아직 진행 중인데도 모든 행을 완료 작업으로 세는 것.
  • 하나의 프로젝트에 대한 여러 로그 행을 하나의 작업으로 볼지 여러 작업으로 볼지 기준을 정하지 않는 것.
  • 기록에 명시되지 않은 성과를 AI가 추론해서 넣도록 두는 것.
  • 로그의 상태 표현을 바꾸면서 스크립트가 허용하는 상태값은 수정하지 않는 것.
  • 총합을 계산하기 전에 누락 행, 잘못된 시간 값, 중복 기록을 확인하지 않는 것.

이 예제에서는 CSV 한 행을 하나의 완료 가능한 작업으로 계산합니다. 실제 조직에서는 티켓, 산출물, 프로젝트, 마일스톤을 기준으로 셀 수 있으므로 대조 전에 무엇을 한 건으로 계산할지 규칙을 정해야 합니다. 또한 이 스크립트는 단순한 시간 합계와 상태만 확인하므로, 업무 로그 자체가 정확한지 또는 업무 품질이 충분했는지는 판단할 수 없습니다.

완료·진행·계획·차단을 나누는 주간업무보고서 요청문

업무일지를 주간보고서로 요약할 때는 상태가 다른 업무를 한 문단에 섞지 않는 것이 좋습니다. 완료된 작업, 아직 진행 중인 작업, 다음 주 계획, 진행을 막는 차단 사항을 별도 항목으로 요청하면 원문과 대조하기 쉽습니다. CSV의 빈칸은 실제 값 0과 의미가 다를 수 있으므로 AI가 임의로 0으로 해석하지 않도록 제한합니다. 또한 각 요약 항목에 근거가 된 원문 행 번호나 식별자를 붙이게 하면 이후 Python으로 시간과 건수를 대조할 때 누락이나 중복을 찾기 쉽습니다.

요청문
아래 CSV 업무일지를 이용해 주간업무보고서 초안을 작성해 주세요.

보고서 구조:
1. 완료한 업무
2. 진행 중인 업무
3. 다음 주 계획
4. 차단 사항 또는 확인이 필요한 사항

규칙:
- 각 항목 뒤에 근거가 된 원문 행 번호 또는 제공된 행 식별자를 표시하세요.
- 완료와 진행 중을 임의로 바꾸지 마세요.
- 다음 주 계획이 원문에 없으면 새 계획을 사실처럼 만들지 말고 '원문에 계획 정보 없음'으로 표시하세요.
- 차단 사항이 기록되지 않았다면 '차단 사항 0건'이라고 단정하지 말고 '기록된 차단 사항 없음'이라고 표현하세요.
- CSV의 빈칸을 숫자 0이나 '없음'으로 자동 변환하지 마세요.
- 시간, 건수, 완료 수 등 숫자는 원문 값을 그대로 유지하고 계산이 필요한 경우 계산식을 함께 제시하세요.
- 서로 다른 행의 업무를 하나로 합칠 때 원문 의미가 달라지지 않는지 확인하세요.
- 마지막에 Python으로 대조할 숫자 항목을 '검산 대상'으로 별도 나열하세요.

실행·검증 기록

ChatGPT Python tool · Python 3.x · standard library only

  • 스크립트는 정확한 합성 작업 로그에서 성공적으로 완료되었다.
  • 출력은 Rows: 6을 보고했다.
  • 출력은 Total hours: 10.5를 보고했으며 2.0 + 1.5 + 2.5 + 1.0 + 2.0 + 1.5와 일치했다.
  • 출력은 Completed activities: 5를 보고했다.
  • 출력은 In-progress activities: 1을 보고했다.
  • 이 값들은 문서의 expected-values 표와 AI-report 비교 표와 일치했다.
  • 스크립트는 명시된 4개의 reconciliation metric을 정확히 포함하는 outputs/weekly_reconciliation.txt를 생성했다.
  • work_log.csv는 실행 후에도 변경되지 않았다.
  • 두 번째 실행은 'outputs already exists; remove or rename it before running again'과 함께 중단되어 명시된 덮어쓰기 방지 동작을 확인했다.
검증 범위의 한계
  • 스크립트는 기록된 hours와 status count를 검증하지만 원래 work-log 항목 자체가 사실적으로 완전하거나 정확한지는 판단할 수 없다.
  • counting rule은 문서에 명시된 대로 각 CSV row를 하나의 activity로 처리한다.
  • Python 실행 환경에서 관련 없는 스프레드시트 런타임 워밍업 경고가 발생했지만 문서 스크립트나 출력에는 영향을 주지 않았다.

참고 출처

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