一 、MiroThinker文件结构解析与树形图

MiroThinker/
├── 📜 justfile                     # [神经反射] 快捷指令集 (just run, just deploy)
├── 📜 pyproject.toml               # [细胞核] 依赖管理 (uv lock)
│
├── 🧠 apps/miroflow-agent/         # [大脑中枢] The Agent Core
│   ├── 📜 .env                     # [体液] 关键激素 (API Keys)
│   ├── 📜 main.py                  # [脑干] 意识唤醒入口
│   │
│   ├── 📂 conf/                    # [DNA] 基因配置库
│   │   ├── config.yaml             # 基础生理参数
│   │   └── agent/                  # 人格特质
│   │       ├── 🧬 mirothinker_v1.5_keep5.yaml  # [平衡型] 推荐配置
│   │       └── 🧬 mirothinker_v1.5_deep.yaml   # [深思型] 400轮思考
│   │
│   └── 📂 src/                     # [皮层] 高级思维区域
│       ├── 🧠 agent.py             # [意识] ReAct 状态机循环
│       ├── 🗂️ context.py           # [记忆] Context 动态压缩算法
│       ├── 📝 prompt_manager.py    # [语言] System Prompt 模板库
│       └── 🔌 mcp_client.py        # [神经突触] 连接 Tools 的适配器
│
├── 🛠️ libs/miroflow-tools/         # [四肢与感官] The Toolset (MCP Servers)
│   ├── 📜 pyproject.toml           # 工具独立依赖
│   └── 📂 src/tools/
│       ├── 🐍 tool_python.py       # [左手] E2B 代码解释器
│       ├── 🔍 search_tool.py       # [眼睛] Serper 搜索引擎
│       ├── 📖 browser_tool.py      # [眼镜] Jina 网页阅读器
│       └── 💾 file_system.py       # [右手] 本地文件读写
│
└── 📊 assets/                      # [外貌]
    └── gradio_demo.py              # [面孔] 可视化交互界面

核心文件深度剖析 (Deep Dive)

我们对 MiroThinker 最独特的两个核心组件进行隐喻式解读。

A. 意识维持系统 (The Consciousness Loop)

核心文件: apps/miroflow-agent/src/agent.py 标签: [意志 / 执念]

深度解析:

  • 交互式扩展 (Interactive Scaling): 其他 Agent 追求“一次做对”,MiroThinker 追求“反复验证”。这个文件定义了一个永不放弃的循环。
  • 错误恢复机制: 如果 tool-python 报错(例如代码语法错误),agent.py 不会崩溃,而是将报错信息(Traceback)作为“观察”喂回给 LLM。LLM 会像程序员一样说:“啊,我少写了一个括号”,然后重新生成代码。这种自我纠错能力是其核心。
  • 终止条件: 不是简单的“回答完毕”,而是需要 LLM 输出特定的终止 Token,或者达到 max_turns 上限。

B. 记忆代谢系统 (The Memory Metabolism)

核心文件: apps/miroflow-agent/src/context.py (及相关配置 keep_tool_result) 标签: [新陈代谢 / 遗忘曲线]

深度解析:

  • 信息过载问题: 在 200 轮的 Deep Research 中,Agent 可能会读取几十万字的网页。如果全部塞进 Prompt,任何模型都会崩溃。
  • 代谢算法: 该模块实现了一个类似人类短期记忆的机制。
    • T-0 (当前): 保留完整的网页内容、完整的代码输出。
    • T-5 (5轮前): 仅保留“我搜索了X,得到结论Y”,原始网页内容被丢弃。
    • 原理: 这种机制保证了 Agent 即使运行了 100 小时,其 Context Window 占用依然保持在一个健康的、模型处理得过来的水平(如 32k tokens 以内),从而实现无限长程推理

C. 神经传导接口 (The Interface)

核心文件: libs/miroflow-tools/src/tools/python_tool.py 标签: [念力 / 远程操控]

深度解析:

  • E2B 集成: 这个文件不是简单的 exec()。它建立了一个通往 E2B 云端沙箱 的加密隧道。
  • 状态保持: 当 Agent 在第 1 轮定义了变量 df = load_csv(),在第 10 轮画图时,df 依然存在。这是因为 python_tool.py 维护了一个有状态的 Jupyter Kernel 会话,而不是无状态的函数调用。这让 Agent 感觉自己是在操作一台真正的电脑,而不是在发 API 请求。

二、这些文件是如何协作的?

为了让你透彻理解 MiroThinker 的运行机制,我们将展示从用户输入一个复杂问题(如“预测2026年半导体市场”)开始,代码内部如同精密齿轮般的咬合过程。

2.1 工作流程与数据流 (Workflow & Data Stream)

