핵심 개념: 멀티스텝 에이전트의 동작 (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 블로그 글을 읽으면 멀티스텝 에이전트에 대해 더 배울 수 있어요.
출처 인용
- 원문: smolagents - How do multi-step agents work? (Hugging Face Docs)
- 원본 파일: huggingface/smolagents - docs/source/en/conceptual_guides/react.md