DeerFlow - 完整学习教程

DeerFlow - 完整学习教程

教程级别: 从零到一 预计学习时间: 4-6 小时 前置知识: Python 基础(理解虚拟环境、pip 安装)、Docker 基础(拉取镜像、运行容器)、命令行基本操作、了解 LLM API 的基本概念(API Key、模型选择)

环境搭建指南

系统要求

  • 操作系统:Linux(推荐 Ubuntu 22.04+)/ macOS / Windows(WSL2 推荐)
  • Python:3.12 及以上
  • Node.js:22 及以上
  • Docker:24.0 及以上(用于沙盒隔离模式)
  • Git:2.30 及以上
  • LLM API Key:至少一个 LLM 提供商的 API Key(推荐 DeepSeek 或 OpenAI)

安装步骤

第一步:安装前置依赖

# 检查 Python 版本(需要 3.12+)
python3 --version

# 如果未安装或版本过低
# macOS:
brew install python@3.12
# Ubuntu/Debian:
# sudo apt update && sudo apt install python3.12 python3.12-venv python3-pip

# 检查 Node.js 版本(需要 22+)
node --version

# 如果未安装或版本过低
# macOS:
brew install node@22
# Ubuntu/Debian:
# curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
# sudo apt install nodejs

# 检查 Docker 版本
docker --version

第二步:克隆并安装 DeerFlow

# 基于 DeerFlow 2.0 官方 README(GitHub 仓库 bytedance/deer-flow)

# 克隆仓库
git clone https://github.com/bytedance/deer-flow.git
cd deer-flow

# 方式一:Docker 一键部署(推荐生产环境)
# 复制环境配置文件
cp .env.example .env

# 编辑 .env 文件,填入 API Key
# 必填项:
# LLM_API_KEY=your-api-key-here
# LLM_MODEL=deepseek/deepseek-v3.2
# LLM_BASE_URL=https://api.deepseek.com/v1
# 可选:
# SANDBOX_PROVIDER=aio  # 使用 Docker 沙盒

# 使用 Docker Compose 启动
docker compose up -d

# 方式二:本地开发模式
# 后端
cd backend
python3 -m venv venv
source venv/bin/activate  # Linux/macOS
# venv\Scripts\activate   # Windows
pip install -r requirements.txt

# 前端
cd ../frontend
npm install

# 启动后端(在 backend/ 目录)
python -m deerflow.server

# 启动前端(在 frontend/ 目录,新终端)
npm run dev

第三步:配置 LLM API

# 编辑 .env 文件或 backend/config.yaml
# 基于 DeerFlow 2.0 官方 README

# 方式一:使用 DeepSeek(推荐,性价比高)
LLM_API_KEY=sk-your-deepseek-key
LLM_MODEL=deepseek/deepseek-v3.2
LLM_BASE_URL=https://api.deepseek.com/v1

# 方式二:使用 OpenAI
LLM_API_KEY=sk-your-openai-key
LLM_MODEL=gpt-4o
LLM_BASE_URL=https://api.openai.com/v1

# 方式三:使用 OpenRouter(接入多种模型)
LLM_API_KEY=sk-or-your-openrouter-key
LLM_MODEL=anthropic/claude-sonnet-4-6
LLM_BASE_URL=https://openrouter.ai/api/v1

验证安装

# 检查 Docker 容器是否运行(Docker 部署方式)
docker compose ps
# 预期输出:
# NAME                STATUS          PORTS
# deerflow-backend    Up 30 seconds   0.0.0.0:2024->2024/tcp
# deerflow-gateway    Up 30 seconds   0.0.0.0:8001->8001/tcp
# deerflow-frontend   Up 30 seconds   0.0.0.0:3000->3000/tcp
# deerflow-nginx      Up 30 seconds   0.0.0.0:2026->2026/tcp

# 检查后端 API 是否可用
curl http://localhost:8001/health
# 预期输出: {"status": "ok"}

# 打开 Web 前端
# 浏览器访问 http://localhost:3000
# 典型验证输出

$ docker compose ps
NAME                IMAGE                  COMMAND                  SERVICE   STATUS          PORTS
deerflow-backend    deerflow-backend       "python -m deerflow.…"   backend   Up 30 seconds   0.0.0.0:2024->2024/tcp
deerflow-gateway    deerflow-gateway       "python -m gateway.s…"   gateway   Up 30 seconds   0.0.0.0:8001->8001/tcp
deerflow-frontend   deerflow-frontend      "npm run dev"            frontend  Up 30 seconds   0.0.0.0:3000->3000/tcp
deerflow-nginx      deerflow-nginx         "nginx -g 'daemon of…"   nginx     Up 30 seconds   0.0.0.0:2026->2026/tcp

$ curl http://localhost:8001/health
{"status": "ok", "version": "2.0.0"}

基于 DeerFlow 2.0 官方 README 和 Docker Compose 配置(docker-compose.yml)


第一部分:入门篇

1.1 第一个任务:通过 Web 前端提交研究任务

概念讲解:

