Skip to main content
Glama

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.

License npm Docker Website


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.json

Luego reinicia Claude Code y di /predict o predict how people will react to [scenario].

Otros clientes:

Cliente

Instalación

OpenAI Codex

codex plugin install kakarot-dev/deepmiro

Claude Desktop

Añadir a claude_desktop_config.json: "deepmiro": {"command": "npx", "args": ["-y", "deepmiro-mcp"], "env": {"DEEPMIRO_API_KEY": "dm_xxx"}}

ChatGPT Desktop

Settings → MCP Servers → Add → npx deepmiro-mcp con env DEEPMIRO_API_KEY

Cursor / Windsurf

Settings → MCP → Add → npx deepmiro-mcp con env DEEPMIRO_API_KEY

VS Code (Copilot)

Añadir a .vscode/mcp.json: "deepmiro": {"command": "npx", "args": ["-y", "deepmiro-mcp"], "env": {"DEEPMIRO_API_KEY": "dm_xxx"}}

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=root

Servidor 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-mcp

Herramientas 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

nomic-embed-text-v1.5 vía Fireworks (intercambiable)

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 rodeos

  • verbal_tics — 3-5 frases literales que la persona realmente usa

  • never_say — 3-5 frases que la persona se negaría a decir

  • speaking_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

Park et al. — Generative Agents (Stanford 2023)

Ejemplos negativos > instrucción positiva

Examining Identity Drift in LLM Agents (arXiv 2412.00804)

Resumen de personalidad dinámico por acción

Park et al. — Generative Agents (Stanford 2023)

Las personalidades JSON colapsan a un registro neutral

Persona-Aware Contrastive Learning (ACL 2025)

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

AGPL-3.0


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