Hermes Agent 架构深度解析:最先进的开源 AI Agent 操作系统???

0 阅读19分钟
> 基于 Hermes Agent 项目的全面架构分析,深入解读其设计理念、核心组件和实现细节。

## 相关资源


- **在线查看**: [https://queenbeecai.com/html-page/e02a5fb2-54f8-4dc3-bb87-321c77c27f04/hermes-architecture-tech.html](https://queenbeecai.com/html-page/e02a5fb2-54f8-4dc3-bb87-321c77c27f04/hermes-architecture-tech.html)
- **总体效果不如AuroraClaw**[:https://queenbeecai.com/](https://queenbeecai.com/)


![请添加图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/82fd0e0da06c452496c3b063eec1a344~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6ZmI5rWp5aW9:q75.awebp?rk3s=f64ab15b&x-expires=1776843735&x-signature=kH79bp9gIsPrnq%2F7OXxo6%2FQP5zg%3D)


## 前言


Hermes Agent 是一个**事件驱动的分层架构**系统,结合了**插件化设计**和**微服务化组件**模式。它可以看作是一个现代的 AI Agent 操作系统,提供了完整的运行时环境。


在深入了解架构之前,我们先客观分析一下它的优缺点:


## ⚖️ 优缺点分析


### ✨ 核心优势


**1. 极高性能并发**

- 智能工具调度实现 3 倍性能提升
- 线程池管理优化资源利用
- 错误隔离确保系统稳定性


**2. 插件化架构**

- 技能、工具、记忆系统完全插件化
- 支持动态加载和热更新
- 扩展能力极强


**3. 智能记忆系统**

- 多层记忆架构支持内置和外部记忆服务
- SQLite + FTS5 全文搜索
- 会话继承和上下文传递


**4. 多模型支持**

- 统一接口支持 20+ LLM 提供商
- 智能路由根据任务复杂度选择最合适的模型


**5. 企业级特性**

- 安全隔离、权限控制
- 审计日志、成本追踪
- 开箱即用的企业级功能


**6. 多平台适配**

- 支持 CLI、Telegram、Discord 等多种平台
- 统一 API 接口便于集成


### ⚠️ 潜在挑战


**1. 学习曲线陡峭**

- 架构复杂、概念众多
- 新手需要投入时间学习事件驱动、插件化等高级概念


**2. 系统复杂度高**

- 模块众多、依赖关系复杂
- 部署和运维需要一定的技术背景和经验


**3. 资源消耗较大**

- 运行需要较多内存和计算资源
- 特别是在并发处理大量工具调用时


**4. 生态仍在发展中**

- 相比 LangChain 等成熟框架,插件生态和社区支持还在成长阶段


**5. 安全性考量**

- 代码执行和工具调用能力强大
- 需要谨慎配置权限和输入验证


**6. 文档相对较少**

- 作为新兴项目,中文文档和教程资源相对有限
- 主要依赖英文文档


### 🎯 适用场景建议


**✅ 推荐使用:** 企业级 AI 应用、需要高度定制化的项目、追求性能和扩展性的团队、有多模型需求的场景


**❌ 暂不推荐:** 快速原型验证、Python 新手项目、简单聊天机器人、资源受限环境


### 架构特征


- **分层架构**:清晰分离表示层、业务逻辑层、数据层和工具层
- **事件驱动**:通过异步事件流处理用户交互和工具调用
- **插件化**:技能系统、工具系统、记忆系统都采用插件架构
- **微服务组件**:各功能模块高度解耦,可独立部署和扩展


---


## 核心数据流


### 完整的用户交互流程



![请添加图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/18d1032b4bff4da38503780a72105aa1~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6ZmI5rWp5aW9:q75.awebp?rk3s=f64ab15b&x-expires=1776843735&x-signature=FVyTVJDBjQWfSEg8IG3cq3sW3Sg%3D)



## 核心组件职责


### 1. 表示层 (Presentation Layer)


**主要文件:**

- `cli.py`: 交互式 CLI 界面,提供美观的终端用户体验
- `run_agent.py`: 核心代理运行器,处理对话循环和工具调用
- `hermes_cli/`: CLI 相关组件和界面逻辑


**职责:**

- 用户输入接收和验证
- 命令解析和路由
- 响应格式化和展示
- 用户界面状态管理


### 2. 业务逻辑层 (Business Logic Layer)


**`agent/auxiliary_client.py`** - 辅助模型客户端


```python
class AuxiliaryClient:
    """支持多种 LLM 提供商的统一客户端"""

    def __init__(self, provider, model, base_url):
        self.provider = provider
        self.model = model
        self.base_url = base_url

    def call_model(self, messages, tools=None):
        """统一的模型调用接口"""
        # 根据提供商选择适当的 API
        pass
```


**`agent/prompt_builder.py`** - 系统提示构建器


```python
class PromptBuilder:
    """组装完整的系统提示"""

    def build_system_prompt(self):
        """构建系统提示"""
        blocks = [
            self._get_base_persona(),      # 基础身份
            self._get_memory_context(),    # 记忆上下文
            self._get_skills_index(),      # 技能索引
            self._get_tools_list(),        # 工具列表
            self._get_platform_context(),  # 平台上下文
        ]
        return "\n\n".join(blocks)
```


### 3. 工具层 (Tools Layer)


**`tools/registry.py`** - 中央工具注册表


```python
class ToolRegistry:
    """单例注册表,管理所有工具"""

    def register_tool(self, tool_entry):
        """注册新工具"""
        self._tools[tool_entry.name] = tool_entry

    def get_tool(self, name):
        """获取工具处理器"""
        return self._tools.get(name)
```


**主要工具类别:**

- **文件操作**: `file_operations.py` - 文件读写、目录操作
- **终端工具**: `terminal_tool.py` - 命令执行、环境管理
- **Web 工具**: `web_tools.py` - HTTP 请求、网页抓取
- **MCP 工具**: `mcp_tool.py` - Model Context Protocol 集成


### 4. 数据层 (Data Layer)


**`hermes_state.py`** - SQLite 状态存储


```python
class HermesState:
    """持久化会话状态存储"""

    def __init__(self, db_path):
        self.db = sqlite3.connect(db_path)
        self._setup_fts5()  # 全文搜索支持

    def save_session(self, session_data):
        """保存会话数据"""
        pass

    def search_sessions(self, query):
        """全文搜索会话历史"""
        pass
```


---


## 核心设计模式


### 1. 注册表模式 (Registry Pattern)


**应用场景:** 工具系统、技能系统、提供商管理


**优势:**

- 集中管理所有工具
- 支持动态工具发现
- 便于权限控制和验证


### 2. 策略模式 (Strategy Pattern)


**应用场景:** 记忆系统、压缩算法、模型路由


```python
# 根据配置选择不同的记忆策略
config = load_config()
memory_provider = create_memory_provider(config.memory.provider)

# 运行时可以无缝切换
if config.memory.provider == "builtin":
    memory_provider = BuiltinMemoryProvider()
elif config.memory.provider == "honcho":
    memory_provider = HonchoMemoryProvider(api_key)
```


### 3. 观察者模式 (Observer Pattern)


**应用场景:** 会话状态变化、工具执行事件


```python
class EventManager:
    """事件管理器"""

    def __init__(self):
        self._listeners = defaultdict(list)

    def subscribe(self, event_type, callback):
        """订阅事件"""
        self._listeners[event_type].append(callback)

    def publish(self, event_type, data):
        """发布事件"""
        for callback in self._listeners[event_type]:
            callback(data)
```


---


## 高性能并发处理


### 工具并发执行策略


Hermes 实现了智能的工具并发执行系统,根据工具特性自动选择最佳执行策略。



![请添加图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/37ed2c1d8d8e4a3791ba53638761af40~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6ZmI5rWp5aW9:q75.awebp?rk3s=f64ab15b&x-expires=1776843735&x-signature=Qjj1VmYUSECZ%2B9wIZ7hfqgxHFg8%3D)


### 并发分类策略


```python
def _categorize_tools(self, tool_calls):
    """将工具调用分类为并发执行策略"""

    categories = {
        'parallel_readonly': [],    # 可绝对并行:只读工具
        'parallel_path_isolated': [], # 可并行:路径隔离的文件操作
        'sequential_interactive': [],  # 必须串行:交互式工具
        'sequential_conflicting': []   # 必须串行:路径冲突的操作
    }

    for tool_call in tool_calls:
        tool_name = tool_call.function.name
        tool_info = self.get_tool_info(tool_name)

        if tool_info.readonly:
            categories['parallel_readonly'].append(tool_call)
        # ... 其他分类逻辑

    return categories
```


### 性能数据


- **3倍** 性能提升(并行 vs 串行)
- **8个** 并发工作线程
- **180秒** 超时控制
- **4种** 执行策略


---


## 智能记忆系统


### 多层记忆架构


Hermes 的记忆系统采用多层架构,支持内置记忆和外部记忆服务的协同工作。


![请添加图片描述](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/13376270791b49e2be7a4aa818020fb9~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6ZmI5rWp5aW9:q75.awebp?rk3s=f64ab15b&x-expires=1776843735&x-signature=aC9Gds63kSR6jFBhXCfYFEbLXnk%3D)



### 记忆管理器


```python
class MemoryManager:
    """协调多个记忆提供者的管理器"""

    def __init__(self):
        # 内置提供者始终存在
        self._providers = [BuiltinMemoryProvider()]
        self._tool_to_provider = {}
        self._has_external = False

    def add_provider(self, provider):
        """添加外部记忆提供者(只能有一个)"""
        if self._has_external:
            raise ValueError("Only one external memory provider allowed")

        self._providers.append(provider)
        self._has_external = True
```


### 记忆提供者


**1. 内置记忆 (BuiltinMemoryProvider)**

- 基于文件系统的持久化记忆
- 从 MEMORY.md 读取
- 始终可用


**2. Honcho AI 记忆**

- 用户画像和上下文建模
- 提供智能记忆检索服务


**3. Mem0 记忆**

- 先进的记忆搜索和检索系统
- 支持语义搜索


---


## 插件化扩展机制


### 技能系统架构


Hermes 的技能系统采用完全插件化的设计,支持技能的动态加载、更新和卸载。


```python
class SkillManager:
    """技能生命周期管理器"""

    def install_skill(self, source, skill_name):
        """从各种来源安装技能"""
        if source.startswith("github://"):
            return self._install_from_github(source, skill_name)
        elif source.startswith("file://"):
            return self._install_from_local(source, skill_name)

    def update_skill(self, skill_name):
        """更新技能到最新版本"""
        skill = self.skills.get(skill_name)
        if skill.source_type == "github":
            self._update_github_skill(skill)
```


### 工具系统扩展


```python
# 工具装饰器
def tool(name, schema, **metadata):
    """工具装饰器"""
    def decorator(func):
        func._tool_name = name
        func._tool_schema = schema
        func._tool_description = metadata.get("description", "")
        return func
    return decorator

# 使用示例
@tool(
    name="custom_analysis",
    schema={
        "type": "object",
        "properties": {
            "data": {"type": "string", "description": "Data to analyze"}
        },
        "required": ["data"]
    },
    description="Custom data analysis tool"
)
def custom_analysis_tool(data):
    """自定义分析工具"""
    return {"result": "analysis complete"}
```


---


## 状态管理与持久化


### SQLite 状态存储


Hermes 使用 SQLite 数据库进行状态管理,支持 WAL 模式和 FTS5 全文搜索。


```sql
-- 会话表
CREATE TABLE sessions (
    id TEXT PRIMARY KEY,
    source TEXT NOT NULL,
    user_id TEXT,
    model TEXT,
    model_config TEXT,
    system_prompt TEXT,
    parent_session_id TEXT,
    started_at REAL NOT NULL,
    ended_at REAL,
    message_count INTEGER DEFAULT 0,
    tool_call_count INTEGER DEFAULT 0,
    input_tokens INTEGER DEFAULT 0,
    output_tokens INTEGER DEFAULT 0,
    estimated_cost_usd REAL,
    title TEXT
);

-- FTS5 全文搜索表
CREATE VIRTUAL TABLE messages_fts USING fts5(
    content,
    content_rowid=id,
    tokenizer='porter unicode61'
);
```


### 上下文压缩


```python
class ContextCompressor:
    """上下文压缩器"""

    def should_compress(self, messages, max_tokens):
        """判断是否需要压缩"""
        total_tokens = sum(msg.get('token_count', 0) for msg in messages)
        return total_tokens > max_tokens * self.threshold

    def compress_messages(self, messages):
        """压缩消息历史"""
        # 保护最新的 N 条消息
        protected_count = 20
        protected = messages[-protected_count:]
        compressible = messages[:-protected_count]

        # 分组压缩(按话题分组)
        groups = self._group_by_topic(compressible)

        # 为每个组生成摘要
        compressed_groups = []
        for group in groups:
            summary = self._summarize_group(group)
            compressed_groups.append({
                'role': 'system',
                'content': f"[Compressed] {summary}",
                'token_count': len(summary.split()) // 4
            })

        return compressed_groups + protected
```


---


## 架构设计原则


### 1. 单一职责原则 (Single Responsibility Principle)


每个组件只负责一个明确的功能领域:


- **ToolRegistry**: 只负责工具的注册和发现
- **MemoryManager**: 只负责记忆提供者的协调
- **ContextCompressor**: 只负责上下文压缩


### 2. 开闭原则 (Open-Closed Principle)


对扩展开放,对修改关闭:


- **新工具**: 只需注册到 ToolRegistry,无需修改现有代码
- **新技能**: 放到 skills/ 目录自动加载
- **新平台**: 实现平台适配器接口


### 3. 依赖倒置原则 (Dependency Inversion Principle)


依赖抽象接口而非具体实现:


```python
# 好的设计:依赖抽象
class AIAgent:
    def __init__(self, memory_provider: MemoryProvider):
        self.memory = memory_provider  # 依赖抽象接口

# 具体实现可以随时替换
builtin = BuiltinMemoryProvider()
honcho = HonchoMemoryProvider(api_key)

agent1 = AIAgent(builtin)
agent2 = AIAgent(honcho)
```


---


## 核心技术优势


### 1. 高性能并发


- **智能工具调度**: 根据工具特性自动选择并行或串行执行
- **线程池管理**: 最多 8 个并发工作线程
- **资源限制**: 防止资源耗尽和系统过载


### 2. 持久化记忆


- **SQLite + FTS5**: 支持全文搜索的会话存储
- **会话继承**: 支持会话链和上下文传递
- **多提供者**: 内置记忆 + 外部 AI 记忆服务


### 3. 插件化设计


- **技能系统**: 支持动态安装、更新、卸载技能
- **工具系统**: 统一的工具注册和执行接口
- **平台适配**: 支持 CLI、Telegram、Discord 等多平台


### 4. 多模型支持


- **统一接口**: 支持 20+ LLM 提供商
- **智能路由**: 根据任务复杂度选择合适的模型
- **成本优化**: 简单任务使用便宜模型,复杂任务使用强大模型


### 5. 智能上下文管理


- **自动压缩**: 接近 token 限制时自动压缩历史对话
- **成本优化**: 跟踪使用量和成本,支持预算控制
- **缓存策略**: 智能缓存减少重复 API 调用


### 6. 安全隔离


- **容器化执行**: Docker、SSH 远程执行环境
- **权限控制**: 基于信任级别的安全策略
- **输入验证**: 防止注入攻击和恶意输入


---


## 总结


Hermes Agent 本质上是一个 **AI Agent 操作系统**,提供了:


### 核心能力


1. **完整的运行时环境**: 从输入处理到响应生成的完整生命周期
2. **资源管理系统**: 内存、并发、存储的统一管理
3. **插件生态**: 技能、工具、平台的无限扩展能力
4. **智能决策**: 基于上下文的自动优化和路由


### 技术特色


- **现代化架构**: 采用最新的设计模式和最佳实践
- **高性能**: 智能并发执行和资源优化
- **可扩展**: 插件化设计支持无限扩展
- **企业级**: 安全性、可靠性和可维护性


### 适用场景


Hermes 既可以作为**个人助手**运行在笔记本电脑上,也可以扩展到**云端服务器**为企业级应用服务,展现出极强的适应性和扩展性。


这种架构设计使得 Hermes 成为当前最先进的开源 AI Agent 系统之一,为构建下一代 AI 应用提供了坚实的技术基础。





**标签**: `AI Agent` `Python` `架构设计` `LLM` `开源项目` `企业级应用` `插件化` `高性能` `智能系统` `技术架构`

基于 Hermes Agent 项目的全面架构分析,深入解读其设计理念、核心组件和实现细节。

请添加图片描述

Hermes Agent 是一个事件驱动的分层架构系统,结合了插件化设计微服务化组件模式。它可以看作是一个现代的 AI Agent 操作系统,提供了完整的运行时环境。

在深入了解架构之前,我们先客观分析一下它的优缺点:

1. 极高性能并发

  • 智能工具调度实现 3 倍性能提升
  • 线程池管理优化资源利用
  • 错误隔离确保系统稳定性

2. 插件化架构

  • 技能、工具、记忆系统完全插件化
  • 支持动态加载和热更新
  • 扩展能力极强

3. 智能记忆系统

  • 多层记忆架构支持内置和外部记忆服务
  • SQLite + FTS5 全文搜索
  • 会话继承和上下文传递

4. 多模型支持

  • 统一接口支持 20+ LLM 提供商
  • 智能路由根据任务复杂度选择最合适的模型

5. 企业级特性

  • 安全隔离、权限控制
  • 审计日志、成本追踪
  • 开箱即用的企业级功能

6. 多平台适配

  • 支持 CLI、Telegram、Discord 等多种平台
  • 统一 API 接口便于集成

1. 学习曲线陡峭

  • 架构复杂、概念众多
  • 新手需要投入时间学习事件驱动、插件化等高级概念

2. 系统复杂度高

  • 模块众多、依赖关系复杂
  • 部署和运维需要一定的技术背景和经验

3. 资源消耗较大

  • 运行需要较多内存和计算资源
  • 特别是在并发处理大量工具调用时

4. 生态仍在发展中

  • 相比 LangChain 等成熟框架,插件生态和社区支持还在成长阶段

5. 安全性考量

  • 代码执行和工具调用能力强大
  • 需要谨慎配置权限和输入验证

6. 文档相对较少

  • 作为新兴项目,中文文档和教程资源相对有限
  • 主要依赖英文文档

✅ 推荐使用: 企业级 AI 应用、需要高度定制化的项目、追求性能和扩展性的团队、有多模型需求的场景

❌ 暂不推荐: 快速原型验证、Python 新手项目、简单聊天机器人、资源受限环境

  • 分层架构:清晰分离表示层、业务逻辑层、数据层和工具层
  • 事件驱动:通过异步事件流处理用户交互和工具调用
  • 插件化:技能系统、工具系统、记忆系统都采用插件架构
  • 微服务组件:各功能模块高度解耦,可独立部署和扩展

请添加图片描述

1. 表示层 (Presentation Layer)

主要文件:

  • cli.py: 交互式 CLI 界面,提供美观的终端用户体验
  • run_agent.py: 核心代理运行器,处理对话循环和工具调用
  • hermes_cli/: CLI 相关组件和界面逻辑

职责:

  • 用户输入接收和验证
  • 命令解析和路由
  • 响应格式化和展示
  • 用户界面状态管理

2. 业务逻辑层 (Business Logic Layer)

agent/auxiliary_client.py - 辅助模型客户端

class AuxiliaryClient:
    """支持多种 LLM 提供商的统一客户端"""

    def __init__(self, provider, model, base_url):
        self.provider = provider
        self.model = model
        self.base_url = base_url

    def call_model(self, messages, tools=None):
        """统一的模型调用接口"""
        # 根据提供商选择适当的 API
        pass

agent/prompt_builder.py - 系统提示构建器

class PromptBuilder:
    """组装完整的系统提示"""

    def build_system_prompt(self):
        """构建系统提示"""
        blocks = [
            self._get_base_persona(),      # 基础身份
            self._get_memory_context(),    # 记忆上下文
            self._get_skills_index(),      # 技能索引
            self._get_tools_list(),        # 工具列表
            self._get_platform_context(),  # 平台上下文
        ]
        return "\n\n".join(blocks)

tools/registry.py - 中央工具注册表

class ToolRegistry:
    """单例注册表,管理所有工具"""

    def register_tool(self, tool_entry):
        """注册新工具"""
        self._tools[tool_entry.name] = tool_entry

    def get_tool(self, name):
        """获取工具处理器"""
        return self._tools.get(name)

主要工具类别:

  • 文件操作: file_operations.py - 文件读写、目录操作
  • 终端工具: terminal_tool.py - 命令执行、环境管理
  • Web 工具: web_tools.py - HTTP 请求、网页抓取
  • MCP 工具: mcp_tool.py - Model Context Protocol 集成

hermes_state.py - SQLite 状态存储

class HermesState:
    """持久化会话状态存储"""

    def __init__(self, db_path):
        self.db = sqlite3.connect(db_path)
        self._setup_fts5()  # 全文搜索支持

    def save_session(self, session_data):
        """保存会话数据"""
        pass

    def search_sessions(self, query):
        """全文搜索会话历史"""
        pass

1. 注册表模式 (Registry Pattern)

应用场景: 工具系统、技能系统、提供商管理

优势:

  • 集中管理所有工具
  • 支持动态工具发现
  • 便于权限控制和验证

2. 策略模式 (Strategy Pattern)

应用场景: 记忆系统、压缩算法、模型路由

# 根据配置选择不同的记忆策略
config = load_config()
memory_provider = create_memory_provider(config.memory.provider)

# 运行时可以无缝切换
if config.memory.provider == "builtin":
    memory_provider = BuiltinMemoryProvider()
elif config.memory.provider == "honcho":
    memory_provider = HonchoMemoryProvider(api_key)

3. 观察者模式 (Observer Pattern)

应用场景: 会话状态变化、工具执行事件

class EventManager:
    """事件管理器"""

    def __init__(self):
        self._listeners = defaultdict(list)

    def subscribe(self, event_type, callback):
        """订阅事件"""
        self._listeners[event_type].append(callback)

    def publish(self, event_type, data):
        """发布事件"""
        for callback in self._listeners[event_type]:
            callback(data)

Hermes 实现了智能的工具并发执行系统,根据工具特性自动选择最佳执行策略。

请添加图片描述

def _categorize_tools(self, tool_calls):
    """将工具调用分类为并发执行策略"""

    categories = {
        'parallel_readonly': [],    # 可绝对并行:只读工具
        'parallel_path_isolated': [], # 可并行:路径隔离的文件操作
        'sequential_interactive': [],  # 必须串行:交互式工具
        'sequential_conflicting': []   # 必须串行:路径冲突的操作
    }

    for tool_call in tool_calls:
        tool_name = tool_call.function.name
        tool_info = self.get_tool_info(tool_name)

        if tool_info.readonly:
            categories['parallel_readonly'].append(tool_call)
        # ... 其他分类逻辑

    return categories
  • 3倍 性能提升(并行 vs 串行)
  • 8个 并发工作线程
  • 180秒 超时控制
  • 4种 执行策略

Hermes 的记忆系统采用多层架构,支持内置记忆和外部记忆服务的协同工作。

请添加图片描述

class MemoryManager:
    """协调多个记忆提供者的管理器"""

    def __init__(self):
        # 内置提供者始终存在
        self._providers = [BuiltinMemoryProvider()]
        self._tool_to_provider = {}
        self._has_external = False

    def add_provider(self, provider):
        """添加外部记忆提供者(只能有一个)"""
        if self._has_external:
            raise ValueError("Only one external memory provider allowed")

        self._providers.append(provider)
        self._has_external = True

1. 内置记忆 (BuiltinMemoryProvider)

  • 基于文件系统的持久化记忆
  • 从 MEMORY.md 读取
  • 始终可用

2. Honcho AI 记忆

3. Mem0 记忆

Hermes 的技能系统采用完全插件化的设计,支持技能的动态加载、更新和卸载。

class SkillManager:
    """技能生命周期管理器"""

    def install_skill(self, source, skill_name):
        """从各种来源安装技能"""
        if source.startswith("github://"):
            return self._install_from_github(source, skill_name)
        elif source.startswith("file://"):
            return self._install_from_local(source, skill_name)

    def update_skill(self, skill_name):
        """更新技能到最新版本"""
        skill = self.skills.get(skill_name)
        if skill.source_type == "github":
            self._update_github_skill(skill)
# 工具装饰器
def tool(name, schema, **metadata):
    """工具装饰器"""
    def decorator(func):
        func._tool_name = name
        func._tool_schema = schema
        func._tool_description = metadata.get("description", "")
        return func
    return decorator

# 使用示例
@tool(
    name="custom_analysis",
    schema={
        "type": "object",
        "properties": {
            "data": {"type": "string", "description": "Data to analyze"}
        },
        "required": ["data"]
    },
    description="Custom data analysis tool"
)
def custom_analysis_tool(data):
    """自定义分析工具"""
    return {"result": "analysis complete"}

Hermes 使用 SQLite 数据库进行状态管理,支持 WAL 模式和 FTS5 全文搜索。

-- 会话表
CREATE TABLE sessions (
    id TEXT PRIMARY KEY,
    source TEXT NOT NULL,
    user_id TEXT,
    model TEXT,
    model_config TEXT,
    system_prompt TEXT,
    parent_session_id TEXT,
    started_at REAL NOT NULL,
    ended_at REAL,
    message_count INTEGER DEFAULT 0,
    tool_call_count INTEGER DEFAULT 0,
    input_tokens INTEGER DEFAULT 0,
    output_tokens INTEGER DEFAULT 0,
    estimated_cost_usd REAL,
    title TEXT
);

-- FTS5 全文搜索表
CREATE VIRTUAL TABLE messages_fts USING fts5(
    content,
    content_rowid=id,
    tokenizer='porter unicode61'
);
class ContextCompressor:
    """上下文压缩器"""

    def should_compress(self, messages, max_tokens):
        """判断是否需要压缩"""
        total_tokens = sum(msg.get('token_count', 0) for msg in messages)
        return total_tokens > max_tokens * self.threshold

    def compress_messages(self, messages):
        """压缩消息历史"""
        # 保护最新的 N 条消息
        protected_count = 20
        protected = messages[-protected_count:]
        compressible = messages[:-protected_count]

        # 分组压缩(按话题分组)
        groups = self._group_by_topic(compressible)

        # 为每个组生成摘要
        compressed_groups = []
        for group in groups:
            summary = self._summarize_group(group)
            compressed_groups.append({
                'role': 'system',
                'content': f"[Compressed] {summary}",
                'token_count': len(summary.split()) // 4
            })

        return compressed_groups + protected

1. 单一职责原则 (Single Responsibility Principle)

每个组件只负责一个明确的功能领域:

  • ToolRegistry: 只负责工具的注册和发现
  • MemoryManager: 只负责记忆提供者的协调
  • ContextCompressor: 只负责上下文压缩

2. 开闭原则 (Open-Closed Principle)

对扩展开放,对修改关闭:

  • 新工具: 只需注册到 ToolRegistry,无需修改现有代码
  • 新技能: 放到 skills/ 目录自动加载
  • 新平台: 实现平台适配器接口

3. 依赖倒置原则 (Dependency Inversion Principle)

依赖抽象接口而非具体实现:

# 好的设计:依赖抽象
class AIAgent:
    def __init__(self, memory_provider: MemoryProvider):
        self.memory = memory_provider  # 依赖抽象接口

# 具体实现可以随时替换
builtin = BuiltinMemoryProvider()
honcho = HonchoMemoryProvider(api_key)

agent1 = AIAgent(builtin)
agent2 = AIAgent(honcho)
  • 智能工具调度: 根据工具特性自动选择并行或串行执行

  • 线程池管理: 最多 8 个并发工作线程

  • 资源限制: 防止资源耗尽和系统过载

  • SQLite + FTS5: 支持全文搜索的会话存储

  • 会话继承: 支持会话链和上下文传递

  • 多提供者: 内置记忆 + 外部 AI 记忆服务

  • 技能系统: 支持动态安装、更新、卸载技能

  • 工具系统: 统一的工具注册和执行接口

  • 平台适配: 支持 CLI、Telegram、Discord 等多平台

  • 统一接口: 支持 20+ LLM 提供商

  • 智能路由: 根据任务复杂度选择合适的模型

  • 成本优化: 简单任务使用便宜模型,复杂任务使用强大模型

  • 自动压缩: 接近 token 限制时自动压缩历史对话

  • 成本优化: 跟踪使用量和成本,支持预算控制

  • 缓存策略: 智能缓存减少重复 API 调用

  • 容器化执行: Docker、SSH 远程执行环境

  • 权限控制: 基于信任级别的安全策略

  • 输入验证: 防止注入攻击和恶意输入

Hermes Agent 本质上是一个 AI Agent 操作系统,提供了:

  1. 完整的运行时环境: 从输入处理到响应生成的完整生命周期
  2. 资源管理系统: 内存、并发、存储的统一管理
  3. 插件生态: 技能、工具、平台的无限扩展能力
  4. 智能决策: 基于上下文的自动优化和路由
  • 现代化架构: 采用最新的设计模式和最佳实践
  • 高性能: 智能并发执行和资源优化
  • 可扩展: 插件化设计支持无限扩展
  • 企业级: 安全性、可靠性和可维护性

Hermes 既可以作为个人助手运行在笔记本电脑上,也可以扩展到云端服务器为企业级应用服务,展现出极强的适应性和扩展性。

这种架构设计使得 Hermes 成为当前最先进的开源 AI Agent 系统之一,为构建下一代 AI 应用提供了坚实的技术基础。

标签: AI Agent Python 架构设计 LLM 开源项目 企业级应用 插件化 高性能 智能系统 技术架构