AI 에이전트 — 모델이 아니라 그래프 · 그래프로 보는 에이전트 · 이론
끝내는 조건이 없으면 제품이 아니다
한 줄 요약
끝내는 조건이 없는 에이전트는 제품이 아니다. 그리고 그 조건은 모델이
아니라 사람이 정한다.
왜 필요한가 — 재귀 한도는 안전장치이지 설계가 아니다
LangGraph 에는 recursion_limit 이 있다. 그 수를 넘으면 예외를 던진다.
그것에 기대는 순간 두 가지가 따라온다 — 사용자는 오류를 보고, 그때까지
쓴 비용은 그대로 청구된다.
한도는 버그를 잡는 그물이지 멈추는 방법이 아니다. 멈추는 방법은 그래프
안에 있어야 한다.
멈추는 조건 세 가지
실무에서 쓰는 조합은 대개 이 셋이다.
| 조건 | 언제 | 안 두면 |
|---|---|---|
| 성공 | 원하는 것을 얻었다 | 답을 얻고도 계속 돈다 |
| 횟수 상한 | N 번 해 봤다 | 영원히 다시 시도한다 |
| 포기 경로 | 상한에 닿았다 | 예외로 죽거나 지어낸다 |
세 번째가 가장 자주 빠진다. 상한만 두고 그 뒤를 안 정하면, 상한에 닿는
순간 갈 곳이 없어 예외가 난다. 포기하는 것도 경로다.
def after_lookup(state): if state.get("answer"): return END # 성공 if state.get("tries", 0) < MAX_TRIES: return "lookup" # 다시 return "fallback" # 포기 — 이 줄이 자주 빠진다모를 때 지어내지 않는다
포기 경로가 하는 일은 멈추는 것만이 아니다. 모른다고 말하는 것이다.
조회가 빈손으로 돌아왔는데 모델에게 "답해 줘" 라고 넘기면, 모델은 답을
만들어 낸다. 그것이 환각의 가장 흔한 경로이고, 원인은 모델이 아니라
빈손을 그대로 넘긴 그래프다.
현장에서
토큰 비용이 예상의 몇 배로 나왔다는 신고를 받으면 볼 곳이 정해져 있다 —
루프를 도는 경로와 그 상한. 로그에 경로가 남아 있지 않으면 그것조차
확인할 수 없어서, 결국 전체를 다시 만들게 된다. 상한과 기록은 같이 간다.