최근(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와 같은 모델이 등장한 것들을 생각해본다면, 이러한 공유 환경이 개발 선순환의 근간이 아닐까 싶네요.