TRENDSHIFT 딥다이브 · 일간 #16 · 2026-06-05

MiroFish 딥다이브
— 수천 명의 AI가 사는 '평행 디지털 세계'로 미래를 예행연습하는 군체지능 엔진

MiroFish(미로피쉬)는 현실의 씨앗 정보(돌발 뉴스·정책 초안·금융 신호, 심지어 소설 한 편)를 받아, 독립된 인격·장기기억·행동논리를 가진 수천 개의 AI 에이전트가 사는 고해상도 평행 세계를 자동으로 짓고, 그 안에서 사회가 스스로 굴러가게 둔 뒤 → "미래가 어떻게 흘러갈지"를 예측 리포트로 돌려주는 다중 에이전트 예측 엔진이다. 핵심은 "신의 시점"에서 변수를 던져 넣어 가며 미래를 디지털 모래판 위에서 미리 돌려본다는 발상. (저장소: 666ghj/MiroFish · Python(Flask) 백엔드 + Vue 3 프론트 · OASIS 시뮬레이션 엔진 · AGPL-3.0 · 盛大그룹 인큐베이팅)
목차
  1. 프로젝트 한줄 요약
  2. 왜 주목받는가
  3. 기술 스택 전체 지도
  4. 아키텍처 심화 분석
  5. 디렉토리 구조 해부
  6. 학습 포인트 (기술별)
  7. 시스템 요구사항
  8. 직접 해볼 수 있는 실습 과제
  9. 관련 기술 심화 학습 로드맵
  10. 핵심 키워드 사전
  11. 참고 링크

1프로젝트 한줄 요약

한 문장으로 이 프로젝트가 뭘 하는지부터.

MiroFish = "현실 사건을 씨앗 삼아 수천 명의 AI 주민이 사는 평행 사회를 짓고, 거기서 일이 어떻게 굴러가는지를 미리 돌려보는 시뮬레이터". 사용자는 딱 두 가지만 하면 된다 — ① 씨앗 자료(데이터 분석 리포트나 흥미로운 소설 이야기)를 올리고 ② 자연어로 "무엇을 예측하고 싶은지"를 적는다. 그러면 MiroFish가 그 사건을 둘러싼 인물·관계를 추출해 디지털 세계를 만들고, 각 AI 주민이 글을 쓰고 반응하며 사회가 진화하게 둔 뒤, 마지막에 상세한 예측 리포트 + 깊이 대화까지 가능한 고해상도 디지털 세계를 돌려준다.

🐟 한 줄 비유

"심시티(SimCity)를 현실 뉴스로 채운 뒤, 신의 시점에서 변수를 던져 보는 것"

심시티에서는 가상의 시민들이 도시 안에서 알아서 살아간다. MiroFish는 그 시민 자리에 각자 성격·기억·말투를 가진 수천 개의 LLM(거대 언어 모델) 에이전트를 앉히고, 도시 대신 트위터·레딧 같은 소셜 플랫폼을 무대로 깐다.

여기에 "만약 정부가 이런 발표를 하면?", "이 인물이 이렇게 행동하면?" 같은 변수를 도중에 주입할 수 있다. 한 번의 실제 사건을 여러 번 '시뮬레이션 회차'로 돌려, 미래의 여러 갈림길을 미리 구경하는 셈이다.

용어
군체지능 (Swarm Intelligence / 群体智能)
개미·새 떼처럼 똑똑하지 않은 개체 여럿이 모여 상호작용하면, 누가 시키지 않았는데도 똑똑한 전체 행동(집단 패턴)이 '창발(emergence)'하는 현상. MiroFish의 이름이자 핵심 철학으로, "개인의 상호작용이 만드는 집단의 떠오름"을 포착해 예측에 쓴다.
용어
다중 에이전트 (Multi-Agent)
하나의 거대한 AI에게 다 시키는 대신, 여러 개의 작은 AI(에이전트)에게 각각 역할·성격·목표를 주고 서로 대화·경쟁·협력하게 만드는 방식. MiroFish에서는 한 명 한 명이 "디지털 시민"이 되어, 그들의 자유로운 상호작용 자체가 예측의 재료가 된다.

MiroFish가 보여 준 두 가지 대표 데모가 이 정체성을 잘 드러낸다. 하나는 실제 대학에서 벌어진 여론 사건을 넣고 "앞으로 여론이 어떻게 번질까"를 추론한 것이고, 다른 하나는 『홍루몽(红楼梦)』 앞부분 수십만 자를 넣고 "잃어버린 뒷이야기 결말"을 예측하게 한 것이다. 진지한 사회 예측부터 순수한 창작 추론까지 같은 엔진으로 다룬다는 게 MiroFish의 야심이다.

한눈에 그림

전통 예측 = 일기예보관 한 명의 머릿속 — 과거 통계와 직관으로 "이렇게 될 것 같다"고 한 사람이 추정한다.

