475 lines
15 KiB
Markdown
475 lines
15 KiB
Markdown
# OpenClaw & Hermes Agent 对比分析 — Metona 改进路线图
|
||
|
||
> 基于 2026 年 4 月对 OpenClaw 和 Hermes Agent 两个开源 AI Agent 项目的深度研究,
|
||
> 梳理 Metona Ollama Desktop 可吸收和改进的功能点。
|
||
|
||
---
|
||
|
||
## 一、项目概览
|
||
|
||
### OpenClaw(原 Clawdbot)
|
||
|
||
- **定位**:个人 AI 助手运行平台(Gateway 中心化架构)
|
||
- **核心哲学**:编排 + 生态 — 你配置模型、工具、通道,网关负责路由
|
||
- **GitHub Stars**:6 万+(2026 年初现象级项目)
|
||
- **特点**:技能市场成熟、多通道接入、团队协作友好、生态丰富
|
||
|
||
### Hermes Agent(Nous Research)
|
||
|
||
- **定位**:自进化 AI 智能体(Learning Agent 架构)
|
||
- **核心哲学**:学习循环 — Agent 从经验中积累技能,越用越强
|
||
- **GitHub Stars**:6.4 万+(2026 年 2-4 月爆火)
|
||
- **特点**:技能自动生成、分层记忆、执行轨迹反哺、多实例隔离
|
||
|
||
### Metona Ollama Desktop
|
||
|
||
- **定位**:本地 Ollama 桌面 AI Agent 客户端(Electron + TypeScript)
|
||
- **核心哲学**:原生桌面体验 — 零配置、全离线、系统级集成
|
||
- **差异化优势**:系统托盘、原生文件对话框、工作空间面板、暖色调 UI
|
||
|
||
### 架构对比
|
||
|
||
```
|
||
OpenClaw: Gateway 中心化 → 路由/编排/生态 → 偏「平台」
|
||
Hermes: 学习循环核心 → 记忆/技能/进化 → 偏「个体智能体」
|
||
Metona: Electron 桌面 → 工具调用/UI → 偏「客户端」
|
||
|
||
Metona 进化方向:
|
||
当前 = 工具调用客户端
|
||
目标 = 会学习的桌面 Agent(吸收 Hermes 的学习能力 + OpenClaw 的工程化能力)
|
||
```
|
||
|
||
---
|
||
|
||
## 二、从 Hermes Agent 吸收
|
||
|
||
### 1. 技能自动生成(Skill Learning Loop)🔴 P0
|
||
|
||
**Hermes 做法**
|
||
|
||
完成复杂任务后自动将执行轨迹抽取为结构化 Skill,包含:
|
||
- 任务分解步骤
|
||
- 关键判断节点
|
||
- 潜在陷阱
|
||
- 验证方式
|
||
|
||
下次遇到类似任务时直接复用已有技能,跳过重新推理。多次使用中持续优化技能实现。
|
||
|
||
**Metona 现状**
|
||
|
||
有 ReAct 执行轨迹记录(`traces` 表),但仅用于回溯查看,没有自动提炼为可复用技能。
|
||
|
||
**改进方案**
|
||
|
||
1. 在 `traces` 表基础上,Agent Loop 结束后自动分析执行轨迹
|
||
2. 提取成功的工具调用序列 → 保存为 `skills` 表
|
||
3. 下次新会话检索匹配的 skill → 优先复用
|
||
4. 技能质量随使用次数迭代优化
|
||
|
||
```
|
||
新表结构:
|
||
skills:
|
||
id TEXT PRIMARY KEY
|
||
name TEXT -- 技能名称
|
||
description TEXT -- 技能描述
|
||
trigger_pattern TEXT -- 触发条件(关键词/意图模式)
|
||
tool_chain TEXT -- 工具调用链(JSON 数组)
|
||
success_count INTEGER -- 成功次数
|
||
fail_count INTEGER -- 失败次数
|
||
avg_duration INTEGER -- 平均执行时长(ms)
|
||
created_at INTEGER
|
||
updated_at INTEGER
|
||
last_used_at INTEGER
|
||
```
|
||
|
||
Agent Loop 新增流程:
|
||
|
||
```
|
||
任务完成 → 分析 traces → 提取工具链模式 → 判断是否可复用
|
||
→ 新技能?→ 创建 skill 记录
|
||
→ 匹配已有技能?→ 更新成功率、优化参数
|
||
→ 下次同类任务 → 优先使用 skill → 跳过推理直接执行
|
||
```
|
||
|
||
### 2. 分层记忆 + 用户画像模型 🟡 P1
|
||
|
||
**Hermes 做法**
|
||
|
||
- `memory.md`:事实卡片(技术栈、项目上下文、常用工具)
|
||
- `user.md`:用户画像(角色、领域经验、编码风格、偏好)
|
||
- 构建一个「关于用户的深层模型」,跨会话持续积累
|
||
|
||
**Metona 现状**
|
||
|
||
有 fact/preference/rule 三类记忆 + FTS5 搜索 + 向量语义搜索。但没有独立的用户画像系统,不理解「用户是谁」。
|
||
|
||
**改进方案**
|
||
|
||
1. 新增 `user_profiles` 表或独立的 `user.md` 文件
|
||
2. 自动推断用户画像:
|
||
- 技术栈偏好(Python/TypeScript/Go...)
|
||
- 编码风格(verbose/compact、type hints/any)
|
||
- 常用工具链
|
||
- 工作时间段
|
||
- 对错误的容忍度
|
||
3. 记忆注入时区分层级:
|
||
- 画像 → 决策上下文(决定 Agent 的行为风格)
|
||
- 偏好 → 行为引导(决定具体操作方式)
|
||
- 事实 → 参考信息(决定知识引用)
|
||
|
||
```
|
||
user_profiles 表:
|
||
id TEXT PRIMARY KEY
|
||
role TEXT -- 角色(后端工程师/全栈/数据科学家...)
|
||
tech_stack TEXT -- 技术栈(JSON 数组)
|
||
code_style TEXT -- 编码风格描述
|
||
experience TEXT -- 经验描述
|
||
work_hours TEXT -- 工作时间段
|
||
error_tolerance TEXT -- 错误容忍度(high/medium/low)
|
||
updated_at INTEGER
|
||
```
|
||
|
||
### 3. 执行轨迹导出 → 自训练数据 🔵 P3
|
||
|
||
**Hermes 做法**
|
||
|
||
将工具调用轨迹导出为训练数据,可用于后续模型微调。Agent 不仅在「用模型」,也在不断生产可以反哺模型的训练数据。
|
||
|
||
**Metona 现状**
|
||
|
||
`traces` 表已记录每步 Thought → Action → Observation,但没有导出功能。
|
||
|
||
**改进方案**
|
||
|
||
1. 新增「导出训练数据」功能
|
||
2. 将 traces 转换为 SFT 格式:
|
||
```json
|
||
{
|
||
"instruction": "帮我查询项目中所有 TypeScript 文件",
|
||
"input": "",
|
||
"output": "我来帮你搜索...",
|
||
"tool_calls": [
|
||
{"name": "search_files", "arguments": {"path": ".", "query": "*.ts"}}
|
||
],
|
||
"observations": ["找到 42 个文件..."],
|
||
"final_answer": "项目中有 42 个 TypeScript 文件..."
|
||
}
|
||
```
|
||
3. 设置中新增「允许导出训练数据」开关
|
||
4. 导出格式支持 JSON / JSONL
|
||
|
||
---
|
||
|
||
## 三、从 OpenClaw 吸收
|
||
|
||
### 4. Heartbeat 主动检查机制 🟢 P2
|
||
|
||
**OpenClaw 做法**
|
||
|
||
Agent 定期(默认 30 分钟)主动检查邮箱、日历、通知等,有事才通知用户,没事保持安静(`HEARTBEAT_OK`)。支持在 `HEARTBEAT.md` 中配置检查项。
|
||
|
||
**Metona 现状**
|
||
|
||
纯被动模式,用户不说话就不动。
|
||
|
||
**改进方案**
|
||
|
||
1. 新增后台 heartbeat 定时器(可配置间隔,默认关闭)
|
||
2. 可配置检查项:
|
||
- Ollama 服务连接状态
|
||
- 磁盘空间(workspace 目录)
|
||
- 新模型可用性(对比 `ollama list` 和本地列表)
|
||
- 长时间未保存的会话
|
||
3. 有异常时通过 Electron Notification API 推送系统通知
|
||
4. 检查结果写入 `heartbeat-state.json` 避免重复告警
|
||
|
||
### 5. Cron 定时任务 🔵 P4
|
||
|
||
**OpenClaw 做法**
|
||
|
||
支持两种调度:
|
||
- `at`:一次性定时(ISO-8601 时间戳)
|
||
- `cron`:周期性调度(cron 表达式 + 时区)
|
||
|
||
任务类型:
|
||
- `systemEvent`:注入文本到主会话
|
||
- `agentTurn`:在隔离会话中执行 Agent 任务
|
||
|
||
**Metona 现状**
|
||
|
||
无定时任务功能。
|
||
|
||
**改进方案**
|
||
|
||
1. 集成轻量级调度器(`cron` npm 包或 `setInterval`)
|
||
2. 预设任务模板:
|
||
- 每日对话摘要(自动总结当天对话)
|
||
- 定期备份(导出会话为 JSON)
|
||
- 旧会话清理(超过 N 天的归档)
|
||
- Ollama 模型更新检查
|
||
3. 任务结果直接显示在聊天区域或工作空间面板
|
||
|
||
### 6. MCP(Model Context Protocol)生态对接 🔵 P3
|
||
|
||
**OpenClaw + Hermes**
|
||
|
||
均支持 MCP 协议,可连接外部工具和 IDE(Cursor、VS Code、Claude Desktop)。工具从硬编码 → 动态发现。
|
||
|
||
**Metona 现状**
|
||
|
||
25 个内置工具硬编码在 `tool-registry.ts`,无法扩展外部工具。
|
||
|
||
**改进方案**
|
||
|
||
1. 实现 MCP Client(连接外部 MCP Server)
|
||
2. 工具注册表重构:
|
||
- 内置工具(现有 25 个)
|
||
- MCP 工具(通过配置文件或 UI 添加)
|
||
3. 用户可自行添加 MCP 工具,如:
|
||
- 数据库查询 MCP Server
|
||
- 外部 API 调用 MCP Server
|
||
- 专用硬件控制 MCP Server
|
||
4. 设置面板新增「MCP 工具管理」页面
|
||
|
||
### 7. 浏览器控制(Browser Automation) 🔵 P3
|
||
|
||
**OpenClaw**
|
||
|
||
内置 Playwright 浏览器自动化,支持截图、表单填写、页面交互。
|
||
|
||
**Hermes**
|
||
|
||
「全网页与浏览器控制」,真正的网页浏览能力。
|
||
|
||
**Metona 现状**
|
||
|
||
只有 `web_fetch`(HTTP 抓取纯文本)和 `web_search`(搜索引擎),无法交互式操作网页。
|
||
|
||
**改进方案**
|
||
|
||
1. 集成 Playwright 或 Puppeteer 作为新工具
|
||
2. 新增工具集:
|
||
- `browser_open`:打开 URL
|
||
- `browser_click`:点击元素
|
||
- `browser_type`:输入文本
|
||
- `browser_screenshot`:截图
|
||
- `browser_extract`:提取页面数据
|
||
3. 在工作空间面板显示浏览器实时预览
|
||
4. 注意:会增加应用体积约 200MB(Chromium 二进制),可设为可选组件
|
||
|
||
### 8. 子代理委派(Sub-Agent Delegation) 🔵 P3
|
||
|
||
**OpenClaw**
|
||
|
||
`sessions_spawn` 生成独立子会话,支持 `run`(一次性)和 `session`(持久化)两种模式。子 Agent 完成后自动汇报。
|
||
|
||
**Hermes**
|
||
|
||
生成独立子代理处理并行工作流,零上下文成本。
|
||
|
||
**Metona 现状**
|
||
|
||
单 Agent Loop,串行执行,最多 15 轮。
|
||
|
||
**改进方案**
|
||
|
||
1. 主 Agent 识别可并行任务后 spawn 子 Agent
|
||
2. 子 Agent 独立执行(独立消息上下文)
|
||
3. 完成后汇报结果给主 Agent
|
||
4. 在聊天区域以可折叠卡片展示子 Agent 进度
|
||
5. 实现方式:复用当前 Agent Loop,但起始消息不同
|
||
|
||
---
|
||
|
||
## 四、从两者共同吸收(通用最佳实践)
|
||
|
||
### 9. 会话管理增强 🟡 P1
|
||
|
||
| 功能 | OpenClaw | Hermes | Metona 现状 | 改进方案 |
|
||
|------|----------|--------|------------|----------|
|
||
| `/new` `/reset` | ✅ | ✅ | ✅ 已有 | — |
|
||
| `/retry` 重试 | ✅ | ✅ | ❌ | 回退到上一轮消息,重新生成 |
|
||
| `/undo` 撤销 | ✅ | ✅ | ❌ | 删除最后一条用户/AI 消息对 |
|
||
| `/compress` 压缩 | ✅ | ✅ | ❌ | LLM 摘要长对话,压缩上下文 |
|
||
| `/usage` 统计 | ✅ | ✅ | ⚠️ 部分 | 按日/周/月 token 消耗统计 |
|
||
| `/model` 切换 | ✅ | ✅ | ⚠️ 下拉框 | 输入框快速切换,支持模糊搜索 |
|
||
|
||
**`/retry` 实现方案**:
|
||
|
||
```typescript
|
||
// 从 messages 数组中找到最后一个 user 消息的位置
|
||
// 删除该位置之后的所有消息(assistant 回复 + 可能的 tool 调用)
|
||
// 用相同的 user 消息重新发起 Agent Loop
|
||
```
|
||
|
||
**`/compress` 实现方案**:
|
||
|
||
```typescript
|
||
// 将 messages 中间部分(保留首尾各 2 条)用 LLM 做摘要
|
||
// 摘要结果作为 system 消息注入
|
||
// 大幅减少 token 消耗,保留关键上下文
|
||
```
|
||
|
||
### 10. 诊断系统(Doctor) 🟢 P2
|
||
|
||
**Hermes 做法**
|
||
|
||
`hermes doctor` 一键诊断所有配置问题:连接、模型、工具权限、磁盘空间等。
|
||
|
||
**Metona 现状**
|
||
|
||
设置面板只有 Ollama 连接检测。
|
||
|
||
**改进方案**
|
||
|
||
在设置面板新增「系统诊断」页面,检查项:
|
||
|
||
| 检查项 | 说明 |
|
||
|--------|------|
|
||
| Ollama 连接 | 服务地址可达、版本号 |
|
||
| 模型可用性 | 选中模型是否已下载、是否正在运行 |
|
||
| Tool Calling 支持 | 当前模型是否支持 function calling |
|
||
| Vision 支持 | 当前模型是否支持图片 |
|
||
| 磁盘空间 | workspace 目录剩余空间 |
|
||
| SQLite 完整性 | 数据库文件完整性检查 |
|
||
| 工具权限 | 安全配置是否合理 |
|
||
| 版本信息 | Metona 版本、Electron 版本、Node 版本 |
|
||
|
||
### 11. 人格/模式切换 🟢 P2
|
||
|
||
**OpenClaw**
|
||
|
||
`SOUL.md` 定义人格和行为准则。
|
||
|
||
**Hermes**
|
||
|
||
`/personality [name]` 切换不同人格模式。
|
||
|
||
**Metona 现状**
|
||
|
||
只有 system prompt 自定义设置。
|
||
|
||
**改进方案**
|
||
|
||
1. 预设多个人格模板:
|
||
|
||
| 人格 | 说明 | 温度 | 工具集 |
|
||
|------|------|------|--------|
|
||
| 编程助手 | 严谨、注重代码质量 | 0.3 | 文件操作 + Git + 命令 |
|
||
| 写作助手 | 流畅、有文采 | 0.8 | 文件操作 + 网络搜索 |
|
||
| 数据分析师 | 精确、数据驱动 | 0.2 | 文件操作 + 命令 |
|
||
| 翻译 | 准确、信达雅 | 0.4 | 文件操作 |
|
||
| 通用助手 | 平衡 | 0.7 | 全部 |
|
||
|
||
2. 每个人格有独立的 system prompt + 工具集 + 温度设置
|
||
3. 在 Header 或 Model Bar 快速切换
|
||
4. 用户可创建自定义人格
|
||
|
||
### 12. 响应速度优化 ⚡
|
||
|
||
**Hermes 核心优势**
|
||
|
||
比 OpenClaw 响应更快,社区反馈明显。
|
||
|
||
**Metona 可优化方向**
|
||
|
||
1. **模型预热**:切换模型后发送空请求保持 `keep_alive`,减少首次推理延迟
|
||
2. **工具并行执行**:当前多个工具串行执行,互相独立的工具可并行
|
||
```typescript
|
||
// 改进前:串行
|
||
for (const call of toolCalls) {
|
||
await executeTool(call);
|
||
}
|
||
|
||
// 改进后:检测依赖关系,并行执行独立工具
|
||
const independentCalls = toolCalls.filter(/* 无依赖 */);
|
||
const dependentCalls = toolCalls.filter(/* 有依赖 */);
|
||
await Promise.all(independentCalls.map(c => executeTool(c)));
|
||
for (const c of dependentCalls) await executeTool(c);
|
||
```
|
||
3. **上下文智能管理**:超过 `num_ctx` 时自动摘要而非截断,保留更多信息
|
||
4. **工具结果预处理**:在格式化前预计算,减少序列化开销
|
||
|
||
---
|
||
|
||
## 五、优先级排序
|
||
|
||
### 按投入产出比排序
|
||
|
||
| 优先级 | 功能 | 复杂度 | 用户价值 | 来源 |
|
||
|--------|------|--------|----------|------|
|
||
| 🔴 P0 | 技能自动生成(Skill Loop) | 高 | ⭐⭐⭐⭐⭐ | Hermes |
|
||
| 🔴 P0 | `/retry` `/undo` 会话操作 | 低 | ⭐⭐⭐⭐⭐ | 共同 |
|
||
| 🟡 P1 | 用户画像模型 | 中 | ⭐⭐⭐⭐ | Hermes |
|
||
| 🟡 P1 | 上下文压缩 (`/compress`) | 中 | ⭐⭐⭐⭐ | 共同 |
|
||
| 🟡 P1 | 工具并行执行优化 | 中 | ⭐⭐⭐⭐ | 共同 |
|
||
| 🟢 P2 | Heartbeat 主动检查 | 低 | ⭐⭐⭐ | OpenClaw |
|
||
| 🟢 P2 | 人格模板切换 | 低 | ⭐⭐⭐ | 共同 |
|
||
| 🟢 P2 | 诊断系统 (`doctor`) | 低 | ⭐⭐⭐ | Hermes |
|
||
| 🔵 P3 | MCP 生态对接 | 高 | ⭐⭐⭐⭐ | 共同 |
|
||
| 🔵 P3 | 浏览器控制 | 高 | ⭐⭐⭐ | 共同 |
|
||
| 🔵 P3 | 子代理委派 | 高 | ⭐⭐⭐ | 共同 |
|
||
| 🔵 P3 | 训练数据导出 | 中 | ⭐⭐ | Hermes |
|
||
| ⚪ P4 | Cron 定时任务 | 中 | ⭐⭐ | OpenClaw |
|
||
|
||
### 建议实施路线
|
||
|
||
**v4.1 — 会话增强(快速见效)**
|
||
|
||
- `/retry` 重试上一轮
|
||
- `/undo` 撤销最后消息
|
||
- `/compress` 上下文压缩
|
||
- 工具并行执行优化
|
||
|
||
**v4.2 — 智能进化(核心差异化)**
|
||
|
||
- 技能自动生成系统(Skill Loop)
|
||
- 用户画像模型
|
||
- 人格模板切换
|
||
|
||
**v4.3 — 生态扩展(长期建设)**
|
||
|
||
- MCP Client 支持
|
||
- Heartbeat 主动检查
|
||
- 诊断系统
|
||
- 子代理委派
|
||
|
||
**v5.0 — 全面进化**
|
||
|
||
- 浏览器控制
|
||
- 训练数据导出
|
||
- Cron 定时任务
|
||
- 多实例隔离
|
||
|
||
---
|
||
|
||
## 六、Metona 的差异化定位
|
||
|
||
```
|
||
OpenClaw = 平台型(Gateway + Skills + 多通道 + 团队)
|
||
Hermes = 进化型(学习循环 + 记忆 + 技能自动生成)
|
||
Metona = 桌面型(原生体验 + 系统集成 + 离线优先)
|
||
|
||
Metona 的独特价值:
|
||
✅ 零配置启动(npm start 即用)
|
||
✅ 系统托盘 + 原生文件对话框
|
||
✅ 工作空间面板(终端 + 文件浏览器一体化)
|
||
✅ 暖色调 UI(非暗色主题,长时间使用不疲劳)
|
||
✅ 全离线运行(数据不离开本机)
|
||
|
||
待吸收:
|
||
🔜 技能自动生成(Hermes)
|
||
🔜 用户画像模型(Hermes)
|
||
🔜 会话管理增强(共同)
|
||
🔜 MCP 生态对接(共同)
|
||
|
||
最终形态 = 会学习的桌面 Agent
|
||
= Metona 的原生桌面体验
|
||
+ Hermes 的学习进化能力
|
||
+ OpenClaw 的工程化实践
|
||
```
|
||
|
||
---
|
||
|
||
*最后更新:2026-04-18*
|