다단계 에이전트는 어떻게 동작하나?
다단계 에이전트는 어떻게 동작하나?
ReAct 프레임워크(Yao et al., 2022)가 현재 에이전트를 만드는 주요 접근 방식이에요. 이름은 "Reason(추론)"과 "Act(행동)" 두 단어를 합친 것입니다. 이 구조를 따르는 에이전트는 작업을 필요한 만큼의 단계로 나눠 풀어내는데, 각 단계는 추론 단계와, 그다음 작업 해결에 가까워지게 하는 도구 호출을 만드는 행동 단계로 구성돼요.
smolagents의 모든 에이전트는 MultiStepAgent 클래스 하나를 기반으로 해요. 이 클래스는 ReAct 프레임워크의 추상화입니다.
ReAct 루프
기본적으로 이 클래스는 다음 단계의 주기로 동작하며, 기존 변수와 지식이 아래처럼 에이전트 로그에 통합돼요.
초기화: 시스템 프롬프트가 SystemPromptStep에 저장되고, 사용자 질의가 TaskStep에 기록됩니다.
While 루프(ReAct 루프):
agent.write_memory_to_messages()로 에이전트 로그를 LLM이 읽을 수 있는 채팅 메시지 목록으로 변환- 이 메시지들을
Model객체에 보내 완성(completion)을 받고, 파싱해 동작(행동)을 얻음 —ToolCallingAgent에선 JSON 블롭,CodeAgent에선 코드 스니펫 - 동작을 실행하고 결과를 메모리에 기록(
ActionStep) - 각 단계 끝에서
agent.step_callbacks에 정의된 모든 콜백 함수 실행
선택적으로 계획(planning)이 활성화되면 계획을 주기적으로 수정해 PlanningStep에 저장할 수 있어요. 여기엔 작업에 관한 사실을 메모리에 공급하는 것도 포함됩니다.
두 가지 에이전트 버전
- CodeAgent: 도구 호출을 Python 코드 스니펫으로 생성해요.
- ToolCallingAgent: 많은 프레임워크에서 흔히 쓰는 것처럼 도구 호출을 JSON으로 작성해요. 필요에 따라 둘 중 하나를 쓸 수 있어요. 예를 들어 웹 브라우징은 각 페이지 상호작용 후 대기가 필요해 JSON 도구 호출이 잘 맞을 수 있어요.
[!TIP] 다단계 에이전트에 대해 더 알고 싶다면 Open-source LLMs as LangChain Agents 블로그 포스트를 읽어보세요.