DeerFlow 2.0 学习教程

DeerFlow 2.0 学习教程

目录

  1. 快速开始
  2. 安装配置
  3. 核心概念
  4. Skills 开发
  5. MCP Server 集成
  6. Sub-Agent 编排
  7. 记忆系统
  8. IM 渠道集成
  9. 进阶主题
  10. 常见问题

一、快速开始

1.1 什么是 DeerFlow?

DeerFlow 是字节跳动开源的 SuperAgent Harness(超级智能体运行时)

传统框架 (Framework)
├── 提供构建块
├── 你自己组装
└── 需要大量胶水代码

DeerFlow (Harness)
├── 开箱即用
├── 电池内置
└── 约定优于配置

1.2 核心能力

能力 说明
自主规划 Agent 自动分解任务、规划执行
沙箱执行 安全隔离的代码执行环境
长期记忆 跨会话的持久化记忆
Sub-Agent 并行子智能体协作
Skills Markdown 定义的能力扩展
MCP 支持 原生支持 MCP 协议

1.3 5 分钟上手

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

# 2. 生成配置
make config

# 3. Docker 启动(推荐)
make docker-init
make docker-start

# 4. 访问 Web UI
open http://localhost:2026

# 5. 开始对话
# 输入: "帮我研究一下 LangGraph 框架的架构和特点"

二、安装配置

2.1 系统要求

要求 说明
Docker 20.10+(推荐)
Python 3.12+(本地开发)
Node.js 22+(前端开发)
内存 建议 8GB+
磁盘 10GB+

2.2 Docker 安装(推荐)

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

# 生成配置文件
make config

# 初始化 Docker 环境
make docker-init

# 启动服务
make docker-start

# 查看日志
make docker-logs

# 停止服务
make docker-stop

2.3 本地开发安装

# 检查依赖
make check

# 安装依赖
make install

# 启动开发服务器
make dev

# 或分别启动前后端
make backend-dev  # 后端 :8001
make frontend-dev # 前端 :3000

2.4 配置文件

.env 配置

# LLM 配置
OPENAI_API_KEY=your-api-key
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_MODEL=gpt-4

# 或使用 DeepSeek
DEEPSEEK_API_KEY=your-deepseek-key
DEEPSEEK_MODEL=deepseek-chat

# 或使用火山引擎
VOLCENGINE_API_KEY=your-volcengine-key
VOLCENGINE_MODEL=Doubao-Seed-2.0-Code

# 沙箱配置
SANDBOX_TYPE=docker  # local | docker | k8s

# 记忆配置
MEMORY_ENABLED=true
MEMORY_MAX_TOKENS=2000

# MCP 配置
MCP_CONFIG_PATH=./mcp_config.json

mcp_config.json 示例

{
  "mcpServers": {
    "filesystem": {
      "enabled": true,
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "./workspace"]
    },
    "web-search": {
      "enabled": true,
      "type": "http",
      "url": "https://api.tavily.com/mcp"
    }
  }
}

2.5 推荐模型配置

# config/models.yaml

# 推荐模型
models:
  - name: doubao-seed
    provider: volcengine
    model: Doubao-Seed-2.0-Code
    api_key: ${VOLCENGINE_API_KEY}

  - name: deepseek
    provider: deepseek
    model: deepseek-chat
    api_key: ${DEEPSEEK_API_KEY}

  - name: kimi
    provider: moonshot
    model: moonshot-v1-128k
    api_key: ${MOONSHOT_API_KEY}

三、核心概念

3.1 Lead Agent

Lead Agent 是 DeerFlow 的核心,负责:

┌─────────────────────────────────────────────────────────────────┐
│                    Lead Agent 职责                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1. 理解用户意图                                                 │
│     └── 解析用户请求,理解任务目标                               │
│                                                                 │
│  2. 任务分解                                                     │
│     └── 将复杂任务分解为可执行的子任务                           │
│                                                                 │
│  3. Sub-Agent 编排                                               │
│     └── 创建和管理 Sub-Agents                                    │
│     └── 分配任务,控制并发                                       │
│                                                                 │
│  4. 结果综合                                                     │
│     └── 收集 Sub-Agents 结果                                     │
│     └── 整合生成最终答案                                         │
│                                                                 │
│  5. 记忆管理                                                     │
│     └── 更新用户记忆                                             │
│     └── 注入相关上下文                                           │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.2 Sub-Agent

Sub-Agent 是隔离的执行单元:

