01

多代理革命

从单兵作战到军团协作 —— 理解 Ruflo 如何把 Claude 从「一个人干」变成「一支军队协同」

想象一支球队只有一个球员

一个球员要同时进攻、防守、守门、传中……即使他是梅西,也不可能在十一人的赛场上兼顾一切。软件工程也一样 —— 当项目复杂到一定程度,单靠一个 AI 代理 写代码、测 bug、做安全审查、写文档,效率必然崩塌。

💡
核心洞察

软件工程的本质不是「写代码」,而是「分工协作」。Ruflo 做的就是把这种分工思维注入 AI —— 让 100 多个专业化代理各司其职,像一支运转良好的球队。

Ruflo 全景架构

一条命令 npx ruflo init 就能给 Claude Code 装上一整套「神经系统」。看看数据如何从你的需求流向最终的代码交付:

U
用户 / CLI
M
MCP 路由
S
蜂群代理
D
向量记忆
L
LLM 提供商
点击「下一步」开始旅程

代码如何定义这一切

Ruflo 的蜂群配置不是魔法 —— 它是一个精心设计的 TypeScript 配置文件。看看 15 个代理如何被分配到 6 个领域:

CODE
// v3/swarm.config.ts —— 蜂群核心配置
export const defaultSwarmConfig = {
  topology: 'hierarchical-mesh',
  maxAgents: 15,
  loadBalancingStrategy: 'capability-match',
};
中文解读

蜂群配置文件的注释说明这是 V3 架构

拓扑结构选择「层级网格」—— 既有上下级指挥,又有同级互联

最多同时运行 15 个代理

负载均衡策略:按能力匹配任务(不是随便分配)

配置结束

15 个代理,6 大领域

每个代理都有专职角色,就像一家公司的不同部门。点击卡片了解详情:

安全域

🛡️
安全架构师
🔧
安全实施
🧪
安全测试

核心域

👑
女王协调器
🏗️
核心架构师
🧠
记忆专家
🐝
蜂群专家

质量 / 性能 / 部署

TDD 测试工程师
性能工程师
🚀
发布工程师
点击任意组件了解它的职责

安全第一:代理类型白名单

Ruflo 不允许任意类型的代理运行 —— 它维护一个严格的白名单,防止恶意代码注入:

CODE
// mcp/tools/agent-tools.ts
const ALLOWED_AGENT_TYPES = [
  'coder', 'reviewer', 'tester',
  'byzantine-coordinator',
  'queen-coordinator',
  'security-architect',
] as const;

const agentTypeSchema = z.enum(
  ALLOWED_AGENT_TYPES
).or(z.string().regex(
  /^[a-zA-Z][a-zA-Z0-9_-]*$/
));
中文解读

定义允许的代理类型列表(白名单机制)

编码、审查、测试 —— 三大核心开发角色

拜占庭协调器 —— 处理分布式一致性

女王协调器 —— 统帅全局

安全架构师 —— 安全保障

as const 让这个数组成为不可变的元组类型

用 Zod 验证:要么是白名单之一……

要么匹配安全的命名规则:字母开头,只含字母/数字/下划线/连字符

动手试试:匹配代理角色

把左侧的代理名称拖到右侧对应的职责描述上:

女王协调器
记忆专家
TDD 测试工程师
安全架构师

统帅全部代理,管理里程碑和跨域协调

拖到这里

集成 AgentDB,搜索速度提升 150 倍以上

拖到这里

模拟优先,保证测试覆盖率超过 90%

拖到这里

威胁建模、安全策略、CVE 漏洞修复

拖到这里

模块一测验

Ruflo 解决的核心问题是什么?

你的团队要新增一个自定义代理类型。Ruflo 的安全机制会怎么做?

为什么 Ruflo 选择 hierarchical-mesh 而不是纯 mesh 或纯 hierarchical 拓扑?

02

蜂群心智

代理如何像蜂群一样自组织、分工协作、在冲突中达成共识