DeerFlow 的最基本使用方式是通过 Web 前端提交任务。DeerFlow 的 Web 前端基于 Next.js 构建,提供了直观的对话界面,类似于 ChatGPT,但功能远超普通对话——DeerFlow 会自动将复杂任务分解为子任务、派生子智能体并行执行、在沙盒环境中运行代码。

理解"任务提交 → 子智能体编排 → 结果聚合"的基本流程是使用 DeerFlow 的基础。DeerFlow 内置了"深度研究"技能(Skills),当你提交一个研究类问题时,它会自动加载该技能并按照结构化工作流执行。

操作步骤:

# 基于 DeerFlow 2.0 官方 README

# 1. 确保 DeerFlow 正在运行
docker compose ps

# 2. 打开浏览器访问 http://localhost:3000

# 3. 在对话框中输入研究任务,例如:
#    "研究 2026 年最流行的 Python Web 框架,对比它们的性能、生态和学习曲线"

# 4. 观察 DeerFlow 的工作过程:
# - Lead Agent 分析任务
# - 自动加载"深度研究"技能
# - 派生子智能体并行研究不同方面
# - 实时显示每个子智能体的进度
# - 综合所有结果生成最终报告

执行结果:

# DeerFlow Web 前端的典型任务执行过程(模拟)

[Lead Agent] 正在分析任务: "研究 2026 年最流行的 Python Web 框架..."
[Lead Agent] 加载技能: 深度研究 (research)
[Lead Agent] 任务分解为 3 个子任务:
  1. 研究 FastAPI 的架构、性能和生态
  2. 研究 Django 5.x 的新特性和性能
  3. 研究 其他新兴框架(Litestar, Starlette 等)

[Sub-Agent 1] 正在搜索 FastAPI 相关资料...
[Sub-Agent 2] 正在搜索 Django 5.x 相关资料...
[Sub-Agent 3] 正在搜索 Litestar, Starlette 等框架...

[Sub-Agent 1] 完成: 收集了 12 篇技术文章和 3 个基准测试
[Sub-Agent 2] 完成: 收集了 8 篇技术文章和 Django 官方文档
[Sub-Agent 3] 完成: 收集了 6 篇技术文章和社区讨论

[Lead Agent] 正在综合研究结果...

=== 最终报告 ===
# 2026 年 Python Web 框架对比

## 1. FastAPI
- 性能: 基准测试显示 FastAPI 在异步场景下性能最优
- 生态: 丰富的中间件和插件生态
...

## 2. Django 5.x
- 性能: 同步场景下的全栈框架首选
- 生态: 最成熟的 Python Web 生态
...

## 3. 新兴框架
- Litestar: 渐进式增长的现代框架
...

以上输出为基于 DeerFlow 深度研究技能的预期执行过程。实际输出取决于 LLM 模型和搜索结果。

练习题: 1. 提交一个你感兴趣的研究任务(如"对比 Docker 和 Kubernetes 的适用场景"),观察 DeerFlow 的任务分解和子智能体编排过程。 2. 尝试在任务执行过程中查看子智能体的实时状态,理解并行执行的概念。


1.2 理解 Lead Agent 和子智能体:任务编排机制

概念讲解:

DeerFlow 的核心是 Lead Agent 和子智能体(Sub-Agent)的协作模式。理解这个模式对于有效使用 DeerFlow 至关重要。

Lead Agent 是任务的主控者,负责: - 分析用户请求,决定是否需要派生子智能体 - 加载所需的技能(Skills)到上下文 - 协调子智能体的并行执行 - 综合所有子智能体的结果生成最终输出

子智能体(Sub-Agent) 是任务的执行者,每个子智能体: - 拥有独立的上下文(Context Isolation),不会看到其他子智能体的中间结果 - 拥有独立的工具集和终止条件 - 完成后向 Lead Agent 汇报结构化结果

这种设计的核心优势是:子智能体的上下文隔离确保了信息不会混淆,并行执行提高了效率,结构化汇报使 Lead Agent 能够有效综合结果。

代码示例:

# 基于 DeerFlow 2.0 架构(backend/docs/ARCHITECTURE.md)
# config.yaml 中的 Agent 配置示例

agent:
  # Lead Agent 配置
  lead:
    model: "deepseek/deepseek-v3.2"
    temperature: 0.3
    max_sub_agents: 5        # 最大并行子智能体数
    max_iterations: 20       # 最大迭代次数
    timeout: 3600            # 任务超时(秒),1 小时

  # 子智能体配置
  sub_agent:
    model: "deepseek/deepseek-v3.2"
    temperature: 0.1         # 更低的温度,更精确的执行
    max_iterations: 10       # 单个子智能体最大迭代次数
    timeout: 600             # 子智能体超时(秒),10 分钟

  # 上下文管理
  context:
    summarization: true      # 启用自动摘要
    max_context_tokens: 8000 # 最大上下文 token 数

执行结果:

# DeerFlow 日志中观察子智能体编排的典型输出

