전편
[Review] A survey on large language model based autonomous agents - Overview of Autonomous Agent
지난 시간에는 Autonomous Agent의 정의와 발전 과정에 대해 살펴봤습니다.
오늘은 그러한 LLM 기반의 Autonomous Agent가 어떤 구조로 구성(Construction) 되는 지에 대해 살펴보도록 하겠습니다.
본 논문에서는 Autonomous Agent의 Construction에 대해 두 가지 질문을 제시했습니다.
1. How to design the agent architecture to better leverage LLMs?
2. How to inspire and enhance the agent capability to complete different tasks?
기존 LLM은 QA Task에 대해서는 높은 성능을 보였지만, agent는 QA와는 다른 특성을 보입니다. LLM이 QA가 아닌 agent에서도 높은 성능을 보이려면 아래와 같은 작업이 필요합니다.
기존 LLM을 활용해 위와 같은 작업을 해주기 위해 본 논문에서는 아래와 같은 architecture를 제안했습니다.

각각의 모듈은 아래와 같은 목표를 갖고 설계되어졌습니다.
이제 각 모듈에 대해 자세히 알아보도록 하겠습니다.
해당 모듈은 현실 세계의 시나리오에 맞게 Agent에게 역할(Role)을 제시합니다.
이때, 역할 제시는 prompt를 통해 진행되며, 이 역할은 LLM의 행위에 영향을 주게 됩니다.
Profile을 하는 방법은 아래와 같습니다.
Handcrafting method
사람이 직접 manually 하게 한땀한땀 prompt를 입력해가며 역할을 부여합니다.
세세한 조정은 가능하지만, Agent가 많을 시에는 비효율적입니다.
LLM-generation method
처음 LLM에게 Seed Information과 생성 규칙만 전달하고, 그 이후부터는 LLM이 자동으로 역할을 생성하는 방법입니다.
대량 Agent에는 효율적이지만, 정교한 조정은 불가능하다는 단점이 존재합니다.
Dataset alignment method
실제 세계의 데이터셋을 기반으로 Agent의 Profile을 생성합니다.
위와 같은 Profile 정의 방식이 존재하며, Profile 과정은 Agent의 설계의 기초가 되는 중요한 단계입니다.
Memory Module은 환경으로부터 인지한 정보를 저장하고, 미래 행위에서 해당 정보를 효율적으로 사용할 수 있게끔 합니다.
이러한 과정을 위해 Memory의 structure, format, operation에 대해 집중합니다.
Memory Structure에서는 저장된 정보를 어떤 구조로 저장을 할 지에 대해 논의합니다. 이를 위해 인간의 기억 원리와 매커니즘을 활용하는데 Short-Term Memory와 Long-Term Memory에 기반하여 구조를 설계합니다.
위와 같은 메모리 Structure가 존재하는데 Long-Term만 사용하는 구조는 거의 존재하지 않습니다. 왜냐하면 Agent는 환경에 적응해야 하므로 즉각적인 반응을 반영 못하는 Long-Term만 사용하는 것은 비효율적이기 때문입니다.
Memory Format은 저장되는 정보의 형식(text, db, sql 등)을 의미합니다.
Natural Language
Raw Natural Language 자체를 저장함으로써 의미 전달에 효과적이어서 행동 가이드에 효과적입니다.
Embedding
유사도 기반으로 검색을 요구하는 작업에 적합한 format으로 검색 효율이 좋습니다.
Database
편집,삭제,추가와 같은 정밀 조작이 필요한 데이터에 대해서 적합합니다.
Structured List
메모리의 계층적 리스트나 트리 구조를 구체화시킨 것으로 목표/계획 간 명확한 데이터일때 효율적입니다.
Memory Operation은 환경과 직접 상호작용하기 위해 데이터를 습득, 축적, 활용하는 작업을 수행합니다. 크게 reading/writing/reflecting 작업으로 나뉩니다.
Memory reading
저장된 메모리로부터 의미 있는 정보를 추출해내는 것을 목표로 작업이 이뤄집니다.
이때, 의미 있는 정보란 크게 Recency, Relevance, Importance로 총 3가지 기준에 의해 채택됩니다. 이때, 아래의 수식을 만족하는 기억을 추출해내게 됩니다.