MiroFish = 수천 명이 사는 미니 사회를 통째로 돌려보기 — 사람들이 실제로 어떻게 반응하고 그 반응이 또 다른 반응을 부르는지를 '관찰'한 결과로 미래를 그린다. 예측의 근거가 "한 명의 추정"이 아니라 "집단의 시뮬레이션"이라는 게 결정적 차이다.

2왜 주목받는가

TrendShift 일간 16위까지 올라온 이유 — 트렌딩의 배경.

"AI로 미래 예측"을 표방하는 프로젝트는 많지만, 대개 숫자 한 줄(주가·확률)을 뱉는다. MiroFish가 튄 이유는 "숫자 대신 '살아 움직이는 사회'를 통째로 시뮬레이션해서 보여 준다"는 접근의 신선함과, 그걸 일반인도 자연어로 돌릴 수 있게 패키징했다는 점이다. 다섯 가지로 정리한다.

① 씨앗 한 줌 → 통째로 굴러가는 디지털 사회

사용자가 하는 일은 자료 업로드 + 자연어로 예측 요구 적기가 전부다. 인물·관계 추출, 성격(페르소나) 생성, 시뮬레이션 파라미터 설정, 기억 주입 같은 복잡한 단계는 전부 생성 에이전트가 자동으로 처리한다. "사회 시뮬레이션"이라는 무거운 개념을 "파일 올리고 한 문장 적기"로 낮춘 게 진입장벽을 확 깎았다.

② OASIS 위에 올라탔다 — 검증된 대규모 사회 시뮬레이터

바닥부터 다 만든 게 아니라, CAMEL-AI 팀의 오픈소스 OASIS를 시뮬레이션 엔진으로 채택했다. OASIS는 트위터·레딧 같은 소셜 플랫폼에서 최대 100만 에이전트까지 굴릴 수 있는 연구용 시뮬레이터다. 검증된 토대 위에 "예측 워크플로"라는 응용을 얹은 영리한 선택이라, 안정성과 확장성을 동시에 가져갔다.

③ Zep 시간 지식그래프로 '진짜 장기기억'을 줬다

대부분의 LLM 에이전트는 대화가 길어지면 앞을 잊는다. MiroFish는 Zep Cloud의 시간 지식그래프(temporal knowledge graph)를 붙여, 각 에이전트가 "누가 언제 무슨 말을 했고 관계가 어떻게 변했는지"를 시간 순으로 기억하게 했다. 기억이 쌓이며 행동이 달라지니, 사회가 '진화'한다는 말이 빈말이 아니게 된다.

④ '신의 시점' 동적 변수 주입 — 도중에 끼어들 수 있다

시뮬레이션을 켜 놓고 구경만 하는 게 아니라, 돌아가는 도중에 "이런 일이 터졌다"고 변수를 던져 넣을 수 있다. 시뮬레이션이 별도 프로세스로 돌고 IPC(프로세스 간 통신)로 명령을 주고받는 구조라 가능한 일. 같은 사건을 변수만 바꿔 여러 번 돌리며 "if(만약)"를 실험하는 게 이 도구의 핵심 재미다.

⑤ 진지한 예측 + 재미 둘 다 — 그리고 盛大의 전략 지원

여론·정책·금융 같은 진지한 의사결정 예행연습과, 소설 결말·창작 추론 같은 재미있는 시뮬레이션을 한 엔진으로 다룬다. 게다가 중국 대형 IT 기업 盛大(Shanda)그룹의 전략 지원·인큐베이팅을 받는다고 README가 밝히고 있어, "취미 프로젝트"가 아니라는 신뢰를 더한다.

구분전통 예측(설문·통계·전문가)MiroFish(에이전트 사회 시뮬레이션)
예측 근거과거 데이터 패턴 + 사람의 추정수천 개체의 상호작용을 직접 '관찰'
"만약" 실험어렵다(시나리오를 손으로 가정)변수 주입으로 회차마다 다르게 돌림
산출물숫자·확률 한 줄리포트 + 대화 가능한 디지털 세계
한계집단 역학·창발을 못 본다생성형 환각·비용·검증 어려움
냉정하게 보기
시뮬레이션은 '그럴듯한 미래'지 '진짜 미래'가 아니다

아무리 정교해도 결국 LLM이 만들어 낸 가상 인물들의 가상 행동이다. 진짜 사람들의 미래 행동을 보장하지 않으며, 에이전트의 편향·환각이 그대로 사회 역학에 섞여 든다. 또 수천 에이전트를 여러 회차 돌리면 LLM 호출 비용이 상당히 크다(README도 "소비가 크니 40회차 미만으로 먼저 시도하라"고 경고). 이 레포의 진짜 가치는 "미래를 맞히는 점쟁이"가 아니라, 다중 에이전트 오케스트레이션·사회 시뮬레이션·에이전트 장기기억·GraphRAG를 한 번에 공부할 수 있는 살아있는 교재라는 데 있다.