2026-04-13 10:00:01 [Lead Agent] Task received: "研究 AI Agent 框架对比"
2026-04-13 10:00:03 [Lead Agent] Loading skill: research
2026-04-13 10:00:05 [Lead Agent] Spawning Sub-Agent 1: "研究 LangGraph"
2026-04-13 10:00:05 [Lead Agent] Spawning Sub-Agent 2: "研究 CrewAI"
2026-04-13 10:00:05 [Lead Agent] Spawning Sub-Agent 3: "研究 AutoGen"
2026-04-13 10:00:05 [Lead Agent] 3 Sub-Agents running in parallel

2026-04-13 10:03:12 [Sub-Agent 2] Completed: CrewAI research done
2026-04-13 10:03:45 [Sub-Agent 1] Completed: LangGraph research done
2026-04-13 10:04:01 [Sub-Agent 3] Completed: AutoGen research done

2026-04-13 10:04:02 [Lead Agent] All Sub-Agents completed
2026-04-13 10:04:15 [Lead Agent] Final report generated (2,450 words)

练习题: 1. 提交一个需要多个子智能体协作的任务,观察日志中的子智能体创建和完成时间,分析并行执行的效果。 2. 尝试提交一个不需要子智能体的简单任务(如"解释什么是 REST API"),对比 DeerFlow 的处理方式有何不同。


1.3 技能系统初探:理解渐进式加载

概念讲解:

DeerFlow 的技能(Skills)是其能力扩展的核心机制。每个技能是一个 SKILL.md 文件,包含工作流、最佳实践和参考资源。关键特点是渐进式加载——技能仅在任务需要时才加载到上下文中。

这意味着 DeerFlow 可能拥有 20 个技能,但在处理一个"深度研究"任务时,只会加载"研究"相关的技能,保持上下文窗口精简。当你需要生成幻灯片时,才会加载"幻灯片创建"技能。

代码示例:

# 基于 DeerFlow 2.0 官方 README

# 1. 查看内置技能列表
ls skills/public/

# 2. 查看某个技能的内容
# 深度研究技能示例
cat skills/public/research/SKILL.md
<!-- skills/public/research/SKILL.md 内容示例 -->
---
name: "深度研究"
description: "对给定主题进行多轮深度研究,生成结构化报告"
license: "MIT"
allowed-tools: ["web_search", "web_fetch", "read_file", "write_file"]
---

## 工作流

1. **需求分析**: 理解研究目标,分解为可执行的子任务
2. **信息收集**: 对每个子任务进行多源搜索和资料收集
3. **交叉验证**: 使用至少 2 个独立来源验证关键信息
4. **结构化输出**: 按照标准模板生成研究报告

## 最佳实践

- 优先搜索学术来源和官方文档
- 记录每条信息的来源 URL
- 使用多源交叉验证确保准确性

## 参考资源

- 学术搜索策略文档
- 可靠信息源评级标准
# 3. 创建自定义技能(简单示例)
mkdir -p skills/custom/summarizer
<!-- skills/custom/summarizer/SKILL.md -->
---
name: "文章摘要"
description: "对给定文章或文档生成简洁的中文摘要"
license: "MIT"
allowed-tools: ["read_file", "write_file"]
---

## 工作流

1. 使用 read_file 读取目标文档
2. 识别文档的核心论点和关键数据
3. 生成 300 字以内的中文摘要
4. 保存摘要到 /mnt/user-data/outputs/ 目录

## 最佳实践

- 摘要应保留原文的关键数据和结论
- 使用客观描述,避免主观评价
- 标注原文来源和摘要生成时间

执行结果:

# 查看内置技能的典型输出

$ ls skills/public/
claude-to-deerflow  report  research  slides  video  web

# 每个目录包含一个 SKILL.md 文件
$ ls skills/public/research/
SKILL.md  resources/

# 创建自定义技能后
$ ls skills/custom/
summarizer/

基于 DeerFlow 2.0 技能系统架构。实际技能目录结构以官方仓库为准。

练习题: 1. 查看内置的 reportslides 技能的 SKILL.md 内容,比较它们的工作流和 allowed-tools 有何不同。 2. 创建一个简单的自定义技能(如"翻译"或"代码审查"),测试它是否被正确加载。


第二部分:进阶篇

2.1 配置模型和多模型策略

概念讲解:

DeerFlow 的模型工厂(Model Factory)通过反射机制从 config.yaml 中解析模型配置。你可以为 Lead Agent 和子智能体配置不同的模型,根据任务特点平衡成本和质量。

例如,Lead Agent 负责任务分解和结果综合,需要较强的推理能力,可以配置高端模型;子智能体负责具体的资料收集和执行,可以配置性价比更高的模型。

代码示例:

# 基于 DeerFlow 2.0 配置(config.yaml)
# 多模型配置示例

