서론
제가 공부하느 42서울(ecol42)는 항상 괴랄한 수준의 제한사항을 주고 과제를 수행하게 하는것으로 유명합니다. (살려주세요.) 이번에 마주한 과제는 최소3인 최대 5인으로 구성하는 팀 과제로 바닐라js, 바닐라ruby(혹은 파이썬 장고)로 웹사이트를 구 현하는 과제입니다.(지금까지 마주한 과제중에선 순한맛같기도?) 웹프로젝트를 본격적으로 해보는건 이번이 처음인데다. 기존의 프로젝트 요건이 급변해서 그동안 쌓인 수많은 선배기수들의 자료들을 사용할수 없는 위기에 처해있습니다. 그렇다 보니 더더욱 설계에 힘을 쓰고 싶어졌습니다. 늘 그렇듯 저보다 똑똑한 GPT에게 일을 시키고 싶은데 설계할 내용이 만만치 않습니다.
이 문제를 이번 8기에서 해결해 나가는 것을 개인적인 목표로 잡고 그 첫번째 시간으로 MAS가 무엇인지 간략하게 설명하고, 제 문제와 아이디어를 공유해보려 합니다.
Multi-Agent Systems (MAS)
먼저, Multi-Agent Systems (MAS)가 무엇일까요?
Multi-Agent Systems (MAS)는 여러 독립적인 에이전트들이 상호 작용하며 공동의 문제를 해결하거나 특정 목표를 달성하기 위해 협력하는 시스템을 의미합니다. 이 시스템들은 복잡한 문제를 해결하는데 유용하며, 다양한 분야에서 응용됩니다. MAS의 주요 특징과 논문을 바탕으로 한 설명은 다음과 같습니다.
자율성(Autonomy): MAS 내의 각 에이전트는 자율적으로 행동하며, 자신의 결정을 내릴 수 있는 능력을 갖추고 있습니다. 이는 에이전트가 주어진 환경에 따라 독립적으로 행동할 수 있다는 것을 의미합니다.
지역적 시야(Local Views): 각 에이전트는 전체 시스템의 상태가 아닌, 자신에게 주어진 지역적 정보에 기반하여 행동합니다. 이는 시스템의 효율성을 높이고, 복잡한 문제를 분산시켜 해결하는 데 도움이 됩니다.
협력(Cooperation): 에이전트들은 공통의 목표를 달성하기 위해 서로 협력합니다. 이러한 협력은 정보 공유, 자원 할당, 공동의 의사결정 등 다양한 형태로 나타납니다.
커뮤니케이션(Communication): 에이전트들 사이의 효과적인 커뮤니케이션은 MAS에서 중요한 요소입니다. 이를 통해 에이전트들은 정보를 교환하고, 협력을 조정합니다.
적응성(Adaptation): MAS는 동적인 환경에서도 효과적으로 작동할 수 있도록 설계되어 있으며, 에이전트들은 환경의 변화에 적응하면서 행동을 조정할 수 있습니다.
쉽게 설명드리면 하나의 AI로는 해결하기 어려운 복합 문제를 여러 AI에게 롤을 나누어주고 해결하게 하는 것입니다.
거대한 문제를 세분화하고 이 과정을 총괄할 Agent를 두어 AI는 일하고 저는 놀고 먹는 계획에 적합합니다.
아이디어 정리
해결해야하는 문제를 명확하게 정리합니다.
저의 경우 프로젝트의 요건을 명확하게 정리하는 것부터 시작합니다.
필요한 직군 혹은 역할을 명확하게 정리합니다.
단순히 직군이나 역할만을 나누는것이 아니라 각 역할별로 지켜야할 규칙과 목표도 정리해야합니다. 규칙이나 목표를 명확하게 주지않으면 문제를 해결하는것에서 벗어나 혼자서 생각하고 원치않는 대답을 할 가능성이 높아지기 때문입니다.
랭체인 아이디어 설계 ← 오늘의 목표
문제와 역할을 나누어 프롬프트 엔지니어링합니다.
각 역할을 적절히 호출해줄 Agent에 대한 프롬프트 엔지니어링을 합니다.
1. 문제를 명확하게 하기
그래서 제가 해야하는 프로젝트를 정리해 봤습니다.
이 프로젝트의 주요 목표와 공통 규칙은 다음과 같습니다:
프로젝트 목표:
1. 온라인 멀티플레이어 Pong 게임 제공: 사용자가 다른 플레이어와 실시간으로 Pong 게임을 할 수 있도록 하는 것입니다.
2. 싱글 페이지 웹사이트 구축: 사용자가 브라우저의 뒤로 가기 및 앞으로 가기 버튼을 사용하여 웹사이트를 쉽게 탐색할 수 있어야 합니다.
3. 구글 크롬 호환성: 최신 버전의 구글 크롬에서 웹사이트가 완벽하게 작동해야 합니다.
4. 토너먼트 기능 구현: 사용자들이 다른 플레이어들과 토너먼트를 진행할 수 있어야 하며, 토너먼트의 진행 상황을 명확하게 보여줘야 합니다.
5. 보안 유지: 웹사이트는 SQL 인젝션과 XSS로부터 보호되어야 하며, HTTPS 연결을 사용해야 합니다.
6. 블록체인 통합: 토너먼트 점수를 이더리움 블록체인에 저장하여 보안과 투명성을 제공합니다.
공통 규칙:
1. 프론트엔드 개발: 순수한 Vanilla JavaScript를 사용하여 개발합니다. 또한, Bootstrap 툴킷을 활용해야 합니다.
2. 백엔드 개발: Django 프레임워크를 사용하여 백엔드를 개발합니다. PostgreSQL 데이터베이스를 사용합니다.
3. 사용자 인터페이스: 사용자가 쉽게 이해하고 사용할 수 있는 친숙한 UI를 제공합니다.
4. 사용자 관리: 사용자는 안전하게 등록, 로그인할 수 있어야 하며, 고유한 디스플레이 이름을 선택할 수 있어야 합니다.
5. 마이크로서비스 아키텍처: 백엔드는 마이크로서비스 방식으로 설계되어야 합니다.
6. 다국어 지원: 웹사이트는 최소 세 가지 언어를 지원해야 합니다.
7. 테스팅 및 품질 관리: 모든 기능은 철저한 테스팅을 거쳐야 하며, 사용자는 웹사이트를 탐색할 때 어떠한 오류나 경고도 경험하지 않아야 합니다.
이 목표와 규칙들은 프로젝트의 성공적인 완성을 위해 필수적으로 따라야 할 지침입니다. 이를 통해 사용자에게 높은 품질의 게임 경험과 안전한 웹사이트 환경을 제공하는 것이 이 프로젝트의 핵심입니다.
2. 필요한 역할 정리
이 프로젝트는 여러 기술적인 요소를 포함하고 있으며, 이를 위해 다양한 전문 직군이 필요합니다. 각 부문별로 필요한 직군을 구체적으로 살펴보겠습니다:
1. 프론트엔드 개발:
- 자바스크립트 개발자: Vanilla JavaScript를 사용하여 싱글 페이지 애플리케이션을 개발합니다.
- UI/UX 디자이너: 사용자 친화적인 인터페이스 디자인을 담당합니다.
- 프론트엔드 프레임워크 전문가: Bootstrap 툴킷을 활용한 프론트엔드 개발을 담당합니다.
2. 백엔드 개발:
- Django 개발자: Django 프레임워크를 사용하여 백엔드를 개발합니다.
- 보안 전문가: SQL 인젝션, XSS, HTTPS 연결 등 보안 관련 이슈를 관리합니다.
- 데이터베이스 관리자: PostgreSQL 데이터베이스를 관리하고 최적화합니다.
3. 게임 개발:
- 게임 개발자: Pong 게임의 로직과 사용자 상호작용을 구현합니다.
- AI 개발자: 인공지능 상대 플레이어를 개발합니다.
4. 블록체인 개발:
- 블록체인 개발자: 이더리움과 솔리디티를 사용하여 토너먼트 점수를 블록체인에 저장하는 시스템을 개발합니다.
- 스마트 컨트랙트 개발자: 게임 점수와 관련된 스마트 컨트랙트를 개발합니다.
5. 사용자 관리 및 인증:
- 시스템 관리자: 사용자 관리 및 인증 시스템을 구축합니다.
- 데이터베이스 관리자: 사용자 데이터와 통계를 관리합니다.
6. 마이크로서비스 아키텍처:
- 시스템 아키텍트: 백엔드를 마이크로서비스로 설계하고 구현합니다.
- 클라우드 엔지니어: 마이크로서비스의 배포 및 운영을 관리합니다.
7. 다국어 지원:
- 다국어 전문가: 다양한 언어를 지원하기 위한 번역 및 로컬라이제이션을 담당합니다.
- 프론트엔드 개발자: 다국어 지원을 위한 사용자 인터페이스를 개발합니다.
적절히 정리는 되었지만 좀더 시각적으로 보기 쉽게 한번 더 정리했습니다.
프로젝트의 전체 내용을 기반으로 한 각 직군별 역할과 규칙을 시각화한 구조에 추가하면 다음과 같습니다:
프로젝트 매니저 (Project Manager)
│
├── 웹 개발 및 사용자 인터페이스 그룹
│ │
│ ├── 프론트엔드 개발자 (Frontend Developer)
│ │ └─ Vanilla JavaScript를 사용한 싱글 페이지 애플리케이션 개발.
│ │ └─ Google Chrome 호환성 및 브라우저 내비게이션 버튼 지원.
│ │
│ ├── 사용자 경험 디자이너 (UX Designer)
│ │ └─ 사용자 친화적인 인터페이스 및 게임 플레이 경험 디자인.
│ │ └─ 토너먼트 및 매치메이킹 시스템의 사용자 경험 최적화.
│ │
│ ├── 다국어 전문가 및 번역가 (Multilingual Expert & Translator)
│ │ └─ 웹사이트의 다양한 언어 지원 및 콘텐츠 번역.
│ │ └─ 언어 선택 기능 구현 및 관리.
│ │
│ └── 그룹 관리자: 프론트엔드 팀 리더 (Frontend Team Lead)
│ └─ 팀의 작업 조정 및 프론트엔드 전략 수립.
│
├── 백엔드 개발 및 시스템 아키텍처 그룹
│ │
│ ├── 백엔드 개발자 (Backend Developer - Django Specialist)
│ │ └─ Django를 사용한 백엔드 개발 및 데이터 처리.
│ │ └─ 보안 및 인증 시스템 구현.
│ │
│ ├── 데이터베이스 관리자 (Database Administrator)
│ │ └─ PostgreSQL 데이터베이스 관리 및 최적화.
│ │ └─ 사용자 데이터 및 게임 통계 관리.
│ │
│ ├── 시스템 아키텍트 (System Architect)
│ │ └─ 마이크로서비스 기반의 시스템 아키텍처 설계 및 구현.
│ │ └─ 시스템 간의 통신 메커니즘 구현.
│ │
│ └── 그룹 관리자: 백엔드 팀 리더 (Backend Team Lead)
│ └─ 백엔드 개발 및 시스템 아키텍처 팀의 작업 조정 및 관리.
│
├── 보안 및 인프라 관리 그룹
│ │
│ ├── 보안 전문가 (Security Expert)
│ │ └─ 웹사이트의 보안 강화 및 유지 관리.
│ │ └─ SQL 인젝션, XSS 방지 및 HTTPS 연결 구현.
│ │
│ ├── 시스템 관리자 (System Administrator)
│ │ └─ 시스템의 안정성 및 운영 관리.
│ │
│ └── 그룹 관리자: IT 보안 및 인프라 매니저 (IT Security & Infrastructure Manager)
│ └─ 보안 및 인프라 관리 팀의 전체적인 관리 및 운영 담당.
│
└── 게임 개발 및 블록체인 통합 그룹
│
├── 게임 프로그래머 (Game Programmer)
│ └─ Pong 게임 로직 및 멀티플레이어 기능 개발.
│ └─ 게임 규칙 및 AI 속도 일치화 구현.
│
├── 블록체인 개발자 (Blockchain Developer)
│ └─ Ethereum 및 Solidity를 사용한 블록체인 통합.
│ └─ 토너먼트 점수 저장을 위한 스마트 컨트랙트 개발.
│
└── 그룹 관리자: 게임 및 블록체인 개발 리더 (Game & Blockchain Development Lead)
└─ 게임 개발 및 블록체인 통합 팀의 작업 조정 및 전략 수립.
프로젝트 목표도 정리했고, 필요한 역할과 규칙도 정리되었습니다. 이제 이걸 어떻게 구성할지 고민할 차례입니다.
랭체인 아이디어 설계
처음 아이디어는 하나의 MAS를 두어 프론트엔드, 백엔드, 데이터, 보안, 디자이너 정도의 롤만 나누어 진행하려 했습니다.
하지만 아무리 생각해도 그정도로는 설계가 부실할 가능성이 너무 높아 보여서 프론트엔드 그룹, 백엔드 그룹 등의 4개의 그룹을 나누었습니다.
하나의 MAS로 이 모든 그룹을 컨트롤 할수는 없어보이기에 각 그룹별 MAS를 두고 각 그룹별 MAS를 호출하는 MAS를 두어 더 큰 단위의 체인을 구상중입니다. AI로 진짜 큰 하나의 조직을 구성해 보는 것입니다.
아이디어는 있지만 기술력은 아직 부족해 먼저, 공부를 해야 할 것 같습니다.
그래서 다음 cookbook을 레퍼런스 삼아 이것저것 수정하면서 공부중입니다.
langchain/cookbook/gymnasium_agent_simulation.ipynb at master · langchain-ai/langchain (github.com)
langchain/cookbook/multiagent_authoritarian.ipynb at master · langchain-ai/langchain (github.com)
langchain/cookbook/meta_prompt.ipynb at master · langchain-ai/langchain (github.com)
langchain/cookbook/smart_llm.ipynb at master · langchain-ai/langchain (github.com)
langchain/cookbook/tree_of_thought.ipynb at master · langchain-ai/langchain (github.com)
특히 주목하실점은 ToT입니다. 랭체인과 프롬프트 엔지니어링을 함께 공부하다보면 랭체인의 많은부분이 최신의 프롬프트 엔지니어링 논문을 기반으로 시작했다는 것을 추측해 볼수 있습니다.
페르소나 기법, 롤플레잉, 퓨샷, CoT, ToT처럼 유명한 프롬프트 엔지니어링 기법은 꼭 한번쯤 논문을 찾아보시길 추천드립니다.
다음주에는 앞에서 레퍼런스 삼은 쿡북을 바탕으로 실제 코딩한 내용을 일부 가져와 보겠습니다.
파트너로서 이번주는 좋은 결과물을 가져다 드리지 못해 많이 죄송하고 아쉽습니다.
다음주는 이번주 몫까지 더해서 가져올수있도록 최선을 다하겠습니다.