需将Hermes Agent与Elasticsearch集成以实现结构化日志与会话的实时检索:一、配置Agent输出JSON日志并脱敏;二、Docker部署单节点ES并建索引模板;三、Logstash监听日志目录并写入按日分片索引;四、curl验证数据写入;五、Kibana配置索引模式并支持关键词及语义检索。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您正在使用Hermes Agent并希望为其增强结构化日志与会话内容的实时检索能力,则需将其与Elasticsearch集成以构建高性能搜索引擎。以下是实现该集成的具体操作路径:
一、配置Hermes Agent日志输出为JSON格式
确保Hermes Agent生成的日志符合Elasticsearch可索引的结构化要求,避免非标准字段或嵌套过深导致解析失败。JSON格式是Logstash和Elasticsearch原生支持的输入格式,可直接映射为Elasticsearch文档字段。
1、打开Hermes Agent配置文件hermes_state.py,定位到日志相关配置段。
2、将verbose_logging设置为True,启用完整会话交互记录。
3、确认日志存储路径为~/.hermes/sessions/,并确保该目录对Logstash进程具有读取权限。
4、运行agent/redact.py工具对敏感字段(如用户ID、API密钥)执行脱敏,输出纯净JSON日志文件。
二、部署Elasticsearch单节点实例
为快速验证集成效果,采用Docker方式启动轻量级Elasticsearch服务,跳过集群配置与安全认证,聚焦核心索引功能。
1、执行Docker命令拉取并运行Elasticsearch 8.11.3镜像:
docker run -d -p 9200:9200 -e "discovery.type=single-node" -e "xpack.security.enabled=false" elasticsearch:8.11.3
2、等待容器启动后,访问http://localhost:9200,确认返回JSON响应中包含"version.number"字段且值为"8.11.3"。
3、使用curl创建初始索引模板,预定义session_id、timestamp、user_input、agent_response等字段的映射类型:
curl -X PUT "localhost:9200/_index_template/hermes-session-template" -H "Content-Type: application/json" -d '{"index_patterns":["hermes-logs-*"],"template":{"mappings":{"properties":{"session_id":{"type":"keyword"},"timestamp":{"type":"date","format":"strict_date_optional_time||epoch_millis"},"user_input":{"type":"text"},"agent_response":{"type":"text"}}}}}'
三、配置Logstash管道接收并转发日志
Logstash作为数据搬运工,负责持续监控Hermes Agent日志目录、解析JSON内容,并按时间戳路由至对应日期索引,确保时序数据组织清晰。
1、创建配置文件logstash-hermes.conf,内容如下:
input { file { path => "/home/$USER/.hermes/sessions/*.json" start_position => "beginning" sincedb_path => "/dev/null" codec => "json" } } output { elasticsearch { hosts => ["http://localhost:9200"] index => "hermes-logs-%{+YYYY.MM.dd}" } }
2、启动Logstash容器,挂载配置文件与日志目录:
docker run -d --name logstash-hermes -v $(pwd)/logstash-hermes.conf:/usr/share/logstash/pipeline/logstash.conf -v $HOME/.hermes/sessions:/home/$USER/.hermes/sessions docker.elastic.co/logstash/logstash:8.11.3
3、检查Logstash容器日志,确认无Failed to parse或Connection refused错误。
四、验证Elasticsearch索引写入状态
在数据流建立后,需立即确认日志是否真实落库并可被查询,避免因路径错配、权限不足或JSON格式异常导致静默丢弃。
1、向Elasticsearch发起搜索请求,限定最近1小时内数据:
curl -X GET "localhost:9200/hermes-logs-*/_search?pretty" -H "Content-Type: application/json" -d '{"query":{"range":{"timestamp":{"gte":"now-1h/h"}}},"size":1}'
2、检查响应中hits.total.value是否大于0,且_source内包含可识别的user_input与agent_response字段值。
3、若返回空结果,执行ls -l ~/.hermes/sessions/确认JSON文件存在且非空;再检查Logstash容器内/usr/share/logstash/logs/logstash-plain.log末尾是否有Successfully persisted字样。
五、启用Kibana进行关键词与语义混合检索
Kibana提供免编码UI界面,支持对已入库的Hermes Agent日志执行全文检索、字段筛选及时间范围过滤,同时兼容基于向量的语义扩展查询(需额外配置向量字段)。
1、启动Kibana容器并关联Elasticsearch:
docker run -d -p 5601:5601 --link elasticsearch:elasticsearch docker.elastic.co/kibana/kibana:8.11.3
2、浏览器访问http://localhost:5601,进入Stack Management > Index Patterns,创建索引模式hermes-logs-*。
3、在Discover界面输入user_input: "如何重置密码",确认返回匹配的历史会话记录。
4、如需启用语义搜索,在Elasticsearch中新增user_input_vector字段(类型为dense_vector),并通过skills/mlops/chroma/SKILL.md调用OpenAIEmbeddings批量注入向量值。


