아래 수식에서 활용되는 Scoring Function도 다양하게 정의할 수 있으며, 파라미터 조정을 통해 정보의 가치를 조정할 수도 있습니다.
Memory writing
해당 작업은 환경으로부터 얻은 정보를 추후 행위에 사용될 수 있도록 저장하는 작업을 의미합니다. 하지만 writing 과정에서는 Memory Duplicated, Memory Overflow 문제를 다뤄야합니다.
Memory Duplicated는 정보가 저장될 때 비슷하거나 이미 존재하는 데이터의 경우, 어떻게 처리할 것인가에 대해 논의합니다. 다양한 방식이 존재하며 중복되는 데이터의 개수를 저장하여 중요도를 파악하는 방법 혹은 일정 수의 중복된 답변이 되었을 경우, LLM을 활용하여 통합하는 방법 등이 존재합니다.
Memory Overflow는 메모리의 용량이 한계를 도달했을 때 어떤 정보를 지우고 남길 것인지에 대해 논의합니다. FIFO 방식이나 사용자가 정의해서 지우는 방식 등이 존재합니다.
Memory reflecting
Memory Reflecting 작업은 기존 메모리를 검토하고 요약 및 재구성하여 더 나은 의사 결정을 지원하는 작업입니다. 후보 답변을 여러개 두어 채택하는 방식, 여러 개의 답변을 요약하는 방식 등이 활용됩니다.
Planning Module은 인간이 업무를 처리할 때, 하나의 큰 업무를 여러 개의 작은 작업으로 나눠서 작업하는 것처럼, Agent가 좀 더 효율적이고 안정적으로 행동하도록 계획(Planning)하는 것을 목표로 합니다.

실제 복잡한 업무에 대해서는 전제 조건이나, 변수에 의해 초기 계획대로 진행되지 않을 가능성이 매우 높다. 그렇기에 Feedback을 Agent에 전달해주면 더 효율적으로 Agent가 동작할 수 있습니다.
Enviormental Feedback
Agent가 Action을 수행한 후 현실/가상 세계에서 관찰되는 정보를 기반으로 피드백을 주는 것을 의미합니다.
Human Feedback
인간의 선호도나 의견이 필요한 경우에 사용하는 Feedback 방법으로, 인간의 주관적인 기준으로 Feedback을 전달합니다.
Model Feedback
별도의 평가자가 있는 것이 아닌 Agent 스스로 내부의 모델을 활용하여 Feedback을 진행합니다.
Action Module은 Agent의 의사 결정 후 실제 행동으로 변환하는 역활을 수행합니다. 이 때 해당 모듈은 행위의 목적을 정의하고, 행위를 어떻게 수행할 것인가에 대해 논의한 후, 가능한 행동 범위를 정의하고, 실행이 가져올 영향력을 평가합니다.
Agent가 수행할 행동의 목적과 의도를 명확히 정의하는 단계로, 최종 업무의 목적을 명확히 정의해야 합니다.
Agent가 목표를 달성하기 위해 실제 행동을 어떻게 생성하는지를 설명하는 단계입니다.
Memory Recollection 기반
과거 메모리에서 관련 정보를 검색하여 행동을 생성하는 방식을 의미합니다.
Plan Following 기반
사전에 생성된 계획(Plan)을 따라 행동을 수행하는 방식입니다.
Agent가 수행할 수 있는 행동 집합을 정의하는 단계입니다. 이때 Agent는 내부의 지식 뿐만 아니라 데이터베이스, 외부 모델, 외부 API 등 다양한 자원으로부터 데이터를 수집할 수 있습니다.
해당 과정은 Agent의 행동이 환경과 Agent 내부 상태에 미치는 결과를 의미합니다. 크게 세 가지 대표적인 영향 유형을 소개합니다.
Capability Acquisition은 LLM 기반 Agent가 다양한 작업을 수행하기 위해 필요한 능력을 확보하고 향상시키는 과정을 의미합니다.
위의 Architecture를 통해 기본 LLM이 가진 언어 이해 및 생성 능력을 향상 시켰다면, 해당 과정을 통해 도메인 특화 기능, 도구 활용 능력 등을 강화할 수 있습니다.
모델 파라미터를 조정하여 특정 작업을 수행하는 능력을 강화하는 방법으로, 인간 Annotated Dataset이나 LLM이 생성한 데이터, 실세계 데이터셋 등을 활용하여 모델에 직접 반영하는 방법입니다.
하지만 오픈소스 LLM에서만 가능하며, 비용 및 구축 부담이 크다는 단점이 존재합니다.
모델 파라미터 변경 없이 외부 전략으로 능력을 강화하는 방식으로 Prompt Engineering / Mechanism Engineering 방법이 존재합니다.
해당 방식은 오픈소스 및 Closed-source에서도 모두 적용 가능하지만 입력 컨텍스트에 한계가 존재하여 설계가 어렵다는 단점이 존재합니다.