需依托结构化操作日志机制实现可追溯、可验证审计,具体包括:一、启用Log4j2操作级日志;二、通过MDC注入用户上下文;三、对接SQLite归档操作记录;四、使用session_search_tool.py多条件检索;五、联动audit.log标记高风险行为。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您需要对Hermes Agent中用户发起的操作行为进行可追溯、可验证的审计,则需依托其结构化操作日志机制,覆盖命令调用、工具执行、会话变更等关键交互节点。以下是实现用户行为审计与操作日志记录的多种具体方法:
一、启用并配置操作级日志输出
该方法通过Log4j2框架捕获用户触发的所有动作事件,确保每条日志包含时间戳、操作主体、动作类型及上下文标识,为后续按用户维度筛选提供基础支撑。
1、打开Hermes Agent安装目录下的conf/log4j2.xml文件。
2、在<Appenders>节点内新增RollingFile Appender,设置fileName为logs/user-action.log,并启用filePattern实现按日轮转。
3、在<Loggers>节点中添加Logger,设置name="com.hermes.agent.user",level="INFO",并绑定前述Appender。
4、将该Logger的additivity属性设为false,防止日志重复写入默认输出流。
5、重启Hermes Agent服务,确认logs/user-action.log中开始出现含user_id、session_id字段的操作记录。
二、在请求入口注入用户上下文信息
该方法利用MDC(Mapped Diagnostic Context)在线程初始阶段注入当前会话的用户身份标识,使所有子日志自动携带user_id和session_id,避免手动传参遗漏,保障审计链路完整性。
1、定位用户请求入口类(如HttpRequestHandler或UserSessionRouter)的主处理方法。
2、在方法起始处插入MDC.put("user_id", currentUser.getIdentifier()),从认证上下文中提取唯一用户标识。
3、同步调用MDC.put("session_id", currentSession.getId())注入当前会话ID。
4、修改log4j2.xml中对应Logger的PatternLayout,在格式字符串中加入%X{user_id} %X{session_id}。
5、在方法末尾finally块中执行MDC.clear(),防止线程池复用导致用户上下文错乱。
三、对接SQLite会话数据库进行结构化归档
该方法将用户操作行为直接写入~/.hermes/state.db中的t_user_action_log表,利用事务保障写入可靠性,并支持SQL级精确查询与时间窗口聚合。
1、确认数据库中存在t_user_action_log表,字段至少包含id、user_id、action_type、tool_name、timestamp、status、input_hash。
2、在ActionExecutor类的execute()方法返回前,构造INSERT INTO t_user_action_log语句,填入当前用户ID、动作类型、调用工具名及执行结果状态。
3、对input参数内容计算SHA-256哈希值并存入input_hash字段,用于识别重复操作或敏感输入模式。
4、使用sqlite3 ~/.hermes/state.db "SELECT * FROM t_user_action_log WHERE user_id = 'u_abc123' ORDER BY timestamp DESC LIMIT 10;"快速检索指定用户最近操作。
四、通过session_search_tool.py按用户维度定向检索
该工具专为审计场景设计,支持基于用户标识、时间范围、动作类型等多条件组合查询,输出结构化结果,避免人工解析原始日志文本。
1、确保tools/session_search_tool.py具备执行权限:chmod +x tools/session_search_tool.py。
2、运行python tools/session_search_tool.py --user-id u_abc123 --since "2026-04-20" --action "tool_call" --status success,检索某用户近五天成功调用工具的全部记录。
3、添加--output csv参数,将结果导出为CSV格式,便于导入Excel或审计系统进行二次分析。
4、若需识别异常高频操作,追加--group-by action_type --count,获取该用户各类动作的调用频次统计。
五、启用审计日志联动机制并标记高风险行为
该方法在用户执行敏感动作(如文件读写、终端命令、凭证访问)时,除记录操作日志外,同步写入audit.log并打上severity=HIGH标签,实现安全策略驱动的日志分级。
1、检查tools/file_tools.py中read()与write()方法,在入口处调用AuditLogger.audit("file_access", user_id, path, severity="HIGH")。
2、确认audit.log路径为~/.hermes/audit.log,且每条记录均含user_id、action、target、severity、timestamp字段。
3、执行grep -E "user_id:u_abc123.*severity=HIGH" ~/.hermes/audit.log | tail -n 5,快速定位该用户的高风险操作历史。
4、在config.yaml中启用audit.enforce_on_sensitive_actions: true,强制要求所有标记为HIGH的操作必须经过RBAC权限校验后方可执行。


















