Skip to main content
Glama

一个预演未来的群体智能引擎。

输入一份文档。描述一个场景。观察数百个拥有独特个性、记忆和社交本能的 AI 智能体进行互动,并带回预测结果。

License npm Docker Website


功能概述

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 构建知识图谱。

环境设置

生成具有独特个性、信仰和社交联系的智能体角色。

模拟

智能体在双重平台(类似 Twitter 和 Reddit)上并行互动。动态记忆在每一轮更新。

报告生成

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 并输入 /predictpredict how people will react to [scenario]

其他客户端:

客户端

安装

OpenAI Codex

codex plugin install kakarot-dev/deepmiro

Claude Desktop

添加到 claude_desktop_config.json"deepmiro": {"command": "npx", "args": ["-y", "deepmiro-mcp"], "env": {"DEEPMIRO_API_KEY": "dm_xxx"}}

ChatGPT Desktop

设置 → MCP 服务器 → 添加 → npx deepmiro-mcp 并设置环境变量 DEEPMIRO_API_KEY

Cursor / Windsurf

设置 → MCP → 添加 → npx deepmiro-mcp 并设置环境变量 DEEPMIRO_API_KEY

VS Code (Copilot)

添加到 .vscode/mcp.json"deepmiro": {"command": "npx", "args": ["-y", "deepmiro-mcp"], "env": {"DEEPMIRO_API_KEY": "dm_xxx"}}

自托管

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

MCP 服务器

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 嵌入 (~15毫秒/轮)

实体提取

顺序 NER

通过 ThreadPoolExecutor 进行 5 线程并行 NER

图谱构建时间

~5 分钟

~56 秒

图数据库

Zep Cloud (专有)

SurrealDB (自托管,开源)

向量搜索

依赖云端

混合 HNSW + BM25 (本地,768 维余弦相似度)

嵌入模型

绑定到 Zep

通过 Fireworks 使用 nomic-embed-text-v1.5 (可替换)

文档摄入

手动文本输入

带有魔数验证的上传端点 (PDF, MD, TXT)

LLM 提供商

阿里巴巴 Qwen (硬编码)

任何兼容 OpenAI 的 API

部署

仅 Docker

Docker + Helm chart + k3s 就绪

角色保真度:DeepMiro 如何保持智能体的人设

多智能体 LLM 模拟有一个肮脏的秘密:角色漂移。到第 20 轮时,Tucker Carlson 开始引用 ACLU。到第 45 轮时,Marco Rubio 听起来像 Bernie Sanders。每个独特的声音都坍缩成同样平淡的“乐于助人的助手”语调。

这不是提示词的问题,而是注意力衰减的问题。Kim 等人 (COLM 2024) 证明了 LLM 对系统提示词标记的注意力会随着轮次呈几何级数衰减。LLaMA2-70B 在 8 轮内就会发生显著漂移。模型越大,漂移越严重。2KB 的角色描述无法与 50KB 的累积对话历史竞争。

每一个朴素的多智能体模拟都会撞上这堵墙。DeepMiro 不会,因为我们借鉴了 斯坦福生成智能体 (Park 等人 2023) 为其 25 个智能体的 Smallville 模拟所做的工作,并结合了一些实用的捷径。

我们做了什么

1. 带有明确负面示例的结构化角色。 每个智能体除了散文式简介外,还拥有一个结构化档案:

  • ideology_anchor — 2-5 个词的党派标签(“保守民粹主义者”、“进步劳工”)

  • core_beliefs — 3-5 个第一人称陈述句,不含模棱两可的词汇

  • verbal_tics — 3-5 个该人物实际使用的口头禅

  • never_say — 3-5 个该人物拒绝说出的句子

  • speaking_style — 语体 + 修辞习惯

never_say 块是防止漂移的关键。模型倾向于向其言论的中心点漂移。明确的负面示例(“Tucker Carlson 绝不会说‘我支持 ACLU’”)将 LLM 锚定,防止这种坍缩。