3기술 스택 전체 지도

pyproject.toml · package.json · docker-compose · 소스 트리에서 뽑아낸 실제 구성.

MiroFish는 ⓐ 백엔드(파이프라인 두뇌) ⓑ AI·시뮬레이션 코어 ⓒ 프론트엔드 ⓓ 인프라 네 층으로 나뉜다. 특히 "Flask가 지휘하고, 무거운 시뮬레이션은 별도 프로세스(OASIS)가 돌리며, Vue 프론트가 5단계 마법사 UI로 안내"하는 3분할 구조가 설계의 큰 특징이다.

ⓐ 백엔드 — 파이프라인 두뇌 (Python 3.11–3.12)

구성요소무엇역할
Flask 3 + flask-cors경량 웹 서버run.py 진입점, 포트 5001. graph/simulation/report 3개 API 블루프린트를 마운트.
OpenAI SDKLLM 클라이언트OpenAI 호환 형식이면 어떤 LLM이든 호출. 기본 추천은 알리바바 百炼의 qwen-plus.
pydantic 2데이터 구조 검증SimulationParameters·OasisAgentProfile 등 시뮬레이션 설정을 타입으로 못 박는다.
PyMuPDFPDF 파서업로드한 씨앗 자료(PDF 리포트 등)에서 본문 텍스트를 추출.
charset-normalizer · chardet인코딩 감지UTF-8이 아닌 텍스트 파일도 깨지지 않게 인코딩을 추정해 읽는다.
python-dotenv설정 로더.env의 API 키·모델명을 읽어 들인다.

ⓑ AI · 시뮬레이션 코어 — 이 프로젝트의 심장

구성요소무엇역할
camel-oasis 0.2.5대규모 사회 시뮬레이터트위터·레딧을 모사한 무대에서 수천~백만 에이전트가 글쓰기·좋아요·팔로우·리포스트로 상호작용.
camel-ai 0.2.78멀티 에이전트 프레임워크OASIS의 기반. 에이전트의 역할·도구·메시지 오케스트레이션을 담당.
zep-cloud 3.13시간 지식그래프 메모리각 에이전트의 장기기억. "누가-언제-무엇을-어떻게" 관계를 시간 축으로 저장·검색.
GraphRAG (자체 구현)그래프 기반 검색증강graph_builder.py·ontology_generator.py가 씨앗에서 인물·관계 그래프를 짓고 검색에 활용.
LLM_BOOST (선택)가속용 보조 모델무거운 단계는 빠른/싼 모델로 분리 호출하는 2-티어 모델 라우팅 옵션.

ⓒ 프론트엔드 — 5단계 마법사 UI (Vue 3)

구성요소무엇역할
Vue 3.5 + Vite 7UI 프레임워크 · 번들러Step1~Step5 컴포넌트가 워크플로 5단계를 그대로 화면으로.
D3.js 7그래프 시각화GraphPanel.vue가 인물·관계 지식그래프를 노드-엣지 다이어그램으로 그린다.
vue-router 4라우팅Home·Process·Simulation·Report·Interaction 화면 전환.
vue-i18n 11다국어locales/en.json·zh.json 기반 중/영 전환.
axiosHTTP 클라이언트Flask 백엔드 API 호출.

ⓓ 인프라 & 배포

구성요소무엇역할
Docker + compose단일 이미지 배포ghcr.io/666ghj/mirofish 한 이미지로 프론트(3000)·백(5001)을 동시에 띄운다.
uv파이썬 패키지 매니저uv sync로 백엔드 가상환경·의존성을 한 방에. pip보다 빠르다.
concurrently병렬 실행npm run dev 하나로 백엔드+프론트를 동시 구동.
GitHub Actions이미지 빌드docker-image.yml이 컨테이너 이미지를 자동 빌드·푸시.
AGPL-3.0라이선스네트워크로 제공해도 소스 공개 의무가 따르는 강한 카피레프트.
용어
OASIS (Open Agent Social Interaction Simulations)
CAMEL-AI 팀이 만든 오픈소스 사회 시뮬레이터. 트위터·레딧을 본뜬 환경에서 최대 100만 명의 LLM 에이전트가 글을 쓰고 반응하며 정보·여론이 퍼지는 모습을 재현한다. MiroFish는 이 OASIS를 "무대"로 빌려 와 그 위에 예측 워크플로를 얹었다.
왜 'Zep 장기기억'이 이 프로젝트의 비밀병기일까