models:
  # Lead Agent 使用高端模型(更强的推理能力)
  lead:
    provider: "openai"
    model: "deepseek/deepseek-v3.2"
    api_key: "${DEEPSEEK_API_KEY}"
    base_url: "https://api.deepseek.com/v1"
    temperature: 0.3
    max_tokens: 4096

  # 子智能体使用轻量模型(更快响应,更低成本)
  sub:
    provider: "openai"
    model: "deepseek/deepseek-chat"
    api_key: "${DEEPSEEK_API_KEY}"
    base_url: "https://api.deepseek.com/v1"
    temperature: 0.1
    max_tokens: 8192

  # 可选: 通过 OpenRouter 接入 Claude(用于需要高质量推理的场景)
  # premium:
  #   provider: "openai"
  #   model: "anthropic/claude-sonnet-4-6"
  #   api_key: "${OPENROUTER_API_KEY}"
  #   base_url: "https://openrouter.ai/api/v1"
# 修改配置后重启服务
docker compose restart backend

# 或本地开发模式,直接重启后端进程
# Ctrl+C 停止后端,然后重新启动
python -m deerflow.server

注意事项: - provider 字段对应 LangChain 的模型类前缀,DeerFlow 的 Model Factory 通过反射机制自动加载对应的类。大多数实现 OpenAI API 的提供商都可以使用 provider: "openai"。 - temperature 参数影响输出的创造性。Lead Agent 建议使用 0.2-0.4(平衡创造性和准确性),子智能体建议使用 0.0-0.2(更精确的执行)。 - 修改 config.yaml 后需要重启服务才能生效。

练习题: 1. 配置 Lead Agent 和子智能体使用不同的模型,提交一个任务并观察两者使用的模型是否不同(查看日志)。 2. 尝试通过 OpenRouter 配置一个不同的模型提供商,验证多模型支持。


2.2 沙盒执行环境:安全运行用户代码

概念讲解:

DeerFlow 的沙盒系统(Sandbox)是 Agent 安全执行代码的核心机制。理解沙盒的工作方式对于在 DeerFlow 中运行代码、处理文件和管理任务输出至关重要。

沙盒提供了两种模式: - LocalSandboxProvider:开发环境使用,命令在本地进程空间执行。简单快速,但隔离性较弱。 - AioSandboxProvider:生产环境使用,命令在隔离的 Docker 容器中异步执行。提供完整的隔离和安全保障。

Agent 通过 bash 工具在沙盒中执行命令,所有文件操作都在虚拟文件系统中进行。

代码示例:

# 基于 DeerFlow 2.0 配置(config.yaml)
# 沙盒配置示例

sandbox:
  # 开发环境使用本地沙盒
  provider: "local"

  # 生产环境使用 Docker 沙盒(取消注释以下配置)
  # provider: "aio"
  # docker:
  #   image: "deerflow-sandbox:latest"
  #   memory_limit: "2g"
  #   cpu_limit: "1.0"
  #   timeout: 300

  # 虚拟路径映射(两种模式共享)
  paths:
    workspace: "/mnt/user-data/workspace"
    uploads: "/mnt/user-data/uploads"
    outputs: "/mnt/user-data/outputs"
    skills: "/mnt/skills"
# 基于 DeerFlow 2.0 架构

# 在 DeerFlow 中,Agent 通过 bash 工具执行命令时:
# Agent 发出工具调用: bash("python /mnt/user-data/workspace/analyze.py")
#
# 沙盒内部处理:
# 1. 虚拟路径映射: /mnt/user-data/workspace → 实际物理路径
# 2. 安全检查: 防止路径穿越(如 ../../etc/passwd)
# 3. 命令执行: 在沙盒环境中运行
# 4. 结果返回: 捕获 stdout 和 stderr

# 切换到 Docker 沙盒模式
# 编辑 config.yaml 或 .env:
# SANDBOX_PROVIDER=aio
docker compose restart backend

注意事项: - 在 Docker 沙盒模式下,需要预先构建沙盒镜像(deerflow-sandbox:latest)。镜像应包含 Agent 可能需要的基础工具(Python、pip 常用包等)。 - 沙盒的超时设置很重要。如果任务需要长时间运行(如模型训练),需要适当增加 timeout 值。 - 文件上传后会自动存储到 /mnt/user-data/uploads/ 虚拟路径。Agent 可以通过 read_filebash 工具访问这些文件。

练习题: 1. 提交一个需要执行 Python 代码的任务(如"用 Python 计算斐波那契数列的前 20 项并保存结果"),观察沙盒的执行过程。 2. 尝试切换沙盒模式(local ↔ aio),对比两种模式的执行差异。


2.3 IM 渠道集成:从聊天应用驱动 Agent

概念讲解:

DeerFlow 支持五大即时通讯平台的集成:Telegram、Slack、飞书/Lark、微信、企业微信。配置后,用户可以直接从聊天应用向 DeerFlow 提交任务,无需打开 Web 界面。

每个 IM 渠道支持以下交互命令: - /new — 创建新任务 - /status — 查看当前任务状态 - /models — 查看和切换可用模型 - /memory — 查看和管理长期记忆 - /help — 显示帮助信息

IM 集成的核心优势是将 AI Agent 嵌入到用户已有的工作流中,降低使用门槛。

代码示例:

# 基于 DeerFlow 2.0 配置(config.yaml)
# IM 渠道配置示例