蜂巢中没有老板,但蜂蜜从未断供

真正的蜂群没有蜜蜂在「指挥」其他蜜蜂。每只蜜蜂只遵循几条简单规则:跟随信息素、传递花源方向、保持蜂巢温度。但整个蜂巢展现出惊人的集体智慧 —— 这就是 涌现

🐝
Ruflo 的蜂群 vs 真实蜂群

真实蜂群是纯去中心化的。Ruflo 做了一个折中:有「女王」代理做顶层协调(类似蜂后的信息素引导),但同域代理之间可以直接通信(类似工蜂之间的 8 字舞)。这种混合模式叫 hierarchical-mesh

偷听代理们的对话

当用户提交一个「实现用户认证功能」的需求,代理们会如何协作?点击「下一条」观看对话:

四种拓扑,四种性格

拓扑决定代理之间的通信方式。不同场景适合不同拓扑:

👑

层级网格

女王坐镇中枢 + 同域代理互联。最适合日常开发:既有统一指挥,又有高效协作。Ruflo 默认选择。

🕸️

全网格

所有人跟所有人通信。适合小型紧急任务组,响应最快,但代理多了通信量爆炸。

🏛️

纯层级

严格的上下级,不允许跨级沟通。适合安全审查等需要严格控制的场景。

🔄

自适应

系统自动在以上拓扑间切换。任务简单时用网格加速,复杂时切层级保证秩序。

拓扑如何用代码表达

CODE
// swarm.config.ts
export const topologyConfigs: Record<TopologyType, TopologyConfig> = {
  'hierarchical-mesh': {
    centralNode: 'agent-1',
    layers: [
      ['agent-1'],
      ['agent-2', 'agent-3', 'agent-4'],
      ['agent-13', 'agent-14', 'agent-15']
    ],
    meshConnections: [['agent-2', 'agent-3', 'agent-4']]
  }
};
中文解读

用 Record 类型把每种拓扑映射到配置对象

层级网格拓扑的配置

中心节点是 agent-1(女王协调器)

第一层:女王独自在最顶层

第二层:安全域的三个代理

第三层:质量/性能/部署代理

网格连接:安全域内的三个代理可以互相直接通信

工作流引擎:任务的流水线

代理认领任务后,工作流引擎 负责按依赖关系排序、执行、必要时回滚:

CODE
// WorkflowEngine.ts —— 执行工作流核心逻辑
const orderedTasks = Task.resolveExecutionOrder(tasks);
for (const task of orderedTasks) {
  const agents = await this.coordinator.listAgents();
  const suitable = agents.find(
    a => a.canExecute(task.type)
  );
  await this.executeTask(task, suitable.id);
}
中文解读

先解析任务的依赖关系,确定执行顺序(类似大学选课的先修课排序)

依次执行每个任务

列出所有可用代理

找到能执行这类任务的代理(按能力匹配)

把任务交给匹配的代理执行

找 Bug 挑战

下面的工作流代码有一个关键 Bug。点击你认为有问题的那一行:

这段工作流代码能正确处理失败吗?

1 for (const task of orderedTasks) {
2 const result = await this.executeTask(task, agentId);
3 this.emit('task:completed', { taskId: task.id });
4 execution.eventLog.push({ event: 'completed' });
5 }

模块二测验

在 Group Chat 场景中,女王协调器的角色更像什么?

工作流引擎如何决定任务的执行顺序?

03

MCP 神经系统

Model Context Protocol —— 让 AI 代理像调用 API 一样使用工具

USB-C 之前的世界

还记得 USB-C 出现之前吗?每个设备都有自己独特的接口:打印机用并口、手机用 Mini-USB、相机用专用数据线。开发者想接入一个新服务,就得学习它独有的 API

MCP 就是 AI 世界的 USB-C。不管背后的工具是什么 —— 数据库查询、文件操作、代码执行 —— AI 都用同一种方式调用。Ruflo 的 MCP 服务器是整个系统的「神经中枢」。

💡
为什么这很重要?

