DeepMiro
Un motor de inteligencia de enjambre que ensaya el futuro.
Dale un documento. Describe un escenario. Observa cómo cientos de agentes de IA con personalidades, recuerdos e instintos sociales distintos interactúan, y obtén una predicción.
Qué hace
DeepMiro extrae entidades y relaciones de cualquier documento (un borrador de política, un informe de mercado, un capítulo de una novela) y construye un mundo digital paralelo. Dentro de él, cientos de agentes autónomos forman opiniones, discuten en plataformas sociales simuladas, cambian de lealtades y producen un comportamiento emergente que ningún prompt individual podría predecir.
Recibes un informe de predicción estructurado y un mundo vivo que puedes interrogar, agente por agente.
Entrada: Un PDF y una pregunta en lenguaje sencillo. Salida: Un informe de predicción detallado + una simulación interactiva que puedes explorar.
Cómo funciona
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)Fase | Qué sucede |
Construcción del grafo | Extrae entidades, relaciones y contexto de tus documentos. Construye un grafo de conocimiento mediante GraphRAG. |
Configuración del entorno | Genera perfiles de agentes con personalidades, creencias y conexiones sociales distintas. |
Simulación | Los agentes interactúan en plataformas duales (tipo Twitter y tipo Reddit) en paralelo. La memoria dinámica se actualiza en cada ronda. |
Generación de informes | Un ReportAgent analiza el entorno posterior a la simulación: cambios de sentimiento, formación de facciones, dinámicas virales, trayectorias de resultados. |
Interacción profunda | Chatea con cualquier agente para entender su razonamiento. Consulta al ReportAgent para un análisis de seguimiento. |
Inicio rápido
1. Obtén una clave API
Regístrate en deepmiro.org → Dashboard → API Keys. Tu clave se verá como dm_xxxxxxxxx.
2. Instalación
Claude Code (plugin — recomendado): un comando te da la habilidad /predict + el servidor MCP configurado:
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.jsonLuego reinicia Claude Code y di /predict o predict how people will react to [scenario].
Otros clientes:
Cliente | Instalación |
OpenAI Codex |
|
Claude Desktop | Añadir a |
ChatGPT Desktop | Settings → MCP Servers → Add → |
Cursor / Windsurf | Settings → MCP → Add → |
VS Code (Copilot) | Añadir a |
Autoalojamiento
No se necesita clave API. Ejecuta el motor localmente y apunta el servidor MCP hacia él:
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=rootServidor MCP
DeepMiro es un servidor MCP. MCP es el estándar universal adoptado por Claude, ChatGPT, Gemini, Cursor, VS Code y todos los clientes de IA importantes: un servidor, funciona en todas partes.
npx deepmiro-mcpHerramientas disponibles: create_simulation, quick_predict, simulation_status, get_report, interview_agent, upload_document, list_simulations, search_simulations.
Qué es diferente
DeepMiro es una bifurcación (fork) centrada en el rendimiento del motor original MiroFish. Mismo núcleo de simulación OASIS, infraestructura reconstruida:
Componente | MiroFish (original) | DeepMiro |
Motor de recomendación | Llamada LLM completa cada ronda (~200s/ronda) | Embeddings TWHIN-BERT cacheados (~15ms/ronda) |
Extracción de entidades | NER secuencial | NER paralelo de 5 trabajadores vía ThreadPoolExecutor |
Tiempo de construcción del grafo | ~5 minutos | ~56 segundos |
Base de datos de grafos | Zep Cloud (propietario) | SurrealDB (autoalojado, código abierto) |
Búsqueda vectorial | Dependiente de la nube | Híbrido HNSW + BM25 (local, 768-dim coseno) |
Modelo de embedding | Vinculado a Zep |
|
Ingesta de documentos | Entrada de texto manual | Endpoint de carga con validación magic-byte (PDF, MD, TXT) |
Proveedor de LLM | Alibaba Qwen (codificado) | Cualquier API compatible con OpenAI |
Despliegue | Solo Docker | Docker + Helm chart + listo para k3s |
Fidelidad de la personalidad: Cómo mantiene DeepMiro a los agentes en su papel
Las simulaciones de LLM multi-agente tienen un secreto sucio: las personalidades se desvían. En la ronda 20, Tucker Carlson empieza a citar a la ACLU. En la ronda 45, Marco Rubio suena como Bernie Sanders. Cada voz distinta colapsa en el mismo registro insípido de "asistente útil".
Esto no es un problema de prompts, es un problema de decaimiento de la atención. Kim et al. (COLM 2024) demostraron que la atención del LLM a los tokens del system-prompt decae geométricamente con los turnos. LLaMA2-70B se desvía significativamente en 8 turnos. Los modelos más grandes se desvían más, no menos. Una personalidad de 2KB no puede competir con 50KB de historial de conversación acumulado.
Cada simulación multi-agente ingenua choca contra este muro. DeepMiro no, porque copiamos lo que hizo Stanford's Generative Agents (Park et al. 2023) para su simulación de 25 agentes en Smallville, con algunos atajos prácticos.
Qué hacemos
1. Personalidades estructuradas con ejemplos negativos explícitos. Cada agente obtiene un perfil estructurado junto con la biografía en prosa:
ideology_anchor— una etiqueta partidista de 2-5 palabras ("populista conservador", "laborista progresista")core_beliefs— 3-5 declaraciones declarativas en primera persona, sin rodeosverbal_tics— 3-5 frases literales que la persona realmente usanever_say— 3-5 frases que la persona se negaría a decirspeaking_style— registro + hábitos retóricos
El bloque never_say es el asesino de la desviación. Los modelos se desvían hacia el centroide de lo que dicen. Los ejemplos negativos explícitos ("Tucker Carlson nunca diría 'Apoyo a la ACLU'") anclan al LLM contra ese colapso.
2. Regeneración dinámica de personalidad por ronda.
En lugar de bloquear la personalidad al nivel del system-prompt y ver cómo la atención decae desde la ronda 1, reconstruimos system_message.content antes de que cada agente actúe. Cada ronda, el agente ve un resumen de personaje fresco en tercera persona:
# 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.La personalidad nunca se vuelve obsoleta porque se construye fresca a partir de los mismos campos estructurados en cada turno.
3. Encuadre en tercera persona. "Eres Tucker Carlson" activa la sicofancia de asistente útil del RLHF: el modelo intenta ser educado y equilibrado porque así fue entrenado para responder a las instrucciones de "eres X". El encuadre en tercera persona ("el agente es Tucker Carlson", "¿qué haría Tucker Carlson?") evita ese disparador por completo. Este cambio único es fundamental.
4. Ancla de autoconsistencia. Cada ronda inyecta las 3 publicaciones más recientes del propio agente como material de referencia. Tucker Carlson ve lo que acaba de decir, lo que lo hace más propenso a decir algo consistente con ello. Esto es una resistencia a la desviación barata: sin llamadas adicionales al LLM, solo leyendo el registro de acciones.
5. Sin historial de chat acumulado. A diferencia de las configuraciones multi-agente ingenuas, DeepMiro NO alimenta a cada agente con el historial de conversación continuo de rondas anteriores. Los agentes obtienen su personalidad fresca + las observaciones del feed actual. La atención se mantiene enfocada en el personaje + el contexto presente, no en 50KB de ruido obsoleto.
Qué no hacemos
No guionizamos reacciones. A los agentes no se les dice "búrlate del contenido liberal" o "apoya el contenido conservador"; eso guionizaría el resultado y destruiría el valor predictivo de la simulación. El comportamiento emergente es el objetivo principal.
No filtramos feeds por ideología. Tucker Carlson ve las publicaciones de AOC. Así es como tiene algo contra lo que reaccionar. Las cámaras de eco no son simulaciones.
No hacemos fork de OASIS. Toda la solución es un envoltorio de tiempo de ejecución alrededor del paginador de agentes de CAMEL. Sin desviación ascendente, sin mantenimiento de fork.
Fundamentos de investigación
Técnica | Fuente |
Decaimiento de la atención sobre system prompts | Kim et al. — Measuring and Controlling Persona Drift (COLM 2024) |
El encuadre en tercera persona evita la sicofancia del RLHF | |
Ejemplos negativos > instrucción positiva | |
Resumen de personalidad dinámico por acción | |
Las personalidades JSON colapsan a un registro neutral |
Benchmarks
Simulación rápida de 15 agentes, prompt enriquecido, medido de extremo a extremo:
Etapa | Tiempo |
Construcción del grafo | ~10s |
Generación de agentes | ~3 min |
Simulación (110 acciones de Twitter + 26 de Reddit) | ~4 min |
Pipeline total | ~7 min (rápido) / ~12 min (estándar, 80 agentes) |
La mayor victoria es el sistema de recomendación: los embeddings de TWHIN-BERT se calculan una vez por usuario en la configuración, luego solo las nuevas publicaciones se incrustan incrementalmente en cada ronda. La similitud de coseno vía numpy reemplaza lo que anteriormente era una llamada de inferencia LLM completa: 13,000 veces más rápido por ronda.
Estructura del monorepo
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)Casos de uso
Dominio | Ejemplo |
Análisis de mercado | Sube un informe de ganancias. "¿Cómo reaccionarán los inversores minoristas a esta revisión de la guía?" |
Pruebas de políticas | Sube un borrador de regulación. "¿Qué reacción pública debemos esperar y de qué grupos demográficos?" |
PR y comunicaciones | Sube un comunicado de prensa. "¿Cómo funcionará este anuncio en las redes sociales durante 48 horas?" |
Análisis competitivo | Sube especificaciones de productos de la competencia. "¿Cómo responderá nuestra base de usuarios a esta brecha de funciones?" |
Exploración creativa | Sube los primeros 80 capítulos de una novela. "¿Qué final surgiría de estas dinámicas de personajes?" |
Simulación de crisis | Sube un informe de incidentes. "¿Cómo evoluciona la opinión pública si respondemos con X frente a Y?" |
Agradecimientos
DeepMiro es un fork de MiroFish, creado originalmente por Guo Hangjiang y apoyado por Shanda Group. La capa de simulación está impulsada por OASIS del equipo de CAMEL-AI.
Licencia
deepmiro.org · Creado por Joel Libni
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