# Sub-Agent 特点
├── 隔离上下文(看不到其他 Agent)
├── 独立的工具集
├── 独立的状态
├── 明确的终止条件
└── 超时控制

# 状态流转
PENDING -> RUNNING -> COMPLETED
                   -> FAILED
                   -> TIMED_OUT

并发控制

# Sub-Agent 并发限制
MIN_SUBAGENT_LIMIT = 2
MAX_SUBAGENT_LIMIT = 4

# 超出限制时的多批次执行
Turn 1: 启动 Sub-Agent 1-3 -> 等待结果
Turn 2: 启动下一批 -> 等待结果
...
最终: 综合所有结果

3.3 沙箱 (Sandbox)

三种沙箱实现:

┌─────────────────────────────────────────────────────────────────┐
│                    沙箱实现对比                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  Local Sandbox                                                  │
│  ├── 直接在主机执行                                              │
│  ├── 适合: 开发调试                                              │
│  └── 风险: 无隔离                                               │
│                                                                 │
│  Docker Sandbox (推荐)                                          │
│  ├── 容器隔离                                                    │
│  ├── HTTP API 调用                                              │
│  ├── 暖池设计 (LRU 淘汰)                                        │
│  └── 适合: 生产环境                                              │
│                                                                 │
│  K8s Sandbox                                                    │
│  ├── Kubernetes Pods                                            │
│  ├── PersistentVolume 挂载                                      │
│  ├── 通过 Provisioner 管理                                       │
│  └── 适合: 大规模生产                                            │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

3.4 Skills

Skill = 目录 + SKILL.md

skills/
└── my-skill/
    ├── SKILL.md          # Skill 定义
    ├── templates/        # 模板文件
    └── scripts/          # 脚本

SKILL.md 格式

---
name: my-skill
description: 简短描述(用于匹配)...
---

# My Skill

## 概述
详细说明...

## 使用方法
...

## 示例
...

四、Skills 开发

4.1 创建自定义 Skill

# 创建 Skill 目录
mkdir -p skills/my-skill

# 创建 SKILL.md
cat > skills/my-skill/SKILL.md << 'EOF'
---
name: code-review
description: 用于代码审查任务,自动检测代码问题和改进建议...
---

# Code Review Skill

## 概述
这是一个专业的代码审查技能,能够:

1. 检测代码质量问题
2. 发现潜在 Bug
3. 提供改进建议

## 审查流程

### 步骤 1: 静态分析
- 检查代码风格
- 检测重复代码
- 分析复杂度

### 步骤 2: 安全检查
- SQL 注入风险
- XSS 漏洞
- 敏感信息泄露

### 步骤 3: 改进建议
- 性能优化
- 可读性改进
- 最佳实践

## 输出格式
- 问题列表
- 严重程度
- 修复建议
EOF

4.2 Skill 模板

# SKILL.md 模板

---
name: skill-name
description: 简短描述,用于任务匹配(约 100 词)
---

# Skill Name

## 概述
详细描述这个 Skill 的用途和能力。

## 前置条件
- 需要什么环境
- 需要什么配置

## 执行步骤

### 阶段 1: 准备
...

### 阶段 2: 执行
...

### 阶段 3: 输出
...

## 示例

输入:

示例输入


输出:

示例输出


## 注意事项
- 注意点 1
- 注意点 2

4.3 内置 Skills 使用

Deep Research Skill

用户: 帮我研究一下多智能体框架的对比

# DeerFlow 自动调用 deep-research skill
# 系统化地研究多个角度
# 生成结构化报告

Data Analysis Skill

用户: 分析这个 sales.csv 文件,告诉我销售趋势

# 自动使用 DuckDB 分析
# 生成统计结果和图表

Frontend Design Skill

用户: 帮我创建一个现代化的登录页面

# 生成高质量前端代码
# 包含响应式设计

五、MCP Server 集成

5.1 添加 MCP Server

stdio 模式(本地工具)

{
  "mcpServers": {
    "filesystem": {
      "enabled": true,
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/path/to/allowed/dir"
      ]
    },
    "sqlite": {
      "enabled": true,
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-server-sqlite", "--db-path", "/path/to/db.sqlite"]
    }
  }
}

HTTP 模式(远程服务)

{
  "mcpServers": {
    "tavily": {
      "enabled": true,
      "type": "http",
      "url": "https://api.tavily.com/mcp",
      "headers": {
        "Authorization": "Bearer ${TAVILY_API_KEY}"
      }
    }
  }
}

5.2 OAuth 认证

