Hermes Agent 记忆系统使用指南:构建持久化智能体的核心引擎


title: Hermes Agent 记忆系统使用指南:构建持久化智能体的核心引擎
date: 2026-06-03
description: 深入解析 Hermes Agent 记忆系统的工作原理、配置方法和实战技巧,帮助开发者构建真正具备长期记忆能力的 AI 智能体。


Hermes Agent 记忆系统使用指南:构建持久化智能体的核心引擎

引言

在 AI 智能体的发展历程中,记忆能力一直是区分”玩具级”和”生产级”智能体的关键分水岭。一个没有记忆的智能体,每次对话都是”初次见面”——它无法记住用户的偏好、无法追溯历史任务的状态、无法从过去的交互中学习和改进。而 Hermes Agent 作为新一代开源 AI Agent 框架,其记忆系统(Memory System)正是解决这一问题的核心组件。

Hermes Agent 的记忆系统不仅仅是一个简单的对话历史存储工具,而是一个多层、可扩展、持久化的智能记忆架构。它允许 Agent 在对话间保持上下文连贯性,在不同会话中复用已学知识,甚至通过配置文件对记忆行为进行精细化控制。

AI 智能体记忆系统概念图

图片来源:Unsplash — AI 神经网络与记忆存储概念

本文将深入探讨 Hermes Agent 记忆系统的架构设计、配置方法、实战技巧,以及如何利用记忆系统构建真正具备长期记忆能力的生产级 AI 智能体。无论你是刚接触 Hermes Agent 的新手,还是希望深入优化 Agent 行为的资深开发者,本文都将为你提供全面的指导。


一、Hermes Agent 记忆系统架构概述

1.1 什么是记忆系统?

在 Hermes Agent 中,记忆系统负责管理 Agent 的持久化状态信息。这些信息包括但不限于:

记忆类型 存储内容 生命周期 用途
短期记忆 (Session Memory) 当前对话上下文 单次会话 保持对话连贯性
长期记忆 (Long-term Memory) 用户偏好、历史任务结果 跨会话持久化 个性化体验、知识复用
技能记忆 (Skill Memory) 技能执行状态、中间结果 技能生命周期内 技能间数据传递
工作记忆 (Working Memory) 当前任务的临时数据 任务执行期间 任务中间状态管理

Hermes Agent 的记忆系统不同于简单的键值存储——它采用层次化记忆架构,每种记忆类型有不同的存储后端、过期策略和访问权限控制。

1.2 核心架构组件

Hermes Agent 记忆系统的核心架构由以下几个组件构成:

┌─────────────────────────────────────────────────────────┐
│                    Hermes Agent                          │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐     │
│  │  Memory      │  │  Memory     │  │  Memory     │     │
│  │  Manager     │──│  Store      │──│  Retriever  │     │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘     │
│         │                │                │             │
│  ┌──────┴──────┐  ┌──────┴──────┐  ┌──────┴──────┐     │
│  │  Memory     │  │  Backend    │  │  Embedding  │     │
│  │  Profiles   │  │  Adapters   │  │  Engine     │     │
│  └─────────────┘  └─────────────┘  └─────────────┘     │
└─────────────────────────────────────────────────────────┘
  • Memory Manager: 记忆系统的中央调度器,负责读写操作的路由、冲突解决和一致性维护
  • Memory Store: 实际的存储层,支持多种后端(文件系统、SQLite、Redis 等)
  • Memory Retriever: 记忆检索器,基于语义相似度和时间衰减算法返回最相关的记忆
  • Memory Profiles: 记忆行为配置文件,定义不同场景下的记忆策略
  • Backend Adapters: 后端适配器,使记忆系统可以接入不同的存储基础设施
  • Embedding Engine: 嵌入引擎,将文本转换为向量用于语义检索

1.3 记忆系统的工作流程

当一个交互发生时,Hermes Agent 记忆系统的工作流程如下:

  1. 接收消息:Agent 收到用户输入
  2. 检索相关记忆:Memory Retriever 在长期记忆中搜索与当前上下文相关的历史记录
  3. 上下文增强:将检索到的记忆注入当前对话上下文
  4. 处理响应:LLM 基于增强后的上下文生成响应
  5. 存储新记忆:将新的交互记录持久化到记忆存储中
  6. 索引更新:更新嵌入索引,确保后续检索可以匹配到新数据

记忆系统数据处理流程

图片来源:Unsplash — 数据中心与数据处理可视化


二、记忆系统的安装与配置

