핵심 개념: 멀티스텝 에이전트의 동작 (ReAct)

핵심 개념: 멀티스텝 에이전트의 동작 (ReAct)

ReAct 프레임워크

ReAct 프레임워크(Yao et al., 2022)는 현재 에이전트를 구축하는 주요 접근법이에요.

이름은 "Reason"(추론)과 "Act"(행동) 두 단어를 합친 거예요. 실제로 이 구조를 따르는 에이전트는 작업을 필요한 만큼 많은 스텝으로 나눠 풀어요. 각 스텝은 Reasoning(추론) 단계와, 그다음 작업을 푸는 데 가까워지게 하는 툴 콜을 만드는 Action(행동) 단계로 구성돼요.

MultiStepAgent 클래스

smolagents의 모든 에이전트는 ReAct 프레임워크의 추상화인 단일 MultiStepAgent 클래스에 기반해요.

기본적으로 이 클래스는 아래와 같은 단계 사이클로 액션을 수행하고, 기존 변수와 지식이 에이전트 로그에 통합돼요.

초기화: 시스템 프롬프트가 SystemPromptStep에 저장되고, 사용자 질의는 TaskStep에 기록돼요.

While 루프(ReAct 루프):

  • agent.write_memory_to_messages()로 에이전트 로그를 LLM이 읽을 수 있는 채팅 메시지 목록으로 써요.
  • 이 메시지들을 Model 객체에 보내 completion을 받아요. completion을 파싱해서 액션을 얻어요(ToolCallingAgent는 JSON 블롭, CodeAgent는 코드 스니펫).
  • 액션을 실행하고 결과를 메모리(ActionStep)에 기록해요.
  • 각 스텝 끝에 agent.step_callbacks에 정의된 모든 콜백 함수를 실행해요.

선택적으로, 플래닝이 활성화되면 계획이 주기적으로 수정되고 PlanningStep에 저장될 수 있어요. 여기에는 현재 작업에 대한 사실을 메모리에 넣는 것도 포함돼요.

CodeAgent의 경우 아래 그림처럼 동작해요.

어떻게 동작하는지 보여주는 비디오 개요가 있고, 우리는 두 가지 버전의 에이전트를 구현해요.

  • CodeAgent — 툴 콜을 파이썬 코드 스니펫으로 생성해요.
  • ToolCallingAgent — 많은 프레임워크에서 흔하듯 툴 콜을 JSON으로 작성해요. 필요에 따라 어느 접근이든 쓸 수 있어요. 예를 들어 웹 브라우징은 페이지 상호작용마다 대기해야 하는 경우가 많아서 JSON 툴 콜이 잘 맞을 수 있어요.

[!TIP] Open-source LLMs as LangChain Agents 블로그 글을 읽으면 멀티스텝 에이전트에 대해 더 배울 수 있어요.

출처 인용

더 알아보기