사람은 어제 싸운 친구를 오늘 다르게 대한다 — 기억이 행동을 바꾸기 때문이다. 보통의 LLM 에이전트는 이게 안 된다(맥락 창이 꽉 차면 앞을 잊는다). MiroFish는 Zep의 시간 지식그래프에 "어떤 사건이 언제 있었고 관계가 어떻게 변했는지"를 차곡차곡 적어 두고, 에이전트가 행동하기 전 그 기억을 꺼내 보게 한다. 그래서 100회차쯤 돌면 에이전트들 사이에 관계의 역사가 쌓여, 단순 반복이 아니라 '사회가 진화하는' 그림이 나온다 — 군체지능의 창발을 받쳐 주는 토대다.

4아키텍처 심화 분석

씨앗 자료 한 편이 "예측 리포트"가 되기까지 — 5단 파이프라인의 여정.

README가 밝힌 메인 흐름은 图谱构建 → 环境搭建 → 开始模拟 → 报告生成 → 深度互动, 즉 ① 지식그래프 구축 → ② 환경 설정 → ③ 시뮬레이션 실행 → ④ 리포트 생성 → ⑤ 깊이 대화의 5단 파이프라인이다. 프론트의 Step1~Step5 컴포넌트가 이 다섯 단계를 그대로 화면으로 옮겼고, 백엔드의 services/ 모듈들이 각 단계를 맡는다.

┌──────────────────────────────────────────────────────────────────┐ │ 씨앗 입력 "이 사건/소설을 넣고 → 이런 미래를 예측해줘" │ │ file_parser(PDF·텍스트) → text_processor │ └───────────────────────────────┬──────────────────────────────────┘ ▼ ① 지식그래프 구축 (Step1) ┌──────────────────────────────────────────────────────────────────┐ │ ontology_generator → graph_builder(GraphRAG) │ │ 인물·관계 추출 → 그래프 생성 → Zep에 개인/집단 기억 주입 │ └───────────────────────────────┬──────────────────────────────────┘ ▼ ② 환경 설정 (Step2) ┌──────────────────────────────────────────────────────────────────┐ │ oasis_profile_generator → 에이전트별 인격(페르소나) 생성 │ │ simulation_config_generator → 시간·이벤트·플랫폼 등 파라미터 │ └───────────────────────────────┬──────────────────────────────────┘ ▼ ③ 시뮬레이션 실행 (Step3) ┌──────────────────────────────────────────────────────────────────┐ │ simulation_manager (상태 관리) │ │ │ spawn + IPC │ │ ▼ │ │ simulation_runner ── 별도 프로세스 ──┐ │ │ ├ OASIS 트위터 시뮬레이션 ┐ 듀얼 │◀── '신의 시점' 변수 주입 │ │ ├ OASIS 레딧 시뮬레이션 ┘ 병렬 │ (simulation_ipc) │ │ └ 매 라운드: 행동 → zep_graph_memory_updater(시간기억 갱신) │ └───────────────────────────────┬──────────────────────────────────┘ ▼ ④ 리포트 생성 (Step4) ┌──────────────────────────────────────────────────────────────────┐ │ report_agent ── 풍부한 도구셋으로 모의 종료 환경과 깊이 상호작용 │ │ → 예측 리포트(근거·시계열·결말) │ └───────────────────────────────┬──────────────────────────────────┘ ▼ ⑤ 깊이 대화 (Step5) 디지털 세계의 '임의의 주민'과 대화 · ReportAgent와 대화

핵심 설계 패턴 ① — 5단 워크플로 파이프라인

전체가 "앞 단계의 산출물이 다음 단계의 입력"인 한 줄기 파이프라인이다. 씨앗 → 그래프 → 페르소나·설정 → 시뮬레이션 → 리포트 → 대화. 프론트 Step1GraphBuild.vue부터 Step5Interaction.vue까지가 각 단계를 시각화하고, 사용자는 단계별로 결과를 확인·수정하며 진행한다. 복잡한 AI 파이프라인을 "마법사(wizard) UI"로 풀어 낸 게 사용성의 핵심.

핵심 설계 패턴 ② — OASIS 듀얼 플랫폼 병렬 시뮬레이션

가장 무거운 ③단계는 run_twitter_simulation.pyrun_reddit_simulation.py동시에(병렬) 돌린다. 같은 사건이 트위터식 빠른 전파와 레딧식 토론형 확산에서 어떻게 다르게 번지는지를 한 번에 보는 셈. 그 위 run_parallel_simulation.py(63KB)가 두 플랫폼을 묶어 지휘한다. "한 사건, 여러 무대"로 입체적 그림을 얻는 설계다.

핵심 설계 패턴 ③ — 별도 프로세스 + IPC로 '신의 시점' 개입

시뮬레이션은 메인 서버 안에서 도는 게 아니라 독립된 자식 프로세스로 분리돼 있다. 둘 사이는 simulation_ipc.pyIPC(프로세스 간 통신)IPCCommand/IPCResponse를 주고받는다. 덕분에 ⓐ 무거운 시뮬레이션이 웹 응답을 막지 않고, ⓑ 돌아가는 도중에 일시정지·변수 주입·재개가 가능하다. "신의 시점에서 변수를 던진다"는 컨셉이 바로 이 IPC 구조에서 나온다.

