[AI Paper] ๐ MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework
๐ MetaGPT: Meta Programming for A Multi-Agent Collaborative Framework
๐ ๋ฉํ ์ ๋ณด
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ์ ์ | Sirui Hong, Mingchen Zhuge, Jonathan Chen, Xiawu Zheng, Yuheng Cheng, Jinlin Wang, Ceyao Zhang, Zili Wang, Steven Ka Shing Yau, Zijuan Lin, Liyang Zhou, Chenyu Ran, Lingfeng Xiao, Chenglin Wu, Jurgen Schmidhuber |
| ์์ ๊ธฐ๊ด | DeepWisdom, KAUST AI Initiative, Xiamen University, CUHK-Shenzhen, Nanjing University, UPenn, UC Berkeley, IDSIA |
| ๋ฐํ์ฒ | ICLR 2024 (Oral Presentation, Top 1.2%) |
| ์ฐ๋ | 2024 (arXiv ์ดํ: 2023๋ 8์) |
| arXiv | arxiv:2308.00352 |
| GitHub | github.com/FoundationAgents/MetaGPT |
| OpenReview | openreview.net/forum?id=VtmBAGCN7o |
| ๊ณต์ ๋ฌธ์ | docs.deepwisdom.ai |
๐ฏ ํ์ค ์์ฝ
์ธ๊ฐ ์กฐ์ง์ ํ์ค ์ด์ ์ ์ฐจ(SOPs)๋ฅผ LLM ๊ธฐ๋ฐ ๋ฉํฐ ์์ด์ ํธ ์์คํ ์ ๋์ ํ์ฌ, ๊ตฌ์กฐํ๋ ์ถ๋ ฅ๋ฌผ์ ํตํ ์ญํ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๋ณต์กํ ์ํํธ์จ์ด ๊ฐ๋ฐ ์์ ์ ํ์ง๊ณผ ์ผ๊ด์ฑ์ ํ๊ธฐ์ ์ผ๋ก ๊ฐ์ ํ ๋ฉํ ํ๋ก๊ทธ๋๋ฐ ํ๋ ์์ํฌ
๐ ์ฐ๊ตฌ ๋ฐฐ๊ฒฝ ๋ฐ ๋๊ธฐ
๊ธฐ์กด Multi-Agent ์์คํ ์ ๋ฌธ์ ์
- Cascading Hallucinations (์ฐ์์ ํ๊ฐ)
- ๊ธฐ์กด LLM ๊ธฐ๋ฐ ๋ฉํฐ ์์ด์ ํธ ์์คํ ์ LLM์ ๋จ์ํ ์ฒด์ด๋ํ๋ ๋ฐฉ์ ์ฌ์ฉ
- ํ ์์ด์ ํธ์ ์ค๋ฅ๊ฐ ๋ค์ ์์ด์ ํธ๋ก ์ ํ๋์ด ๋ ผ๋ฆฌ์ ๋ถ์ผ์น ๋ฐ์
- ๋ณต์กํ ์์ ์์ ํ์ง ์ ํ๊ฐ ์ฌ๊ฐํจ
- ๋น๊ตฌ์กฐํ๋ ์ปค๋ฎค๋์ผ์ด์
- AutoGPT, AgentVerse ๋ฑ ๊ธฐ์กด ์์คํ ์ ์์ฐ์ด ๋ํ๋ฅผ ํตํ ์ํต
- ๋ถํ์ํ ์ ๋ณด ๊ตํ, ํต์ฌ ์ ๋ณด ๋๋ฝ ๋ฑ์ ๋ฌธ์ ๋ฐ์
- ๋ํ ๊ธฐ๋ฐ ํ์ ์ ๋นํจ์จ์ ์ด๊ณ ์ค๋ฅ ๋ฐ์ ๊ฐ๋ฅ์ฑ ๋์
- ์ฒด๊ณ์ ์๊ตฌ์ฌํญ ๋ถํด ๋ถ์ฌ
- AutoGPT, LangChain ๋ฑ์ ๋ณต์กํ ์์คํ ๊ฐ๋ฐ์ ์ํ ์ฒด๊ณ์ ๋ถํด ๋ฅ๋ ฅ ๋ถ์กฑ
- ์ฝ๋ ์์ฑ์ ๊ฐ๋ฅํ๋ PRD, ๊ธฐ์ ์ค๊ณ, API ํ๋กํ ํ์ดํ ๋ฑ ํ๋ก์ ํธ ๊ด๋ฆฌ ๊ธฐ๋ฅ ๋ถ์ฌ
- ์คํ ๊ฐ๋ฅ์ฑ ๋ฌธ์
- ๊ธฐ์กด ๋ฐฉ๋ฒ๋ค(AutoGPT, AgentVerse)์ ์คํ ๊ฐ๋ฅํ ์ฝ๋ ์์ฑ์ ์คํจ
- ํ๊ท ์คํ ๊ฐ๋ฅ์ฑ ์ ์: AutoGPT 1.0, AgentVerse 1.0 vs MetaGPT 3.9
- ํผ๋๋ฐฑ ๋ฃจํ ๋ถ์ฌ
- ์ด๊ธฐ ํ๋ ์์ํฌ๋ค์ ์ํฐํด ๋ฐฉ์์ผ๋ก ๋จ๋ฐฉํฅ ์งํ
- ์ด๊ธฐ ๋จ๊ณ์ ๋ฒ๊ทธ๊ฐ ๋๊น์ง ์ ํ๋จ
- ์๊ธฐ ์์ (self-correction) ๋ฉ์ปค๋์ฆ ๋ถ์ฌ
๐ก ํต์ฌ ์์ด๋์ด
1. SOPs (Standard Operating Procedures) ๋์
Code = SOP(Team)
- ํต์ฌ ์ฒ ํ: ์ธ๊ฐ ์กฐ์ง์ ํ์ค ์ด์ ์ ์ฐจ๋ฅผ AI ์์ด์ ํธ ํ์ ์ ์ ์ฉ
- ์ค์ ์ํํธ์จ์ด ํ์ฌ์ ์ํฌํ๋ก์ฐ๋ฅผ ๋ชจ๋ฐฉ
- ๊ฐ ๋จ๊ณ๋ณ๋ก ๋ช ํํ ์ ์ถ๋ ฅ๊ณผ ๊ฒ์ฆ ์ ์ฐจ ์ ์
- ์ค๊ฐ ๊ฒฐ๊ณผ๋ฌผ์ ๋ํ ๊ฒ์ฆ์ผ๋ก ์ค๋ฅ ์กฐ๊ธฐ ๋ฐ๊ฒฌ
SOP๊ฐ ์ ๊ณตํ๋ ์ด์ :
– ๋ชจํธ์ฑ ์ํ (Mitigate Ambiguities)
– ์์
๋ถํด๋ฅผ ํตํ ๋ช
ํํ ์คํ ์ด์ ์ ๊ณต
– ์ ๋ฌธํ๋ ์ญํ ์ ํตํ ๊ด๋ จ์ฑ ํฅ์
– ํ์คํ๋ ์ถ๋ ฅ์ ํตํ ๋ช
์์ ์์กด์ฑ ์ค์
– ๊ณต์ ํ๊ฒฝ์ ํตํ ํฌ๋ช
์ฑ ์ ๊ณต
2. ์ญํ ๊ธฐ๋ฐ ํ์ (Role-based Collaboration)
- ์ํํธ์จ์ด ํ์ฌ์ ์กฐ์ง ๊ตฌ์กฐ๋ฅผ ๊ทธ๋๋ก ๋ฐ์
- ๊ฐ ์์ด์ ํธ๋ ํน์ ์ญํ ๊ณผ ์ ๋ฌธ์ฑ ๋ณด์
- ์ญํ ๋ณ ๋ช ํํ ์ฑ ์๊ณผ ์ฐ์ถ๋ฌผ ์ ์
- Assembly Line (์กฐ๋ฆฝ ๋ผ์ธ) ํจ๋ฌ๋ค์ ์ ์ฉ
3. ๊ตฌ์กฐํ๋ ์ถ๋ ฅ (Structured Outputs)
| ๊ธฐ์กด ๋ฐฉ์ (ChatDev ๋ฑ) | MetaGPT ๋ฐฉ์ |
|---|---|
| ์์ฐ์ด ๋ํ๋ก ์ํต | ๋ฌธ์์ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ์ํต |
| ์ ๋ณด ๋๋ฝ/์ค๋ณต ๊ฐ๋ฅ | ํ์ํ ์ ๋ณด๋ง ๋ช ํํ ์ ๋ฌ |
| ๋นํจ์จ์ ์ปค๋ฎค๋์ผ์ด์ | ํจ์จ์ ์ ๋ณด ๊ณต์ |
- PRD (Product Requirement Document)
- ์์คํ ์ค๊ณ ๋ฌธ์
- API ์ธํฐํ์ด์ค ์ ์
- ์ํ์ค ๋ค์ด์ด๊ทธ๋จ
4. Global Message Pool
- ๋ชจ๋ ์์ด์ ํธ๊ฐ ์ ๊ทผ ๊ฐ๋ฅํ ๊ณต์ ๋ฉ์์ง ํ
- ์์ด์ ํธ ๊ฐ ์ง์ ์ง์ ๋ถํ์
- ํ์ํ ์ ๋ณด๋ฅผ ํฌ๋ช ํ๊ฒ ์กฐํ ๊ฐ๋ฅ
- ์ปค๋ฎค๋์ผ์ด์ ์ค๋ฒํค๋ ๋ํญ ๊ฐ์
๐๏ธ ์ํคํ ์ฒ / ๋ฐฉ๋ฒ๋ก
์์ด์ ํธ ์ญํ (Software Company Roles)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MetaGPT Software Company โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ Product Manager โ
โ โโโ PRD (User Stories, Requirement Pool) โ
โ โ โ
โ ๐๏ธ Architect โ
โ โโโ System Design (File List, Data Structures, โ
โ Interface Definitions, Sequence Diagrams) โ
โ โ โ
โ ๐ Project Manager โ
โ โโโ Task Distribution & Assignment โ
โ โ โ
โ ๐ป Engineer โ
โ โโโ Code Implementation โ
โ โ โ
โ ๐ QA Engineer โ
โ โโโ Test Cases, Bug Detection โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
์์คํ ์ํคํ ์ฒ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MetaGPT Framework โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Product โ โ Architect โ โ Project โ โ
โ โ Manager โโโโ โโโโ Manager โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ โ โ โ
โ โผ โผ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Shared Message Pool โ โ
โ โ (Publish-Subscribe Mechanism) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ โ โ โ
โ โผ โผ โผ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โ โ Engineer โ โ Engineer โ โ QA Engineer โ โ
โ โ #1 โ โ #2 โ โ โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Executable Feedback Loop โ
โ (Runtime Debugging & Self-Correction) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๊ฐ ์ญํ ๋ณ ์์ธ
1. Product Manager (์ ํ ๊ด๋ฆฌ์)
- ์ ๋ ฅ: ์ฌ์ฉ์ ์๊ตฌ์ฌํญ (ํ ์ค ์์ด๋์ด)
- ์ถ๋ ฅ: PRD (Product Requirement Document)
- User Stories
- Requirement Pool
- ๊ธฐ๋ฅ ๋ถํด (Functional Breakdown)
- ์ญํ : ์๊ตฌ์ฌํญ ๋ถ์ ๋ฐ ๋ฌธ์ํ
2. Architect (์ค๊ณ์)
- ์ ๋ ฅ: PRD
- ์ถ๋ ฅ:
- System Design Components
- File Lists
- Data Structures
- Interface Definitions
- Sequence Flow Diagrams
- ์ญํ : ๊ธฐ์ ์ฌ์ ๋ฐ ์์คํ ์ํคํ ์ฒ ์ค๊ณ
3. Project Manager (ํ๋ก์ ํธ ๊ด๋ฆฌ์)
- ์ ๋ ฅ: System Design
- ์ถ๋ ฅ: Task Distribution Plan
- ์ญํ : ๊ธฐ์ ์ฌ์์ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์์ ์ผ๋ก ๋ถํด
4. Engineer (์์ง๋์ด)
- ์ ๋ ฅ: Task Assignments, Design Documents
- ์ถ๋ ฅ: Implementation Code
- ์ญํ : ์ง์ ๋ ํด๋์ค์ ํจ์ ๊ตฌํ
5. QA Engineer (QA ์์ง๋์ด)
- ์ ๋ ฅ: Code Output
- ์ถ๋ ฅ: Unit Test Code, Bug Reports
- ์ญํ : ํ ์คํธ ์ผ์ด์ค ์์ฑ ๋ฐ ๋ฒ๊ทธ ๊ฒ์ถ
์ํฌํ๋ก์ฐ ์์ธ
์ฌ์ฉ์ ์๊ตฌ์ฌํญ
โ
[Product Manager] โโ PRD ์์ฑ
โ
[Architect] โโ ์์คํ
์ค๊ณ & ์ธํฐํ์ด์ค ์ ์
โ
[Project Manager] โโ ์์
๋ถ๋ฐฐ
โ
[Engineer] โโ ์ฝ๋ ๊ตฌํ
โ
[QA Engineer] โโ ํ
์คํธ & ๋๋ฒ๊น
โ
[Executive Feedback] โโ ๋ฐํ์ ๋๋ฒ๊น
& ์ฝ๋ ์คํ
โ
์ต์ข
์ํํธ์จ์ด ์ฐ์ถ๋ฌผ
Executable Feedback Mechanism
๋ฐํ์ ์ค ์ฝ๋ ๋๋ฒ๊น ๋ฐ ์คํ์ ํตํด ์ฝ๋ ์์ฑ ํ์ง์ ํฅ์์ํค๋ ํต์ฌ ๋ฉ์ปค๋์ฆ
# Pseudo-code for Executable Feedback Loop
def engineer_workflow(requirements, design, memory):
code = generate_initial_code(requirements, design)
for iteration in range(max_iterations):
# ์ฝ๋ ์คํ ๋ฐ ์ค๋ฅ ๊ฒ์ฌ
result, errors = execute_code(code)
if no_errors(errors):
return code
# ๋ฉ๋ชจ๋ฆฌ์์ ๊ณผ๊ฑฐ ์คํ/๋๋ฒ๊น
๊ธฐ๋ก ์ฐธ์กฐ
context = retrieve_from_memory(memory, errors)
# PRD, ์์คํ
์ค๊ณ์ ๋น๊ตํ์ฌ ์ฝ๋ ๊ฐ์
code = improve_code(
code=code,
errors=errors,
prd=requirements,
design=design,
history=context
)
return code
ํจ๊ณผ: HumanEval์์ 4.2%, MBPP์์ 5.4% Pass@1 ํฅ์
ํต์ ํ๋กํ ์ฝ (Publish-Subscribe)
class Agent:
def __init__(self, role, watch_actions):
self.role = role
self.watch_actions = watch_actions # ๊ตฌ๋
ํ ์ก์
๋ชฉ๋ก
def _observe(self, environment):
"""ํ๊ฒฝ์์ ๊ด๋ จ ๋ฉ์์ง ๊ด์ฐฐ"""
messages = environment.get_messages()
relevant = [m for m in messages
if m.caused_by in self.watch_actions]
return relevant
def _think(self, observations):
"""์ํํ ์ก์
์ ํ"""
todo = self.select_action(observations)
return todo
def _act(self, todo):
"""์ก์
์คํ ๋ฐ ๊ฒฐ๊ณผ ์์ฑ"""
result = todo.execute()
return result
๐ ์คํ ๋ฐ ๊ฒฐ๊ณผ
์ฌ์ฉ๋ ๋ฒค์น๋งํฌ
| ๋ฒค์น๋งํฌ | ์ค๋ช |
|---|---|
| HumanEval | 164๊ฐ์ ์์์ ํ๋ก๊ทธ๋๋ฐ ํ์คํฌ (ํจ์ ๋ช ์ธ, ์ค๋ช , ์ฐธ์กฐ ์ฝ๋, ํ ์คํธ ํฌํจ) |
| MBPP | 427๊ฐ์ Python ํ์คํฌ (ํต์ฌ ๊ฐ๋ , ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฅ ํฌํจ) |
| SoftwareDev | 70๊ฐ์ ์ํํธ์จ์ด ๊ฐ๋ฐ ํ์คํฌ (๋ฏธ๋ ๊ฒ์, ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ๋ฐ์ดํฐ ์๊ฐํ ๋ฑ) |
์ฃผ์ ๊ฒฐ๊ณผ
HumanEval & MBPP ์ฑ๋ฅ
| ๋ชจ๋ธ/์์คํ | HumanEval Pass@1 | MBPP Pass@1 |
|---|---|---|
| GPT-4 (baseline) | 67.0% | – |
| Codex + CodeT | – | 67.7% |
| MetaGPT + GPT-3.5 (one-pass) | 62.8% | 74.7% |
| MetaGPT (w/o feedback) | 81.7% | 82.3% |
| MetaGPT (w/ feedback) | 85.9% | 87.7% |
SoftwareDev ๋ฒค์น๋งํฌ ๊ฒฐ๊ณผ
| ๋ฉํธ๋ฆญ | MetaGPT | ChatDev | AutoGPT | AgentVerse |
|---|---|---|---|---|
| Executability Score | 3.75 (๊ฑฐ์ ์๋ฒฝ) | 2.1 | 1.0 | 1.0 |
| ์คํ ์๊ฐ | 503์ด | ๋ ๊น | – | – |
| Task Completion Rate | 100% | ๋ฎ์ | 0% | 0% |
Ablation Study – Executable Feedback ํจ๊ณผ
| ์ค์ | HumanEval | MBPP |
|---|---|---|
| Without Feedback | 81.7% | 82.3% |
| With Feedback | 85.9% (+4.2%) | 87.7% (+5.4%) |
๋ค๋ฅธ ํ๋ ์์ํฌ์์ ๋น๊ต
| ํน์ฑ | MetaGPT | ChatDev | AutoGPT | AgentVerse |
|---|---|---|---|---|
| ์ปค๋ฎค๋์ผ์ด์ | ๊ตฌ์กฐํ๋ ๋ฌธ์ | ์์ฐ์ด ๋ํ | ์์ฐ์ด | ์์ฐ์ด |
| PRD ์์ฑ | O | X | X | X |
| ๊ธฐ์ ์ค๊ณ | O | X | X | X |
| ์ฝ๋ ๋ฆฌ๋ทฐ | O | O | X | O |
| ์ฌ์ ์ปดํ์ผ ์คํ | O | X | X | X |
| ์คํ ๊ฐ๋ฅ์ฑ | ๋งค์ฐ ๋์ | ์ค๊ฐ | ๋ฎ์ | ๋ฎ์ |
๐ช ๊ฐ์ ๋ฐ ๊ธฐ์ฌ
ํ์ ์ ๊ธฐ์ฌ
- SOPs์ AI ์์คํ
์ต์ด ์ฒด๊ณ์ ์ ์ฉ
- ์ธ๊ฐ ์กฐ์ง์ ์ด์ ์ ์ฐจ๋ฅผ AI ๋ฉํฐ ์์ด์ ํธ์ ์ต์ด๋ก ์ฒด๊ณ์ ์ ์ฉ
- “Code = SOP(Team)” ์ฒ ํ ์ ์
- ๊ตฌ์กฐํ๋ ์ปค๋ฎค๋์ผ์ด์
ํ๋กํ ์ฝ
- ์์ฐ์ด ๋ํ ๋์ ๊ตฌ์กฐํ๋ ๋ฌธ์ ๊ธฐ๋ฐ ์ํต
- ์ ๋ณด ์์ค ๋ฐ ํ๊ฐ ํ์ ๋ํญ ๊ฐ์
- Executable Feedback Mechanism
- ๋ฐํ์ ๋๋ฒ๊น ์ ํตํ ์ฝ๋ ํ์ง ํฅ์
- Self-improvement ๋ฉ์ปค๋์ฆ ๋์
- ICLR 2024 Oral (Top 1.2%)
- LLM-based Agent ์นดํ ๊ณ ๋ฆฌ 1์
- HumanEval, MBPP์์ State-of-the-Art ๋ฌ์ฑ
์ค์ฉ์ ๊ฐ์
- End-to-End ์ํํธ์จ์ด ๊ฐ๋ฐ
- ํ ์ค ์๊ตฌ์ฌํญ์์ ์คํ ๊ฐ๋ฅํ ์ฝ๋๊น์ง ์๋ ์์ฑ
- PRD, ์ค๊ณ ๋ฌธ์, ์ฝ๋, ํ ์คํธ ๋ชจ๋ ํฌํจ
- ๋์ ์ฝ๋ ํ์ง
- ์คํ ๊ฐ๋ฅ์ฑ ์ ์ 3.75/4.0 (๊ฑฐ์ ์๋ฒฝ)
- ์ธ๊ฐ ์์ ํ์๋ ์ต์ํ
- ํจ์จ์ฑ
- ChatDev ๋๋น ๋น ๋ฅธ ์คํ ์๊ฐ (503์ด)
- ํ ํฐ ์ฌ์ฉ๋ ํจ์จ์
- ํ์ฅ์ฑ
- ์ปค์คํ ์์ด์ ํธ ๋ฐ ์ญํ ์ ์ ๊ฐ๋ฅ
- ๋ค์ํ ๋๋ฉ์ธ์ ์ ์ฉ ๊ฐ๋ฅํ ํ๋ ์์ํฌ
โ ๏ธ ํ๊ณ์ ๋ฐ ํฅํ ์ฐ๊ตฌ
ํ์ฌ ํ๊ณ์
- ๋๋ฉ์ธ ์ ํ
- ํ์ฌ ๊ตฌํ์ ์ํํธ์จ์ด ์์ง๋์ด๋ง์ ์ง์ค
- ๋ค๋ฅธ ๋๋ฉ์ธ ์ ์ฉ ์ ์๋ก์ด SOPs์ ์ญํ ์ ์ ํ์
- ์ธ๊ฐ ๊ฐ์
ํ์์ฑ
- ๋ฒ๊ทธ ์์ ๋ฐ ํ์ง ๋ณด์ฆ์์ ๊ฐ๋ ์ธ๊ฐ ๊ฐ์ ํ์
- ์์ ์์จ ์์คํ ๊น์ง๋ ๋ฏธํก
- ๊ณ์ฐ ์์ ์๊ตฌ
- ๋ค์์ LLM ์์ด์ ํธ ๋์ ์ด์์ ์๋นํ ๋ฆฌ์์ค ํ์
- HumanEval ์์ ๋น $10 ์ด์์ ๋น์ฉ ๋ฐ์
- ํ
์คํธ ์ ํ๋
- ์์ฑ๋ ํ ์คํธ์ ์ ํ๋๊ฐ ์ฝ 80% ์์ค
- Feedback Loop ๊ฐ์ ์ฌ์ง ์์
- ๋ณต์กํ ์ํธ์์ฉ ํ์คํฌ
- ๋์ ์ํธ์์ฉ์ด ์๊ตฌ๋๋ ํ์คํฌ๋ ์๊ฒฉํ ์ ์ฝ์ผ๋ก ์ธํด ์๋ฃ ์คํจ ๊ฐ๋ฅ
- ํ๋์ฝ๋ฉ๋ ์ํธ์์ฉ ํ๋ก์ธ์ค
- ์ค์ ํ์ํฌ์์๋ ์ํธ์์ฉ์ด ๋์ ์ผ๋ก ๋ณํ
- ํ์ฌ SOP๋ ๊ณ ์ ๋ ์ํฌํ๋ก์ฐ
- ์ง์ ๊ฒฝ๊ณ
- ๊ธฐ๋ฐ LLM์ ํ์ต ๋ฐ์ดํฐ์ ์์กด
- ์ต์ ๊ธฐ์ ๋ํฅ ๋ฐ์์ ํ๊ณ
ํฅํ ์ฐ๊ตฌ ๋ฐฉํฅ
- ๋ค๋ฅธ ํ์
๋๋ฉ์ธ์ผ๋ก ํ์ฅ
- ๋ฐ์ดํฐ ๋ถ์, ์ฐ๊ตฌ, ์ปจ์คํ ๋ฑ
- ๋ชจํธํ ์๊ตฌ์ฌํญ ์ฒ๋ฆฌ ๋ฅ๋ ฅ ํฅ์
- ๋ถ๋ช ํํ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ํ robustness ๊ฐ์
- ์ง์์ ๋ฉ๋ชจ๋ฆฌ ์์คํ
๋์
- ๋ฒกํฐ ์คํ ์ด, ์ง์ ๊ทธ๋ํ ํ์ฉ
- ๋๊ท๋ชจ ํ๋ก์ ํธ ํ์ฅ์ฑ ํฅ์
- ํ์ด๋ธ๋ฆฌ๋ ํ๋กํ ์ฝ ์ค๊ณ
- MetaGPT ์คํ์ผ ์ญํ ํ ํ๋ฆฟ + Reflexion ์คํ์ผ ํผ๋๋ฐฑ ๊ฒฐํฉ
- ๋ ๋์ ํ๊ฐ ๋ฉํธ๋ฆญ ๊ฐ๋ฐ
- Pass@1 ์ธ์ ๊ฐ๋ ์ฑ, ์ฑ๋ฅ, ๋ณด์ ๋ฑ ํ๊ฐ
- ์๊ธฐ ์กฐ์งํ ๋ฐ ๋์ SOP
- ๊ฐํํ์ต ๊ธฐ๋ฐ ๋์ ์ญํ ํ ๋น
- Economy of Minds (EOM) ๊ฐ๋ ์ ์ฉ
๐ ๊ด๋ จ ๋ ผ๋ฌธ
์ ํ ์ฐ๊ตฌ (Prior Work)
| ๋ ผ๋ฌธ/ํ๋ก์ ํธ | ์ค๋ช | ๊ด๊ณ |
|---|---|---|
| AutoGPT | ์์จ์ AI ์์ด์ ํธ | ๋น๊ต ๋์, ์ฒด๊ณ์ ๋ถํด ๋ถ์ฌ |
| ChatDev | ๋ํ ๊ธฐ๋ฐ ๋ฉํฐ ์์ด์ ํธ ์ํํธ์จ์ด ๊ฐ๋ฐ | ๋น๊ต ๋์, ์์ฐ์ด ์ํต ๋ฐฉ์ |
| AgentVerse | ๋ฉํฐ ์์ด์ ํธ ์๋ฎฌ๋ ์ด์ ํ๋ ์์ํฌ | ๋น๊ต ๋์ |
| CAMEL | ์ญํ ํ๋ ์ด ๊ธฐ๋ฐ ๋ฉํฐ ์์ด์ ํธ ํต์ | ์ ํ ์ฐ๊ตฌ |
| LangChain | LLM ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ | ๊ธฐ๋ฐ ๊ธฐ์ |
| GPT-Engineering | ์ฝ๋ ์์ฑ ์์ด์ ํธ | ๋น๊ต ๋์ |
ํ์ ์ฐ๊ตฌ (Follow-up Work)
| ๋ ผ๋ฌธ | ์ค๋ช |
|---|---|
| AFlow | Agentic Workflow ์๋ ์์ฑ (ICLR 2025 Oral, ์์ 1.8%) |
| MGX (MetaGPT X) | ์ธ๊ณ ์ต์ด AI ์์ด์ ํธ ๊ฐ๋ฐํ ์ ํ (2025๋ 2์) |
| MapCoder | HumanEval 93.9%, MBPP 83.1% ๋ฌ์ฑ |
| AgentCoder | HumanEval 96.3%, MBPP 91.8% ๋ฌ์ฑ |
๊ด๋ จ ์ฃผ์ ๋ ผ๋ฌธ
- Reflexion: Self-reflection ๊ธฐ๋ฐ ์์ด์ ํธ ํ์ต
- ReAct: Reasoning + Acting ํ๋ ์์ํฌ
- Tree of Thoughts: ์ฌ๊ณ ํธ๋ฆฌ ๊ธฐ๋ฐ ์ถ๋ก
- Chain-of-Thought: ๋จ๊ณ๋ณ ์ถ๋ก
๐ป ์ค๋ฌด ์ ์ฉ ํฌ์ธํธ
์ค์น ๋ฐ ํ๊ฒฝ ์ค์
์๊ตฌ์ฌํญ
- Python 3.9 ์ด์, 3.12 ๋ฏธ๋ง
- Node.js ๋ฐ pnpm ํ์
Conda ํ๊ฒฝ ์ค์
conda create -n metagpt python=3.9
conda activate metagpt
์ค์น ๋ฐฉ๋ฒ
# pip์ผ๋ก ์ค์น
pip install --upgrade metagpt
# GitHub์์ ์ง์ ์ค์น
pip install --upgrade git+https://github.com/geekan/MetaGPT.git
# ์์ค์์ ์ค์น
git clone https://github.com/geekan/MetaGPT
cd MetaGPT
pip install --upgrade -e .
Docker ์ค์น
git clone https://github.com/geekan/MetaGPT.git
cd MetaGPT
docker build -t metagpt:custom .
์ค์ ํ์ผ (~/.metagpt/config2.yaml)
llm:
api_type: "openai"
model: "gpt-4-turbo"
base_url: "https://api.openai.com/v1"
api_key: "YOUR_API_KEY"
metagpt:
max_budget: 10.0 # ์ต๋ ๋น์ฉ (USD)
workspace: ./workspace
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
from metagpt.software_company import SoftwareCompany
from metagpt.roles import ProjectManager, ProductManager, Architect, Engineer
# ์ํํธ์จ์ด ํ์ฌ ์์ฑ
company = SoftwareCompany()
# ์ญํ ๊ณ ์ฉ
company.hire([
ProductManager(),
Architect(),
ProjectManager(),
Engineer()
])
# ํฌ์ ๋ฐ ํ๋ก์ ํธ ์์
company.invest(investment=3.0) # USD
company.start_project("Create a snake game with pygame")
# ์คํ
await company.run(n_round=5)
๋ฐ์ดํฐ ๋ถ์ ์์
import asyncio
from metagpt.roles.di.data_interpreter import DataInterpreter
async def main():
di = DataInterpreter()
await di.run("Run data analysis on sklearn Iris dataset, include a plot")
asyncio.run(main())
์ปค์คํ ์์ด์ ํธ ์ ์
๋จ์ผ ์์ด์ ํธ (Agent 101)
from metagpt.roles import Role
from metagpt.actions import Action
from metagpt.schema import Message
class SimpleWriteCode(Action):
"""์ฝ๋ ์์ฑ ์ก์
"""
name: str = "SimpleWriteCode"
async def run(self, instruction: str):
prompt = f"Write code for: {instruction}"
code = await self._aask(prompt)
return code
class SimpleCoder(Role):
"""๊ฐ๋จํ ์ฝ๋ ์ญํ """
name: str = "Alice"
profile: str = "SimpleCoder"
goal: str = "Write elegant code"
constraints: str = "Code should be readable"
def __init__(self, **kwargs):
super().__init__(**kwargs)
self._init_actions([SimpleWriteCode()])
async def _act(self):
# ์ต์ ๋ฉ๋ชจ๋ฆฌ์์ ์ง์์ฌํญ ๊ฐ์ ธ์ค๊ธฐ
instruction = self.get_memories(k=1)[0].content
# ์ก์
์คํ
code = await self.todo.run(instruction)
# ๋ฉ์์ง ๋ฐํ
return Message(content=code, role=self.profile)
๋ฉํฐ ์์ด์ ํธ ํ (MultiAgent 101)
from metagpt.team import Team
# ์ญํ ์ ์
coder = SimpleCoder()
tester = SimpleTester()
reviewer = SimpleReviewer()
# ์ญํ ๋ณ ๊ด์ฐฐ ๋์ ์ค์
tester.watch([SimpleWriteCode]) # ์ฝ๋์ ์ถ๋ ฅ ๊ด์ฐฐ
reviewer.watch([SimpleWriteTest]) # ํ
์คํฐ์ ์ถ๋ ฅ ๊ด์ฐฐ
# ํ ๊ตฌ์ฑ
team = Team()
team.hire([coder, tester, reviewer])
team.invest(investment=3.0)
# ํ๋ก์ ํธ ์คํ
team.run_project("Create a calculator function")
await team.run(n_round=3)
CLI ์ฌ์ฉ
# ๋ช
๋ น์ค์์ ์ง์ ์คํ
python startup.py "Write a cli snake game"
# ๊ฒฐ๊ณผ๋ workspace/ ๋๋ ํ ๋ฆฌ์ ์์ฑ
ํ์ฉ ์ฌ๋ก
- Data Interpreter: ๋ฐ์ดํฐ ๋ถ์ ์๋ํ
- Debate: ํ ๋ก ์๋ฎฌ๋ ์ด์
- Researcher: ์ฐ๊ตฌ ๋ณด์กฐ
- Receipt Assistant: ์์์ฆ ์ฒ๋ฆฌ
์ค๋ฌด ํ
- ๋น์ฉ ๊ด๋ฆฌ:
invest()๋ฉ์๋๋ก ์์ฐ ์ค์ ํ์ฌ ํ ํฐ ์ฌ์ฉ๋ ์ ์ด - ๋ผ์ด๋ ์ ์กฐ์ :
n_roundํ๋ผ๋ฏธํฐ๋ก ํ์ ๋ฐ๋ณต ํ์ ์กฐ์ - ์ญํ ์ปค์คํฐ๋ง์ด์ง: ๋๋ฉ์ธ์ ๋ง๋ ์ญํ ๊ณผ ์ก์ ์ ์
- ์ถ๋ ฅ ๊ฒํ : ์์ฑ๋ PRD์ ์ค๊ณ ๋ฌธ์ ๊ฒํ ํ ์ฝ๋ ์์ฑ ์งํ
- ์๋ฌ ์ฒ๋ฆฌ: Executable Feedback์ผ๋ก ์๋ ๋๋ฒ๊น , ์ต๋ ๋ฐ๋ณต ํ์ ์ค์ ๊ถ์ฅ
- ํ์ฅ์ฑ: ์ญํ ์ถ๊ฐ ์ watch_actions ์ค์ ์ค์
๐ท๏ธ Tags
#AIAgent #MultiAgent #MetaGPT #SOP #LLM #CodeGeneration #SoftwareEngineering #ICLR2024 #DeepWisdom #AutomatedProgramming #CollaborativeAI #RoleBasedAgent #StructuredOutput #ExecutableFeedback #MetaProgramming #HumanEval #MBPP