映射现实的群体智能镜像
MiroFish 深度技术研究报告:基于多智能体仿真的 AI 预测引擎
数千个 LLM 智能体在虚拟社交平台交互,从个体行为涌现群体动态
实现舆情推演、金融预测、政策预演等多场景预测分析
轻量模型用于高频仿真,强模型用于关键决策和报告生成
GraphRAG 构建时序知识图谱,Zep Cloud 提供长期记忆支持
关键发现
MiroFishModel 和 miro_fish 函数位于独立的 PyPI 包
mirofish-simulator
主仓库通过 SimulationRunner 以子进程方式集成 OASIS
IPC 通信存在实时性瓶颈,社区已提出异步协程改进方案
1. 项目概述与核心定位
1.1 项目愿景与设计理念
群体智能镜像:映射现实世界的数字孪生
MiroFish 的核心愿景是构建"映射现实的群体智能镜像"——一种能够精确复刻复杂社会系统动态的数字孪生系统。该项目由盛大集团战略支持与孵化,其技术路径区别于传统预测方法:不是从输入直接映射到输出,而是构建完整的数字社会系统并观察其自发演化 [181]。
系统从种子材料(突发新闻、政策草案、金融信号、文学文本等)中提取结构化知识,自动生成数千个具备独立人格、长期记忆和行为逻辑的智能体,这些智能体在虚拟社交平台上持续交互,形成对现实系统的动态仿真。
知识图谱驱动初始化
通过 GraphRAG 技术将非结构化文本转化为语义网络,智能体的人格参数从图谱中派生,确保行为根植于输入材料的真实语境。
时间演化能力
智能体记忆随仿真过程持续更新,每轮交互产生的新观点、新关系被写回图谱,影响后续轮次的决策。
涌现性预测范式
MiroFish 采用的涌现性预测范式从根本上挑战了传统统计方法的线性假设。传统预测将系统行为建模为输入特征的加权组合,而涌现性预测承认:群体层面的模式无法从个体属性简单叠加得到 [181]。
应用案例:《红楼梦》失传结局推演
系统从前 80 回提取数百个人物关系和情节线索,为主要角色生成符合其性格特征的智能体,最终通过群体交互涌现叙事上合理的后续发展 [181]。
1.2 技术定位与差异化优势
| 维度 | 单模型预测 | 多智能体仿真 |
|---|---|---|
| 主体表示 | 单一模型,隐含平均意见 | 数千异质智能体,显式建模个体差异 |
| 时间动态 | 静态推理,无演化过程 | 离散轮次推进,状态持续更新 |
| 社会机制 | 无显式社交结构 | 平台规则驱动信息流动 |
| 反事实能力 | 有限,依赖提示工程 | 原生支持,可动态注入变量 |
零风险决策实验室
在数字环境中预演重大决策,将试错成本降至最低。传统决策支持依赖历史案例类比或专家直觉,验证困难且风险不可控;而数字仿真允许在虚拟空间中测试数百种情景,识别潜在风险点和优化杠杆 [181]。
1.3 应用场景矩阵
舆情事件推演
追踪 sentiment evolution、topic propagation 和 influence dynamics,识别关键转折点和高风险窗口。
文学叙事续写
《红楼梦》失传结局预测,从前 80 回提取人物关系和情节线索。
企业级应用场景
战略决策预演
- • 新产品发布市场反应预测
- • 并购公告投资者情绪模拟
- • 组织架构调整员工接受度分析
成本效益优势
- • API 成本可低至 $0.01/次仿真 [181]
- • 混合模型配置优化
- • 速度成本双重优势
2. 系统架构与核心组件
2.1 整体技术栈
Vue 3 + Vite + D3.js"] --> B["后端层
Python + FastAPI/Flask"] B --> C["仿真引擎
CAMEL-AI OASIS"] C --> D["记忆系统
Zep Cloud + Graphiti"] B --> E["数据库
KuzuDB/Neo4j"] A --> F["部署方案
Docker Compose"] style A fill:#e3f2fd,stroke:#1e40af,stroke-width:2px,color:#1e293b style B fill:#fff3e0,stroke:#f59e0b,stroke-width:2px,color:#1e293b style C fill:#f3e5f5,stroke:#8b5cf6,stroke-width:2px,color:#1e293b style D fill:#e8f5e8,stroke:#10b981,stroke-width:2px,color:#1e293b style E fill:#fce4ec,stroke:#ec4899,stroke-width:2px,color:#1e293b style F fill:#e0f2f1,stroke:#06b6d4,stroke-width:2px,color:#1e293b
前端技术特点
- Vue 3 Composition API 实现复杂状态管理
- D3.js 力导向图渲染数千节点和边
- WebSocket 实时推送仿真状态
- Vite 快速热更新提升开发效率
后端架构设计
- 异步任务处理避免 HTTP 请求阻塞
- 子进程隔离确保仿真引擎故障隔离
- 混合 Flask/FastAPI 架构演进
- 状态持久化支持断点续传
OASIS 引擎核心技术特性
通过高效的批处理推理和 GPU 并行,支持大规模智能体仿真 [161]
2.2 目录结构与模块划分
核心目录结构
MiroFish/
├── frontend/ # Vue 3 单页应用
│ ├── src/
│ │ ├── components/ # 可复用 UI 组件
│ │ ├── views/ # 页面级组件
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── api/ # Axios API 封装
│ │ └── utils/ # 工具函数
│
├── backend/ # Python 后端服务
│ ├── app/
│ │ ├── api/ # RESTful API 端点
│ │ ├── core/ # 会话管理、资源加载
│ │ ├── resources/ # 适配器模式实现
│ │ ├── tools/ # 工作流原子操作
│ │ ├── services/ # 核心服务实现
│ │ └── utils/ # LLM 客户端等
│ └── uploads/ # 文件上传和状态存储
│
└── docker-compose.yml # 容器化部署配置
适配器模式设计
为不同类型的持久化数据提供统一接口,确保底层存储技术的可替换性。
工具组合模式
可组合的工作流操作,通过 Pydantic 模型定义数据契约,支持链式组合和条件执行。
2.3 核心服务组件详解
simulation_runner.py - 核心服务模块
核心方法 start_simulation 实现逻辑
- 验证阶段:检查仿真是否已在运行
- 配置加载:读取 simulation_config.json
- 脚本选择:根据 platform 参数选择执行脚本
- 子进程启动:subprocess.Popen 创建独立进程组
- 记忆更新器初始化(可选):ZepGraphMemoryUpdater
- 监控线程启动:_monitor_simulation 后台运行 [23]
架构局限与改进方向
当前 IPC 机制存在实时性不足(文件轮询延迟)、可靠性风险(竞争条件、子进程崩溃静默检测延迟最长 60 秒)等问题。社区建议采用 asyncio.create_subprocess_exec 替代 subprocess.Popen,使用 asyncio.Queue 替代文件 IPC [97]。
graph_storage.py - 图谱存储抽象
实现图谱存储的抽象接口,支持多种后端实现,确保底层存储技术的可替换性。
report_agent.py - ReACT 架构实现
采用 ReACT(Reasoning + Acting)架构的报告生成代理,区别于简单的模板填充。
3. 配置系统与环境管理
3.1 config.py 核心作用
分层配置加载机制
# 加载优先级:系统环境变量 > .env 文件 > 代码默认值
from dotenv import load_dotenv
import os
# 1. 加载 .env 文件(若存在)
env_path = Path(__file__).parent.parent.parent / '.env'
if env_path.exists():
load_dotenv(env_path, override=True)
# 2. 定义 Config 类,从环境变量读取
class Config:
SECRET_KEY = os.environ.get('FLASK_SECRET_KEY', 'default-unsafe-key')
DEBUG = os.environ.get('FLASK_DEBUG', 'False').lower() == 'true'
LLM_API_KEY = os.environ.get('LLM_API_KEY') # 必填,无默认值
# ... 其他配置
这种设计支持开发环境(本地 .env)和生产环境(平台注入变量)的灵活切换,同时确保敏感信息(API 密钥)不会进入版本控制。
LLM 配置中心
直接决定系统功能和成本的核心业务配置。
文件上传约束
保护系统免受超大文件和资源耗尽攻击的安全配置。
安全注意事项
Pull Request #445 报告"Flask debug mode enabled by default, exposed on 0.0.0.0"的安全问题 [183]。企业部署时需要特别关注:
- 显式设置 FLASK_DEBUG=False
- 限制绑定地址避免 0.0.0.0
- 生成强随机 SECRET_KEY
- 定期安全审计配置
3.2 关键环境变量解析
LLM 接入配置
支持任意 OpenAI SDK 兼容的端点,提供极大的灵活性。
记忆系统配置
Zep Cloud 提供长期记忆图谱服务,时序 GraphRAG 能力。
Zep Cloud 托管版
社区替代方案
双模型策略优化
社区扩展的配置方案,显著降低成本而不显著影响质量 [197]。
| 任务类型 | 推荐模型 | 成本比例 | 质量影响 |
|---|---|---|---|
| 本体论生成 | qwen-plus / gpt-4o-mini | 10% | 关键,需高质量 |
| 智能体决策 | qwen-turbo / gpt-4o-mini | 60% | 中等,批量优化 |
| 报告生成 | qwen-plus / gpt-4o | 20% | 关键,需高质量 |
| 交互对话 | 用户选择 | 10% | 按需 |
3.3 部署配置策略
源码部署(开发调试)
适合功能开发、性能优化、深度定制和学术研究场景。
前置要求
- • Node.js 18+
- • Python 3.11-3.12
- • uv 最新版
部署流程
Docker 部署(生产环境)
适合快速体验、生产部署和 CI/CD 集成场景。
服务组成
- • frontend: Vue 3 应用(3000)
- • backend: Flask/FastAPI 服务(5001)
- • zep(可选): 本地 Zep 服务
- • ollama(可选): 本地 LLM 推理
部署命令
依赖锁定策略
确保环境一致性和可复现性的关键机制。
Python 依赖管理
uv sync --frozen - 精确复现依赖环境uv pip install - 安装新依赖并更新 lock 文件uv run - 在隔离环境中运行命令Node 依赖管理
package-lock.json - 锁定版本npm ci - 生产构建安装4. 核心算法与仿真引擎
4.1 OASIS 引擎集成机制
双平台并行仿真
同一组智能体在 Twitter 和 Reddit 两个平台上拥有独立账号和行为历史,共享底层知识图谱和记忆系统。
Twitter 平台特征
- • 短文本(280 字符),快速发布
- • 算法推荐时间线,名人效应显著
- • 转发、引用、提及,病毒式传播
Reddit 平台特征
- • 长文本,深度讨论,嵌套评论
- • 社区投票排序,兴趣聚合
- • 投票、评论、award,质量筛选
智能体生命周期管理
完整的智能体状态机,实现从创建到消亡的全生命周期管理。
事件注入系统
上帝视角的变量干预能力,支持三类干预方式 [181]:
信息发布
突发新闻、官方声明、谣言澄清
环境变化
政策调整、市场波动、技术突破
直接干预
封禁账号、修改算法、引入新角色
4.2 智能体建模体系
人格生成:基于种子材料的角色构建
通过 LLM 基于相关图谱子上下文,使用人格模板填充具体参数值,确保行为与种子材料的真实语境一致。
| 人格维度 | 参数示例 | 数据来源 |
|---|---|---|
| 人口统计 | 年龄、性别、职业、地域 | 文本提及或 LLM 推断 |
| 心理特征 | 大五人格(开放性、尽责性等) | 行为模式分析 |
| 认知风格 | 信息处理方式、风险偏好 | 决策场景推断 |
| 立场倾向 | 对关键议题的支持/反对程度 | 观点表达分析 |
动机引擎与情感建模
多层次的目标驱动系统,结合情感状态模型,实现复杂的人类行为模拟。
动机层次
情感状态模型
社交关系网络
动态的亲密度与影响力计算,模拟真实的社交网络结构。
记忆架构:双层设计原理
短期工作记忆
长期图谱记忆
4.3 MiroFishModel 与 miro_fish 函数分析
关键架构发现
经过对官方仓库及其主要社区 fork 的全面检索分析,我们发现:
独立 PyPI 包
MiroFishModel 类和 miro_fish 函数位于独立的 PyPI 包 mirofish-simulator(版本 0.12.0)[196],而非主仓库源码。
子进程集成架构
主仓库 MiroFish 是完整的 Web 应用,通过 SimulationRunner 服务以子进程方式调用 mirofish-simulator,实现仿真引擎与产品界面的解耦。
MiroFishModel 推测接口
class MiroFishModel:
def __init__(self, config, llm_client=None, memory_backend=None):
self.config = config
self.agents = []
self.graph = KnowledgeGraph()
self.platforms = {}
self.status = ModelStatus.IDLE
def build_graph(self, seed_material):
"""从种子材料构建知识图谱"""
def generate_agents(self, count, diversity_params=None):
"""基于图谱生成智能体人格"""
def step(self, n=1, events=None):
"""执行 n 轮仿真"""
def inject_event(self, event, target=None):
"""上帝视角事件注入"""
def get_report(self, query, agent="report_agent"):
"""生成预测报告"""
miro_fish 主控函数
def miro_fish(seed_material, prediction_goal,
config=None, callbacks=None,
return_interactive=False):
"""
MiroFish 主入口:从种子材料到预测报告的完整流程
Parameters
----------
seed_material : 种子材料,支持多种格式
prediction_goal : 自然语言描述的预测目标
config : 仿真配置,None 则使用默认配置
callbacks : 回调函数,用于进度监控
return_interactive : 是否返回交互式世界对象
Returns
-------
SimulationResult 或 (SimulationResult, InteractiveWorld)
"""
与 SimulationRunner 的协作关系
主仓库通过子进程 + IPC 架构集成仿真库,实现进程隔离和资源管理。
当前实现(子进程 IPC)
建议改进(异步协程)
5. 数据处理与知识图谱
5.1 种子材料处理管道
多格式支持
支持 PDF、Markdown、TXT 三种主要格式的种子材料上传。
PDF 解析
Markdown 解析
TXT 解析
文本预处理
流式解析策略,避免大文件完全加载到内存。
信息密度评估
识别核心内容区域,过滤低质量块和噪声。
评估指标
5.2 本体论生成与实体抽取
LLM 驱动的本体识别
通过 LLM 提示工程,从种子材料中自动识别概念、属性和关系三元组,无需为每个新领域训练专门模型。
本体论生成流程
- 主题识别:分析整体主题和领域类型
- 概念层次:识别核心概念及其上下位关系
- 属性定义:为每个概念定义关键属性
- 关系类型:识别概念间可能的关系
- 约束规则:定义基数、值域、互斥约束
提示工程要素
- Few-shot 示例:提供领域相关本体示例
- 迭代精化:多轮对话逐步完善
- 一致性校验:检测循环继承、属性冲突
实体消歧与链接挑战
处理同名异义、异名同义、时变同一、模糊指代等复杂情况,通过上下文语义分析、图谱关系约束、字符串相似度、共指消解等技术实现高精度实体链接。
关系强度量化
基于多因素模型的关系强度计算,综合考虑共现、语义、句法、时间和用户反馈等因素。
+ β × SemanticSimilarity(e1, e2)
+ γ × SyntacticCloseness(sentence)
+ δ × TemporalProximity(events)
+ ε × UserFeedback(corrections)
实体抽取优化
LLM 驱动的实体关系抽取,通过多轮验证和结果融合提高准确性。
文本分块
本体论引导
多轮验证
结果融合
5.3 GraphRAG 构建流程
时序图谱组织
支持"在时间 T,实体 A 与实体 B 的关系强度为 X"的查询,实现图谱的时间演化追踪。
节点时序属性
边时序属性
事件时序属性
版本管理策略
为关键实体和关系维护版本历史,采用完整快照 + 增量日志的混合方案,平衡查询效率和存储成本。
社区检测与聚类
自动发现群体结构,识别意见领袖和信息流动模式。
Louvain 算法
Leiden 算法
Label Propagation
Infomap
检索增强生成(GraphRAG)
基于图谱上下文的生成增强,提供更准确和相关的回答。
5.4 记忆注入与更新机制
个体记忆
智能体私有的经验存储,记录个人事件、情感和策略。
群体记忆
共享的事件和公共知识,为个体提供参考框架。
记忆衰减与强化
艾宾浩斯风格的遗忘曲线,结合重要性加权和强化机制。
记忆更新工作流程
每轮仿真结束后执行,将智能体的新观点、新关系、关键事件写入时序图谱 [181]。
更新流程
- 事件提取:从 AgentAction 日志识别关键事件
- 自然语言生成:结构化事件转为描述性文本
- 图谱写入:通过 ZepGraphMemoryUpdater 更新
- 索引更新:刷新向量和时序索引
- 一致性校验:检测时间冲突或逻辑矛盾
检索策略
6. 模型训练与优化策略
6.1 提示工程体系
角色提示模板
维护智能体人格一致性,确保行为符合预设特征。
情境提示构造
优化上下文窗口使用,解决有限性挑战。
分层摘要
动态选择
外部引用
多轮组装
思维链引导
推理过程显性化,提高决策质量和可解释性。
引导方式
6.2 仿真参数调优
智能体数量权衡
精度与效率的平衡,建议标准场景 500-2000 智能体 [181]。
50-200 智能体
500-2000 智能体
2000-5000 智能体
5000+ 智能体
模拟轮次优化
默认 40 轮,通过收敛性判断实现提前终止。
收敛性指标
加速策略
开放度参数控制
多维度控制随机性权重,影响结果多样性。
行为随机性
观点可塑性
信息探索
社交冒险
6.3 反事实模拟与敏感性分析
关键参数扰动
识别决策敏感因素,量化输出变化的敏感性系数。
场景分支对比
多版本并行推演,分析不同假设或参数下的结果分布。
单因素变化
正交设计
极端场景
历史对照
置信度评估体系
多源融合的置信度量化,提供结果的可靠性评估。
置信度来源
表达形式
7. 结果生成与可视化
7.1 预测报告生成
ReportAgent 架构:ReACT 循环与工具调用
采用 ReACT(Reasoning + Acting)架构的报告生成代理,区别于简单的模板填充,实现深度分析和洞察提取。
ReACT 循环流程
可用工具集
循环控制参数
报告结构标准
结构化组织发现,提供全面的分析视角。
执行摘要
背景分析
演化叙事
网络分析
情感动态
情景对比
风险提示
建议行动
多维度分析
从时间、网络、情感三个维度深入分析仿真结果。
时间线分析
影响力网络
情感演化
7.2 交互式可视化
动态图谱渲染
D3.js 力导向图实现,支持数千节点的实时交互和动画效果。
核心功能
性能优化
智能体画像
个体轨迹与关系探查,深入了解特定智能体的行为模式。
对话界面:深度访谈能力
与报告代理或特定角色的深度访谈,探索更多洞察和验证假设。
报告代理模式
特定智能体模式
群体代表模式
对话状态管理
维护对话历史、注入相关记忆、管理上下文窗口、处理多轮引用和指代,支持流畅的多轮交互体验。
7.3 结果导出与复用
会话持久化
完整状态存储,支持后续查询和继续分析。
任务状态管理
长时运行状态恢复,支持崩溃恢复和断点续传。
状态机持久化
多格式输出
支持多种格式的报告导出,满足不同场景需求。
8. 性能优化与工程实践
8.1 计算资源管理
内存优化
大规模智能体的分页加载策略,解决内存压力问题。
活跃/休眠分离
按需加载
共享结构
并发控制
异步 I/O 与协程调度,提高系统并发效率。
改进方向
子进程隔离
仿真引擎的独立运行空间,确保资源隔离和安全性。
益处
代价
8.2 API 成本控制
令牌消耗预估模型
基于轮次、智能体数和上下文长度的成本估算。
成本计算示例
优化策略
模型选择策略
双模型策略优化,显著降低成本而不显著影响质量 [197]。
| 任务类型 | 推荐模型 | 成本比例 |
|---|---|---|
| 本体论生成 | qwen-plus / gpt-4o-mini | 10% |
| 智能体决策 | qwen-turbo / gpt-4o-mini | 60% |
| 报告生成 | qwen-plus / gpt-4o | 20% |
| 交互对话 | 用户选择 | 10% |
缓存机制
重复查询的结果复用,避免不必要的 API 调用。
嵌入向量缓存
LLM 响应缓存
图谱查询缓存
仿真结果缓存
8.3 可观测性建设
日志分级体系
结构化的日志记录,支持不同级别的信息输出。
生产建议
健康检查端点
/api/health 服务状态监控,全面检查系统健康状况。
仿真进度追踪
实时状态流与断点续传,支持长仿真管理和故障恢复。
进度指标
断点续传
9. 扩展性与生态集成
9.1 插件化架构
资源适配器接口
自定义数据源接入,支持多种存储技术的无缝集成。
class ResourceAdapter(ABC):
@abstractmethod
def connect(self, config: Dict) -> Connection: ...
@abstractmethod
def create(self, data: Dict) -> ResourceID: ...
@abstractmethod
def read(self, id: ResourceID) -> Dict: ...
@abstractmethod
def update(self, id: ResourceID, data: Dict) -> None: ...
@abstractmethod
def delete(self, id: ResourceID) -> None: ...
@abstractmethod
def query(self, criteria: Dict) -> List[Dict]: ...
社区贡献适配器
接口价值
工具组合模式
工作流的声明式编排,支持复杂业务场景的灵活配置。
workflow: crisis_communication
steps:
- name: ingest
tool: IngestTool
input: ${uploaded_files}
- name: build
tool: BuildTool
input: ${ingest.output}
params: {ontology: "crisis"}
- name: prepare
tool: PrepareTool
input: ${build.output}
params: {agent_count: 2000}
- name: baseline
tool: RunTool
input: ${prepare.output}
params: {rounds: 40, name: "baseline"}
- name: intervention
tool: RunTool
input: ${prepare.output}
params:
rounds: 40
name: "early_response"
events: [{at: 10, type: "statement"}]
- name: compare
tool: CompareTool
input: [${baseline.output}, ${intervention.output}]
- name: report
tool: ReportTool
input: ${compare.output}
设计特点
平台扩展
新增社交场景仿真支持,扩展应用边界。
专业社区
垂直平台
新兴市场
9.2 与 CAMEL-AI 生态的协同
camel-oasis 版本锁定与兼容性管理
当前依赖:
camel-oasis==0.2.5
[149],版本锁定确保可复现性。
版本管理策略
生态协同价值
CAMEL-AI 生态能力
MiroFish 在 broader CAMEL-AI 生态中的定位和协同。
camel-ai/camel
camel-ai/oasis
camel-ai/owl
camel-ai/meme
上层封装策略
MiroFish 专注于预测场景的产品化,底层复用 CAMEL 能力。
领域特定能力
技术协同
协作机制
9.3 企业级定制路径
私有部署
内网环境与数据安全,满足不同级别的数据主权需求。
纯本地部署
混合云部署
私有云部署
领域适配
垂直行业的本体库构建,提供专业化的预测能力。
人机协同
专家知识注入与结果校验,实现人机协同的预测分析。
准备阶段
执行阶段
分析阶段
决策阶段
企业级特性支持
满足企业级应用的可靠性、安全性、可维护性要求。