용어
IPC (Inter-Process Communication, 프로세스 간 통신)
서로 다른 프로그램(프로세스)이 메시지를 주고받는 방법. 여기서는 "웹 서버 프로세스"와 "시뮬레이션 프로세스"가 분리돼 있어, 서버가 시뮬레이션에게 "잠깐 멈춰 / 이 변수 추가해 / 다시 시작" 같은 명령을 IPC로 전달한다. 무거운 작업을 떼어 내 본체가 안 멈추게 하는 표준 기법.

핵심 설계 패턴 ④ — 시간 지식그래프로 에이전트 기억 갱신

매 시뮬레이션 라운드가 끝날 때마다 zep_graph_memory_updater.py가 그날 벌어진 행동(AgentActivity)을 Zep의 시간 지식그래프에 반영한다. 다음 라운드에 에이전트는 갱신된 기억을 참고해 행동하므로, "기억 → 행동 → 새 기억"의 되먹임 고리가 생긴다. 단순히 같은 행동을 반복하지 않고 사회가 시간에 따라 변하는 이유다.

핵심 설계 패턴 ⑤ — '에이전트가 에이전트를 만든다'

흥미로운 점은 설정 자체도 LLM이 생성한다는 것. oasis_profile_generator.py(50KB)는 그래프 속 인물마다 성격·말투·관심사를 가진 페르소나를 자동 생성하고, simulation_config_generator.py(40KB)는 시간·이벤트·플랫폼 파라미터를 자동으로 짠다. 사람이 수천 명의 캐릭터 시트를 손으로 쓸 수 없으니, 생성 에이전트에게 "세계의 주민과 규칙 만들기"를 위임한 것이다.

5디렉토리 구조 해부

실제 저장소 트리에서 "어디에 뭐가 있는지" 핵심만 (GitHub Contents API 기준).

MiroFish/ ├── backend/ ★ Flask 백엔드 (파이프라인 두뇌) │ ├── run.py 진입점 (uv run python run.py · 포트 5001) │ ├── pyproject.toml 의존성 (flask·openai·zep·camel-oasis…) │ └── app/ │ ├── __init__.py Flask 앱 팩토리 + 블루프린트 등록 │ ├── config.py .env 기반 설정 │ ├── api/ ★ HTTP 엔드포인트 (블루프린트 3종) │ │ ├── graph.py ① 지식그래프 구축 API │ │ ├── simulation.py ③ 시뮬레이션 API (94KB · 최대 모듈) │ │ └── report.py ④ 리포트 API │ ├── services/ ★ 핵심 업무 로직 (단계별 엔진) │ │ ├── ontology_generator.py 인물·관계 온톨로지 생성 │ │ ├── graph_builder.py GraphRAG 그래프 구축 │ │ ├── oasis_profile_generator.py 에이전트 페르소나 생성(50KB) │ │ ├── simulation_config_generator.py 시뮬 파라미터 생성(40KB) │ │ ├── simulation_manager.py 시뮬 상태 관리 │ │ ├── simulation_runner.py 시뮬 실행 엔진(69KB) │ │ ├── simulation_ipc.py 프로세스 간 통신(IPC) │ │ ├── zep_tools.py Zep 메모리 도구셋(66KB) │ │ ├── zep_graph_memory_updater.py 시간기억 갱신 │ │ ├── zep_entity_reader.py Zep에서 엔티티 읽기 │ │ ├── report_agent.py 리포트 생성 에이전트(99KB · services 최대) │ │ └── text_processor.py 텍스트 전처리 유틸 │ ├── models/ project.py · task.py (데이터 모델) │ ├── utils/ llm_client · file_parser · retry · logger │ └── scripts/ ★ 시뮬레이션 실행 스크립트 │ ├── run_parallel_simulation.py 듀얼 플랫폼 지휘(63KB) │ ├── run_twitter_simulation.py 트위터 시뮬 │ └── run_reddit_simulation.py 레딧 시뮬 │ ├── frontend/ ★ Vue 3 + Vite 7 프론트 (5단계 마법사) │ └── src/ │ ├── components/ │ │ ├── Step1GraphBuild.vue ① 그래프 구축 화면 │ │ ├── Step2EnvSetup.vue ② 환경 설정 화면(70KB) │ │ ├── Step3Simulation.vue ③ 시뮬레이션 화면 │ │ ├── Step4Report.vue ④ 리포트 화면(146KB · 최대) │ │ ├── Step5Interaction.vue ⑤ 대화 화면(64KB) │ │ └── GraphPanel.vue D3 지식그래프 시각화(40KB) │ ├── views/ Home · Process · Report · Interaction … │ ├── api/ graph.js · simulation.js · report.js │ └── i18n/ vue-i18n 설정 │ ├── locales/ en.json · zh.json (중/영 다국어) ├── docker-compose.yml 단일 이미지로 3000·5001 동시 구동 ├── Dockerfile 컨테이너 빌드 ├── package.json 루트 스크립트(dev·setup:all…) └── .env.example LLM 키·Zep 키 설정 예시

