최근(2023.09)에 나온 논문을 읽어보고 간단히 정리했습니다.
혹시 부족하거나 잘못된 내용이 있다면 댓글 부탁드립니다 🙇♂️
비전문가 유저도 쉽게 이용할 수 있는 autonomous agent 제작 프레임워크, AGENTS.
planing, memory, tool usage, multi-agent communication, fine-grained symbolic control 등의 기능을 포함.
- 배경
최근에는 LLM의 능력을 이용하여 autonomous language agent를 만드는 연구 또한 활발히 이뤄지고 있습니다.
이를 접목시키기 가장 쉬운 분야를 떠올린다면 게임의 npc가 될 수 있겠죠.
스스로 주변 환경을 인식하고, 사고하고, 판단하고, 행동하는 주체를 만드는 것이 목표입니다.
하지만 기존의 프레임워크들은 자연어를 활용하는 프레임워크임에도 불구하고
1) 전문가가 아니면 다루기 어려운 짜임새를 갖추고 있거나(코드나 프로그래밍을 잘 알아야 활용 가능)
2) customizing하기 좋지 않아 주어진 특징만을 그대로 이용해야 하거나
3) 다룰 수 있는 핵심 기능이 굉장히 제한되는 경우들이 많았습니다.
본 논문에서는 이러한 단점들을 극복하여 비전문가도 쉽게 다룰 수 있으면서 다양한 customizing 기능을 갖춘 프레임워크 AGENTS를 제시합니다.
- 기능
AGENTS에서 커버 가능한 기능들을 다른 프레임워크들과 비교한 표입니다.
각 기능들을 간단히 정리하면 다음과 같습니다.
1) Long-short term memory
일반적인 machine learning 모델과 달리 autonomous agent는 주변 환경 또는 다른 agent와 상호작용하고, 그 내용을 기억할 필요가 있습니다.
이를 위해 주로 저장해야 할 내용들을 VectorDB에 저장하고 retrieve하는 방식을 취합니다.
여기서는 config 파일에서 long-term / short-term / both 셋 중 하나를 선택 기입하도록 되어 있습니다.
2) Tool usage & Web navigation
LLM의 능력이 아무리 출중하다고 하더라도 모든 분야를 완벽하게 커버할 수는 없습니다.
그래서 LLM으로 하여금 external tool을 사용하거나 인터넷을 잘 서핑하게끔 만드는 것이 중요해졌습니다.
AGENTS에서는 특정 API를 개발자들이 원하는대로 포함시킬 수 있는 구조도 갖추고 있습니다.
3) Multi-agent communication
AGENTS에서는 multi-agent system을 customizing 할 수 있습니다.
여러 개의 agent를 생성하고 이들끼리, 심지어는 사람과 상호작용할 수 있도록 세팅 가능합니다.
Standford University에서 보여주었던 'Generative Agents'의 여러 agents를 떠올려보면 이해가 쉬울 것 같습니다.
4) Human-agent interaction
기존 프레임워크에서는 특히 multi-agents가 상호작용하는 상황에서 인간이 개입하기가 쉽지 않았습니다.
보통 system message를 통해 사람의 입장을 전달하는 수준이었는데,
여기에서는 config에서 특정 옵션을 켜고 끔으로써 사람의 응답을 기다렸다가 이를 전체 history에 반영할 수 있습니다.
5) Symbolic control
Standard Operating Procedures(SOP)를 사용하고 있습니다.
이는 agent가 task를 달성하면서 만날 수 있는 여러 상황과 state 간의 transition rule 등을 정의한 multiple states 그래프입니다.
즉 이전의 고정된 system prompt를 기반으로 agent의 행동이 결정 및 control 되었던 것과 다른 방식임을 알 수 있습니다.
- Library Design
이 프레임워크에서 사용되는 핵심적인 클래스들이 있는데 이중에서 핵심적인 것만 논문에서 발췌하여 보여드리고자 합니다.
위처럼 구조가 굉장히 간단합니다.
agents, sop, environment만 갖춰지면 동작할 수 있는 구조이고,
각 class에 관한 정보는 config 파일에 기재되어 있습니다.

sop의 finished가 False인 동안 반복문이 돌면서 여러 step, update 함수가 실행되는 것을 알 수 있습니다.
결국 update 과정에서 sop.finished가 True로 변하는 순간 run 함수가 끝나게 됩니다.
1) Agent
이 클래스는 agent._observe(environment), agent._act( ), agent._update_memory( ) 세 개의 메서드를 포함합니다.
이 세 개의 메서드는 agent.step( ) 메서드 하나에 wrapped되어 있습니다.
의미를 간단히 생각해보면, 주변 환경을 관찰 후 행동하고 기억을 업데이트하는 것이 한 step이 됩니다.
2) SOP
states는 State 클래스로 요약되는데, 여기에는 Component 클래스가 포함됩니다.
Component 클래스는 PromptComponent와 ToolComponent로 구성됩니다.
한편 State 클래스는 sop._transit( ), sop._route( ) 메서드를 포함하고 이는 sop.next( ) 함수로 wrapped 되어 있습니다.
3) Environment
핵심적인 두 함수는 environment._observed( )와 environment.update( ) 입니다.
위 두 개의 클래스와 묶어서 생각을 해보면, SOP를 기반으로 행동할 agent를 정하고, 실제 agent가 행동을 취하고, 그 결과를 environment에 반영하는 것입니다.
한편, 각자가 세팅한 language agent를 공유하여 유용한 agent를 검색하고 다운로드 받을 수 있도록 AGENT HUB라는 공유 플랫폼 또한 제공하고 있다고 합니다.
- 개인적 감상
LLM을 활용한 여러 프로젝트 중에서 가장 기억에 남던 것이 위 본문에서 언급한 Stanford Univ의 'Generative Agents: Interactive Simulacra of Human Behavior' 입니다.
아직까지는 다양한 분야에 접목시키기에 한참 부족한 수준이지만, 뭔가 게임처럼 구성된 환경도 그렇고 '자율적'인 특성이 굉장히 잘 드러났던 연구인 것 같아서 그렇습니다.
그렇기 때문에 비전문가도 다양하게 접근하여 이러한 agent를 만들 수 있는 프레임워크가 등장했다는 소식은 참 반가운 것 같습니다.
사실 비전문가라는 것이 어느 정도의 배경 지식을 갖춘 사람을 의미하는 것인지는 모르겠으나,
파이썬의 클래스 개념, 함수 동작 구조, config의 역할 등 정도만 잘 이해하고 있어도 충분하지 않을까 싶은 생각이 들기도 했습니다.
그리고 무엇보다도 공유 가능한 플랫폼을 제공하는 것이 참 좋은 점이라고 느껴집니다.
ChatGPT와의 대화 내용을 ShareGPT에 공유함으로써 양질의 프롬프트가 연구되기도 하고 이를 활용하여 Vicuna와 같은 모델이 등장한 것들을 생각해본다면, 이러한 공유 환경이 개발 선순환의 근간이 아닐까 싶네요.
출처 : https://arxiv.org/abs/2309.07870
Agents: An Open-source Framework for Autonomous Language Agents
Recent advances on large language models (LLMs) enable researchers and developers to build autonomous language agents that can automatically solve various tasks and interact with environments, humans, and other agents using natural language interfaces. We
arxiv.org