需配置对象存储服务以实现Hermes Agent轨迹数据等的远程持久化,支持四种方式:一、配置文件注入S3/OSS参数;二、环境变量动态覆盖;三、开发自定义适配器;四、启用同步钩子触发上传。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您希望Hermes Agent将运行过程中的轨迹数据、会话快照或工具生成的临时文件持久化至远程对象存储,以实现跨设备访问与长期归档,则需完成对象存储服务的接入配置。以下是多种可行的集成路径:
一、通过配置文件注入S3/OSS参数
该方法适用于静态部署场景,直接在Hermes Agent启动前设定存储端点与凭证,所有支持对象存储的模块(如trajectory_compression、file_tools)将自动识别并使用该配置。
1、定位配置文件路径,例如datagen-config-examples/trajectory_compression.yaml或主配置目录下的storage.yaml。
2、在配置文件中添加cloud_storage区块,按所选服务填写对应字段:
3、对于AWS S3,设置provider: aws,并填入access_key_id、secret_access_key、region和bucket_name;注意:access_key_id与secret_access_key必须为最小权限策略密钥,禁止使用Root用户凭证。
4、对于阿里云OSS,设置provider: oss,填写endpoint(如https://oss-cn-hangzhou.aliyuncs.com)、access_key_id、access_key_secret及bucket_name;endpoint必须包含协议头且与Bucket所在地域严格匹配。
5、保存配置后,重启Hermes Agent使变更生效;可通过hermes doctor --check storage验证连接可用性。
二、利用环境变量动态覆盖存储配置
该方法避免硬编码敏感信息,适合容器化或CI/CD流水线部署,优先级高于配置文件中的静态值。
1、在Shell环境中导出以下变量(以S3为例):
2、执行export HERMES_STORAGE_PROVIDER=aws;
3、执行export HERMES_STORAGE_ACCESS_KEY_ID=AKIA...;
4、执行export HERMES_STORAGE_SECRET_ACCESS_KEY=abc123...;
5、执行export HERMES_STORAGE_REGION=us-east-1;
6、执行export HERMES_STORAGE_BUCKET_NAME=my-hermes-bucket;所有变量名必须严格匹配HERMES_STORAGE_*前缀,大小写敏感。
7、启动Agent时确保环境变量已加载,例如使用hermes gateway start前先执行source ./env.sh。
三、开发自定义对象存储适配器
当默认支持的S3/OSS无法满足特殊需求(如私有Ceph集群、兼容S3协议的MinIO网关或需要签名代理),可扩展tools/storage/adapters/目录下的适配器类。
1、新建Python文件minio_adapter.py,继承基类BaseStorageAdapter;
2、重写upload(self, local_path: str, remote_key: str)方法,使用minio-py客户端实现上传逻辑;
3、重写download(self, remote_key: str, local_path: str)方法,处理分块下载与断点续传;
4、在tools/storage/__init__.py中注册新适配器:ADAPTER_REGISTRY["minio"] = MinIOAdapter;
5、在配置中指定provider: minio并提供endpoint、secure(True/False)、access_key等字段;适配器必须通过tools/storage/test_adapters.py中的单元测试方可启用。
四、启用同步钩子触发对象存储写入
该方法不修改核心存储逻辑,而是监听特定事件(如会话结束、技能执行完成)后异步推送数据至对象存储,适用于增量备份与审计归档场景。
1、编辑environments/hermes_base_env.py,定位on_session_end回调函数;
2、在函数体内添加调用async_upload_to_s3(session_id, session_data)逻辑;
3、确保该函数位于tools/file_tools.py中,并已实现基于aiohttp的并发上传能力;
4、配置UPLOAD_ON_SESSION_END: true开关项,控制是否激活该钩子;
5、在~/.hermes/sessions/目录下确认JSON日志生成后,检查目标Bucket中是否存在对应session-{id}.json.gz对象;上传失败将记录到~/.hermes/logs/storage_hook_errors.log,不阻塞主流程。











