MiroFish 核心技术深潜:重塑 AI 仿真的工程范式
0. 引言:当"黑天鹅"在比特世界被驯服
案例:跨平台连锁舆情博弈。
模拟脚本:Reddit 用户发现某企业存在劳工权益隐患,随后 Twitter 上的意见领袖(KOL)介入转发。
这是一个典型的黑天鹅场景。在大部分 AI 实验中,这仅仅意味着两段无关联的文本生成。但在 MiroFish 的内核中,这一动作触发了一连串复杂的并发反应:
SimulationManager锁定了相关的 200 个数字 Agent;Zep GraphRAG瞬间调取了该企业过去 3 年在知识图谱中沉淀的 1500+ 条拓扑事实;ReportAgent开启了它的 ReACT 循环,开始在一个并行的访谈空间里向虚拟的"前雇员 A"追问内幕。最终,系统产出了一份长达 50 页的深度预判:风险会在 18 小时后穿透行业壁垒,触达监管层。
MiroFish 的护城河不在于"生成文本",而在于一套从本体建模、行为编排、逻辑推理到实时感知的完整工程闭环。

1. 群体智能的编排艺术:SimulationManager 的多维律动
V
SimulationManager 是整个仿真的生命历程指挥官,它负责解决"如何让上百个 LLM 实例协同工作且不发生逻辑崩坍"的问题。
(1) 关键工程入口
- 入口方法 :
SimulationManager.prepare_simulation(requirement, doc_text) - 核心逻辑 :该方法整合了
ZepEntityReader读取本体图谱、OasisProfileGenerator批量生成人设以及SimulationConfigGenerator注入环境配置。
(2) 基于 GraphRAG 的"灵魂注入"
在 MiroFish 中,实体(Entity)不仅仅是数据库里的一行,它们必须具备"活性"。这通过其内部的 OasisProfileGenerator 模块实现:
- 信息反哺 (Information Enrichment):在创建一个 Agent 之初,系统会针对该实体名在 Zep 图谱中发起混合搜索,捕获其所有历史背景。
- 人格重塑:利用 LLM 生成包含社会背景、性格心理(MBTI 锚定)及核心记忆的多维 Persona。
(3) 并发编排生命周期图
plantuml
@startuml
participant "SimulationManager" as SM
participant "ZepReader" as ZR
participant "ProfileGen" as PG
participant "ConfigGen" as CG
participant "Runner" as SR
SM -> ZR: fetch_defined_entities()
ZR --> SM: Array<EntityNode>
group 并发加速层 (ThreadPoolExecutor)
SM -> PG: generate_profiles_from_entities()
PG -> Zep: get_entity_context(uuid)
Zep --> PG: Facts & Relationships
PG -> LLM: 构建 2000 字维度 Persona
LLM --> PG: profiles.json
end
SM -> CG: generate_config(requirement)
CG --> SM: simulation_config.json
SM -> SR: start_simulation(simulation_id)
SR -> Subprocess: 拉起 OASIS 仿真实例
@enduml
2. 智慧报告的诞生:ReportAgent 与 ReACT 思考拓扑
当仿真产生万级海量数据时,如何提取有价值的洞察?ReportAgent 采用了 ReACT (Reasoning + Acting) 模式,解决了传统总结型 AI "知其然不知其所以然"的痛点。
(1) 关键工程入口
- 入口方法 :
ReportAgent._generate_section_react(section_title, plan) - 工具解析入口 :
ReportAgent._parse_tool_calls(response)------ 负责从 LLM 混杂的输出中精准提取 XML/JSON 格式的工具指令。
(2) ReACT 循环:深度调研员模式
Agent 不再是简单的总结者,而是调研员:
- Thought (思考) :通过
ReportLogger记录分段逻辑,识别信息缺失点。 - Action (行动/工具带) :
InterviewAgents:这是技术难点。它会创建一个临时的访谈子线程,在那个空间里与特定的 Agent 进行"超越脚本"的 1 对 1 提问。InsightForge:调用 Zep 的深度搜索,追踪"传播链条"。
- Observation (观察):解析访谈结果及其与历史事实的冲突。
(3) ReACT 循环状态机
plantuml
@startuml
[*] --> Thinking
Thinking --> TakingAction : 需要更多数据
TakingAction --> CallingTool : 调用 Interview/Search
CallingTool --> Observing : 获取工具返回值
Observing --> Thinking : 整合 Observation
Thinking --> FinalAnswering : 信息足够
FinalAnswering --> SelfReflection : 内容完整性审计
SelfReflection --> [*] : 输出 Markdown
@enduml
3. 数据血脉:Zep GraphRAG 与长期记忆架构
没有记忆的仿真只是随机漫步。MiroFish 的认知核心是 Zep Cloud 驱动的 GraphRAG 系统,解决了传统 RAG 无法处理"事实演变"的问题。
(1) 关键工程入口
- 核心模块 :
ZepToolsService - 深度搜索入口 :
ZepToolsService.insight_forge(query)------ 实现子问题自动拆解与语义+关系双路召回。
(2) 时序事实管理 (Temporal Facts)
MiroFish 存储的是拓扑事实轨迹。每个关系(Edge)都携带了元数据:
valid_at:事实何时生效。invalid_at/expired_at:事实何时被后续动作覆盖。
这使得通过PanoramaSearch,系统可以清晰地识别出某项声明是在何时被新事实取代的,精准还原舆情的动态演变。
(3) GraphRAG 知识闭环流程
plantuml
@startuml
agent "Simulation Runner" as SR
database "Zep Graph" as Zep
node "ReportAgent" as RA
SR -> Log: 捕获 Agent A 动作
Log -> Zep: upsert_edge(Fact: A 支持 B)
Zep -> Zep: 自动提取实体/关系
RA -> Zep: PanoramaSearch(Query: 舆情趋势)
Zep --> RA: 返回带有时序权重的 Facts
RA -> RA: 生成深度洞察
@enduml
4. 前端交互驱动:实时可视化状态同步
前端不仅仅是 UI,它是万级分布式异步任务的"监控器"。
(1) 关键工程入口
- 状态视图 :
SimulationRunView.vue - 图谱渲染组件 :
GraphPanel.vue(集成 D3.js) - 核心逻辑 :通过
refreshGraph轮询配合 D3 的force-directed布局实现增量节点的平滑展示。
(2) 状态机同步逻辑
前端通过严密的轮询与异步任务绑定,将后端复杂的 SimulationRunner 过程转化为可见的进度条和呼吸灯。
- D3.js 增量更新:采用"进入-更新-退出(Enter-Update-Exit)"策略,确保上千节点在大负载下依然流畅。
5. 工程难点解析
(1) 冗余与重试机制 (_call_with_retry)
由于 Zep Cloud 与 LLM API 的不稳定性,ZepEntityReader 实现了一套带指数退避(Exponential Backoff)的重试机制,确保在网络波动时仿真序列不中断。
(2) 章节内聚与上下文管理
为了解决长报告的"语义漂移",我们在 ReportAgent 中设计了摘要注入机制:生成第 N 章节时,会自动携带前 N-1 章节的核心摘要,确保整篇报告的逻辑一致性。
6. 结语
从 SimulationManager 的编排起点,到 Zep GraphRAG 的记忆中枢,再到 ReportAgent 的智慧产出,MiroFish 正在定义一种新的 AI 仿真范式。这不仅仅是代码的堆砌,而是对复杂社会系统在数字世界的底层重构。
--->