AI

[에이전트] 같은 말 반복, 프롬프트 대신 그래프 제어로 끝낸 턴

jykim23 2026. 7. 21. 22:03
반응형

터미널 도구 턴 종료 프롬프트 실패 그래프 제어 동반 텍스트 무한루프 1회 캡

부제: LLM이 같은 말을 반복하는 걸, 프롬프트가 아니라 제어 흐름으로 끝낸 이야기

에이전트에는 사용자에게 버튼·선택지 같은 UI를 그려주는 도구가 있다.
LLM이 이 도구를 호출하면 화면에 UI가 뜬다.
문제는 이 도구를 호출한 "다음"에 벌어졌다.

같은 말을 두 번 하는 에이전트

LLM이 UI 도구를 호출할 때, UI만 만드는 게 아니라 답변 텍스트도 같이 생성한다.
"아래에서 골라주세요" 같은 말과 함께 버튼을 띄우는 식이다. 여기까진 정상이다.

그런데 그래프(LangGraph)가 거기서 끝나지 않았다.
도구 실행이 끝나면 에이전트에게 턴이 다시 넘어가, 에이전트가 한 번 더 말을 해야 대화가 마무리됐다.

문제는 마지막 턴에서 에이전트가 할 말이 없다는 것이다.
방금 UI와 함께 할 말을 다 했으니까.
그러니 조금 전에 한 말과 비슷한 말을 또 한다.
사용자 입장에선 같은 말을 두 번 듣게 된다.

프롬프트로는 안 됐다

처음엔 프롬프트로 잡으려 했다.
"UI 도구를 호출한 뒤엔 말을 반복하지 마라" 같은 지시를 넣는 것이다.

실패했다.
LLM은 이런 지시를 안정적으로 지키지 않는다.
될 때도 있고 안 될 때도 있으면, 그건 제어가 아니다.

그래서 도구가 턴을 끝내게 했다

방향을 바꿨다. 프롬프트로 부탁하는 대신, 구조로 강제하기로.

UI 도구를 "터미널 도구"로 지정했다.
이 도구를 호출하면 그래프가 그 자리에서 종료된다.
에이전트에게 추가 턴을 주지 않으니, 반복할 기회 자체가 사라진다.
반복 문제는 이걸로 해결됐다.

이번엔 말없이 UI만

그런데 새 케이스가 나왔다.
답변 텍스트 없이 UI 도구만 호출하는 경우다.

이러면 버튼만 덜렁 뜨고 아무 말이 없다.
에이전트는 말 대신 UI를 내면 안 된다. 말을 하면서 UI를 곁들여야지, UI로 말을 대체하면 안 된다.
그런데 "도구 호출=무조건 종료"로 막아버렸으니, 이 경우엔 에이전트가 말할 기회를 잃었다.

규칙을 도구가 아니라 '내용'에 건다

그래서 종료 조건을 다시 짰다.
"도구를 호출했으니 끝"이 아니라, "동반 텍스트가 있으면 끝" 으로.

  • UI 도구 호출 + 함께 나온 말이 있다 → 할 말 다 했으니 종료
  • UI 도구 호출 + 말이 없다 → 에이전트에게 한 턴 더 줘서 말하게 한다

여기서 중요한 두 가지.
하나, 이 규칙은 특정 도구에 붙인 플래그가 아니라 "content가 있느냐"라는 보편 조건이다. 어떤 터미널 도구든 똑같이 적용된다.
둘, 되돌리는 건 딱 한 번만이다. 말하라고 턴을 줬는데 또 말없이 UI만 내면? 무한히 되돌 수 있다. 그래서 "이미 한 번 되돌렸으면 강제 종료"라는 안전장치를 뒀다. 무한루프 방지다.

프롬프트로 부탁해서 안 되던 걸, 결정적인 제어 흐름으로 끝낸 것이다.

정리

  • UI 도구를 호출하면 텍스트도 함께 나오는데, 그래프가 안 끝나고 에이전트에 턴이 다시 가 같은 말을 반복했다
  • 프롬프트로 "반복 금지"는 실패 — LLM이 안정적으로 안 지킴
  • UI 도구를 터미널 도구로 지정해 호출 즉시 그래프 종료 → 반복 해결
  • 그러나 "말 없이 UI만" 케이스 발견 — 에이전트가 UI로 말을 대체하면 안 됨
  • 최종: 동반 텍스트가 있으면 종료, 없으면 한 턴 더 줘서 서술 — 조건은 특정 도구 플래그가 아닌 content 유무(보편 규칙), 되돌림은 1회 캡으로 무한루프 차단

LLM의 행동을 프롬프트로 못 잡을 때가 있다.
그럴 땐 부탁하지 말고 그래프의 제어 흐름으로 강제한다.
단, 강제하면 반대쪽 엣지 케이스(말 없이 UI만)가 생기니, 조건을 도구가 아니라 내용(content 유무) 에 걸고, 안전장치(1회 캡)를 함께 둔다.

반응형