DeepMiro
미래를 리허설하는 군집 지능 엔진.
문서를 입력하고 시나리오를 설명하세요. 뚜렷한 개성, 기억, 사회적 본능을 가진 수백 명의 AI 에이전트가 상호작용하는 것을 지켜보고 예측 결과를 받아보세요.
기능
DeepMiro는 정책 초안, 시장 보고서, 소설의 한 챕터 등 모든 문서에서 엔티티와 관계를 추출하여 병렬 디지털 세계를 구축합니다. 그 안에서 수백 명의 자율 에이전트가 의견을 형성하고, 시뮬레이션된 소셜 플랫폼에서 논쟁하며, 충성도를 바꾸고, 단일 프롬프트로는 예측할 수 없는 창발적 행동을 만들어냅니다.
구조화된 예측 보고서와 에이전트별로 질문할 수 있는 살아있는 세계를 결과물로 얻게 됩니다.
입력: PDF 및 평문 질문. 출력: 상세한 예측 보고서 + 탐색 가능한 대화형 시뮬레이션.
작동 원리
Document ──► Entity Extraction ──► Agent Generation ──► Dual-Platform Simulation ──► Prediction Report
(NER + GraphRAG) (personas, memory, (Twitter-like + Reddit-like (ReportAgent with
social networks) parallel interaction) deep analysis tools)단계 | 내용 |
그래프 구축 | 문서에서 엔티티, 관계, 맥락을 추출합니다. GraphRAG를 통해 지식 그래프를 구축합니다. |
환경 설정 | 뚜렷한 개성, 신념, 사회적 관계를 가진 에이전트 페르소나를 생성합니다. |
시뮬레이션 | 에이전트들이 이중 플랫폼(트위터형 및 레딧형)에서 병렬로 상호작용합니다. 매 라운드마다 동적 기억이 업데이트됩니다. |
보고서 생성 | ReportAgent가 시뮬레이션 후 환경(감정 변화, 파벌 형성, 바이럴 역학, 결과 궤적)을 분석합니다. |
심층 상호작용 | 에이전트와 대화하여 그들의 추론을 이해하세요. ReportAgent에게 후속 분석을 요청하세요. |
빠른 시작
1. API 키 받기
deepmiro.org에서 가입 후 대시보드 → API 키로 이동하세요. 키는 dm_xxxxxxxxx 형식입니다.
2. 설치
Claude Code (플러그인 — 권장) — 명령어 하나로 /predict 스킬과 MCP 서버가 연결됩니다:
claude plugin marketplace add kakarot-dev/deepmiro
claude plugin install deepmiro@deepmiro-marketplace
export DEEPMIRO_API_KEY=dm_your_key # or set it in ~/.claude/settings.json그런 다음 Claude Code를 재시작하고 /predict 또는 predict how people will react to [scenario]라고 입력하세요.
기타 클라이언트:
클라이언트 | 설치 |
OpenAI Codex |
|
Claude Desktop |
|
ChatGPT Desktop | 설정 → MCP 서버 → 추가 → |
Cursor / Windsurf | 설정 → MCP → 추가 → |
VS Code (Copilot) |
|
셀프 호스팅
API 키가 필요 없습니다. 엔진을 로컬에서 실행하고 MCP 서버를 해당 엔진으로 지정하세요:
git clone https://github.com/kakarot-dev/deepmiro.git
cd deepmiro
cp .env.example .env # add your LLM API key
docker compose -f docker/docker-compose.yml up -d
# Connect your AI client to the local engine
claude mcp add deepmiro -e MIROFISH_URL=http://localhost:5001 -- npx -y deepmiro-mcp# Required in .env
LLM_API_KEY=your_key
LLM_BASE_URL=https://api.openai.com/v1
LLM_MODEL_NAME=gpt-4o-mini
SURREALDB_URL=ws://localhost:8000/rpc
SURREALDB_USER=root
SURREALDB_PASS=rootMCP 서버
DeepMiro는 MCP 서버입니다. MCP는 Claude, ChatGPT, Gemini, Cursor, VS Code 및 모든 주요 AI 클라이언트가 채택한 범용 표준입니다. 서버 하나로 어디서든 작동합니다.
npx deepmiro-mcp사용 가능한 도구: create_simulation, quick_predict, simulation_status, get_report, interview_agent, upload_document, list_simulations, search_simulations.
차별점
DeepMiro는 원본 MiroFish 엔진의 성능 중심 포크입니다. 동일한 OASIS 시뮬레이션 코어를 사용하며 인프라를 재구축했습니다:
구성 요소 | MiroFish (원본) | DeepMiro |
추천 엔진 | 매 라운드 전체 LLM 호출 (~200초/라운드) | 캐시된 TWHIN-BERT 임베딩 (~15ms/라운드) |
엔티티 추출 | 순차적 NER | ThreadPoolExecutor를 통한 5개 워커 병렬 NER |
그래프 구축 시간 | ~5분 | ~56초 |
그래프 데이터베이스 | Zep Cloud (독점) | SurrealDB (셀프 호스팅, 오픈 소스) |
벡터 검색 | 클라우드 의존 | 하이브리드 HNSW + BM25 (로컬, 768차원 코사인) |
임베딩 모델 | Zep에 종속 | Fireworks를 통한 |
문서 수집 | 수동 텍스트 입력 | 매직 바이트 검증이 포함된 업로드 엔드포인트 (PDF, MD, TXT) |
LLM 제공자 | Alibaba Qwen (하드코딩) | 모든 OpenAI 호환 API |
배포 | Docker 전용 | Docker + Helm 차트 + k3s 지원 |
페르소나 충실도: DeepMiro가 에이전트의 캐릭터를 유지하는 방법
멀티 에이전트 LLM 시뮬레이션에는 더러운 비밀이 있습니다. 바로 **페르소나 드리프트(Persona Drift)**입니다. 20라운드가 지나면 터커 칼슨이 ACLU를 인용하기 시작합니다. 45라운드가 지나면 마르코 루비오가 버니 샌더스처럼 말합니다. 모든 개성 있는 목소리가 똑같이 지루한 "도움이 되는 어시스턴트" 톤으로 수렴합니다.
이것은 프롬프트 문제가 아니라 주의력 감쇠(attention decay) 문제입니다. Kim et al. (COLM 2024)은 LLM의 시스템 프롬프트 토큰에 대한 주의력이 턴이 지날수록 기하급수적으로 감소함을 증명했습니다. LLaMA2-70B는 8턴 이내에 크게 드리프트합니다. 더 큰 모델일수록 드리프트가 더 심합니다. 2KB의 페르소나는 50KB의 누적 대화 기록을 이길 수 없습니다.
모든 순진한 멀티 에이전트 시뮬레이션은 이 벽에 부딪힙니다. DeepMiro는 그렇지 않습니다. 우리는 스탠포드의 생성형 에이전트(Park et al. 2023)가 25개 에이전트의 Smallville 시뮬레이션에서 했던 방식을 실용적인 지름길과 함께 적용했기 때문입니다.
우리가 하는 일
1. 명시적인 부정적 예시가 포함된 구조화된 페르소나. 모든 에이전트는 산문형 약력과 함께 구조화된 프로필을 가집니다:
ideology_anchor— 2~5단어의 당파적 태그 ("보수적 포퓰리스트", "진보적 노동")core_beliefs— 3~5개의 1인칭 선언적 문장 (모호함 없음)verbal_tics— 해당 인물이 실제로 사용하는 3~5개의 말버릇never_say— 해당 인물이 절대 말하지 않을 3~5개의 문장speaking_style— 말투 + 수사적 습관
never_say 블록은 드리프트를 막는 핵심입니다. 모델은 자신이 말하는 내용의 중심점으로 드리프트하는 경향이 있습니다. 명시적인 부정적 예시("터커 칼슨은 절대 '나는 ACLU를 지지한다'라고 말하지 않을 것이다")는 LLM이 그러한 붕괴로 빠지지 않도록 고정합니다.
2. 라운드별 동적 페르소나 재생성.
시스템 프롬프트 수준에서 페르소나를 고정하고 1라운드부터 주의력이 감쇠하는 것을 지켜보는 대신, 에이전트가 행동하기 전에 매번 system_message.content를 재구축합니다. 매 라운드마다 에이전트는 새로운 3인칭 캐릭터 브리핑을 확인합니다:
# Character Brief: Tucker Carlson
The agent in this conversation is Tucker Carlson.
You are simulating how Tucker Carlson would respond.
## What Tucker Carlson Would NEVER Say
- "I stand with the ACLU"
- "We need to find common ground with progressives"
...
## What Tucker Carlson Has Said Recently
- "Permanent Washington wants you to believe..."
- "Let's pause for a moment — they're not even hiding it"
...
## Task
What would Tucker Carlson actually do? React in his authentic voice.
Do not become a neutral assistant. Do not seek balance.페르소나는 매 턴마다 동일한 구조화된 필드에서 새로 구축되기 때문에 절대 진부해지지 않습니다.
3. 3인칭 프레이밍. "당신은 터커 칼슨입니다"는 RLHF의 '도움이 되는 어시스턴트' 아첨을 유발합니다. 모델은 "당신은 X입니다"라는 지시에 대응하도록 훈련받았기 때문에 예의 바르고 균형 잡힌 태도를 취하려 합니다. 3인칭 프레이밍("이 에이전트는 터커 칼슨입니다", "터커 칼슨이라면 어떻게 할까?")은 그러한 트리거를 완전히 우회합니다. 이 단 하나의 변화가 매우 중요합니다.
4. 자기 일관성 앵커. 매 라운드마다 에이전트 자신의 최근 게시물 3개를 참조 자료로 주입합니다. 터커 칼슨은 자신이 방금 한 말을 확인하므로, 그와 일관된 말을 할 가능성이 높아집니다. 이는 추가적인 LLM 호출 없이 행동 로그를 읽기만 하면 되는 저비용 드리프트 방지책입니다.
5. 누적된 대화 기록 없음. 순진한 멀티 에이전트 설정과 달리, DeepMiro는 각 에이전트에게 이전 라운드의 전체 대화 기록을 제공하지 않습니다. 에이전트는 새로운 페르소나와 현재 피드 관찰 내용만 받습니다. 주의력은 50KB의 낡은 노이즈가 아닌 캐릭터와 현재 맥락에 집중됩니다.
우리가 하지 않는 일
반응을 스크립트하지 않습니다. 에이전트에게 "진보적 콘텐츠를 조롱하라"거나 "보수적 콘텐츠를 지지하라"고 지시하지 않습니다. 그렇게 하면 결과가 스크립트되어 시뮬레이션의 예측 가치가 파괴됩니다. 창발적 행동 자체가 핵심입니다.
이념에 따라 피드를 필터링하지 않습니다. 터커 칼슨은 AOC의 게시물을 봅니다. 그래야 반박할 거리가 생기기 때문입니다. 에코 체임버는 시뮬레이션이 아닙니다.
OASIS를 포크하지 않습니다. 전체 수정 사항은 CAMEL의 에이전트 페이저를 감싸는 런타임 래퍼입니다. 업스트림 드리프트도 없고 포크 유지 관리도 필요 없습니다.
연구 기반
기술 | 출처 |
시스템 프롬프트에 따른 주의력 감쇠 | Kim et al. — Measuring and Controlling Persona Drift (COLM 2024) |
3인칭 프레이밍을 통한 RLHF 아첨 우회 | |
긍정적 지시보다 강력한 부정적 예시 | |
행동별 동적 페르소나 요약 | |
JSON 페르소나의 중립적 톤으로의 붕괴 |
벤치마크
15개 에이전트 퀵 시뮬레이션, 강화된 프롬프트, 엔드투엔드 측정:
단계 | 시간 |
그래프 구축 | ~10초 |
에이전트 생성 | ~3분 |
시뮬레이션 (110 트위터 + 26 레딧 행동) | ~4분 |
전체 파이프라인 | ~7분 (퀵) / ~12분 (표준, 80개 에이전트) |
가장 큰 성과는 추천 시스템입니다. TWHIN-BERT 임베딩은 설정 시 사용자당 한 번 계산되며, 이후 매 라운드마다 새로운 게시물만 점진적으로 임베딩됩니다. numpy를 통한 코사인 유사도 계산이 이전의 전체 LLM 추론 호출을 대체하여 라운드당 13,000배 더 빠릅니다.
모노레포 구조
deepmiro/
├── engine/ # Python Flask simulation backend
│ ├── app/
│ │ ├── api/ # REST endpoints (simulation, graph, documents, report)
│ │ ├── services/ # Graph builder, simulation runner, report agent
│ │ ├── storage/ # SurrealDB adapter, embedding service, NER
│ │ └── utils/ # LLM client, retry logic, logging
│ └── pyproject.toml
├── mcp-server/ # TypeScript MCP server (npm: deepmiro-mcp)
│ └── src/
├── .claude-plugin/ # Claude Code plugin + marketplace manifests
├── .codex-plugin/ # OpenAI Codex plugin manifest
├── .agents/ # Codex marketplace catalog
├── .mcp.json # MCP config (auto-loaded when running `claude` here)
├── skills/predict/ # /predict skill (auto-setup, narration, interviews)
├── helm-chart/ # Kubernetes (k3s) deployment
├── docker/ # Dockerfiles + compose
├── docs/ # Landing page
└── locales/ # i18n (en, zh)사용 사례
도메인 | 예시 |
시장 분석 | 실적 보고서 업로드. "소매 투자자들이 이 가이던스 수정에 어떻게 반응할까?" |
정책 테스트 | 규제 초안 업로드. "어떤 인구 통계에서 어떤 대중적 반발을 예상해야 할까?" |
PR 및 커뮤니케이션 | 보도 자료 업로드. "이 발표가 48시간 동안 소셜 미디어에서 어떻게 퍼질까?" |
경쟁 분석 | 경쟁사 제품 사양 업로드. "우리 사용자 기반이 이 기능 격차에 어떻게 반응할까?" |
창의적 탐색 | 소설의 첫 80개 챕터 업로드. "이 캐릭터 역학에서 어떤 결말이 나올까?" |
위기 시뮬레이션 | 사건 보고서 업로드. "우리가 X와 Y로 대응할 경우 대중의 의견은 어떻게 진화할까?" |
감사의 말
DeepMiro는 Guo Hangjiang이 만들고 Shanda Group이 지원한 MiroFish의 포크입니다. 시뮬레이션 레이어는 CAMEL-AI 팀의 [OASIS](https://github.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kakarot-dev/deepmiro'
If you have feedback or need assistance with the MCP directory API, please join our Discord server