┌─────────────────────────────────────────────────────────────────┐
│  Stage 1: 创世纪与觉醒 (Genesis & Initialization)               │
├─────────────────────────────────────────────────────────────────┤
│  输入: 用户指令 (Task Prompt) + 配置文件 (.yaml)                │
│  处理:                                                          │
│    1. main.py → 读取 justfile 启动指令,加载环境变量 (.env)     │
│    2. hydra_config → 读取 conf/agent/*.yaml (注入人设与参数)    │
│    3. tool_loader → 实例化 libs/miroflow-tools (装上义肢)       │
│  输出: 初始化的 Agent 实例 (具备了性格、记忆槽和工具箱)         │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  Stage 2: 感知与规划 (Perception & Planning)                    │
├─────────────────────────────────────────────────────────────────┤
│  处理:                                                          │
│    1. agent.py → 接收任务,结合 System Prompt 构建初始上下文    │
│    2. context.py → 检查历史记忆 (若是多轮对话),进行相关性提取  │
│    3. llm_client → 发送 Request 到大模型 (Thinking Process)     │
│  输出: 思考轨迹 (Thought Trace) + 行动意图 (Next Step)          │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  Stage 3: 行动与执行 (Action & Execution)                       │
├─────────────────────────────────────────────────────────────────┤
│  处理:                                                          │
│    1. action_parser → 解析 LLM 输出的 <tool_code> 代码块        │
│    2. search_tool.py → 若需联网,调用 Serper API 抓取搜索结果   │
│    3. browser.py → 若需阅读,调用 Jina Reader 抓取并清洗网页    │
│    4. tool_python.py → 若需计算,发送代码至 E2B 沙箱运行        │
│  输出: 原始观测结果 (Raw Observation: HTML/JSON/Error Log)      │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  Stage 4: 记忆代谢 (Memory Metabolism) [核心创新]               │
├─────────────────────────────────────────────────────────────────┤
│  处理:                                                          │
│    1. jina_scrape_llm_summary → 对长网页进行“即时摘要”          │
│    2. context.py (Keep-K Strategy) →                            │
│       - 保留最近 5 轮的详细代码和搜索结果                       │
│       - 将 5 轮之前的交互压缩为“我做过X,得到了结论Y”           │
│  输出: 压缩后的健康上下文 (Sanitized Context)                   │
└─────────────────────────────────────────────────────────────────┘
                              ↓
┌─────────────────────────────────────────────────────────────────┐
│  Stage 5: 递归与收敛 (Recursion & Convergence)                  │
├─────────────────────────────────────────────────────────────────┤
│  功能:                                                          │
│    1. agent.py → 判断是否满足退出条件 (Goal Achieved / Max Turn)│
│    2. 若未完成 → 携带新观测值,返回 Stage 2 (进入下一轮 Tick)   │
│    3. 若完成 → 综合所有线索,生成最终深度研究报告               │
│  输出: 最终答案 + 完整的思维链 (Trace)                          │
└─────────────────────────────────────────────────────────────────┘

2.2 文件依赖关系图 (Dependency Graph)

这展示了文件之间是谁在调用谁,谁依赖谁。

┌──────────────────────────────────────────────────────────────────────┐
│                        MiroThinker 模块依赖拓扑                      │
└──────────────────────────────────────────────────────────────────────┘
 
[配置与启动层]
    │
    ├──→ .env (API Keys) ────────┐
    │                            │
    ├──→ conf/agent/*.yaml ──────┼──→ main.py (启动入口)(定义能力边界)          │
    │                            │
    └──→ justfile (命令封装) ────┘
         │
         ▼
[核心思维层 (Brain)]
    │
    ├──→ src/agent.py (主控循环) ◄──┐
    │    │                          │
    │    ├──→ src/prompt.py (话术)  │
    │    │                          │
    │    ├──→ src/llm.py (智商) ────┘
    │    │
    │    └──→ src/context.py (记忆管理/海马体)
    │
    ▼
[感知与执行层 (Limbs)]
    │
    ├──→ libs/miroflow-tools/src/tools/
         │
         ├──→ search_tool.py ──→ Serper API (外部)
         │
         ├──→ browser.py ──────→ Jina API (外部)
         │    │
         │    └──→ jina_summary (调用小模型做摘要)
         │
         └──→ python_tool.py ──→ E2B Cloud Sandbox (外部)
              (数据回传: PNG/CSV)

2.3 核心协作流程 (Core Collaboration)

用户输入复杂问题 ("分析 A 股与美股的关联性")
       │
       ▼
┌──────────────┐
│   main.py    │ ──→ 加载 mirothinker_v1.5 配置,唤醒 Agent
└──────┬───────┘
       │
       ▼
┌──────────────┐
│   agent.py   │ ──→ 开启 ReAct 循环 (Tick 1)
└──────┬───────┘
       │ <Need Info?>
       ▼
┌──────────────┐      ┌──────────────────┐
│  llm_client  │ ────►│   search_tool    │ (眼睛)(Brain)    │      │ (Serper Google)  │
└──────┬───────┘      └────────┬─────────┘
       │                       │ 
       │ <Got URL>             ▼
       │              ┌──────────────────┐
       │ ◄─────────── │    browser.py    │ (阅读)
       │              │ (Jina Summary)   │
       │              └────────┬─────────┘
       ▼                       │
┌──────────────┐               │
│  tool_python │ ◄─────────────┘
│ (E2B Sandbox)(读取网页数据,画图)
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  context.py  │ ──→ 压缩历史,防止溢出 (Keep-5 策略)
└──────┬───────┘
       │
       ▼ (Loop back to agent.py)
   生成最终报告

2.4 MiroThinker Simulation Pipeline (全链路运行机制树形图)

我们将智能体的运行过程比作一次**“认知探险”**。

MiroThinker Thinking Pipeline
│
├── 【阶段 I: 神经突触连接 (Synapse Connection)】
│   ├── 用户动作: 启动命令 `just run agent=finance_researcher`
│   │   └── 接口: CLI / API Server
│   │
│   ▼
│   [1. 人格构建 (Persona Injection)] ───────────────────────────────────┐
│   │   (由此文件总控: 🧠 apps/miroflow-agent/main.py)                   │
│   │                                                                    │
│   ├── A. 基因读取 (Config Loading)                                     │
│   │   ├── <调用>: 📜 conf/agent/finance_researcher.yaml                │
│   │   │   (读取: max_turns=200, tools=[python, search, bloomberg?])    │
│   │   └── > 状态: 确定了它是一个“极具耐心的金融专家”。                 │
│   │                                                                    │
│   ├── B. 装备挂载 (Tool Mounting)                                      │
│   │   ├── <调用>: 🛠️ libs/miroflow-tools/src/registry.py               │
│   │   │   (动作: 验证 SERPER_API_KEY, 初始化 E2B Session)              │
│   │   └── > 状态: "眼睛"张开了,"手"伸进了沙箱。                       │
│   └────────────────────────────────────────────────────────────────────┘
│
├── 【阶段 II: 深度思考循环 (The ReAct Loop)<★ 核心引擎机制>
│   │
│   ▼
│   [2. 认知迭代 (Cognitive Iteration)] ─────────────────────────────────┐
│   │   (由此文件总控: 🧠 src/agent.py - while 循环)                     │
│   │   (每一圈代表一次“思考-行动-观察”的完整闭环)                       │
│   │                                                                    │
│   ├── Step 1: 态势感知 (Observation & Thought)                         │
│   │   ├── <输入>: 当前的目标 + 过去5步做了什么(Memory)                 │
│   │   ├── <思考>: 调用 src/llm_client.py                               │
│   │   │   (Prompt: "我现在有Google和Python,要查股价,我该先做什么?") │
│   │   └── > 决策: "我需要先搜索 NVIDA 的最新财报发布日期。"            │
│   │                                                                    │
│   ├── Step 2: 肢体行动 (Action Execution)                              │
│   │   ├── <动作>: 路由到 🔍 search_tool.py                             │
│   │   ├── <执行>: 发送 HTTP 请求给 Google Serper                       │
│   │   └── > 产物: 返回 10 条 URL 链接和 Snippets。                     │
│   │                                                                    │
│   ├── Step 3: 信息消化 (Information Digestion)                         │
│   │   ├── <动作>: 发现 Snippets 信息量不够,决定深读。                 │
│   │   ├── <工具>: 📖 browser.py + 🧠 jina_scrape_llm_summary           │
│   │   │   (逻辑: 抓取 URL -> 提取正文 -> 用小模型总结成 500)         │
│   │   └── > 产物: 高密度的信息摘要 (Dense Knowledge)。                 │
│   │                                                                    │
│   └── Step 4: 记忆新陈代谢 (Context Metabolism)                        │
│       ├── <动作>: 这一轮结束了,准备进入下一轮。                       │
│       ├── <文件>: 🧠 src/context.py                                    │
│       │   (逻辑: "第 1 轮的搜索结果已经没用了,只保留摘要,删除原文")  │
│       └── > 状态: 释放了 2000 Tokens 空间,为下一轮思考腾地。          │
│   └────────────────────────────────────────────────────────────────────┘
│
├── 【阶段 III: 坍缩与产出 (Collapse & Output)】
│   │
│   ▼
│   [3. 成果生成 (Final Reporting)] ─────────────────────────────────────┐
│   │                                                                    │
│   ├── A. 逻辑收敛 (Convergence)                                        │
│   │   ├── 触发: 收集到了足够的信息 (LLM 判断 info_sufficiency=True)    │
│   │   └── 动作: agent.py 停止循环。                                    │
│   │                                                                    │
│   ├── B. 报告撰写 (Drafting)                                           │
│   │   ├── <调用>: src/llm_client.py                                    │
│   │   │   (Input: 所有有效的 Memory 摘要 + E2B 生成的图表路径)         │
│   │   └── > 最终输出: Markdown 格式的深度报告,包含图表 URL。          │
│   └────────────────────────────────────────────────────────────────────┘

2.5 这些文件是如何“相辅相成”的?(协作细节深度解析)

我们将上述流程拆解为三个具体的协作场景,用拟人化的方式解释文件之间的交互。

场景一:初次接触——从迷茫到清晰

  • 任务: 用户问:“特斯拉最新的 FSD 版本安全吗?”
  • main.py (指挥官): 启动 agent.py,把问题丢给它。
  • agent.py (大脑): 发现自己脑子里(Context)是空的,不知道答案。它向 llm_client 求助。
  • llm_client (智囊): 建议:“先用 search_tool 搜一下 FSD accident statistics。”
  • search_tool (侦察兵): 跑出去搜了一圈,带回来一堆链接。
  • 协作点: 此时,agent.py 并没有盲目回答,而是根据侦察兵的情报,发现了一个 PDF 报告的链接,它决定启动下一个工具。

场景二:精密手术——E2B 沙箱与数据的舞蹈

  • 任务: 接上文,需要分析那个 PDF 里的事故率数据。
  • agent.py (大脑): 指示:“tool_python,给我把这个 PDF 里的表格画成折线图。”
  • tool_python.py (机械手):
    1. 它不会在本地运行(怕中毒)。它通过 API 唤醒了远端(E2B)的一个 Docker 容器。
    2. 它在容器里安装 pandasmatplotlib
    3. 它执行代码,生成了 chart.png
  • 协作点: tool_python 把图片链接回传给 agent.py,但不回传几百行的原始数据(节省 Token)。它只说:“图画好了,数据趋势是下降的。” context.py 记录下这个结论,让大脑感到满意。

场景三:记忆清理——防止“老年痴呆”

  • 任务: 任务进行到了第 150 轮,已经查阅了 200 个网页。
  • 问题: 如果把这 200 个网页全文都塞进 Prompt,连 GPT-5 都会报错(Context Overflow)。
  • context.py (清洁工):
    • 每过一轮,它就会检查:“第 145 轮搜索的网页原文还有用吗?”
    • jina_summary (速记员): 配合清洁工,把第 145 轮那篇 1万字的新闻,改写成 100 字的:“该新闻提到 FSD 在雪地表现不佳。”
    • agent.py (大脑): 它只看到了这 100 字的摘要,依然能保持清醒的逻辑,继续做第 151 轮决策。
  • 协作点: 正是 context.pyjina_summary 的默契配合,才使得 MiroThinker 敢于宣称支持 无限长程推理

总结:文件角色比喻表

文件名 角色比喻 职责描述
conf/agent/*.yaml 基因/DNA 决定了 Agent 是个暴躁的黑客,还是严谨的会计。
main.py 脑干 维持生命体征,加载配置,唤醒意识。
agent.py 前额叶/意识 核心控制器。负责“想 -> 做 -> 看”的死循环。
search_tool.py 眼睛/望远镜 让 Agent 看到外面的世界(互联网)。
tool_python.py 手/左脑 负责逻辑运算、画图、操作文件。E2B 沙箱就是它的无菌手术室。
context.py 海马体/代谢系统 关键模块。负责遗忘不重要的信息,只把关键记忆交给大脑。
jina_scrape 阅读眼镜 把人类看的花哨网页,变成机器爱看的 Markdown 摘要。

三、MiroThinker 一个全球领先的开源搜索的创新点

以下是结合了认知增强理论 (Cognitive Augmentation)Agentic AI 系统设计 的深度剖析及树形逻辑图。

MiroThinker 并非仅仅是一个“带联网功能的 Chatbot”,它是一个具备自我反思与长程执行力的数字研究员 (Autonomous Digital Researcher)。其核心创新在于打破了“模型越大越聪明”的参数定律,转而通过增加推理深度 (Deep Reasoning)交互式信息采集 (Interactive Information Gathering) 来提升任务解决率。

创新点总览

创新点说明 优势 技术实现
交互式扩展 (Interactive Scaling) 小模型胜大模型:允许 30B 模型通过数百次“试错”达到 1T 模型的表现。 ReAct Loop + Max Turn 200+
动态上下文卫生 (Dynamic Context Hygiene) 无限长程推理:解决长任务中的 Context 溢出问题,始终保持注意力聚焦。 Keep-K Strategy + Summary Pruning
异构工具链 (Heterogeneous Toolchain) 全能型选手:左脑写代码 (E2B),右脑看世界 (Search),具备跨模态解决能力。 MCP Protocol + E2B + Serper + Jina
开源开放 (Fully Open Source) 可控与隐私:相比 DeepResearch 等闭源竞品,企业可完全私有化部署,数据不出域。 MIT License + Local Deploy
自我纠错机制 (Self-Correction) 高鲁棒性:代码报错不崩溃,而是将其作为 Feedback 进行自我修正。 Error Trace Feedback Loop

1. 架构创新:交互式扩展 (Interactive Scaling)

标签: [计算换智能 / 深度思考 / System 2 Thinking]

深度解析:

  • 参数定律的终结?: 传统观念认为 AI 越强参数越大。MiroThinker 证明了 Compute-time Compute (推理时计算) 的重要性。它类似于人类的“慢思考” (System 2),遇到难题时不急于回答,而是花更多时间(更多计算量)去查资料、验证、计算。
  • 勤能补拙: 一个 30B 的模型,如果允许它思考 100 步,查阅 50 个网页,写 20 次代码验证,其最终产出的报告质量,远高于一个 1T 模型仅思考 1 步给出的直觉性回答。
  • 非线性路径: 它的思考过程不是直线的,而是树状的。它会“走弯路”,发现路不通后“回溯”,重新尝试新路径。
[交互式扩展推演逻辑树形图]
[MiroThinker 思考深度模型:用时间换取质量]
│
├── 🔴 复杂输入: "预测 2026 年固态电池的市场渗透率"
│
▼
[1. 宏观规划层 (Macro-Planning)] <★ 战略制定>
│   ├── 思考: "不能直接回答。需拆解为:技术成熟度、产能规划、车企订单三个子维度。"
│   └── 决策: "先查技术成熟度,再查产能。"
│
▼
[2. 微观执行循环 (Micro-Execution Loop)] <★ 战术执行 - 可达 200+ 轮>
│   │
│   ├── [尝试 A: 搜索技术路线]
│   │   ├── Action: Search "Solid-state battery roadmap 2026"
│   │   ├── Result: 找到 10 篇软文,信息模糊。
│   │   └── Reflect: "信息源质量太差,不可信。需切换搜索策略,查阅学术论文或财报。"
│   │
│   ├── [尝试 B: 精准检索 (修正策略)]
│   │   ├── Action: Search "Toyota solid-state battery investor report pdf"
│   │   ├── Result: 找到丰田 2025 财报 PDF。
│   │   └── Insight: "发现关键数据:2027 年才量产,2026 年仅为试产。"
│   │
│   ├── [尝试 C: 数据交叉验证]
│   │   ├── Action: Search "CATL solid-state battery timeline"
│   │   ├── Result: 宁德时代宣布 2026 小批量装车。
│   │   └── Synthesis: "中日两大巨头进度不一致,需综合加权。"
│   │
│   └── [尝试 D: 编写代码建模]
│       ├── Action: Python (E2B) -> `scipy.optimize.curve_fit(...)`
│       ├── Result: 基于现有产能爬坡曲线,拟合出渗透率约为 0.5% - 1.2%。
│       └── Validation: "模型 R-squared 较高,结论可信。"
│
▼
[3. 结论坍缩层 (Conclusion Collapse)] <★ 最终产出>
│   ├── 现象: 综合 50 次搜索和 3 次代码计算。
│   └── 结论: "2026年并非爆发年,而是'前夜'。渗透率预计在 0.8% 左右,主要受限于硫化物电解质成本。"
│
▼
输出 (Output)
└── 包含置信度区间和完整证据链的深度研报

2. 记忆创新:动态上下文卫生 (Dynamic Context Hygiene)

标签: [信息熵减 / 记忆代谢 / 长程注意力]

深度解析:

  • 上下文的诅咒: 随着 Agent 查阅资料增多,Prompt 长度会迅速逼近 128k/200k 上限。不仅烧钱,更会导致 LLM 的“迷失中间” (Lost in the Middle) 现象,即忽略掉中间的关键信息。
  • Keep-K 策略: MiroThinker 引入了一种类似生物“短期记忆转长期记忆”的机制。它只保留最近 K 轮(例如 5 轮)的全量细节(如网页 HTML、报错堆栈)。对于更早的记忆,它会强制进行语义压缩,只保留“做过什么、得到什么结论”的摘要。
  • 高信噪比: 这种机制保证了无论任务运行多久,输入给 LLM 的 Prompt 始终保持高信噪比,使其能专注于当下的逻辑推理。
[记忆代谢处理逻辑树形图]
[MiroThinker 记忆流:如何保持清醒]
│
├── 场景输入: 第 50 轮思考,正在分析第 20 个网页。
│
▼
[1. 记忆缓存池 (Context Buffer)]
│   ├── T-0 (当前): 正在抓取的网页全文 (20k tokens)
│   ├── T-1: 上一步的 Python 绘图代码 (2k tokens)
│   ├── ...
│   └── T-5: 五步前的 Google 搜索结果列表 (5k tokens)
│
▼
[2. 卫生管理策略 (Hygiene Policy: Keep-5)] <★ 创新点>
│   ├── 触发: 准备进入 T+1 轮。
│   │
│   ├── <处理 T-5 数据>:
│   │   ├── 动作: 丢弃原始搜索列表。
│   │   ├── 转化: 调用 Summary LLM -> "第五步搜索了宁德时代产能,确认其2025年产能为 500GWh。"
│   │   └── 存储: 存入 `Historical_Summary` (20 tokens)。
│   │
│   └── <保留 T-0 数据>:
│       └── 动作: 保持原样,因为下一步分析可能需要回顾网页细节。
│
▼
[3. 提示词合成 (Prompt Synthesis)]
│   ├── System Prompt: "你是一个研究员..."
│   ├── Long-term Memory: 过去 45 轮的压缩摘要 (仅 1k tokens)
│   ├── Short-term Memory: 最近 5 轮的详细交互 (25k tokens)
│   └── Current Task: "基于上述信息,计算总产能。"
│
▼
最终效果
└── 尽管任务极其复杂,LLM 看到的 Prompt 依然清晰、精炼,未超窗口上限。

3. 工具创新:异构工具链与容错 (Heterogeneous Toolchain with Fault Tolerance)

标签: [跨模态执行 / 反脆弱性 / E2B沙箱]

深度解析:

  • 跨越文理分科: 大多数 Agent 要么擅长陪聊(文科),要么擅长写 SQL(理科)。MiroThinker 集成了 Serper (文科/搜索) 和 E2B Python (理科/计算)。它能自己上网找数据,然后自己写代码分析数据,实现了“文理兼修”。
  • 反脆弱 (Antifragile): 在代码执行出错时,普通 Agent 会停止或乱编。MiroThinker 会将 Traceback 报错信息看作是一种“有价值的反馈”。它会分析报错,修改代码,重新运行。这种在错误中学习的能力,使其鲁棒性极高。
[异构工具协同逻辑树形图]
[MiroThinker 工具协同:遇到报错怎么办?]
│
├── 任务: "绘制过去十年原油价格波动图"
│
▼
[1. 搜索阶段 (The Eyes)]
│   ├── Action: Google Search "Crude oil price history csv"
│   └── Result: 找到一个 CSV 下载链接。
│
▼
[2. 编码阶段 (The Hands - Attempt 1)]
│   ├── Action: Python (E2B)
│   │   ```python
│   │   import pandas as pd
│   │   df = pd.read_csv("url")
│   │   df.plot()  # <--- 潜在错误点
│   │   ```
│   └── Execution Result: ❌ Error: "No columns to plot" (读取格式错误)
│
▼
[3. 自我修复阶段 (Self-Correction)] <★ 创新点>
│   ├── 感知: 收到 Error Log。
│   ├── 思考: "啊,原来 CSV 分隔符不是逗号,是分号。或者文件有表头。"
│   │
│   └── [编码阶段 (The Hands - Attempt 2)]
│       ├── Action: Python (E2B)
│       │   ```python
│       │   # 修正:指定分隔符和跳过行
│       │   df = pd.read_csv("url", sep=';', skiprows=1)
│       │   print(df.head()) # 先看一眼数据
│       │   ```
│       └── Execution Result: ✅ Success! 打印出了正确的前5行。
│
▼
[4. 最终成图 (Finalization)]
│   ├── Action: 再次运行绘图代码。
│   └── Output: 生成 `oil_price.png`,嵌入报告。

总结:MiroThinker 的“护城河”

这三个创新点共同构建了 MiroThinker 的核心竞争力:

  1. 交互式扩展 赋予了它深度(Deep),让小模型也能处理大问题。
  2. 动态上下文卫生 赋予了它耐力(Endurance),让它能进行马拉松式的长程推理。
  3. 异构工具链与容错 赋予了它韧性(Resilience),让它在复杂多变的互联网环境中也能稳定运行。

对于企业和开发者而言,MiroThinker 是目前替代 OpenAI DeepResearch 的最佳开源方案,它不仅是工具,更是一个可以自我进化的数字员工框架

四、Agent 智能体如何调用与集成MiroThinker

这是将 MiroThinker 的深度思考能力赋能给你现有 AI 系统的“最后一公里”。将 MiroThinker 作为一个独立的**“深度思考单元 (Deep Thinking Unit)”**集成到你的 Master Agent(如企业助理、客服大脑)中,就像是给你的 AI 装上了一个 “System 2(慢思考)”外挂。当遇到简单问题时,Master Agent 快速回答;当遇到复杂研究课题时,它会调用 MiroThinker 去“闭关修炼”十分钟,再带着详尽的研报回来。

4.1 Agent 架构集成逻辑图 (The Integration Architecture)

在这个架构中,你的 Master Agent 是前台经理(负责分发),而 MiroThinker 是后台的研究团队(负责攻坚)。

[基于 MiroThinker 的深度研究型 Agent 集成架构]
│
├── 【1. 意图识别与任务路由 (Intent & Routing)】
│   ├── 用户指令: "分析一下 DeepSeek 和 OpenAI o1 的技术差异,并预测未来 6 个月的竞争格局。"
│   ├── Master Agent (决策主脑): 
│   │   ├── 识别: 这是一个需要深度调研和推演的问题 (Deep Research Task),而非简单的闲聊。
│   │   ├── 决策: 自身知识库可能过时,且问题过于复杂,需要调用 MiroThinker。
│   │   └── 动作: 将自然语言指令路由给 `DeepResearch_Tool`。
│
▼
├── 【2. 任务参数构造 (Task Configuration)<★ 关键转换>
│   ├── 动作: 将模糊指令转换为 MiroThinker 的标准输入 (Task Spec)。
│   ├── 参数设定: 
│   │   ├── task_prompt: "Compare DeepSeek-V3 vs OpenAI o1 technical architecture..."
│   │   ├── max_turns: 100 (给予充足的思考时间)
│   │   ├── output_format: "markdown_report_with_citations"
│   │   └── tools: ["search_tool", "browser", "tool_python"] (全量开启)
│   └── 调用: `MiroThinker_Client.run_task({ ...params... })`
│
▼
├── 【3. MiroThinker 深度闭环 (The Deep Loop Execution)】
│   ├── [MiroThinker Engine] 启动 ReAct 循环
│   │   │
│   │   ├── Phase 1 (广度搜索): 搜索两大模型的技术白皮书、Github Issue、Twitter 讨论。
│   │   ├── Phase 2 (深度阅读): 用 Jina Reader 抓取 20 篇长文,进行摘要提炼。
│   │   ├── Phase 3 (逻辑验证): 发现关于 "DeepSeek 显存占用" 的说法不一,写 Python 脚本计算参数量与显存关系。
│   │   └── Phase 4 (报告撰写): 综合所有证据,撰写 5000 字报告。
│   │
│   └── 结果回传: 返回 `final_report.md` (包含引用源) + `trace_log.json` (思考过程)。
│
▼
├── 【4. 结果整合与交付 (Synthesis & Delivery)】
│   ├── Master Agent 处理结果: 
│   │   ├── 摘要: "MiroThinker 已完成调研。核心差异在于 MoE 架构的稀疏度..."
│   │   ├── 附件: "完整报告已生成,点击下载 [Deep_Research_Report.md]"
│   │   └── 追问建议: "基于报告,你可能还想了解 DeepSeek 的本地部署成本吗?"
│   └── 最终回复: 以用户友好的方式呈现复杂的研究成果。

4.2 核心代码实现:将 MiroThinker 封装为 LangChain Tool

要让 Master Agent 调用 MiroThinker,我们需要将其封装为一个标准的 LangChain Tool。我们假设你已经通过 Docker 将 MiroThinker 部署为 API 服务。

第一步:确保 MiroThinker API 就绪 (Server Side)

假设你已经在 apps/miroflow-agent 下启动了一个 FastAPI 服务,暴露了 POST /v1/agent/run 接口。

第二步:编写 Client 集成代码

这里展示如何构建一个“具备深度研究能力的超级助理”。

import time
import requests
import json
from langchain_openai import ChatOpenAI
from langchain.agents import create_tool_calling_agent, AgentExecutor
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool

# --- 1. 定义 MiroThinker 客户端 ---
class MiroThinkerClient:
    def __init__(self, base_url="http://localhost:8000"):
        self.base_url = base_url

    def submit_task(self, query, depth="deep"):
        """提交深度研究任务"""
        # 根据深度选择不同的配置文件
        config_name = "mirothinker_v1.5_keep5_max200" if depth == "deep" else "mirothinker_v1.5_fast"
        
        payload = {
            "task": query,
            "agent_config": config_name,
            "return_trace": False  # Master Agent 不需要看详细日志,只要结果
        }
        try:
            res = requests.post(f"{self.base_url}/v1/agent/run", json=payload, timeout=600)
            return res.json()
        except Exception as e:
            return {"status": "error", "message": str(e)}

# 实例化客户端
miro_client = MiroThinkerClient()

# --- 2. 定义 Agent 的 "深度思考" 工具 (The Super Tool) ---
@tool
def deep_research_tool(research_topic: str, research_focus: str = "comprehensive"):
    """
    当用户的问题非常复杂、需要查阅大量资料、或者需要进行多步推理和验证时,必须使用此工具。
    不要用于简单的闲聊或常识性问题。
    此工具会调用 MiroThinker 智能体进行长达几分钟的深度研究。
    
    Args:
        research_topic: 研究的具体主题 (例如: "2026年固态电池技术成熟度分析")
        research_focus: 关注点 (例如: "technical_specs", "market_share", "financial_risk")
    """
    print(f"🧠 正在激活 MiroThinker 深度思考单元: {research_topic}...")
    
    # 构造更具体的 Prompt
    refined_query = f"Please conduct a deep research on: {research_topic}. Focus specifically on: {research_focus}. Produce a detailed markdown report."
    
    result = miro_client.submit_task(refined_query, depth="deep")
    
    if result.get("status") == "success":
        report = result.get("answer", "No answer generated.")
        return f"深度研究报告摘要:\n{report[:2000]}...\n(由于篇幅限制,仅展示前2000字符,请引导用户查看完整报告)"
    else:
        return f"研究失败: {result.get('message')}"

# --- 3. 构建 Master Agent ---
llm = ChatOpenAI(model="gpt-4o", temperature=0) # Master Agent 用聪明的大模型做分发
tools = [deep_research_tool]

prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个高级 AI 顾问。对于简单问题直接回答。对于复杂的研究课题,你必须调用 `deep_research_tool` 来获取准确信息,而不是依靠自己的幻觉。"),
    ("human", "{input}"),
    ("placeholder", "{agent_scratchpad}"),
])

agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

# --- 4. 运行演示 ---
# 场景 A:简单问题 (不调用工具)
# agent_executor.invoke({"input": "你好,你是谁?"}) 

# 场景 B:复杂问题 (触发 MiroThinker)
query = "帮我调研一下目前市面上开源的 Agent 框架(如 AutoGPT, BabyAGI, MiroThinker),对比它们的架构优缺点,并推荐一个适合金融分析的框架。"
agent_executor.invoke({"input": query})

4.3 Agent 内部的思考链 (Thought Process)

当上述代码运行时,你的 Master Agent 会经历以下决策过程:

[Master Agent 的内部独白]
│
├── 步骤 1: 任务定性 (Qualify)
│   ├── 用户输入: "对比开源 Agent 框架...推荐适合金融分析的..."
│   ├── 评估: 
│   │   1. 这是一个对比分析任务,涉及多个对象。
│   │   2. 涉及 "金融分析" 场景,需要高准确度。
│   │   3. 自身的训练数据可能截止于 2023 年,不知道最新的框架状态。
│   └── 结论: 必须使用工具。
│
├── 步骤 2: 工具调用 (Call)
│   ├── 决策: Call Tool 'deep_research_tool'
│   ├── 参数构造: 
│   │   ├── research_topic: "Comparison of open-source Agent frameworks (AutoGPT, BabyAGI, MiroThinker) for financial analysis"
│   │   └── research_focus: "architecture, pros/cons, financial use-case suitability"
│   └── 执行: 挂起当前会话,等待 MiroThinker 返回。
│
├── 步骤 3: 等待与接收 (Await) <★ 此时 MiroThinker 正在后台运行 100 轮思考>
│   ├── (MiroThinker): 搜索 Github Stars -> 阅读各框架文档 -> 搜索 "MiroThinker finance benchmark" -> 发现 MiroThinker 在 BrowseComp 上表现优异。
│   └── 工具返回: "深度研究报告摘要: ...经过对比,MiroThinker 因支持 E2B 沙箱和长程推理,最适合金融场景..."
│
├── 步骤 4: 交付 (Deliver)
│   └── 最终回复: "根据深度调研,我为您生成了一份对比报告。对于金融分析场景,我强烈推荐使用 **MiroThinker**,原因如下..."

4.4 MiroThinker 适合接入的功能模块与作用

如果你将 MiroThinker 集成到你的 AI 产品中,它可以充当以下核心角色:

功能模块 角色定位 接入价值 使用场景
Deep Research (深度研报) 首席研究员 将 AI 的能力从“问答”提升到“产出”。它能生成包含数据图表、引用来源的专业报告。 投资尽调、竞品分析、学术文献综述。
Fact Checking (事实核查) 审计员 作为一个独立的验证层。主模型生成的文案,交给 MiroThinker 去网上逐句核实,消除幻觉。 新闻稿发布前审核、医疗/法律建议审核。
Code Execution (复杂计算) 数据科学家 利用其 E2B 集成能力,处理 Excel/CSV 文件,进行清洗、回归分析和可视化。 用户上传 Excel 要求分析销售趋势、财务报表自动审计。
Long-horizon Plan (长程规划) 项目经理 利用其 200+ 轮的规划能力,为用户生成极其详细的执行计划(如旅行攻略、学习计划)。 “帮我制定一个从零开始学习量子计算的 3 个月详细计划,包含每周资源链接”。

总结

MiroThinker 不应被视为一个简单的 Chatbot,而应被视为一个异步的、高算力的后端推理服务。通过 API 集成,它能让你的轻量级前端 Agent 瞬间拥有顶级的深度思考能力。

五、MiroThinker 智能体助手搭建实战

本实战将基于 MiroThinker 开源架构,搭建一个名为 “DeepResearcher-Pro” 的本地智能体。它将是一个**“全能研究员”**,具备:1. 深度联网搜索(Web Deep Research);2. E2B 安全沙箱计算(Secure Code Execution);3. 长程自我反思(Long-horizon Self-reflection)。


5.1 核心组件设计

组件选型 作用与配置
LLM (Brain) Qwen2.5-32B-Instruct (vLLM 量化部署)。 理由: 32B 是性价比之选,足够聪明来理解复杂的搜索结果,又能在一张 24G 显卡(如 RTX 3090/4090)上流畅运行。MiroThinker 的 Interactive Scaling 策略允许用更多时间弥补参数劣势。
Agent Core MiroThinker-Agent (Python + Hydra)。 理由: 使用官方框架,支持 Keep-K 上下文管理和 ReAct 循环。
Sandbox E2B (SaaS)Docker (Local)理由: 为了安全,我们将 Agent 的代码执行环境与主机物理隔离。如果是企业内网,可部署本地 Docker 容器作为沙箱。
Search Engine Serper (Google API)理由: 搜索质量最高的商业 API,也支持 Google Scholar。
Web Reader Jina Reader理由: 将杂乱的 HTML 网页转为干净的 Markdown,并自带摘要功能,大幅节省 Token。

5.2 代码实现步骤

5.2.1 项目文件树形结构

deep-researcher-pro/       # 项目根目录
│
├── .env                   # [密钥库] OPENAI_API_KEY, SERPER_API_KEY, E2B_API_KEY
├── docker-compose.yml     # [容器编排] 启动 Redis (消息队列) 和 Agent 服务
├── pyproject.toml         # [依赖管理] 使用 uv 管理依赖
│
├── app/                   # [应用代码]
│   ├── main.py            # [启动入口] FastAPI 服务
│   ├── config.py          # [配置加载] 读取 .env 和 yaml
│   │
│   ├── agent/             # [MiroThinker 核心复用]
│   │   ├── core.py        # [ReAct循环] 实现 Think-Act-Observe
│   │   ├── memory.py      # [记忆管理] Keep-K 策略实现
│   │   └── prompts.py     # [提示词] 包含深度研究的 System Prompt
│   │
│   ├── tools/             # [工具集]
│   │   ├── search.py      # [搜索] 封装 Serper
│   │   ├── browser.py     # [阅读] 封装 Jina
│   │   └── sandbox.py     # [代码] 封装 E2B
│   │
│   └── api/               # [接口层]
│       └── routes.py      # 定义 POST /research 接口
│
└── data/                  # [持久化]
    └── logs/              # 存放 Agent 的思考轨迹日志 (Trace)
5.2.1.1 核心文件深度剖析 (Deep Dive)

A. 基础设施 (Infrastructure)

  1. docker-compose.yml
    • 标签: [生命维持系统]
    • 深度解析: 如果你在本地没有显卡,这里可以配置接入 OpenAI 或 DeepSeek 的 API。如果你有显卡,可以在这里添加一个 vllm-service 容器,把 Qwen2.5-32B 模型加载起来,作为 Agent 的大脑。
    • 协作: 它确保 Agent 启动时,大脑(LLM)、记忆缓存(Redis)都已经就位。

B. 思维核心 (The Brain Core)

  1. app/agent/core.py
    • 标签: [前额叶 / 决策机]
    • 深度解析:
      • Infinite Loop: 实现了一个 while turn < max_turns: 循环。
      • Error Tolerance: 当工具执行报错(如 Python 语法错误、网页 404)时,它不会抛出异常终止程序,而是把错误信息作为 Observation 喂回给 LLM,让 LLM 尝试修复。
      • Reasoning Trace: 它会记录每一步的 Thought (思考) 和 Action (行动),这对事后复盘非常重要。
  2. app/agent/memory.py
    • 标签: [记忆代谢系统]
    • 深度解析:
      • 实现了 Keep-K Strategy。如果不加限制,Deep Research 跑 100 轮后 Token 会破 200k,不仅烧钱而且慢。这个文件负责在第 N 轮时,把第 N-5 轮的详细 HTML 内容替换为一句话摘要:“查阅了网页 A,未发现有效信息”。

C. 感知与手脚 (Senses & Limbs)

  1. app/tools/sandbox.py
    • 标签: [隔离手术室]
    • 深度解析:
      • 这是 MiroThinker 区别于普通 RAG 的关键。它调用 E2B API 创建一个临时的云端 Linux 环境。
      • Stateful: 支持有状态的会话。你在第一步定义的 df = pd.read_csv(...),在第十步依然可以调用 df.plot()
      • File I/O: 支持上传文件进去处理,处理完把生成的图表下载回来。

5.2.2 核心模块实现

(1) app/agent/core.py (ReAct 循环引擎)

import json
from openai import OpenAI
from app.agent.memory import MemoryManager
from app.tools.registry import ToolRegistry

class DeepResearchAgent:
    def __init__(self, model="qwen2.5-32b", max_turns=50):
        self.client = OpenAI(base_url="http://localhost:8000/v1", api_key="EMPTY") # 指向 vLLM
        self.memory = MemoryManager(keep_k=5)
        self.tools = ToolRegistry()
        self.max_turns = max_turns

    def run(self, user_goal):
        """执行深度研究任务"""
        print(f"🚀 开始研究: {user_goal}")
        
        # 1. 初始化系统提示词
        self.memory.add_message("system", "你是一个不知疲倦的研究员。遇到困难时,尝试换个搜索词或换个方法,不要轻易放弃。")
        self.memory.add_message("user", user_goal)

        turn = 0
        while turn < self.max_turns:
            turn += 1
            print(f"--- Turn {turn} ---")

            # 2. 记忆修剪 (Context Hygiene)
            context = self.memory.get_pruned_context()

            # 3. 思考 (Think)
            response = self.client.chat.completions.create(
                model="qwen2.5-32b",
                messages=context,
                temperature=0.7 # 稍微有点创造力,方便发散思维
            )
            thought = response.choices[0].message.content
            print(f"🧠 思考: {thought[:100]}...") # 打印部分思考

            # 4. 决策与行动 (Act)
            if "<tool_code>" in thought:
                tool_name, args = self._parse_tool(thought)
                print(f"🛠️ 调用工具: {tool_name}")
                
                try:
                    # 执行工具 (Serper / E2B / Jina)
                    observation = self.tools.execute(tool_name, args)
                except Exception as e:
                    observation = f"Error: {str(e)}" # 容错机制
                
                # 5. 观察写入记忆 (Observe)
                self.memory.add_message("assistant", thought)
                self.memory.add_message("tool", observation) # 作为工具输出
            
            elif "FINAL ANSWER" in thought:
                print("✅ 研究完成")
                return thought
            
        return "❌ 达到最大思考轮数,未能完成任务。"

    def _parse_tool(self, text):
        # 简单的解析逻辑,MiroThinker 原版使用更复杂的正则
        # 假设格式: <tool_code>search(query="xxx")</tool_code>
        # ...解析代码...
        return "search", {"query": "test"}

(2) app/tools/sandbox.py (E2B 沙箱封装)

from e2b_code_interpreter import Sandbox

class CodeSandbox:
    def __init__(self, api_key):
        self.api_key = api_key

    def run_python(self, code):
        """在云端沙箱运行 Python 代码"""
        print("💻 正在沙箱中执行代码...")
        
        # 创建沙箱实例 (这是一个远程 Docker 容器)
        with Sandbox(api_key=self.api_key) as sandbox:
            execution = sandbox.run_code(code)
            
            # 处理输出
            logs = execution.logs.stdout
            errors = execution.logs.stderr
            
            # 处理生成的图表 (如果有)
            images = []
            for result in execution.results:
                if result.png:
                    images.append(result.png) # 返回 Base64 图片
            
            if errors:
                return f"Execution Failed:\n{errors}"
            return f"Execution Success:\n{logs}\nGenerated {len(images)} images."

5.2.3 启动入口 (app/main.py)

from fastapi import FastAPI, BackgroundTasks
from app.agent.core import DeepResearchAgent

app = FastAPI()

@app.post("/research")
async def start_research(task: str, background_tasks: BackgroundTasks):
    """
    异步启动一个深度研究任务。
    因为研究可能持续 5-10 分钟,所以使用后台任务。
    """
    agent = DeepResearchAgent(max_turns=100)
    
    # 将任务放入后台运行,避免阻塞 HTTP 请求
    background_tasks.add_task(agent.run, task)
    
    return {"status": "started", "message": "Research agent is running in background. Check logs for progress."}

5.3 运行与调试指南

1. 环境准备 (Docker & Keys)

你需要以下基础设施:

  • vLLM 服务: 如果你有 24G+ 显存,推荐部署 Qwen2.5-32B-Instruct-AWQ。如果没有,可以修改代码指向 DeepSeek API。
  • API Keys:
    • E2B_API_KEY: 注册 E2B 获取(有免费额度)。
    • SERPER_API_KEY: 注册 Serper.dev 获取。
    • JINA_API_KEY: 注册 Jina.ai 获取。

2. 启动服务

# 1. 启动 vLLM (如果有本地显卡)
docker run --gpus all -v ~/.cache/huggingface:/root/.cache/huggingface \
    -p 8000:8000 \
    --ipc=host \
    vllm/vllm-openai:latest \
    --model Qwen/Qwen2.5-32B-Instruct-AWQ --quantization awq

# 2. 启动 Agent 服务
uv run fastapi dev app/main.py

3. 发送任务与观察

使用 curl 发送一个硬核任务:

curl -X POST "http://localhost:8000/research?task=调查OpenAI的o1模型和DeepSeek-V3在代码生成任务上的基准测试分数对比,并绘制柱状图"

观察 Logs (涌现现象):

你应该能在终端看到如下精彩的思考链:

  1. Turn 1: “我需要先找 o1 的分数。调用 search('OpenAI o1 coding benchmark')
  2. Turn 2: “搜索结果只有新闻。我需要找技术报告。调用 search('OpenAI o1 technical report pdf')
  3. Turn 5: “找到了 DeepSeek 的分数。现在数据齐了。我要写代码画图。调用 run_python(...)
  4. Turn 6: “代码报错 ModuleNotFoundError: matplotlib。哎呀,忘记安装库了。修正代码 pip install matplotlib…”
  5. Turn 7: “图画好了。生成最终回复。”

这就是 MiroThinker 的魅力——它像一个真实的人类实习生一样,会犯错、会纠正、会坚持,直到把任务搞定。

六、利用此开源项目可实现的 AI 应用

基于 MiroThinker 的核心架构特性(交互式扩展、长程推理、异构工具链),我们可以构建一系列区别于传统 RAG(检索增强生成)的高价值应用。传统 RAG 只能做“搬运工”(把搜到的东西总结一下),而 MiroThinker 能做“思考者”(去验证、去计算、去推演)。

以下是三个最具落地价值的 AI 应用场景深度解析、逻辑树形图及实现代码。


1. 自动化金融尽调分析师 (Automated Financial Due Diligence Agent)

深度解析

金融分析师每天花费数小时在 SEC 官网查阅财报、在 Google 搜寻新闻、在 Excel 里拉数据。

  • 传统 RAG 痛点:只能搜到新闻,无法读取 PDF 中的表格,更无法计算“同比增长率”。
  • MiroThinker 优势
    • 深度阅读:利用 browser.py + jina_summary,能读懂长达 100 页的 10-K 财报。
    • 沙箱计算:利用 tool_python,能提取表格数据,用 Pandas 计算 P/E Ratio、毛利率等指标,甚至绘制 K 线图。
    • 自我核查:如果搜到的数据不一致(如新闻说涨了,财报说跌了),它会触发“自我反思”,去寻找第三方数据源(如 Bloomberg 截图或交易所公告)进行仲裁。

应用逻辑树形图

[应用一:自动化金融尽调]
│
├── 【输入层 (Input)】
│   ├── 标的公司: "分析 Tesla (TSLA) 2025年 Q4 财报"
│   └── 关注指标: "毛利率, FSD 收入占比, 交付量趋势"
│
▼
├── 【MiroThinker 深度推演 (Deep Research)】
│   │
│   ├── 1. 信息搜集 (Data Harvesting)
│   │   ├── 动作: Search "Tesla Q4 2025 investor deck pdf"
│   │   └── 动作: Search "Tesla 2025 Q4 earnings call transcript"
│   │
│   ├── 2. 数据清洗与计算 (Data Processing - Sandbox)
│   │   ├── 动作: 下载 PDF -> 提取 "Financial Summary" 表格。
│   │   ├── 思考: "需要计算 Auto Gross Margin (ex-credits)"
│   │   └── 代码: `df['margin'] = (df['rev'] - df['cost']) / df['rev']`
│   │
│   └── 3. 交叉验证 (Cross-Validation)
│       ├── 现象: 财报显示利润下滑,但股价盘后大涨。
│       ├── 追问: "Why TSLA stock up after missing earnings?"
│       └── 发现: "马斯克在电话会承诺 2026 推出 Model 2。"
│
▼
├── 【决策输出 (Report Generation)】
│   └── 产出: 一份包含 Matplotlib 趋势图、关键风险提示、电话会摘要的 10 页 PDF 报告。
│
▼
[商业价值]
└── 将分析师从“找数据”的苦力活中解放出来,专注于“做判断”。效率提升 10 倍。

实战代码片段

from app.agent.core import DeepResearchAgent

class FinancialAnalyst:
    def __init__(self):
        self.agent = DeepResearchAgent(max_turns=100) # 金融分析需要长思考

    def analyze_stock(self, ticker):
        prompt = f"""
        你是一名华尔街高级分析师。请对 {ticker} 进行深度研报。
        
        要求:
        1. 必须使用 Python 工具绘制过去 3 年的 Revenue 和 Net Income 趋势图。
        2. 必须查阅最近一次 Earnings Call Transcript,总结管理层对未来的指引。
        3. 搜索竞争对手(如 BYD)的同期数据进行对比。
        4. 最终报告必须包含数据来源链接。
        """
        report = self.agent.run(prompt)
        return report

# 使用
analyst = FinancialAnalyst()
print(analyst.analyze_stock("TSLA"))

2. 复杂代码库维护与迁移助手 (Legacy Code Migration Specialist)

深度解析

很多公司维护着十年前的“屎山代码”(如 Python 2.7, Java 8),没人敢动,也没人懂。

  • MiroThinker 优势
    • 全库认知:它不只是看一个文件,而是通过 ls -R, grep, cat 等命令在沙箱中遍历整个项目结构。
    • 试错迁移:它可以在 E2B 沙箱中尝试升级依赖(如 pip install --upgrade),如果报错,它会分析报错日志,修改代码,再试一次。这种“改代码 -> 跑测试 -> 修正”的循环,正是人类程序员的工作方式。

应用逻辑树形图

[应用二:代码迁移助手]
│
├── 【输入层 (Input)】
│   ├── 任务: "将这个 Python 2.7 的 Flask 项目迁移到 Python 3.10"
│   └── 资源: 项目 Zip 包 (上传至沙箱)
│
▼
├── 【MiroThinker 工程化执行 (Engineering Execution)】
│   │
│   ├── 1. 环境探索 (Exploration)
│   │   ├── 动作: `find . -name "*.py"` -> 建立文件树。
│   │   └── 动作: `cat requirements.txt` -> 分析过时依赖。
│   │
│   ├── 2. 迭代修复 (Iterative Refactoring)
│   │   ├── 动作: 尝试运行 `python3 app.py`。
│   │   ├── 报错: "SyntaxError: print 'hello' is missing parentheses"
│   │   ├── 修复: 调用 `sed` 或重写文件,将 `print` 改为函数调用。
│   │   └── 循环: 再次运行 -> 报新错 (ImportError) -> 再修复。
│   │
│   └── 3. 单元测试 (Verification)
│       ├── 动作: 编写一个新的 `test_basic.py`。
│       └── 验证: 确保 API 接口返回 200 OK。
│
▼
├── 【交付 (Delivery)】
│   └── 产出: 迁移后的代码包 + 迁移日志 (Migration Log)。
│
▼
[商业价值]
└── 自动化解决技术债务。对于外包公司或维护老旧系统的银行/电信企业价值巨大。

3. 学术综述与论文生成器 (Academic Reviewer & Writer)

深度解析

写论文最痛苦的是做 Literature Review(文献综述):需要找几十篇论文,读完,归纳,然后引用。

  • MiroThinker 优势
    • 学术搜索:通过 Google Scholar (Serper) 搜索权威文献。
    • 引用管理:它能记住每条信息的来源(Keep-K 策略保留了源链接),生成报告时自动标注 [1], [2]
    • 去伪存真:它会交叉验证。如果论文 A 说这个算法好,论文 B 说不好,MiroThinker 会在报告中写出“存在争议”,而不是片面采信。

应用逻辑树形图

[应用三:学术综述生成器]
│
├── 【输入层 (Input)】
│   ├── 课题: "大语言模型在医疗诊断中的幻觉问题综述"
│   └── 要求: "引用至少 20 篇 2024 年后的顶会论文 (NeurIPS, ICLR)"
│
▼
├── 【MiroThinker 学术研究 (Academic Research)】
│   │
│   ├── 1. 广度搜索 (Broad Search)
│   │   ├── 动作: Search "LLM hallucination medical diagnosis survey 2024"
│   │   └── 筛选: 过滤掉 CSDN/Medium,只保留 Arxiv/PubMed 链接。
│   │
│   ├── 2. 深度阅读 (Deep Reading)
│   │   ├── 动作: Jina Reader 抓取论文 PDF 内容。
│   │   ├── 提炼: 提取每篇论文的 "Methodology""Results"。
│   │
│   └── 3. 结构化写作 (Structured Writing)
│       ├── 规划: 拟定大纲 (Introduction -> Methods -> Challenges -> Future)。
│       └── 填充: 将提取的观点填入对应章节,并自动生成 BibTeX 引用。
│
▼
├── 【交付 (Delivery)】
│   └── 产出: 一篇 LaTeX 格式的文献综述草稿。
│
▼
[商业价值]
└── 辅助科研人员、博士生快速掌握领域前沿,将数周的文献阅读时间压缩到几小时。

总结与建议

  • 企业用户(金融/咨询):首选 应用一(金融尽调)。这是最能直接通过“节省人力”来计算 ROI 的场景。可以结合私有化部署的 MiroThinker,确保财报数据不出内网。
  • 技术团队(运维/DevOps):尝试 应用二(代码迁移)。将其集成到 CI/CD 流水线中,作为自动化的 Code Reviewer 或 Refactor 工具。
  • 教育/科研机构:使用 应用三(学术综述)。可以搭建一个校内服务,帮助学生进行开题报告的预研。

MiroThinker 的核心不在于“聊”,而在于**“干”**。它是一个能干脏活累活的数字劳动力。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