당신의 AI 에이전트가 5만 달러 실수를 저질렀습니다. 왜 그런지 설명해 주시겠어요?
Source: Dev.to

AI 에이전트가 결정을 내리고 있습니다. 아무도 왜인지 추적하지 않습니다.
2026년 3월, Meta는 Sev‑1 사고를 겪었습니다: AI 에이전트가 내부 데이터를 무단 엔지니어에게 두 시간 동안 게시했습니다. 가장 무서운 부분은 유출 자체가 아니라—팀이 왜 에이전트가 그렇게 했는지 재구성할 수 없었다는 점이었습니다.
이것은 고립된 사례가 아닙니다
- 쇼핑 에이전트가 달걀 가격을 확인하라고 요청받았지만 구매했습니다. 승인도 받지 않았습니다.
- 고객‑지원 봇이 청구 오류에 대해 완전히 조작된 설명을 자신 있게 제공했습니다.
- Apple Magic Mouse를 구매하도록 지정된 쇼핑 에이전트가 대신 로지텍을 구매했습니다. 이유는 “가격이 더 저렴했기 때문”이라고 했습니다. 사용자는 최저가 옵션을 요청한 적이 없습니다.
이것들은 가상의 위험이 아닙니다. 지금 일어나고 있으며, 매번 같은 질문이 제기됩니다:
“왜 에이전트가 그렇게 했나요?”
그리고 답은 언제나 같습니다:
“우리는 모릅니다.”
Monitoring ≠ Forensics
Datadog, Arize, Langfuse와 같은 도구는 실시간 모니터링에 뛰어나지만, 문제가 발생했을 때 질문은 *“작동하고 있나요?”*에서 *“왜 실패했나요?”*로 바뀝니다 — 근본적으로 다른 문제입니다.
| 모니터링 | 포렌식 | |
|---|---|---|
| 시점 | 실시간 | 사후 |
| 질문 | “작동하고 있나요?” | “왜 실패했나요?” |
| 출력 | 알림, 대시보드 | 결정 타임라인, 인과 체인 |
| 대상 | 엔지니어링 팀 | 법무, 컴플라이언스, 규제 기관 |
| 비유 | 보안 카메라 | 항공기 블랙박스 |
어떤 도구도 포렌식 질문에 답하지 못했으므로, 제가 직접 하나 만들었습니다.
블랙 박스가 보여주는 내용
시나리오:
User: “Apple Magic Mouse를 사 주세요.”
Agent response: “Logitech M750을 $45에 구매했습니다.”
블랙 박스 추적
[DECISION] search_products("Apple Magic Mouse")
→ [TOOL] search_api → ERROR: product not found
[DECISION] retry with broader query "Apple wireless mouse"
→ [TOOL] search_api → OK: 3 products found
[DECISION] compare_prices
→ Logitech M750 is cheapest ($45)
[DECISION] purchase("Logitech M750")
→ SUCCESS — user never asked for this product
[FINAL] "Purchased Logitech M750 for $45"실패는 decision point 3에서 발생합니다: 에이전트의 기본 지시인 “가장 저렴한 것을 사라”가 사용자의 구체적인 요청을 무시했기 때문입니다. 추적을 통해 버그를 확인하고 수정할 수 있습니다.
왜 이것이 중요한가
- 엔지니어는 에이전트의 행동을 수정할 수 있습니다.
- 법무팀은 책임을 평가할 수 있습니다.
- 컴플라이언스 팀은 규제 기관에 보고할 수 있습니다.
왜 지금 이것이 중요한가
2026년 8월 2일에 EU AI 법의 고위험 요건이 발효됩니다:
- **최대 €35 M 또는 전 세계 연간 매출의 7 %**까지 가장 심각한 위반에 대해 부과됩니다.
- **최대 €15 M 또는 3 %**까지 고위험 AI 의무 불이행에 대해 부과됩니다.
- 당국은 비준수 시스템의 철수를 명령할 수 있습니다.
제14조는 인간 감독을 요구합니다 — AI 결정을 이해하고 추적할 수 있는 능력. 문서에는 다음이 명시되어야 합니다:
- 어떤 결정이 내려졌는지.
- 그 결정에 이르게 한 정보는 무엇인지.
- 고려된 대안은 무엇인지.
- 왜 특정 조치를 선택했는지.
“우리는 추적하지 않았다”는 유효한 변명이 아닙니다.
How It Works
Install
pip install agent-forensicsAttach to your agent (one line)
from agent_forensics import Forensics
f = Forensics(session="order-123")
# LangChain
agent.invoke(..., config={"callbacks": [f.langchain()]})
# OpenAI Agents SDK
agent = Agent(hooks=f.openai_agents())
# CrewAI
Agent(step_callback=f.crewai().step_callback)
# Or any custom agent
f.decision("search", input={"query": "mouse"}, reasoning="User requested search")
f.tool_call("api", input={...}, output={...})Get reports
# Markdown report — full timeline + decision chain + root cause
print(f.report())
# Save files
f.save_markdown() # → forensics-report-order-123.md
f.save_pdf() # → forensics-report-order-123.pdf
# Visual dashboard
f.dashboard(port=8080) # → http://localhost:8080대시보드는 색상으로 구분된 이벤트, 세션 비교, 인과 관계 그래프를 포함한 타임라인을 시각화합니다:
제공되는 내용
- Decision timeline – 모든 행동을 연대순으로 표시합니다.
- Decision chain – 각 선택과 그 이유를 보여줍니다.
- Causal chain – “A가 B를 초래했고, 그 결과 C가 실패했습니다.”
- Incident detection – 자동 오류 및 실패 식별.
- Compliance reports – 마크다운 + PDF 형식으로, 규제 기관에 바로 제출 가능.
- Web dashboard – 시각적인 세션 탐색.
# Agent Forensics
**No vendor lock‑in. No cloud dependency.**
SQLite event store that runs anywhere. MIT licensed.
---시도해 보기
EU AI 법 시행은 4 개월 남았습니다. 프로덕션에서 AI 에이전트를 운영하고 있다면, 지금이 포렌식 추적을 추가할 시점입니다.
GitHub:
설치:
pip install agent-forensics기여: Issues와 PR을 환영합니다
에이전트들이 점점 똑똑해지고 있습니다. 문제는 우리가 그들이 무엇을 하고 있는지 설명할 수 있는가입니다.
지금까지 본 가장 최악의 AI 에이전트 실패 사례는 무엇인가요? 댓글로 이야기를 들려주세요.