channels:
  # Telegram 配置
  telegram:
    enabled: true
    bot_token: "${TELEGRAM_BOT_TOKEN}"
    # 获取 Bot Token: 在 Telegram 中找 @BotFather 创建 Bot

  # Slack 配置
  slack:
    enabled: true
    bot_token: "${SLACK_BOT_TOKEN}"
    app_token: "${SLACK_APP_TOKEN}"
    # 获取 Token: 在 Slack API 管理页面创建 App

  # 飞书/Lark 配置
  lark:
    enabled: false
    app_id: "${LARK_APP_ID}"
    app_secret: "${LARK_APP_SECRET}"
    # 获取凭证: 在飞书开放平台创建应用

  # 微信配置(需要企业微信或个人微信的开发者权限)
  wechat:
    enabled: false
    # 配置方式因微信版本而异
# 配置 IM 渠道后,DeerFlow 会在启动时自动连接
docker compose restart backend

# 查看日志确认渠道已连接
docker compose logs backend | grep -i channel

# 预期输出:
# [Channel] Telegram bot connected: @YourDeerFlowBot
# [Channel] Slack bot connected to workspace

注意事项: - IM 渠道配置后自动启动,无需公网 IP。DeerFlow 使用长轮询(Long Polling)或 WebSocket 连接到 IM 平台。 - 不同 IM 平台对消息长度有限制。DeerFlow 会自动将长结果拆分为多条消息或提供文件下载链接。 - Telegram 和 Slack 的配置最为简单,建议从这两个平台开始。

练习题: 1. 配置 Telegram 或 Slack 渠道,从聊天应用中提交一个研究任务,对比与 Web 前端提交的体验差异。 2. 尝试使用 /memory 命令查看和管理长期记忆,理解跨会话记忆的工作方式。


第三部分:高级篇

3.1 开发自定义技能(Custom Skills)

概念讲解:

自定义技能是扩展 DeerFlow 能力的主要方式。每个技能是一个包含 SKILL.md 的目录,DeerFlow 会自动发现 skills/custom/ 目录下的所有技能。

一个高质量的技能需要包含: 1. YAML Frontmatter:定义技能的元数据(名称、描述、允许的工具) 2. 工作流(Workflow):清晰定义 Agent 应该遵循的步骤 3. 最佳实践(Best Practices):帮助 Agent 避免常见错误 4. 参考资源(References):提供相关的知识和模板

代码示例:

<!-- skills/custom/data-analysis/SKILL.md -->
---
name: "数据分析"
description: "对上传的数据文件进行统计分析,生成可视化报告"
license: "MIT"
allowed-tools: ["bash", "read_file", "write_file", "view_image"]
---

## 工作流

### 步骤 1: 数据探索
- 使用 `read_file` 读取上传的数据文件
- 识别文件格式(CSV、JSON、Excel 等)
- 检查数据的基本统计信息(行数、列数、缺失值)

### 步骤 2: 数据清洗
- 使用 `bash` 运行 Python 脚本进行数据清洗
- 处理缺失值(删除或填充)
- 处理异常值(标记或移除)

### 步骤 3: 统计分析
- 根据数据特征选择合适的分析方法
- 生成描述性统计(均值、中位数、标准差)
- 执行相关性分析或分组比较

### 步骤 4: 可视化
- 使用 matplotlib 或 seaborn 生成图表
- 图表保存到 /mnt/user-data/outputs/ 目录
- 使用 `view_image` 工具在对话中展示图表

### 步骤 5: 生成报告
- 将分析结果和图表整合为结构化报告
- 报告保存为 Markdown 文件
- 提供关键发现和建议

## 最佳实践

- 始终先检查数据质量再进行分析
- 可视化图表应包含清晰的标题、轴标签和图例
- 分析结果应标注统计显著性
- 对于大数据集,先采样再分析以提高速度

## 参考资源

- Python pandas 数据分析常用操作清单
- matplotlib 图表类型选择指南
- 统计分析方法速查表
# 创建技能目录和文件
mkdir -p skills/custom/data-analysis
# 将上述 SKILL.md 内容写入文件

# 重启服务(某些版本需要重启才能发现新技能)
docker compose restart backend

# 测试自定义技能
# 在 Web 前端或 IM 渠道中提交:
# "分析我上传的 sales_data.csv 文件,找出销售趋势和异常点"
# DeerFlow 会自动加载"数据分析"技能

注意事项: - allowed-tools 字段非常重要,它限制了技能可以使用的工具范围。例如,"数据分析"技能不需要 web_search 工具,不应包含它。 - 工作流描述越详细,Agent 执行得越好。模糊的工作流描述会导致 Agent 不确定下一步该做什么。 - 技能的 resources/ 子目录可以放置辅助文件(如模板、参考数据),Agent 可以通过 read_file 工具读取。


3.2 MCP 工具集成:连接外部系统

概念讲解:

Model Context Protocol(MCP)是 DeerFlow 连接外部工具的主要方式。通过 MCP,DeerFlow 可以集成第三方 API、内部系统、数据库等外部资源,无需修改核心代码。