没有 MCP 之前,每个 AI 工具都得自己实现一套「怎么被调用」的逻辑。有了 MCP,工具提供者只需实现一个标准接口,就能被任何支持 MCP 的 AI 使用。网络效应让整个生态快速膨胀。

MCP 服务器内部结构

Ruflo 的 MCP 服务器不是简单的消息转发器。它有连接池、会话管理、工具注册表和多种传输方式。点击组件了解详情:

传输层

⌨️
stdio
🌐
HTTP
WebSocket

核心组件

📋
工具注册表
🔐
会话管理器
🔗
连接池
点击任意组件了解它的职责

MCP 服务器如何启动

CODE
// mcp/server.ts —— V3 MCP 服务器
export class MCPServer extends EventEmitter {
  private readonly toolRegistry: ToolRegistry;
  private readonly sessionManager: SessionManager;

  async start(): Promise<void> {
    const startTime = performance.now();
    this.transport = createTransport(config);
    await this.registerBuiltInTools();
    this.startupDuration = performance.now() - startTime;
  }
}
中文解读

MCP 服务器继承 EventEmitter,支持事件驱动

工具注册表:管理所有可调用的工具

会话管理器:追踪客户端连接状态

启动方法,用 performance.now 精确计时

创建传输层(stdio / HTTP / WebSocket)

注册所有内置 MCP 工具

记录启动耗时,目标 <400ms

一个请求的完整旅程

当 Claude 说「帮我生成一个测试」,这个请求如何在 MCP 服务器内流转?点击「下一步」逐步追踪:

C
Claude
R
路由器
T
工具注册表
H
工具执行
点击「下一步」追踪请求

一个 MCP 工具长什么样

每个工具都有四个要素:名称、描述、输入参数 Schema 和处理函数。看看 agent/spawn 工具的定义:

CODE
export const spawnAgentTool: MCPTool = {
  name: 'agent/spawn',
  description: '生成指定类型的新代理',
  inputSchema: {
    type: 'object',
    properties: {
      agentType: { type: 'string' },
      priority: { enum: ['low','normal','high'] }
    },
    required: ['agentType']
  },
  handler: async (input, ctx) => { ... },
  category: 'agent'
};
中文解读

工具名称:agent/spawn(用斜杠分层,类似文件路径)

一句话描述工具做什么(Claude 靠这个决定什么时候用)

输入参数的 JSON Schema 定义

agentType:字符串,代理类型

priority:可选的优先级枚举

必填参数:只有 agentType 是必须的

处理函数:实际执行逻辑(异步)

分类标签:方便按类别筛选工具

插件系统:MCP 的应用商店

Ruflo 有 32 个官方插件,涵盖安全、测试、架构、运维。每个插件通过 扩展点 机制注册工具。插件管理器的核心逻辑:

🔌
加载与验证

检查版本兼容性、依赖是否就绪、配置是否合法

📋
扩展点注册

插件的 handler 按优先级排序,同一扩展点可有多个插件响应

🔄
热替换

支持不重启服务器的情况下替换插件(reload),先卸载再加载

🛡️
依赖保护

卸载插件时检查是否有其他插件依赖它,防止级联崩溃

三种传输方式对比

// 标准输入输出模式

$ claude mcp add ruflo -- npx ruflo@latest mcp start

// Claude Code 直接通过 stdin/stdout 通信

→ 请求: {"method": "tools/call", "params": {...}}

← 响应: {"result": {"agentId": "agent-xxx"}}

// 无需网络端口,最安全,推荐模式

stdio 是默认且推荐的模式 —— 无需网络端口,安全性最高

模块三测验

MCP 最核心的价值是什么?

如果你的 MCP 服务器运行在生产环境,安全团队最推荐哪种传输方式?

当插件 B 依赖插件 A 时,如果你尝试卸载插件 A,会发生什么?

04

记忆与学习

从「金鱼记忆」到「终身学习」—— 代理如何跨会话记忆和自我进化