{
  "mcpServers": {
    "github": {
      "enabled": true,
      "type": "http",
      "url": "https://api.github.com/mcp",
      "oauth": {
        "type": "refresh_token",
        "client_id": "your-client-id",
        "client_secret": "your-client-secret",
        "refresh_token": "your-refresh-token",
        "token_url": "https://github.com/login/oauth/access_token",
        "refresh_skew_seconds": 60
      }
    }
  }
}

5.3 常用 MCP Server

Server 功能 类型
@modelcontextprotocol/server-filesystem 文件系统访问 stdio
@modelcontextprotocol/server-sqlite SQLite 数据库 stdio
@modelcontextprotocol/server-github GitHub API stdio
mcp-server-brave-search Brave 搜索 stdio
Tavily MCP 网络搜索 http

六、Sub-Agent 编排

6.1 自动编排

DeerFlow 自动进行 Sub-Agent 编排:

用户任务: "研究 AI Agent 框架并写一份对比报告"

# DeerFlow 自动:
1. 分析任务,识别需要研究的框架
2. 创建多个 Sub-Agents
   - Sub-Agent 1: 研究 AutoGen
   - Sub-Agent 2: 研究 CrewAI
   - Sub-Agent 3: 研究 LangGraph
3. 并行执行(最多 4 个)
4. 综合结果,生成报告

6.2 手动控制

# 通过配置控制 Sub-Agent 行为
subagent_config = {
    "max_concurrent": 3,      # 最大并发数
    "timeout": 300,           # 超时时间(秒)
    "max_iterations": 10,     # 最大迭代次数
}

6.3 Sub-Agent 隔离

┌─────────────────────────────────────────────────────────────────┐
│                    Sub-Agent 上下文隔离                          │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│   Lead Agent                                                    │
│   ├── 可以看到所有 Sub-Agents 结果                              │
│   └── 可以访问全局记忆                                          │
│                                                                 │
│   Sub-Agent 1          Sub-Agent 2          Sub-Agent 3        │
│   ├── 独立上下文        ├── 独立上下文        ├── 独立上下文      │
│   ├── 看不到 Agent 2    ├── 看不到 Agent 1    ├── 看不到 Agent 1 │
│   └── 看不到 Agent 3    └── 看不到 Agent 3    └── 看不到 Agent 2 │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘

七、记忆系统

7.1 记忆结构

memory = {
    "version": "1.0",

    # 用户画像
    "user": {
        "workContext": {
            "role": "软件工程师",
            "company": "某科技公司",
            "techStack": ["Python", "Go", "Kubernetes"]
        },
        "personalContext": {
            "language": "中文",
            "preferences": ["简洁代码", "测试驱动开发"]
        },
        "topOfMind": {
            "currentProject": "重构支付系统",
            "deadline": "2026-04-01"
        }
    },

    # 时间线
    "history": {
        "recentMonths": [...],
        "earlierContext": [...],
        "longTermBackground": [...]
    },

    # 结构化事实
    "facts": [
        {"type": "preference", "content": "偏好微服务架构", "confidence": 0.9},
        {"type": "knowledge", "content": "精通分布式系统", "confidence": 0.85},
    ]
}

7.2 查看记忆

# 通过 IM 命令
/memory

# 或通过 API
curl http://localhost:8001/api/memory

7.3 记忆更新

记忆更新是自动的:

对话完成
    ↓
MemoryMiddleware.after_agent
    ↓
MemoryUpdateQueue(防抖 30s)
    ↓
去重
    ↓
LLM 提取 Facts
    ↓
原子写入文件

7.4 记忆配置

memory:
  enabled: true
  max_injection_tokens: 2000  # 注入到上下文的最大 Token
  max_facts: 100              # 最大 Facts 数量
  confidence_threshold: 0.7   # Facts 置信度阈值
  update_debounce: 30         # 更新防抖(秒)

八、IM 渠道集成

8.1 Telegram 集成

# config/channels.yaml
channels:
  telegram:
    enabled: true
    bot_token: ${TELEGRAM_BOT_TOKEN}

步骤

  1. 通过 @BotFather 创建 Bot
  2. 获取 Bot Token
  3. 配置到 TELEGRAM_BOT_TOKEN
  4. 启动服务
  5. 向 Bot 发送消息

8.2 Slack 集成

channels:
  slack:
    enabled: true
    bot_token: ${SLACK_BOT_TOKEN}
    app_token: ${SLACK_APP_TOKEN}

步骤

  1. 创建 Slack App
  2. 启用 Socket Mode
  3. 获取 Bot Token 和 App Token
  4. 配置 OAuth Scopes
  5. 安装到工作区