2. 每轮动态重构角色。 我们没有在系统提示词级别锁定角色并观察从第 1 轮开始的注意力衰减,而是在每个智能体行动前重建 system_message.content。每一轮,智能体都会看到一份全新的第三人称角色简报:

# 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. 第三人称框架。 “你是 Tucker Carlson”会触发 RLHF 带来的“乐于助人的助手”式的谄媚——模型试图保持礼貌和平衡,因为这是它在响应“你是 X”指令时被训练的方式。第三人称框架(“该智能体是 Tucker Carlson”,“Tucker Carlson 会怎么做?”)完全绕过了该触发器。这一单一改变起到了决定性作用。

4. 自我一致性锚点。 每一轮都会注入智能体自己最近的 3 条帖子作为参考资料。Tucker Carlson 会看到他刚才说了什么,这使他更有可能说出与之一致的内容。这是一种低成本的抗漂移手段——无需额外的 LLM 调用,只需从行动日志中读取。

5. 无累积聊天历史。 与朴素的多智能体设置不同,DeepMiro 不会向每个智能体提供之前轮次的滚动对话历史。智能体获得的是他们新鲜的角色档案 + 当前的 Feed 观察结果。注意力保持在角色 + 当前上下文上,而不是 50KB 的陈旧噪音上。

我们没做什么

  • 我们不编写反应脚本。 智能体不会被告知“嘲讽自由派内容”或“支持保守派内容”——那会编写结果并破坏模拟的预测价值。涌现行为才是重点。

  • 我们不按意识形态过滤 Feed。 Tucker Carlson 能看到 AOC 的帖子。这就是他有东西可以反驳的原因。回声室不是模拟。

  • 我们不分叉 OASIS。 整个修复方案是 CAMEL 智能体分页器周围的一个运行时包装器。没有上游漂移,无需维护分叉。

研究基础

技术

来源

系统提示词的注意力衰减

Kim 等人 — 测量和控制角色漂移 (COLM 2024)

第三人称框架绕过 RLHF 谄媚

Park 等人 — 生成智能体 (斯坦福 2023)

负面示例 > 正面指令

检查 LLM 智能体中的身份漂移 (arXiv 2412.00804)

每次行动的动态角色摘要

Park 等人 — 生成智能体 (斯坦福 2023)

JSON 角色坍缩为中性语调

角色感知对比学习 (ACL 2025)

基准测试

15 个智能体的快速模拟,丰富提示词,端到端测量:

阶段

时间

图谱构建

~10秒

智能体生成

~3 分钟

模拟 (110 条 Twitter + 26 条 Reddit 行动)

~4 分钟

总流水线

~7 分钟 (快速) / ~12 分钟 (标准,80 个智能体)

最大的胜利在于推荐系统:TWHIN-BERT 嵌入在设置时为每个用户计算一次,然后每轮仅对新帖子进行增量嵌入。通过 numpy 进行的余弦相似度计算取代了之前完整的 LLM 推理调用——每轮速度提升 13,000 倍

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)

使用场景

领域

示例

市场分析

上传财报。“散户投资者将如何应对这次指导意见的修订?”

政策测试

上传法规草案。“我们应该预料到哪些公众反弹,来自哪些人口群体?”

公关与传播

上传新闻稿。“这个公告在社交媒体上 48 小时内会产生什么影响?”

竞争分析

上传竞争对手产品规格。“我们的用户群将如何应对这一功能差距?”

创意探索

上传小说前 80 章。“这些角色动态会产生什么样的结局?”

危机模拟

上传事故报告。“如果我们用 X 而不是 Y 来回应,公众舆论会如何演变?”

致谢

DeepMiro 是 MiroFish 的一个分支,最初由郭航江创建,并得到盛大集团的支持。模拟层由 CAMEL-AI 团队的 OASIS 提供支持。

许可证

AGPL-3.0


deepmiro.org · 由 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