DeerFlow 的 MCP 客户端支持三种传输协议: - stdio:启动本地子进程作为 MCP 服务器,适合集成命令行工具 - SSE(Server-Sent Events):连接远程 SSE 端点,适合集成 Web 服务 - HTTP:连接 HTTP API,适合集成 REST 服务

配置文件 extensions_config.json 变更后,DeerFlow 会自动重载 MCP 工具,无需重启。

代码示例:

// 基于 DeerFlow 2.0 配置(extensions_config.json)
// MCP 工具集成配置示例

{
  "mcpServers": {
    "database-query": {
      "transport": "stdio",
      "command": "python",
      "args": ["-m", "mcp_db_query"],
      "env": {
        "DB_CONNECTION_STRING": "${DATABASE_URL}"
      }
    },
    "web-search": {
      "transport": "stdio",
      "command": "python",
      "args": ["-m", "mcp_web_search"],
      "env": {
        "SEARCH_API_KEY": "${SEARCH_API_KEY}"
      }
    },
    "internal-api": {
      "transport": "sse",
      "url": "http://api.internal:8080/sse",
      "headers": {
        "Authorization": "Bearer ${INTERNAL_API_TOKEN}"
      }
    }
  }
}
# 添加 MCP 配置后,DeerFlow 会自动检测变化并重载
# 查看已加载的 MCP 工具
docker compose logs backend | grep -i "mcp"

# 预期输出:
# [MCP] Loaded tools from: database-query
# [MCP] Loaded tools from: web-search
# [MCP] Loaded tools from: internal-api

注意事项: - MCP 服务器进程独立于 DeerFlow 主进程运行。如果 MCP 服务器崩溃,不影响 DeerFlow 的其他功能。 - stdio 模式的 MCP 服务器需要预先安装在 Docker 镜像或本地环境中。 - SSE 和 HTTP 模式的 MCP 服务器需要确保网络可达性。


3.3 长期记忆管理与优化

概念讲解:

DeerFlow 的长期记忆(Long-Term Memory)使 Agent 能够跨会话积累用户偏好和知识。理解记忆的工作方式有助于优化 Agent 的个性化效果。

记忆系统的工作流程: 1. 读取(同步):Agent 处理请求前,ThreadData 中间件从记忆系统加载用户画像 2. 更新(异步):任务完成后,新的偏好和知识被加入防抖队列,延迟写入 3. 管理:用户可通过 /memory 命令查看、删除特定记忆

代码示例:

# 基于 DeerFlow 2.0 架构

# 通过 IM 渠道管理记忆

# 查看当前记忆
/memory
# 输出:
# 记忆条目 (5):
# 1. 用户偏好: 报告使用中文撰写
# 2. 用户偏好: 代码使用 Python
# 3. 知识: 用户从事数据科学工作
# 4. 知识: 用户常用 matplotlib 进行可视化
# 5. 偏好: 研究报告包含执行摘要

# 删除特定记忆
/memory delete 3
# 输出: 已删除记忆条目 #3

# 清除全部记忆
/memory clear
# 输出: 已清除全部记忆

注意事项: - 记忆的防抖写入意味着更新可能有几秒延迟。频繁提交任务时,最新的记忆可能不会立即生效。 - 记忆系统使用 TIAMAT 作为云后端。在本地部署时,确保 TIAMAT 服务可用或配置本地存储替代方案。 - 过多的记忆条目可能影响 Agent 的上下文效率。建议定期清理不再需要的记忆。


第四部分:实战项目

项目需求

构建一个"自动化研究助手",综合运用以下知识点: 1. Web 前端任务提交(知识点 1.1):通过 Web 界面提交研究任务 2. 子智能体编排(知识点 1.2):理解并行研究的工作方式 3. 自定义技能开发(知识点 3.1):创建"技术调研"技能 4. 沙盒执行环境(知识点 2.2):在沙盒中运行数据处理脚本 5. 模型配置(知识点 2.1):为不同任务类型配置合适的模型

功能要求: - 接受用户的技术调研需求(如"调研 LangGraph 的架构和生态") - 自动分解为多个子任务并行研究 - 收集官方文档、技术博客、社区评价等多源信息 - 在沙盒中运行分析脚本处理收集的数据 - 生成结构化的技术调研报告

项目设计

tech-research-assistant/
│
├── skills/
│   └── custom/
│       └── tech-research/         # 自定义技能
│           ├── SKILL.md           # 技能定义
│           └── resources/
│               └── report-template.md  # 报告模板
│
├── config/
│   └── models.yaml               # 模型配置(覆盖默认配置)
│
├── scripts/
│   └── analyze.py                # 分析脚本(在沙盒中运行)
│
└── outputs/                       # 输出目录
    └── reports/                   # 生成的报告

完整实施代码

第一步:创建技术调研技能

<!-- skills/custom/tech-research/SKILL.md -->
---
name: "技术调研"
description: "对给定技术进行系统化调研,生成包含架构、生态、竞品对比的结构化报告"
license: "MIT"
allowed-tools: ["web_search", "web_fetch", "bash", "read_file", "write_file"]
---

## 工作流