一条金鱼的故事

普通 AI 代理就像一条金鱼 —— 每次对话都是全新的开始,昨天解决过的问题今天要重新摸索。你跟它说「记住我喜欢用 Tailwind」,下次对话它照样给你写原生 CSS。

Ruflo 给每条「金鱼」装上了一颗海马体。通过 向量记忆SONA 学习系统,代理能记住过去、积累经验、越用越聪明。

1

执行任务

2

提取成功模式

3

向量化存储

4

下次智能匹配

四种记忆,四种用途

Ruflo 借鉴认知科学的分类,把代理记忆分为四种:

📖

情节记忆

「上次修那个支付 bug 时,问题出在时区处理上。」记住具体事件的上下文,方便日后参考。类似你的工作日志。

📚

语义记忆

「这个项目用 Next.js 14 + App Router。」存储事实性知识,不需要每次重新发现。类似团队 Wiki。

🔧

程序记忆

「遇到 CORS 错误,先检查 middleware 的 origin 配置。」存储解决问题的步骤模式。类似 SOP 手册。

工作记忆

「当前任务需要修改 3 个文件:api/auth.ts、hooks/useAuth.ts、pages/login.tsx。」短期上下文,任务完成后可清理。

记忆存储如何工作

CODE
// mcp/tools/memory-tools.ts
const storeMemorySchema = z.object({
  content: z.string().min(1),
  type: z.enum([
    'episodic', 'semantic',
    'procedural', 'working'
  ]).default('episodic'),
  importance: z.number().min(0).max(1),
  ttl: z.number().positive().optional()
});
中文解读

用 Zod 定义记忆存储的输入验证规则

content:记忆内容,至少 1 个字符(不能存空记忆)

type:记忆类型,四种选一,默认是情节记忆

情节记忆、语义记忆、程序记忆、工作记忆

importance:重要性评分 0-1(影响检索排序)

ttl:存活时间(毫秒),工作记忆可以设过期时间

记忆搜索:不只是关键词

Ruflo 支持 语义搜索、关键词搜索和混合搜索三种模式:

CODE
const searchMemorySchema = z.object({
  query: z.string().min(1),
  searchType: z.enum([
    'semantic', 'keyword', 'hybrid'
  ]).default('hybrid'),
  minRelevance: z.number()
    .min(0).max(1).optional(),
  limit: z.number().default(10)
});
中文解读

搜索查询文本(至少 1 个字符)

搜索类型:语义(向量匹配)、关键词(全文检索)、混合(两者结合)

默认使用混合搜索,兼顾准确性和覆盖率

最低相关度阈值:低于此分数的结果不返回

返回结果数量上限,默认 10 条

代理学习对话实录

看看一个代理如何从记忆中「找回」过去的成功经验:

快到什么程度?

Ruflo 使用 HNSW 索引来加速记忆检索。AgentDB 号称比暴力搜索快 150-12,500 倍:

150x 小数据集(1K 条记忆)的搜索加速比
1,250x 中等数据集(10K 条记忆)的搜索加速比
12,500x 大数据集(100K+ 条记忆)的搜索加速比
<1ms SONA 模式匹配延迟(从成功经验中学习)
0.89 智能路由准确率(89% 的任务能被分配到最佳代理)
⚠️
性能数字的真相

这些加速比是理想条件下的 benchmark 数据。实际使用中,加速比取决于记忆内容的质量、向量化模型的选择和查询的复杂度。但即使打个 10 倍折扣,也比暴力搜索快了十几倍。

模块四测验

回顾四种记忆类型的定义。哪种存储的是「怎么做的步骤」?">

「遇到 CORS 错误,先检查 middleware 的 origin 配置」属于哪种记忆类型?

想想:语义搜索擅长什么?关键词搜索擅长什么?默认选的 hybrid 又是什么?">

为什么 Ruflo 默认使用 hybrid(混合)搜索而不是纯语义搜索?

05

企业级联邦