2.1 默认记忆配置

Hermes Agent 开箱即用,默认记忆系统已经启用。默认配置存储在用户的 Hermes 配置目录中:

# 查看默认配置文件位置
hermes config show

默认情况下,Hermes Agent 使用文件系统存储作为记忆后端,记忆数据保存在 ~/.hermes/memories/ 目录下:

ls -la ~/.hermes/memories/
# 输出示例:
# -rw-r--r--  1 user user  1024 Jun  3 10:00 memory_store.db
# -rw-r--r--  1 user user  4096 Jun  3 10:00 memory_index.json

2.2 配置文件详解

记忆系统的配置位于 Hermes 配置文件的 [memory] 部分。以下是一个完整的配置示例:

# ~/.hermes/config.toml - 记忆系统配置
[memory]
# 是否启用记忆系统
enabled = true

# 默认记忆配置文件
profile = "default"

# 最大上下文窗口(令牌数)
max_context_tokens = 4096

# 检索的记忆条目最大数量
max_retrieved_items = 5

# 记忆检索的时间衰减因子(0-1)
# 值越大,越旧的记忆被保留的可能性越高
time_decay_factor = 0.85

# 记忆相似度阈值(0-1)
# 只有相似度高于此阈值的记忆才会被检索
similarity_threshold = 0.75

# 是否启用自动记忆摘要
auto_summarize = true

# 摘要间隔(会话数)
summarize_interval = 10

[memory.store]
# 存储后端类型: file, sqlite, redis, postgres
backend = "sqlite"

# SQLite 数据库路径
sqlite_path = "~/.hermes/memories/memory_store.db"

# 是否开启 WAL 模式(提升并发性能)
wal_mode = true

[memory.embedding]
# 嵌入模型
model = "text-embedding-ada-002"

# 嵌入维度
dimensions = 1536

# 本地嵌入模式(离线使用)
local_model = "BAAI/bge-small-zh-v1.5"

[memory.retrieval]
# 检索策略: semantic, recency, hybrid
strategy = "hybrid"

# 混合检索中语义和时效性的权重
semantic_weight = 0.6
recency_weight = 0.4

# 是否启用跨会话检索
cross_session = true

2.3 配置存储后端

Hermes Agent 支持多种存储后端,你可以根据实际需求选择:

SQLite(推荐用于单机部署)

[memory.store]
backend = "sqlite"
sqlite_path = "~/.hermes/memories/memory_store.db"
wal_mode = true

SQLite 是单机部署的首选方案,零配置、轻量级、性能优良。开启 WAL 模式后可以支持并发的读写操作。

Redis(推荐用于生产环境)

[memory.store]
backend = "redis"
redis_url = "redis://localhost:6379/0"
redis_prefix = "hermes:memory:"
redis_ttl = 86400  # 记忆过期时间(秒),0 表示永不过期

Redis 后端提供高性能的内存级读写速度,支持集群部署和数据持久化,适合高并发场景。

PostgreSQL(推荐用于多 Agent 共享)

[memory.store]
backend = "postgres"
postgres_url = "postgresql://user:password@localhost:5432/hermes"
postgres_table = "agent_memories"

PostgreSQL 后端适合多个 Hermes Agent 实例共享同一记忆存储的场景,支持复杂查询和数据备份。

2.4 记忆配置文件(Memory Profiles)

Hermes Agent 支持通过记忆配置文件(Memory Profiles)为不同场景定义不同的记忆行为。每个 Profile 可以设定独立的检索策略、存储后端和衰减参数。