### 阶段 1: 信息收集(并行执行)
1. 搜索该技术的官方文档和 GitHub 仓库
2. 搜索技术博客和深度分析文章
3. 搜索社区评价和讨论(Reddit、Hacker News)
4. 搜索竞品和同类技术对比

### 阶段 2: 数据分析
1. 使用 `read_file` 读取报告模板
2. 使用 `bash` 运行分析脚本整理收集的数据
3. 生成统计数据(Stars、下载量、版本历史等)

### 阶段 3: 报告生成
1. 按照报告模板结构组织内容
2. 生成技术概述、架构分析、竞品对比、适用场景等章节
3. 保存报告到 /mnt/user-data/outputs/reports/ 目录

## 最佳实践

- 每条信息必须标注来源 URL
- 竞品对比至少包含 3 个竞品
- 架构分析需引用官方文档
- 性能数据需标注测试环境和日期

## 参考资源

- 技术调研方法论
- 架构分析框架

第二步:创建报告模板

<!-- skills/custom/tech-research/resources/report-template.md -->
# {{技术名称}} - 技术调研报告

## 1. 基本信息
- 技术名称:
- 官方地址:
- GitHub 仓库:
- 当前版本:
- License:
- 主要语言:
- 创建者/维护团队:

## 2. 核心特性
1. 特性名称 - 描述
2. ...

## 3. 技术架构
### 3.1 整体架构
(架构图或分层描述)

### 3.2 核心模块
- 模块1 - 职责
- ...

### 3.3 扩展机制
(如何扩展)

## 4. 竞品对比
| 维度 | 本技术 | 竞品A | 竞品B |
|------|--------|-------|-------|
| ... | ... | ... | ... |

## 5. 适用场景
### 最佳场景
1. ...

### 不适用场景
1. ...

## 6. 总结与建议
(综合评价和使用建议)

## 信息来源
- 来源1
- 来源2

第三步:创建数据分析脚本

# scripts/analyze.py
# 在 DeerFlow 沙盒中运行的数据分析脚本
# 基于 DeerFlow 2.0 沙盒虚拟文件系统

import json
import sys
from datetime import datetime
from pathlib import Path

def analyze_research_data(input_path: str, output_path: str) -> None:
    """分析收集的研究数据,生成统计摘要"""
    # 读取收集的研究数据(JSON 格式)
    input_file = Path(input_path)
    if not input_file.exists():
        print(f"错误: 输入文件不存在: {input_path}")
        sys.exit(1)

    with open(input_file, "r", encoding="utf-8") as f:
        data = json.load(f)

    # 统计分析
    summary = {
        "analysis_time": datetime.now().isoformat(),
        "tech_name": data.get("tech_name", "unknown"),
        "sources_count": len(data.get("sources", [])),
        "features_count": len(data.get("features", [])),
        "competitors_count": len(data.get("competitors", [])),
        "github_stars": data.get("github_stars", "N/A"),
        "license": data.get("license", "N/A"),
        "source_categories": {},
    }

    # 按来源类型分类统计
    for source in data.get("sources", []):
        category = source.get("type", "other")
        summary["source_categories"][category] = (
            summary["source_categories"].get(category, 0) + 1
        )

    # 保存分析结果
    output_file = Path(output_path)
    output_file.parent.mkdir(parents=True, exist_ok=True)

    with open(output_file, "w", encoding="utf-8") as f:
        json.dump(summary, f, ensure_ascii=False, indent=2)

    print(f"分析完成:")
    print(f"  技术名称: {summary['tech_name']}")
    print(f"  信息来源: {summary['sources_count']} 条")
    print(f"  核心特性: {summary['features_count']} 个")
    print(f"  竞品数量: {summary['competitors_count']} 个")
    print(f"  GitHub Stars: {summary['github_stars']}")
    print(f"  来源分类: {summary['source_categories']}")
    print(f"  结果保存到: {output_path}")


if __name__ == "__main__":
    input_path = sys.argv[1] if len(sys.argv) > 1 else "/mnt/user-data/uploads/research_data.json"
    output_path = sys.argv[2] if len(sys.argv) > 2 else "/mnt/user-data/outputs/analysis_summary.json"
    analyze_research_data(input_path, output_path)

代码解析

知识点运用说明:

  1. Web 前端任务提交(1.1 节):用户通过 DeerFlow 的 Web 前端提交技术调研任务,如"调研 LangGraph 的架构和生态"。DeerFlow 自动将任务路由到 Lead Agent 处理。

  2. 子智能体编排(1.2 节):Lead Agent 将调研任务分解为多个子任务(信息收集、数据分析、报告生成),并行派生子智能体执行。每个子智能体独立收集不同来源的信息。

  3. 自定义技能开发(3.1 节):tech-research/SKILL.md 定义了技术调研的完整工作流,包括信息收集策略、分析方法和报告模板。allowed-tools 限制了技能只能使用必要的工具。

  4. 沙盒执行环境(2.2 节):analyze.py 脚本在 DeerFlow 的沙盒环境中运行,通过虚拟路径 /mnt/user-data/uploads//mnt/user-data/outputs/ 读写文件。

  5. 模型配置(2.1 节):可以通过覆盖配置为技术调研任务指定更适合的模型。例如,信息收集阶段使用快速模型,报告生成阶段使用高质量模型。