跨团队、跨组织、跨信任边界的代理协作 —— 安全地共享智能,不泄露数据

两个国家如何做生意

两个国家做生意,不需要把国库打开让对方看。双方有大使馆验证身份,贸易商品经过海关检查,合同有国际仲裁保障。信任是逐步建立的 —— 第一次合作小额试水,合作顺利了才做大单。

Ruflo 的 联邦 系统就是这个逻辑的代码实现。两个公司的代理可以协作完成任务,但客户的个人信息、API 密钥等敏感数据永远不会离开自己的服务器。

💡
关键区别

普通 API 集成是「把数据发给对方处理」。联邦是「把任务发给对方代理执行,但敏感数据先脱敏」。数据不离开本地,只有处理结果回来。

一条消息的跨国旅行

当 Team A 的代理向 Team B 发送协作请求,消息要经过一条精心设计的安全管道。点击「下一步」追踪全过程:

A
Team A 代理
P
PII 脱敏
S
签名加密
E
加密通道
B
Team B 代理
点击「下一步」追踪消息

信任是靠行为积累的

联邦中的信任不是「要么信要么不信」的二选一,而是一个 0-1 之间的连续分数,由四个维度加权计算:

40%
任务成功率

对方完成你委派的任务的比率。做得越多越靠谱,权重最高。

20%
在线时长

对方服务的可用性。经常掉线的伙伴,可信度自然降低。

20%
威胁行为检测

是否尝试过发送恶意指令、探测系统漏洞。任何一次威胁行为都会大幅扣分。

20%
数据完整性

返回的结果是否可验证、有没有篡改痕迹。数据完整性出了问题,信任立即降级。

⚠️
不对称的信任升降级

信任升级需要历史积累(多次成功合作),但信任降级是瞬间的。一次威胁行为检测到,信任分立即暴跌。这是有意为之的:宁可误判也不冒险。

14 种敏感信息的自动脱敏

Ruflo 内置 PII 检测管道,在消息离开本机之前自动扫描 14 种敏感数据:

🔒
检测 → 处理

邮箱、电话、SSN、信用卡、API 密钥、JWT token 等 14 种类型自动识别

🎯
四级策略

BLOCK(阻止发送)/ REDACT(替换为 ***)/ HASH(哈希脱敏)/ PASS(允许通过)

📊
按信任等级适配

高信任伙伴可以看更多数据,低信任伙伴看到的是被大量脱敏的版本

如何证明「我是我」

联邦使用 mTLS + ed25519 双重验证:

CODE
# 联邦初始化 —— 生成密钥对
$ npx claude-flow federation init

# 加入对方联邦端点
$ npx claude-flow federation join \
  wss://team-b.example.com:8443

# 发送任务(PII 自动脱敏)
$ npx claude-flow federation send \
  --to team-b \
  --type task-request \
  --message "分析交易异常模式"
中文解读

初始化联邦,生成 ed25519 密钥对(公钥+私钥)

加入 Team B 的联邦端点(WebSocket 安全连接)

端口 8443 是标准联邦通信端口

向 Team B 发送协作任务

指定目标团队和消息类型

消息内容:注意这是脱敏后的版本,不含任何客户数据

合规不是附加题,是内置功能

每条联邦消息都产生结构化审计记录,支持三种合规模式:

🏥

HIPAA

医疗数据合规:患者信息不得离开原始系统,联邦消息必须完全脱敏。审计日志保留 6 年。

🔒

SOC2

安全合规:所有联邦操作可追溯,信任变更需审计。定期生成合规报告。

🇪🇺

GDPR

欧盟数据保护:PII 处理需明确策略,数据主体有「被遗忘权」。跨境传输需加密。

模块五测验

在联邦安全管道中,PII 脱敏发生在哪一步?

看看信任评分的四个维度和它们的权重。哪个维度占比最大?">

如果你的联邦伙伴任务成功率很高但经常掉线,对信任分数的影响是?

两个团队使用联邦协作时,以下哪项最能描述数据流向?