핵심 읽는 순서를 추천하면: package.json(어떤 명령이 있나) → backend/run.py·app/__init__.py(서버가 어떻게 뜨나) → app/api/simulation.py(가장 큰 API) → app/services/simulation_runner.py(시뮬레이션이 실제로 어떻게 도나) → app/services/simulation_ipc.py(프로세스를 어떻게 제어하나) → frontend/src/components/Step*.vue(화면이 단계별로 무엇을 호출하나) 순이다. 백엔드 services/가 5단계를, 프론트 Step*.vue가 같은 5단계를 그대로 비추는 대칭 구조가 한눈에 보인다.

6학습 포인트 (기술별)

이 레포에서 "무엇을 배울 수 있는가" — 기술별 배울 것 + 실습 아이디어.

OASIS · 사회 시뮬레이션

LLM 에이전트로 '소셜 플랫폼'을 통째로 모사하기

트위터·레딧의 행동(글쓰기·좋아요·팔로우·리포스트)을 에이전트가 흉내 내고, 정보·여론이 네트워크를 타고 번지는 모습을 관찰하는 법. 대규모 멀티 에이전트의 라운드 기반 실행 구조를 한 저장소에서 본다.

실습: scripts/run_twitter_simulation.py를 작은 에이전트 수(예: 20명)·적은 라운드로 돌려, 한 게시물이 몇 라운드 만에 퍼지는지 로그로 추적해 보자.

Zep · 에이전트 장기기억

시간 지식그래프로 '기억하는 AI' 만들기

대화·사건을 시간 축의 그래프로 저장하고, 행동 전에 관련 기억을 꺼내 쓰는 패턴. zep_tools.py(66KB)·zep_graph_memory_updater.py에 "기억을 쓰고 읽는" 실전 코드가 통째로 들어 있다.

실습: Zep 무료 계정을 만들어 에이전트 한 명에게 사건 3개를 시간 순으로 주입하고, "가장 최근에 무슨 일이 있었지?"를 질의해 시간 기반 검색이 어떻게 동작하는지 확인.

GraphRAG · 지식그래프

비정형 텍스트에서 인물·관계 그래프 뽑아내기

ontology_generator.py가 온톨로지(개념 틀)를 잡고 graph_builder.py가 그래프를 채우는 흐름. 줄글 → 엔티티·관계 추출 → 그래프 → 검색이라는 GraphRAG의 정석 파이프라인을 작은 규모로 체험할 수 있다.

실습: 짧은 뉴스 기사 한 편을 씨앗으로 넣어 생성된 지식그래프를 GraphPanel.vue의 D3 화면에서 확인하고, 어떤 인물이 노드로, 어떤 관계가 엣지로 뽑혔는지 비교.

IPC · 장기 작업 제어

무거운 작업을 별도 프로세스로 떼고 제어하기

웹 요청을 막지 않으면서 오래 걸리는 작업을 돌리고, 도중에 일시정지·변수 주입·재개까지 하는 구조. simulation_ipc.pyCommandType·CommandStatus 설계가 좋은 교본이다.

실습: simulation_ipc.py를 읽고 명령(Command) 종류를 표로 정리한 뒤, "일시정지 → 이벤트 주입 → 재개"가 코드 상 어떤 순서로 오가는지 시퀀스로 그려 보기.

Vue 3 · D3 시각화

복잡한 AI 파이프라인을 '마법사 UI'로 풀기

5단계를 Step1~Step5 컴포넌트로 나눠 사용자를 안내하고, GraphPanel.vue에서 D3로 지식그래프를 노드-엣지로 그리는 법. Vue 3 Composition API + vue-router + vue-i18n의 실전 조합을 본다.

실습: npm run frontend로 프론트만 띄워 5단계 화면을 클릭해 보고, 각 Step 컴포넌트가 src/api/의 어떤 함수를 호출하는지 매핑.

LLM 추상화 · 비용 관리

OpenAI 호환 + 2-티어 모델 라우팅

OpenAI SDK 형식으로 어떤 LLM이든 갈아 끼우고, 무거운 단계는 빠른/싼 모델(LLM_BOOST)로 분리하는 비용 전략. 수천 에이전트 × 여러 라운드의 호출 비용을 어떻게 다루는지 실감할 수 있다.

실습: .env의 메인 모델을 저가 모델로 바꾸고 40회차 미만으로 짧게 돌려, 회차 수와 LLM 호출량·시간의 관계를 표로 정리.