扩展挑战

  1. 添加自动化评分:在技能中添加自动化的技术评分逻辑,根据 Stars、活跃度、文档质量等维度生成量化评分。

  2. 集成 MCP 搜索工具:将专业的学术搜索 API(如 Semantic Scholar)通过 MCP 集成到技能中,提升信息收集质量。

  3. 定期自动调研:配置定期任务,自动对关注的技术栈进行调研并生成对比报告。


第五部分:常见问题与排查指南

常见错误及解决方案

错误信息 原因 解决方案
docker compose up 失败,端口被占用 2024/3000/8001/2026 端口已被其他服务使用 修改 docker-compose.yml 中的端口映射,或停止占用端口的服务
LLM_API_KEY not set 未配置 LLM API Key 编辑 .env 文件,填入有效的 API Key
ModuleNotFoundError: No module named 'langgraph' 后端依赖未安装 在 backend/ 目录执行 pip install -r requirements.txt
Sandbox timeout 沙盒执行超时 增加 config.yaml 中的 sandbox.timeout
Sub-Agent failed: context window exceeded 子智能体上下文超出限制 减少任务的子任务数量,或增加 context.max_context_tokens
MCP server connection failed MCP 服务器不可达 检查 MCP 服务器的网络连通性和配置。查看日志 docker compose logs backend
Permission denied: /mnt/user-data/ 沙盒文件系统权限问题 检查 Docker 卷挂载权限。执行 chmod -R 777 ./data/(开发环境)
Docker sandbox image not found 未构建沙盒 Docker 镜像 执行 docker build -t deerflow-sandbox -f Dockerfile.sandbox .
Telegram bot not responding Telegram Bot Token 无效或网络问题 验证 Bot Token 是否正确。检查网络是否能连接 Telegram API

基于 DeerFlow 2.0 官方 README 和常见部署问题

调试技巧

  1. 查看详细日志:使用 docker compose logs -f backend 实时查看后端日志。日志中包含 Lead Agent 的决策过程、子智能体的创建和执行、工具调用详情等关键信息。对于任务执行失败,重点关注 [Lead Agent][Sub-Agent] 标签的日志行。

  2. 检查沙盒状态:在 Docker 沙盒模式下,使用 docker ps | grep sandbox 查看沙盒容器是否正常运行。如果容器频繁重启,检查内存限制(memory_limit)是否足够。使用 docker exec -it <sandbox-id> bash 进入沙盒容器手动排查。

  3. 逐步调试技能:如果自定义技能不生效,首先检查 skills/custom/ 目录结构是否正确(必须包含 SKILL.md)。然后在日志中搜索技能加载记录,确认 DeerFlow 是否发现了该技能。如果技能已加载但执行不符合预期,检查 SKILL.md 的工作流描述是否足够清晰。


第六部分:学习路线推荐

官方文档推荐阅读顺序

  1. GitHub README 快速入门 — 安装、Docker 部署、配置基础
  2. 地址:https://github.com/bytedance/deer-flow#readme
  3. 重点:Docker Compose 部署、环境变量配置、LLM 模型配置

  4. ARCHITECTURE.md 架构文档 — 系统架构、中间件链、沙盒系统详解

  5. 地址:https://github.com/bytedance/deer-flow/blob/main/backend/docs/ARCHITECTURE.md
  6. 重点:中间件链设计、虚拟文件系统、MCP 集成、安全机制

  7. Skills 系统文档 — 技能开发和管理

  8. 地址:skills/public/ 目录下的内置技能示例
  9. 重点:SKILL.md 格式、allowed-tools 配置、渐进式加载机制

  10. Configuration Guide — 完整配置参考

  11. 地址:config.yaml 和 .env.example 文件
  12. 重点:模型配置、沙盒配置、IM 渠道配置、MCP 工具配置

推荐进阶资源

  • dev.to - DeerFlow 2.0: The Deep Dive
  • https://dev.to/
  • 社区深度分析文章,涵盖架构、沙盒、技能、记忆等核心机制

  • LangGraph 官方文档

  • https://langchain-ai.github.io/langgraph/
  • DeerFlow 的核心编排引擎。理解 LangGraph 的 StateGraph、节点、边等概念有助于深入理解 DeerFlow 的编排机制

  • LangChain 官方文档

  • https://python.langchain.com/
  • DeerFlow 使用 LangChain 进行 LLM 交互。了解 LangChain 的模型抽象、工具调用、消息格式有助于自定义模型和工具

进阶方向建议

完成本教程后,建议按以下方向深入学习:

  1. 深入 LangGraph:学习 StateGraph 的高级用法(条件分支、循环、并行节点),理解 DeerFlow 如何在 LangGraph 上构建中间件链
  2. 开发 MCP 工具:学习 MCP 协议规范,开发自定义的 MCP 工具服务器,连接内部系统
  3. 生产环境部署:研究 Kubernetes 部署方案、安全加固、监控和日志集成

信息来源与版本说明