# 列出所有可用的记忆配置文件
ls -la ~/.hermes/profiles/*/memories/

创建一个新的记忆配置文件:

# ~/.hermes/profiles/developer/memories/config.toml
cat > ~/.hermes/profiles/developer/memories/config.toml << 'EOF'
[memory]
# 开发者配置文件:更长的记忆窗口和更高的检索数量
max_context_tokens = 8192
max_retrieved_items = 10
time_decay_factor = 0.9
similarity_threshold = 0.6  # 更宽松的匹配阈值

[memory.store]
backend = "sqlite"
sqlite_path = "~/.hermes/profiles/developer/memories/dev_memory.db"

[memory.retrieval]
strategy = "hybrid"
semantic_weight = 0.7
recency_weight = 0.3
cross_session = true
EOF

切换记忆配置文件:

hermes config set memory.profile developer

三、记忆系统的实战应用

3.1 基础记忆操作

Hermes Agent 提供了一套命令行工具和 API 用于操作记忆系统:

查看当前记忆状态

# 查看记忆系统统计信息
hermes memory stats

# 输出示例:
# Memory System Statistics
# ──────────────────────────────
# Total memories stored: 1,247
# Memory profiles: 3
# Active profile: developer
# Storage backend: sqlite
# Storage size: 2.3 MB
# Last cleanup: 2026-06-03 09:15:00

手动管理记忆

# 搜索记忆
hermes memory search "docker 配置问题"

# 清除所有记忆
hermes memory clear

# 清除特定类型的记忆
hermes memory clear --type session

# 导出记忆为 JSON
hermes memory export --output memories_backup.json

# 导入记忆
hermes memory import --input memories_backup.json

在技能中使用记忆 API

Hermes Agent 的技能系统可以直接访问记忆 API,实现技能级别的记忆管理:

# skills/memory_demo.py
from hermes.skill import Skill
from hermes.memory import MemoryManager

class MemoryDemoSkill(Skill):
    """展示记忆系统 API 使用的示例技能"""

    def __init__(self):
        super().__init__()
        self.memory = MemoryManager()

    async def execute(self, context):
        # 存储记忆
        await self.memory.store(
            key="deployment_preference",
            value={
                "env": "production",
                "port": 8080,
                "ssl": True
            },
            tags=["config", "deployment"],
            ttl=86400 * 30  # 30天过期
        )

        # 检索记忆
        result = await self.memory.retrieve(
            query="deployment configuration",
            max_results=3,
            min_score=0.7
        )

        # 删除记忆
        await self.memory.delete("deployment_preference")

        # 检查记忆是否存在
        exists = await self.memory.exists("deployment_preference")

        return {"memories_retrieved": len(result)}

3.2 跨会话记忆实战

跨会话记忆是 Hermes Agent 最强大的特性之一。它允许 Agent 在不同对话之间保持记忆,实现真正的持续学习

场景:用户偏好学习

以下示例展示了如何让 Agent 记住用户的技术栈偏好:

# 在技能中实现用户偏好学习
class UserPreferenceSkill(Skill):
    async def learn_preference(self, context):
        user_id = context.user_id

        # 检查已有偏好
        existing = await self.memory.retrieve(
            key=f"user:{user_id}:preferences",
            namespace="user_prefs"
        )

        if existing:
            # 更新已有偏好
            existing.value["last_interaction"] = datetime.now().isoformat()
            existing.value["interaction_count"] += 1
            await self.memory.update(existing)
        else:
            # 创建新偏好记录
            await self.memory.store(
                key=f"user:{user_id}:preferences",
                value={
                    "preferred_language": "Python",
                    "framework": "FastAPI",
                    "database": "PostgreSQL",
                    "deployment": "Docker",
                    "first_interaction": datetime.now().isoformat(),
                    "interaction_count": 1
                },
                namespace="user_prefs",
                ttl=None  # 永不过期
            )

    async def get_preference_context(self, user_id):
        """获取偏好上下文,用于注入 LLM prompt"""
        prefs = await self.memory.retrieve(
            key=f"user:{user_id}:preferences",
            namespace="user_prefs"
        )

        if prefs:
            return f"用户偏好:{prefs.value}"
        return "用户偏好:未知"

场景:任务状态追溯

当执行长时间运行的任务时,记忆系统可以帮助 Agent 追踪任务状态:

class LongRunningTaskSkill(Skill):
    async def track_task(self, task_id, task_name, status, result=None):
        """追踪长时间运行的任务状态"""
        memory_key = f"task:{task_id}:status"

        # 存储任务状态
        await self.memory.store(
            key=memory_key,
            value={
                "task_id": task_id,
                "task_name": task_name,
                "status": status,
                "start_time": datetime.now().isoformat(),
                "last_update": datetime.now().isoformat(),
                "result": result,
                "progress": 0
            },
            tags=["task", task_name],
            ttl=86400 * 7  # 7天后过期
        )

    async def check_interrupted_tasks(self):
        """检查是否有中断的任务需要恢复"""
        # 检索所有状态为 running 的任务
        tasks = await self.memory.search(
            query="task status running",
            tags=["task"],
            max_results=50
        )

        for task in tasks:
            if task.value["status"] == "running":
                # 检查是否超时(超过30分钟无更新)
                last_update = datetime.fromisoformat(task.value["last_update"])
                if (datetime.now() - last_update).seconds > 1800:
                    task.value["status"] = "interrupted"
                    await self.memory.update(task)
                    logger.warning(f"Task {task.value['task_id']} was interrupted")

        return [t for t in tasks if t.value["status"] == "running"]

开发者使用记忆系统架构

图片来源:Unsplash — 开发者工作环境与数据可视化

3.3 语义检索与混合检索策略

Hermes Agent 的记忆检索器支持三种检索策略,各有适用场景:

语义检索(Semantic)

基于向量相似度的语义检索,能理解用户意图的深层含义:

[memory.retrieval]
strategy = "semantic"

适用场景:需要根据内容含义而非关键词进行匹配的场景。例如用户问”上次那个数据库问题怎么解决的”,Agent 会检索到与数据库相关的历史对话,即使关键词不完全匹配。

时效检索(Recency)

基于时间戳的时效性检索,优先返回最近的记忆:

[memory.retrieval]
strategy = "recency"

适用场景:需要获取最新状态信息的场景。例如,Agent 需要知道当前正在运行的任务列表,最近的任务信息比早期的更相关。

混合检索(Hybrid)

结合语义和时效性的混合策略,通过权重参数平衡两者:

[memory.retrieval]
strategy = "hybrid"
semantic_weight = 0.6
recency_weight = 0.4

适用场景:大多数生产环境,既需要语义理解又需要时效性。默认推荐配置。

3.4 记忆摘要与压缩

随着记忆数量增长,记忆系统会占用越来越多的存储空间和检索时间。Hermes Agent 内置了自动记忆摘要功能:

[memory]
auto_summarize = true
summarize_interval = 10  # 每10次会话执行一次摘要

摘要的工作原理:

  1. 触发条件:当会话数达到 summarize_interval 的倍数时
  2. 分组:将相关记忆按时间窗口和主题分组
  3. 摘要生成:使用 LLM 对每组记忆生成摘要
  4. 压缩存储:用摘要替换原始详细记忆
  5. 索引更新:更新嵌入索引以包含摘要内容

你也可以手动触发摘要:

# 手动执行记忆摘要
hermes memory summarize

# 指定摘要策略
hermes memory summarize --strategy topic  # 按主题分组摘要
hermes memory summarize --strategy time   # 按时间窗口摘要

# 查看摘要结果
hermes memory list --type summary

四、高级配置与优化技巧

4.1 多级记忆管道

对于生产级部署,你可以配置多级记忆管道,将不同优先级的记忆存储在不同后端:

[memory.pipeline]
# 一级:Redis 热存储(毫秒级访问)
[[memory.pipeline.tiers]]
name = "hot"
backend = "redis"
ttl = 3600  # 1小时后降级
max_items = 1000

# 二级:SQLite 温存储
[[memory.pipeline.tiers]]
name = "warm"
backend = "sqlite"
ttl = 86400 * 7  # 7天后降级
max_items = 10000

# 三级:PostgreSQL 冷存储(长期归档)
[[memory.pipeline.tiers]]
name = "cold"
backend = "postgres"
ttl = null  # 永不过期
max_items = null  # 无限制

数据在各级存储中自动迁移:
– 新记忆优先写入热存储
– TTL 到期后自动降级到下一级
– 检索时在所有级别并行查找,合并结果

4.2 记忆分区与命名空间

对于多用户或多项目的场景,记忆分区可以隔离不同上下文的记忆:

# 为不同项目创建独立的记忆命名空间
hermes memory namespace create project-alpha
hermes memory namespace create project-beta

# 在特定命名空间中存储记忆
hermes memory store --namespace project-alpha --key "config" --value '{"port": 3000}'

# 检索特定命名空间的记忆
hermes memory search --namespace project-alpha "config"

# 列出所有命名空间
hermes memory namespace list

在配置中设置默认命名空间:

[memory]
default_namespace = "default"

[memory.namespaces]
project-alpha = { backend = "sqlite", path = "~/.hermes/memories/alpha.db" }
project-beta = { backend = "sqlite", path = "~/.hermes/memories/beta.db" }

4.3 性能优化建议

以下是经过生产验证的性能优化建议:

优化项 建议配置 预期效果
检索数量限制 max_retrieved_items = 5 减少 LLM 上下文长度,降低 Token 消耗
相似度阈值 similarity_threshold = 0.75 过滤低质量匹配,提高检索精度
WAL 模式 wal_mode = true SQLite 并发写性能提升 5-10 倍
自动摘要 auto_summarize = true 长期运行后存储空间减少 60-80%
索引缓存 开启嵌入缓存 重复查询的响应时间降低 90%
批量操作 使用批量 API 大量写入时吞吐量提升 3-5 倍

4.4 监控与调试

Hermes Agent 提供内置的监控工具:

# 查看记忆系统性能指标
hermes memory metrics

# 输出示例:
# Memory Performance Metrics
# ──────────────────────────
# Avg write latency: 2.3ms
# Avg read latency:  1.8ms
# Avg search latency: 15.7ms
# Cache hit rate:    87.3%
# Total operations:  45,231
# Error rate:        0.02%

# 开启详细日志
hermes config set memory.debug true

# 查看记忆检索调试信息
hermes memory search --debug "查询内容"

五、常见问题与最佳实践

5.1 常见问题(FAQ)

Q1: 记忆系统会影响 LLM 的 Token 消耗吗?

是的。检索到的记忆内容会注入到 LLM 的上下文中,消耗 prompt token。建议通过 max_retrieved_itemssimilarity_threshold 控制注入的记忆数量。默认配置下每次检索约消耗 500-1000 tokens。

Q2: 记忆数据的安全性如何保障?

记忆数据默认存储在本地文件系统。对于敏感信息,建议:
1. 使用加密文件系统或全盘加密
2. 启用记忆内容的自动脱敏(auto_sanitize = true
3. 定期清理过期记忆(hermes memory cleanup --age 30
4. 使用 Redis 或 PostgreSQL 的 TLS 加密传输

Q3: 如何清除用户的所有记忆?

# 清除特定用户的记忆
hermes memory clear --user-id user_123

# 清除所有跨会话记忆
hermes memory clear --type long_term

# 清除特定命名空间的所有记忆
hermes memory namespace delete project-alpha

Q4: 记忆系统的数据会不会无限增长?

Hermes Agent 内置了多重防无限增长机制:
– TTL 过期自动清理
– 自动摘要压缩
– 容量阈值告警(capacity_warning_threshold = 0.9
– 最大条目限制(max_entries_per_namespace = 100000

Q5: 可以禁用记忆系统吗?

可以,将配置中的 enabled 设为 false 即可:

[memory]
enabled = false

5.2 最佳实践总结

  1. 从小开始,逐步扩展:初次部署使用 SQLite + 默认配置,根据实际使用情况调整参数
  2. 合理设置 TTL:为不同类型的记忆设置合适的过期时间,避免存储过多无用数据
  3. 善用命名空间:多项目或多用户场景下,使用命名空间隔离不同上下文的记忆
  4. 定期监控指标:关注检索延迟、缓存命中率、错误率等关键指标
  5. 备份重要记忆:定期使用 hermes memory export 导出重要记忆数据
  6. 结合技能系统:在技能中合理使用记忆 API,实现复杂的业务逻辑
  7. 性能与成本平衡:根据 Token 预算和响应速度要求,调整检索数量和摘要策略
  8. 测试不同检索策略:在开发环境中测试 semantic、recency、hybrid 三种策略,选择最适合业务的方案

总结

Hermes Agent 的记忆系统是一个设计精巧、功能全面的持久化智能体记忆框架。它通过层次化记忆架构、多后端支持、灵活的检索策略和自动摘要机制,为构建真正具备长期记忆能力的生产级 AI 智能体提供了坚实的基础。

从本文的讲解中,我们了解到:

  1. 架构设计:记忆系统的四个核心组件(Manager、Store、Retriever、Profiles)协同工作,实现了从短期上下文到长期记忆的完整生命周期管理
  2. 配置灵活:支持 SQLite、Redis、PostgreSQL 等多种后端,以及可自定义的记忆配置文件(Profiles)
  3. 实战能力:通过跨会话记忆、语义检索、任务状态追踪等功能,记忆系统在 DevOps 自动化、用户偏好学习、长时间任务管理等场景中发挥关键作用
  4. 生产级特性:自动摘要、多级记忆管道、命名空间隔离、性能监控等特性确保了系统的可扩展性和可靠性

Hermes Agent 的记忆系统不仅是一个功能模块,更是一种设计范式——它重新定义了 AI 智能体与用户交互的方式,让每一次对话都不再是孤立的片段,而是持续累积的学习过程。

随着 AI Agent 技术向更复杂的生产环境演进,记忆系统的重要性只会越来越大。掌握 Hermes Agent 的记忆系统,就是掌握了构建下一代智能应用的钥匙。立即开始配置你的记忆系统,让你的 Agent 真正”记住”用户的每一次交互吧!


参考资源

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容