7시스템 요구사항

"내 환경에서 돌아갈까?" — 무거운 건 PC가 아니라 LLM 호출량과 비용이다.

항목요구사항비고
Node.js18+ (npm 포함)프론트엔드 실행 환경.
Python3.11 이상, 3.12 이하백엔드 실행 환경. 버전 범위가 좁으니 주의.
uv최신 버전파이썬 의존성 설치(uv sync). pip보다 빠르다.
LLM API 키필수OpenAI 호환이면 무엇이든. 기본 추천 qwen-plus(알리 百炼).
Zep Cloud 키필수장기기억용. 매월 무료 한도로 간단 사용 가능.
Docker (선택)Docker 엔진docker compose up -d로 한 방 배포. 로컬·NAS·서버.
진짜 부담은 여기
하드웨어보다 'LLM 호출 비용'이 병목이다

로컬에서 무거운 모델을 돌리는 게 아니라 클라우드 LLM API를 부르는 구조라, PC 사양은 크게 중요하지 않다. 대신 수천 에이전트 × 여러 시뮬레이션 라운드 = LLM 호출 폭발이다. README가 직접 "소비가 크니 우선 40회차 미만으로 시도하라"고 못 박을 만큼, 회차를 늘릴수록 비용·시간이 빠르게 커진다. 처음엔 적은 에이전트·짧은 회차로 감을 잡는 게 정석.

핵심 포인트
"무료 한도로 작게 시작 → 필요할 때 키운다"

Zep 무료 한도 + 저가 LLM + 적은 회차로 먼저 파이프라인 전체(그래프→시뮬→리포트)를 한 바퀴 돌려 보고, 결과가 마음에 들면 그때 에이전트 수·회차·모델 등급을 올리면 된다. 무대(OASIS)와 기억(Zep)이 모듈로 분리돼 있어 규모를 점진적으로 키우기 좋다.

8직접 해볼 수 있는 실습 과제

읽기만 하면 안 남는다 — 손으로 해보는 난이도별 과제 5선.

① 온라인 데모로 '여론 추론' 체험하기 ★ 입문

설치 없이 공식 온라인 데모(666ghj.github.io/mirofish-demo)에 접속해 미리 준비된 '핫이슈 여론 추론' 시나리오를 끝까지 돌려 본다. 5단계가 화면에서 어떻게 이어지는지, 결과 리포트가 어떤 형태인지부터 눈에 익힌다.

② 로컬 설치 + 짧은 시뮬레이션 1회 ★ 입문

git clonecp .env.example .env로 LLM 키·Zep 키를 채우고 npm run setup:allnpm run dev. 프론트(3000)·백(5001)이 뜨면 작은 씨앗 + 적은 회차(40회 미만)로 한 바퀴 돌려 본다.

③ 내 씨앗 자료로 디지털 세계 짓기 ★★ 중급

관심 있는 뉴스 기사나 짧은 이야기 한 편을 PDF/텍스트로 올려 ① 지식그래프가 어떻게 그려지는지(D3 화면), ② 어떤 페르소나들이 생성되는지 확인. 같은 씨앗을 다른 예측 질문으로 두 번 돌려 결과를 비교.

④ '신의 시점' 변수 주입 실험 ★★ 중급

같은 사건을 ⓐ 변수 없이, ⓑ 도중에 "이런 발표가 났다" 같은 변수를 주입해 각각 돌린 뒤 결과 분기를 비교한다. simulation_ipc.py가 일시정지·주입·재개를 어떻게 처리하는지 로그로 추적.

⑤ 듀얼 플랫폼 시뮬레이션 코드 파보기 ★★★ 고급

scripts/run_parallel_simulation.py(63KB)를 읽고 트위터·레딧 시뮬레이션이 어떻게 병렬로 묶이는지, 매 라운드 끝에 zep_graph_memory_updater가 어떻게 기억을 갱신하는지 흐름도를 그린다. 한 라운드의 에이전트 행동 → 기억 갱신 → 다음 라운드 되먹임 고리를 코드로 확인.

9관련 기술 심화 학습 로드맵

이 레포를 발판으로 "다중 에이전트 사회 시뮬레이션"을 익히는 6주 코스.

주차주제학습 내용
1주차LLM 에이전트 기초 · CAMEL에이전트·역할·도구·메시지 개념. camel-ai로 두 에이전트가 대화하게 만들어 보기.
2주차OASIS 사회 시뮬레이션트위터/레딧 환경, 행동 종류, 라운드 실행. 작은 규모로 정보 전파 관찰.
3주차에이전트 메모리 · Zep시간 지식그래프, 기억 쓰기/읽기, "기억→행동→새 기억" 루프 설계.
4주차GraphRAG · 지식그래프온톨로지 생성, 엔티티·관계 추출, 그래프 기반 검색증강(GraphRAG).
5주차Flask API · IPC 아키텍처블루프린트 분리, 장기 작업을 별도 프로세스로, IPC 명령/응답 설계.
6주차Vue 3 · D3 · 마법사 UIComposition API, vue-router·vue-i18n, D3 노드-엣지 그래프, 단계형 UX.
학습 팁

