
1. Introduction
기존 연구에서 multiple agents의 장점
- encourage divergent thinking
- improve factuality and reasoning
- provide guardrails
최근 LLM의 발전으로 일반적인 타당성(feasibility)와 유용성(utility)이 확인되는 3가지 이유
- cooperate through conversations : 채팅에 최적화된 LLM(GPT-4)은 피드백 수용 및 대화형 학습을 통해 LLM간 협력 가능.
- Various configurable agents : 서로 다른 설정으로 agent를 구성하여 다양한 역할 수행
- Complex task segmentation : 복잡한 작업을 단순한 하위 작업으로 나눠 대화를 통해 협력
2. The AutoGen Frame
다양한 도메인에서 복잡한 LLM 애플리케이션을 간단하고 효율적으로 개발하기 위해 multi-agent workflows를 통합하는 것을 목표로 함.
Customizable and Conversable Agents
conversable agent를 메시지를 주고 받으며 대화를 시작하거나 이어갈 수 있는 특정 역할을 가진 Entity로 정의함. 주고받은 메시지를 기반으로 internal context를 유지하며, 다양한 기능을 수행하도록 구성될 수 있음.
에이전트 기능 :
- Agent capabilities powered by LLMs, humans, and tools
- LLM: 고급 LLM의 기능(role playing, implicit state inference, progress making from conversation history, providing feedback, adapting from feedback, coding 등)을 활용하여 높은 수준의 자율성과 기술 제공,
- Humans : 특정 대화에서 인간의 입력을 요청하거나 작업을 실행하도록 설계
- Tools : 코드 실행 또는 함수 호출을 통해 작업 수행

- Conversable Agent: highest-level agent abstraction이며, 기본적으로 LLMs, humans, tools를 사용할 수 있음.
- Assistant Agent, UserProxyAgent : 사전 구성된 ConversableAgent의 subclasses
특징:
- 다양한 역할 : 코드 작성, 코드 실행, 인간 피드백 연결, 출력 검증 등의 역할을 수행할 수 있음
- 확장 가능성 : 기본적으로 제공되는 기능을 기반으로 에이전트를 사용자 요구에 맞게 확장 가능.
- LLM과의 결합 : 피드백 수용 및 대화형 진행 능력을 활용하여, 모듈형 방식으로 다양한 기능을 조합.
Conversation Programming
AutoGen은 복잡한 LLM 애플리케이션 워크플로우를 다중 에이전트 대화로 단순화하고 통합하기 위한 프로그래밍 패러다임을 Conversation Programming이라고 정의
주요단계:
- 대화 가능한 에이전트 정의 : 각 에이전트는 특정 역할과 기능을 가지도록 설정됨.
- 예 : 코드 작성 에이전트, 검증 에이전트, 데이터 검색 에이전트
- 에이전트 간 상호작용 설계: 에이전트 간의 상호작용을 설계하여 작업 흐름을 제어.
- 예 : 코드 작성 에이전트가 코드를 생성하면, 다른 에이전트가 검증하고 실행한 뒤 결과를 피드백하는 흐름.
Unified interfaces and auto-reply mechanism for automated agent chat.

- 에이전트가 다른 에이전트로부터 메시지를 받으면, 자동으로 generate_reply를 호출하여 응답을 생성하고, 종료 조건이 충족되지 않는 한 다시 메시지를 보낸 에이전트로 응답을 전달.
- Developer Code에 있는 사용자 정의된 자동 응답 메커니즘으로 대화가 자동으로 진행됨
Control by a fusion of programming and natural language.
-
AutoGen에서는 control flow management에서 프로그래밍 언어와 자연어를 다양한 패턴으로 사용할 수 있음.
-
Natural language control via LLM .
- LLM-backed agents를 자연어로 제어할 수 있음.

-
Programming language control.
- Python 코드를 사용해 종료 조건, 인간 입력 모드, 도구 실행 논리 등을 지정할 수 있음. (예: 최대 자동 응답 횟수)
- Figure 2의 “Conversation-Driven Control Flow”부분
-
Control transition between natural and programming language.
- AutoGen은 자연어와 프로그래밍 언어 간의 유연한 제어 전환도 지원
-
사전 정의된 흐름을 따르는 static conversation 외에도, 여러 에이전트를 사용하는 dynamic conversation flow도 지원. 이를 구현하기 위해 다음 두 가지 일반적인 방법을 제공
- Customized Generate Reply Function
- customized generate_reply function 내에서 하나의 에이전트는 현재의 대화를 유지하면서 현재 message와 context의 내용을 기반으로 다른 에이전트와의 대화를 호출할 수 있음.
- Function Call
- LLM이 대화 상태에 따라 특정 함수를 호출할지 여부를 결정. 호출된 함수 내에서 추가 에이전트에게 메시지를 전달함으로써, LLM은 동적 다중 에이전트 대화를 진행할 수 있음.
-
GroupChatManager를 통해 더 복잡한 동적 그룹 채팅도 지원.
3. Application of AutoGen

- real-world relevance (A1, A2, A4, A5, A6)
- problem difficulty and solving capabilities enabled by autogen(A1, A2, A3, A4)
- innovative potential (A5, A6)
A1: Math Problem Solving
AutoGen을 사용하여 수학 문제를 자동으로 해결하는 시스템을 구현(GPT-4 기반, SymPy 라이브러리 사용)
Scenario 1: Autonomous Problem Solving
- AssistantAgent와 UserProxyAgent를 바로 사용
- MATH 데이터셋에서 난이도 5에 해당하는 120개의 문제와 전체 테스트셋을 대상으로 평가.



Scenario 2: Human-in-the-loop Problem Solving
인간 없이 해결하기 어려운 문제는 UserProxyAgent를 human_input_mode = “ALWAYS”로 설정하고 보조 에이전트의 도움을 받음.

Scenario 3: Multi-User Problem Solving.
AutoGen을 사용하여 다수의 유저가 대화 중에 참여할 수 있도록 설계.
다중 사용자

- 학생은 Student Proxy를 통해 LLM기반 Student Assistant와 문제를 해결.
- 학생 보조자가 문제를 해결하지 못하거나, 기대 부합하지 않으면 ask for expert 함수 호출(GPT Function Call Feature)을 활용
A2: Retrieval-Augmented Chat

- Retrieval-augmented User Proxy : 문서를 처리, 분할, 임베딩을 계산해 벡터 DB에 저장
- Retrieval-augmented Assistant : 사용자 질문과 검색된 문서 내용을 활용해 코드를 생성하거나 질문에 대한 답변을 생성 ****

A3: ALF Chat
ALFWorld는 실제 가정 환경을 시뮬레이터한 텍스트 기반 환경에서 의사결정 과제를 다룸

- Assistant Agent : 문제를 해결하기 위한 계획을 생성하고 작업을 제안.
- Executor Agent: Assistant의 지시를 따라 작업을 실행하고 환경에서 피드백을 수집.
- Grounding Agent: Assistant에 상식적 사실을 제공하여 의사결정 능력을 향상.

A4: Multi-agent Coding

- Commander :
- 사용자 질문을 수신하고 에이전트 간의 작업을 조정.
- 사용자 상호작용 관련 메모리를 관리하여 문맥 정보를 공유
- Writer :
- 코드를 작성하고 실행 결과를 해석
- Coder와 Interpreter의 역할을 통합
- Safeguard:
- 생선된 코드의 안정성을 검토
- 보안 위협이나 악성 코드 여부를 확인.
A5: Dynamic Group Chat

A6: Conversational Chess


