다단계 에이전트는 어떻게 동작할까요?
다단계 에이전트는 어떻게 동작할까요?
ReAct 프레임워크(Yao et al., 2022)가 현재 에이전트를 만드는 주된 접근 방식이에요.
그 이름은 "Reason(추론)"과 "Act(행동)" 두 단어를 붙인 데서 왔어요. 이 구조를 따르는 에이전트는 필요한 만큼 여러 단계로 나누어 작업을 해결하죠. 각 단계는 추론(Reasoning) 단계와, 그다음 작업을 해결에 한 걸음 더 가깝게 만들어줄 도구 호출을 만드는 행동(Action) 단계로 이루어져요.
smolagents의 모든 에이전트는 ReAct 프레임워크를 추상화한 단일 MultiStepAgent 클래스를 기반으로 해요.
기본적으로 이 클래스는 아래처럼 기존 변수와 지식을 에이전트 로그에 녹여내면서 다음 단계의 순환을 수행해요:
초기화: 시스템 프롬프트는 SystemPromptStep에 저장되고, 사용자 질의는 TaskStep에 로그로 남아요.
While 루프 (ReAct 루프):
agent.write_memory_to_messages()로 에이전트 로그를 LLM이 읽을 수 있는 채팅 메시지 목록으로 작성해요.- 이 메시지들을
Model객체에 보내 완성(completion)을 받아요. 완성을 파싱해 행동을 얻어내는데,ToolCallingAgent는 JSON 블롭,CodeAgent는 코드 스니펫이에요. - 행동을 실행하고 결과를 메모리(
ActionStep)에 로그로 남겨요. - 각 단계가 끝나면
agent.step_callbacks에 정의된 모든 콜백 함수를 실행해요.
선택적으로, 플래닝이 활성화되면 계획이 주기적으로 개정되어 PlanningStep에 저장돼요. 여기에는 작업에 대한 사실들을 메모리에 주입하는 일도 포함돼요.
CodeAgent의 경우 아래 그림처럼 동작해요.
<img
src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/smolagents/codeagent_docs.png"
/>
작동 방식을 보여주는 영상이에요:
<img
class="block dark:hidden"
src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/Agent_ManimCE.gif"
/>
<img
class="hidden dark:block"
src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/Agent_ManimCE.gif"
/>
우리는 두 가지 버전의 에이전트를 제공해요:
- CodeAgent는 도구 호출을 파이썬 코드 스니펫으로 생성해요.
- ToolCallingAgent는 많은 프레임워크에서 흔하듯 도구 호출을 JSON으로 작성해요. 필요에 따라 어느 쪽이든 쓸 수 있어요. 예를 들어 웹 브라우징은 각 페이지 상호작용 후 대기가 필요한 경우가 많아서, JSON 도구 호출이 잘 맞을 수 있어요.
[!TIP] 다단계 에이전트에 대해 더 알고 싶다면 오픈소스 LLM을 LangChain 에이전트로 블로그 포스트를 읽어보세요.