한 번에 다 보려 하지 말고 "씨앗 하나가 리포트가 되는 경로"만 끝까지 따라가 보라. api/graph.py(그래프) → services/oasis_profile_generator(페르소나) → services/simulation_runner(시뮬) → services/zep_graph_memory_updater(기억) → services/report_agent(리포트). 이 한 줄기를 이해하면, 듀얼 플랫폼·신의 시점 개입·대화 모드는 같은 엔진을 다르게 부르는 변주임이 보인다.

10핵심 키워드 사전

이 프로젝트를 읽다 만나는 용어들 — 짧게 정리.

용어
군체지능(Swarm Intelligence)단순한 개체 여럿의 상호작용에서 똑똑한 집단 행동이 '창발'하는 현상. MiroFish의 이름이자 핵심 철학.
다중 에이전트(Multi-Agent)여러 AI에게 각각 역할·성격을 주고 서로 대화·경쟁·협력시키는 방식.
창발(Emergence)개별 규칙엔 없던 패턴이 전체 상호작용에서 저절로 떠오르는 것. 군체지능의 핵심.
OASISCAMEL-AI의 오픈소스 사회 시뮬레이터. 트위터·레딧을 본떠 최대 100만 에이전트를 굴린다. MiroFish의 무대.
CAMEL-AI멀티 에이전트 프레임워크. OASIS의 기반이며 에이전트 오케스트레이션을 담당.
Zep / 시간 지식그래프에이전트 장기기억 서비스. "누가-언제-무엇" 관계를 시간 축으로 저장·검색하는 그래프.
GraphRAG텍스트에서 뽑은 지식그래프를 검색에 활용하는 검색증강 방식(RAG의 그래프 버전).
온톨로지(Ontology)"개념과 관계의 틀". 인물·사건·관계를 어떤 종류로 나눌지 정의하는 스키마.
페르소나(Persona)각 에이전트에게 부여되는 성격·말투·관심사. oasis_profile_generator가 자동 생성.
IPC프로세스 간 통신. 웹 서버와 시뮬레이션 프로세스가 명령·응답을 주고받는 통로.
ReportAgent시뮬레이션이 끝난 세계와 도구로 상호작용해 예측 리포트를 쓰는 전용 에이전트.
신의 시점(God View)시뮬레이션 도중 외부에서 변수를 주입해 미래 분기를 실험하는 개입 방식.
Flask파이썬 경량 웹 프레임워크. MiroFish 백엔드 API의 토대.
Vue 3 / Vite프론트엔드 UI 프레임워크 / 초고속 번들러. 5단계 마법사 화면을 구성.
D3.js데이터 시각화 라이브러리. 인물·관계 지식그래프를 노드-엣지로 그린다.
uvRust로 만든 초고속 파이썬 패키지 매니저. uv sync로 의존성 설치.
qwen-plus알리바바 통의천문(Qwen) 모델. README가 기본 추천한 OpenAI 호환 LLM.
AGPL-3.0네트워크로 서비스해도 소스 공개 의무가 따르는 강한 카피레프트 라이선스.
盛大(Shanda)MiroFish를 전략 지원·인큐베이팅하는 중국 대형 IT 기업.

11참고 링크

더 깊이 파고들 때의 출발점.

자료링크
GitHub 저장소github.com/666ghj/MiroFish
온라인 데모666ghj.github.io/mirofish-demo
DeepWiki 문서deepwiki.com/666ghj/MiroFish
시뮬레이션 엔진 — OASISgithub.com/camel-ai/oasis
멀티 에이전트 — CAMEL-AIgithub.com/camel-ai/camel
에이전트 메모리 — Zepapp.getzep.com (시간 지식그래프)
추천 LLM — Qwen(百炼)bailian.console.aliyun.com
TrendShift 순위trendshift.io/repositories/16144
마지막으로 한 번 더
학습용 · 연구용 — '예측'은 그럴듯한 시뮬레이션일 뿐

이 문서와 MiroFish가 만들어 내는 모든 "미래 예측"은 LLM이 생성한 가상 사회의 시뮬레이션 결과일 뿐, 실제 사건·인물의 미래 행동을 보장하지 않는다. 정책·금융·여론 같은 민감한 영역의 결과를 의사결정의 유일한 근거로 삼아선 안 된다. 이 레포의 진짜 가치는 결과의 적중이 아니라, 다중 에이전트 시뮬레이션·메모리·GraphRAG·IPC 아키텍처를 한 번에 공부할 수 있다는 데 있다.