8.3 飞书集成

channels:
  feishu:
    enabled: true
    app_id: ${FEISHU_APP_ID}
    app_secret: ${FEISHU_APP_SECRET}

8.4 命令列表

命令 说明 示例
/new 开始新对话 /new
/status 显示线程状态 /status
/models 列出可用模型 /models
/memory 查看记忆 /memory
/help 显示帮助 /help

九、进阶主题

9.1 自定义工具

# backend/src/tools/custom_tool.py

from langchain_core.tools import tool

@tool
def analyze_code(code: str) -> str:
    """分析代码质量,返回改进建议。

    Args:
        code: 要分析的代码字符串

    Returns:
        分析结果和建议
    """
    # 实现分析逻辑
    issues = []

    # 检查代码长度
    if len(code) > 500:
        issues.append("代码过长,建议拆分")

    # 检查命名
    # ...

    return "\n".join(issues) if issues else "代码质量良好"

9.2 自定义中间件

# backend/src/agents/middlewares/custom_middleware.py

from langchain.agents.middleware import AgentMiddleware

class LoggingMiddleware(AgentMiddleware):
    """日志记录中间件"""

    async def before_agent(self, state, config):
        # 执行前记录
        print(f"开始执行: {state.get('input', '')}")
        return state

    async def after_agent(self, state, config):
        # 执行后记录
        print(f"执行完成: {state.get('output', '')[:100]}...")
        return state

9.3 自定义沙箱

# backend/src/sandbox/custom_sandbox.py

from backend.src.sandbox.base import Sandbox

class CustomSandbox(Sandbox):
    """自定义沙箱实现"""

    def execute_command(self, command: str) -> str:
        # 实现命令执行
        pass

    def read_file(self, path: str) -> str:
        # 实现文件读取
        pass

    def write_file(self, path: str, content: str) -> None:
        # 实现文件写入
        pass

    def list_dir(self, path: str, max_depth: int = 2) -> list[str]:
        # 实现目录列表
        pass

9.4 K8s 部署

# k8s/deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deerflow
spec:
  replicas: 3
  selector:
    matchLabels:
      app: deerflow
  template:
    metadata:
      labels:
        app: deerflow
    spec:
      containers:
      - name: deerflow
        image: deerflow:latest
        ports:
        - containerPort: 2026
        env:
        - name: OPENAI_API_KEY
          valueFrom:
            secretKeyRef:
              name: deerflow-secrets
              key: openai-api-key

十、常见问题

Q1: Docker 启动失败?

# 检查 Docker 状态
docker info

# 查看日志
make docker-logs

# 重新初始化
make docker-stop
make docker-init
make docker-start

Q2: 模型调用失败?

# 检查 API Key
echo $OPENAI_API_KEY

# 测试 API 连接
curl https://api.openai.com/v1/models \
  -H "Authorization: Bearer $OPENAI_API_KEY"

# 检查配置
cat .env | grep API_KEY

Q3: Skill 没有被触发?

  1. 检查 Skill 描述是否匹配任务
  2. 确认 Skill 文件格式正确
  3. 查看 debug 日志
# 启用 debug 日志
LOG_LEVEL=debug make dev

Q4: Sub-Agent 超时?

# 增加超时时间
subagent:
  timeout: 600  # 10 分钟
  max_iterations: 20

Q5: 记忆没有更新?

  1. 检查记忆是否启用
  2. 确认置信度阈值
  3. 查看更新日志
# 查看记忆文件
cat ~/.deerflow/memory.json

十一、速查表

常用命令

命令 说明
make config 生成配置
make docker-init 初始化 Docker
make docker-start 启动服务
make docker-stop 停止服务
make docker-logs 查看日志
make dev 本地开发

IM 命令

命令 说明
/new 新对话
/status 线程状态
/memory 查看记忆
/models 可用模型

配置文件

文件 说明
.env 环境变量
mcp_config.json MCP 配置
config/models.yaml 模型配置
config/channels.yaml 渠道配置

目录结构

目录 说明
backend/ Python 后端
frontend/ Next.js 前端
skills/ Skill 定义
docker/ Docker 配置

参考资源

  • GitHub 仓库:https://github.com/bytedance/deer-flow
  • 官方网站:https://deerflow.tech
  • 架构文档:backend/docs/ARCHITECTURE.md
  • API 文档:backend/docs/API.md
  • MCP 指南:backend/docs/MCP_SERVER.md

教程生成时间:2026-03-22