콘텐츠로 이동

01-개념

Simon Willison의 자주 인용되는 정의로 시작한다.

“An LLM agent runs tools in a loop to achieve a goal.”

의역 — LLM 에이전트는 목표를 이루기 위해 도구를 루프 안에서 호출한다.

Letta 팀은 곧이어 이렇게 덧붙인다.

“But not all loops are created equal. The underlying design of the agent loop fundamentally shapes how your agent behaves: when it decides to reason, when to terminate, and whether it gets stuck in infinite loops or exits prematurely.”

의역 — 그러나 모든 루프가 같지 않다. 에이전트 루프의 설계가 언제 추론할지, 언제 종료할지, 무한 루프에 빠질지 너무 일찍 나갈지를 근본적으로 결정한다.

본 챕터의 한 줄 요약이다.

2022년 ReAct 논문이 도입한 형태. 모델이 매 턴 Thought → Action → Observation을 텍스트로 출력하고, 응답에 Final Answer: 같은 토큰이 등장하면 하네스가 루프를 끝낸다. 종료 신호가 생성 텍스트의 약속된 패턴이다.

  • 장점: 단순.
  • 단점: 모델이 약속을 어기면 루프가 깨진다. 토큰 효율도 나쁘다.

(B) MemGPT/heartbeat — 명시적 함수 호출 종료

섹션 제목: “(B) MemGPT/heartbeat — 명시적 함수 호출 종료”

MemGPT는 send_message처럼 사용자에게 말하는 행위 자체를 함수로 만든다. 모델이 그 함수를 호출하지 않는 한 루프는 계속 돈다(=heartbeat). 종료는 별도의 finish 함수가 결정한다.

  • 장점: 텍스트 약속에 의존하지 않음.
  • 단점: 종료 함수를 잊으면 무한 루프.

(C) Claude API의 stop_reason — 모델·하네스 합의

섹션 제목: “(C) Claude API의 stop_reason — 모델·하네스 합의”

Anthropic API는 응답마다 stop_reason 필드를 돌려준다.

  • tool_use — 모델이 도구를 부르고 싶음. 하네스는 도구를 실행하고 다시 호출.
  • end_turn — 모델이 더 할 일이 없음. 하네스는 사용자에게 제어를 넘김.
  • max_tokens, stop_sequence — 비정상/강제 종료.

Claude Code는 (C)를 쓴다. 즉 종료 결정의 1차 책임이 모델에게 있고, 하네스는 안전 상한(max steps, max tokens, 시간 제한)으로 보조한다. ReAct와 달리 텍스트 패턴 매칭이 없고, MemGPT와 달리 별도 finish 함수도 없다. end_turn이 곧 finish다.

이 차이가 왜 중요한가? “모델이 너무 일찍 멈췄다”의 진단이 세 모델에서 모두 다르기 때문이다.