AI VIDEO BRIEFING

구글 ADK LoopAgent 실습 정리: 반복 종료 조건과 글쓰기 에이전트 파이프라인

구글 ADK의 루프 에이전트는 스스로 멈추지 않기 때문에 종료 장치를 반드시 따로 만들어야 한다. 초안·비평·정제 에이전트를 묶어 글이 충분히 다듬어지면 루프를 빠져나오는 파이프라인 구현 과정을 정리했다.

구글 ADK 루프 에이전트로 AI가 스스로 글을 고치게 만드는 법 영상 대표 이미지

핵심 메시지

  • 루프 에이전트는 하위 에이전트를 조건이 충족될 때까지 반복 실행하는 워크플로 에이전트다. 한 번 실행하고 끝나는 순차 에이전트와 이 점이 가장 크게 다르다.
  • 루프 에이전트 자체는 LLM으로 구동되지 않아 언제 멈출지 스스로 판단하지 않는다. 따라서 무한 반복을 막을 종료 장치를 개발자가 반드시 따로 구현해야 한다.
  • 종료 방식은 두 가지다. 최대 반복 횟수(max_iterations)를 못 박는 방법과, 하위 에이전트가 조건을 평가해 종료 신호를 올리는 방법이다.
  • 실습에서는 초안 작성·비평·정제 세 하위 에이전트를 만들고, 한 번만 실행하면 되는 초안 작성자는 루프 밖에 두기 위해 순차 에이전트와 루프 에이전트를 겹쳐 구성했다.
  • 비평 에이전트가 더 고칠 곳이 없다는 신호를 내면 정제 에이전트가 exit_loop 도구를 호출해 반복을 빠져나온다. 이 함수는 도구 컨텍스트의 escalate 값을 켜서 다음 단계로 넘어가라는 신호를 보낸다.

쉽게 이해하기

구글 ADK의 워크플로 에이전트 가운데 두 번째 유형인 루프 에이전트는 이름 그대로 하위 에이전트들을 반복해서 실행한다. 지정한 횟수만큼 돌거나, 정해 둔 종료 조건이 충족될 때까지 같은 작업을 되풀이한다. 점진적으로 결과물을 개선해 나가야 하는 작업에 적합한 구조다.

주의할 점은 이 에이전트가 LLM 기반으로 동작하지 않는다는 것이다. 즉 반복을 언제 멈춰야 할지 스스로 판단하지 않으므로, 종료 메커니즘이 없으면 작업이 끝나지 않는다. 강의는 최대 반복 횟수를 지정하는 방법과 하위 에이전트가 종료 신호를 발생시키는 방법 두 가지를 제시한다.

실습 예제는 글쓰기 파이프라인이다. 주제를 받아 초안을 쓰는 작성자, 초안을 검토해 개선점을 짚는 비평가, 피드백을 반영해 글을 다듬는 정제자 세 하위 에이전트를 두고 모두 Gemini 2.0 Flash 기반 LLM 에이전트로 만든다. 초안 작성은 처음 한 번만 필요하므로 루프에 넣지 않고, 비평과 정제만 루프로 묶은 뒤 이 둘을 순차 에이전트로 이어 붙인다.

에이전트 사이의 데이터 전달은 출력 키로 이뤄진다. 작성자와 정제자는 결과를 current_story에, 비평가는 피드백을 criticism에 저장하고 서로 이 값을 참조한다. 세 에이전트 모두 include_contents 옵션을 none으로 두어 이전 대화 내용을 끌고 오지 않고 현재 지시와 입력만으로 동작하게 했다.

종료 조건은 비평가의 출력 문구로 정한다. 고칠 곳이 없으면 정해진 문구를 그대로 출력하도록 지시하고, 정제자는 그 문구가 오면 반드시 exit_loop 도구를 호출하도록 프롬프트에 명시한다. 이 도구는 도구 컨텍스트를 인자로 받아 escalate 값을 켜는 짧은 파이썬 함수이며, 여기에 더해 최대 반복 횟수를 5로 걸어 안전장치를 이중으로 뒀다.

주요 인사이트

  • 종료 조건을 자연어 문구로 주고받는 설계는 간단하지만 취약할 수 있다. 비평가가 정해진 문구를 정확히 출력해야 정제자가 이를 인식하므로, 프롬프트에서 그 문구를 글자 그대로 지정하는 것이 중요하다.
  • 최대 반복 횟수와 종료 신호를 함께 쓰는 구성이 실무적으로 안전하다. 신호 방식이 실패해도 지정한 횟수에서 반드시 멈추기 때문에 비용이 무한정 늘어나는 상황을 막을 수 있다.
  • include_contents를 none으로 두는 선택은 반복 구조에서 특히 의미가 있다. 매 회차마다 이전 대화가 누적되면 맥락이 길어지고 비용도 커지는데, 공유 상태 값만 참조하게 하면 각 단계가 필요한 정보만 보고 판단한다.
  • 순차 에이전트와 루프 에이전트를 겹쳐 쓰는 패턴은 재사용성이 높다. '한 번만 하는 준비 단계'와 '조건이 맞을 때까지 반복하는 개선 단계'를 분리하는 구조는 글쓰기 외의 작업에도 그대로 적용할 수 있다.
  • ADK가 최상위 에이전트를 인식하려면 변수 이름을 root_agent로 맞춰야 한다는 점도 실습에서 걸리기 쉬운 부분이다.

자주 묻는 질문

루프 에이전트와 순차 에이전트는 무엇이 다른가?

순차 에이전트는 등록된 하위 에이전트를 순서대로 한 번씩 실행하고 끝난다. 루프 에이전트는 조건이 충족될 때까지 하위 에이전트들을 반복 실행하므로, 결과물을 여러 번에 걸쳐 다듬어야 하는 작업에 쓴다.

반복을 멈추는 방법은 무엇인가?

루프 에이전트를 정의할 때 max_iterations로 최대 횟수를 지정하는 방법과, 하위 에이전트가 조건을 평가해 종료 신호를 발생시키는 방법이 있다. 강의에서는 두 가지를 함께 적용했다.

exit_loop 함수는 어떤 일을 하나?

도구가 호출된 시점의 실행 맥락을 담은 도구 컨텍스트를 인자로 받아, 그 안의 escalate 값을 켜는 함수다. 시스템에 더 반복하지 말고 다음 단계로 넘어가라는 신호를 보내는 역할을 한다.

각 에이전트는 서로의 결과를 어떻게 참조하나?

출력 키로 저장된 상태 값을 통해 주고받는다. 작성자와 정제자가 글 본문을 같은 키에 저장하고 비평가는 피드백을 별도 키에 저장해, 각 단계의 프롬프트에서 필요한 값을 참조하도록 구성한다.

원문과 출처

이 글은 원본 영상의 자막을 바탕으로 한국어 독자를 위해 요약했습니다. 전체 맥락과 최신 정보는 원문에서 확인하세요.

YouTube 원본 영상 보기 ↗

관련 AI 소식