본문으로 건너뛰기

© 2026 Molayo

Qiita헤드라인2026. 06. 30. 12:53

Python으로 AI 보고서의 출처 누락을 점검하기

요약

AI가 생성한 보고서의 할루시네이션 문제를 방지하기 위해, 출처가 누락된 행을 자동으로 찾아내는 Python 스크립트 활용법을 소개합니다. 숫자, 특정 조사, 시장 규모 언급 등이 포함되었음에도 URL이나 출처가 없는 문장을 식별하여 자료의 신뢰도를 높입니다.

핵심 포인트

  • AI 보고서의 할루시네이션 방지를 위한 출처 검증의 중요성
  • 숫자, 조사, 시장 규모 키워드를 기반으로 한 누락 행 추출 방식
  • Python을 활용하여 Markdown 보고서에서 검증이 필요한 행을 CSV로 출력
  • 진위 판정이 아닌, 근거 확인이 필요한 지점을 찾아내는 보조 도구로서의 역할

AI로 만든 보고서를 그대로 사내에 제출할 때, 가장 무서운 것은 "문장이 이상한" 것이 아니라, 오히려 문장이 너무 깔끔하다는 점이라고 생각합니다.

영업 자료든 기획 메모든, 숫자가 들어가면 갑자기 그럴싸해 보이죠. "시장 규모는 3년 만에 2배", "도입 기업은 73%"와 같은 문장이 자연스럽게 섞여 들어갑니다. 읽는 사람도 바쁘기 때문에, 형식이 잘 갖춰져 있으면 그냥 넘어가 버리곤 합니다.

2026-06-29에 Gizmodo Japan에서 "대형 컨설팅사가 만든 AI 보고서가 할루시네이션 (Hallucination) 투성이였다"라는 기사를 읽었습니다. 큰 회사의 실패로 보기보다, 저는 상당히 피부에 와닿는 이야기라고 느꼈습니다. AI로 초안을 만드는 현장에서는 작은 자료에서도 똑같은 일이 흔히 일어납니다.

그래서 제출 전에 "출처가 필요해 보이는 행만" 추출하는 작은 체크 도구를 작성했습니다.

진위 판정은 하지 않습니다. 거기까지 자동화하면 또 다른 사고가 됩니다. 여기서는 숫자, 조사, 발표, 시장 규모와 같은 단어가 있는데도 URL이나 출처 표기가 없는 행을 찾아낼 뿐입니다. 이것만으로도 은근히 효과가 있습니다.

제가 제출 전에 확인하고 싶은 것은 대체로 이 세 가지입니다.

먼저 숫자가 포함된 행. 비율, 금액, 건수, 연월, 배율. 숫자는 설득력이 강한 만큼, 틀리면 자료 전체의 신뢰도를 떨어뜨립니다.

다음으로 "조사", "보고", "발표", "~에 따르면"과 같이 누군가의 정보에 의존하고 있는 행. 여기에 출처가 없으면 읽는 사람이 검증할 수 없습니다.

마지막으로 시장 규모나 점유율(Share) 이야기. 영업 자료에서는 유용하지만, AI가 가장 자연스럽게 끼워 넣기 쉬운 부분입니다.

아래 스크립트는 Markdown 보고서를 읽고, 근거를 붙이는 것이 좋을 법한 행을 CSV로 출력합니다.

from __future__ import annotations
import argparse
import csv
...
```"):
in_code = not in_code
continue
if in_code or not stripped or stripped.startswith("#"):
continue
yield line_no, stripped
def reason_for(line: str) -> str | None:
if HAS_SOURCE.search(line):
return None
reasons: list[str] = []
if NUMBER_CLAIM.search(line):
reasons.append("number_claim")
if SOURCE_WORD.search(line):
reasons.append("source_word")
return "+".join(reasons) if reasons else None
def main() -> int:
parser = argparse.ArgumentParser()
parser.add_argument("markdown", type=Path)
args = parser.parse_args()
text = args.markdown.read_text(encoding="utf-8")
warnings: list[tuple[int, str, str]] = []
checked = 0
for line_no, line in iter_target_lines(text):
checked += 1
reason = reason_for(line)
if reason:
warnings.append((line_no, reason, line))
writer = csv.writer(sys.stdout)
writer.writerow(["line", "reason", "text"])
writer.writerows(warnings)
print(f"checked={checked} warnings={len(warnings)}")
return 2 if warnings else 0
if __name__ == "__main__":
raise SystemExit(main())

예를 들어, 다음과 같은 Markdown을 준비합니다.

# AI 도입 메모
2026년의 AI 도입 기업은 73%까지 늘었다.
시장 규모는 3년 만에 2배가 된다.
OpenAI의 발표에 따르면 새로운 기능이 추가되었다. https://example.com/news
```text
테스트 데이터는 100건

영업부의 확인 프로세스를 월말까지 결정한다.


실행합니다.

$ python3 evidence_lint.py report.md
line,reason,text
3,number_claim,2026년의 AI 도입 기업은 73%까지 증가했다.
4,number_claim+source_word,시장 규모는 3년 만에 2배가 된다.
checked=4 warnings=2


코드 블록 내의 `100건`

...

python3 evidence_lint.py draft_report.md > evidence_warnings.csv


`evidence_warnings.csv`

...

시장 규모는 3년 만에 2배가 된다. 출처: https://example.com/report


또는,

조사 리포트에 따르면, 시장 규모는 3년 만에 2배가 된다.


형식을 통일하면 기계가 찾아내기 쉬워집니다. 사람에 따라 「참고」, 「소스」, 「참조」 등이 섞이면, 체크하는 측의 기준이 점점 느슨해집니다.

마지막으로, 전부를 차단하지 마세요. 사내 메모 단계라면 경고(warning)만으로 충분합니다. 이사회 자료, 고객 제출 자료, 보도 자료만 걸러내세요. 체크를 너무 엄격하게 하면 도구 자체가 사용되지 않게 되므로, 중단할 지점을 좁히는 것이 지속 가능합니다.

AI 보고서에 필요한 것은 AI를 계속 의심하는 근성이 아니라, 의심할 지점을 미리 결정하는 시스템입니다. 숫자, 조사, 발표, 시장 규모. 이 정도를 제출 전에 기계로 추출하는 것만으로도 리뷰는 상당히 수월해집니다.

문장이 매끄러울수록 근거의 허점이 보이지 않습니다. 그렇기 때문에 외관을 다듬는 공정과 별개로, 근거를 점검하는 공정을 두어야 합니다. AI로 자료 작성을 빠르게 하려 한다면, 이 작은 수고까지 세트로 묶어두는 것이 안전합니다.

Source: https://www.gizmodo.jp/article/a-report-full-of-hallucinations/

AI 자동 생성 콘텐츠

본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0