当前位置: 首页 > news >正文

Hermes Trajectory日志工程:让每一次执行都成为进化数据

Trajectory日志工程:让每一次执行都成为进化数据

「Hermes Agent自进化智能体深度解析」系列 | 模块九 · 第4篇

在AI Agent的世界里,没有记录的执行就像蒸发的水——发生了,但什么也没留下。每一次推理、每一次工具调用、每一次错误恢复,都是Agent进化的珍贵养分。但99%的框架让这些数据白白流失。


一、蒸发掉的进化机会

大多数AI Agent框架的执行模型令人遗憾地简单:接收任务、调用LLM、执行工具、返回结果、结束。整个过程如同一次没有录像的体育比赛——运动员跑完了全程,却永远无法回看自己的动作、分析自己的失误、优化自己的策略。

这就是当前Agent领域最隐蔽也最致命的缺陷:执行完就结束,没有轨迹留存

想象一个场景:你的Agent今天处理了50个任务,成功了43个,失败了7个。你知道成功率是86%,但你不知道的是——

  • 成功的43次中,哪条执行路径最快?哪条消耗token最少?
  • 失败的7次中,是哪个步骤出了问题?有没有共同的模式?
  • 那些成功的执行,能否提炼为可复用的策略?
  • 那些失败的经历,能否转化为"避坑指南"?

没有Trajectory(轨迹)日志,这些问题全都是黑箱。Agent永远在"从零开始",每次执行都与历史经验无关——这不是智能体,这是一个有记忆障碍的系统。

Hermes Agent的回答截然不同。

在Hermes的自进化架构中,Trajectory Log不是调试工具,不是可选项,而是自进化系统的基础设施——它是原始石油,未经提炼但蕴含巨大潜力。上一篇#23我们拆解了推理解析与输出清理,那些解析产物的归宿就是Trajectory Log。本篇将完整展示Hermes如何将每一次执行转化为结构化的进化数据。


二、Trajectory Log完整Schema

在#08中我们见过YAML格式的简化版Trajectory日志。现在,让我们看看企业级Hermes部署中使用的完整Schema——一个能承载自进化全部所需信息的数据结构:

{"trajectory":{"id":"traj_20260601_a7f3e2d1","session_id":"sess_eva_20260601_001","goal_id":"goal_fastapi_crud_042","created_at":"2026-06-01T14:23:01.456Z","completed_at":"2026-06-01T14:24:38.892Z","duration_ms":97436,"context":{"agent_version":"hermes-v3.2.1","model":"deepseek-r1-0528","memory_nodes_accessed":["mem://project/fastapi-patterns","mem://project/error-handling-strategy","mem://user/coding-preference-async"],"skills_used":["file_list","file_read","code_write","test_run"],"tools_available":["bash","file_ops","git","http_client"],"token_budget":50000,"token_used":32847,"temperature":0.7,"system_prompt_hash":"sha256:e4a1b2c3..."},"steps":[{"step_id":"step_001","timestamp":"2026-06-01T14:23:01.789Z","type":"reasoning","content":"Goal分析:需要在FastAPI项目中添加CRUD API端点...","duration_ms":3200,"token_used":1850,"metadata":{"chain_of_thought_depth":3,"confidence":0.94}},{"step_id":"step_002","timestamp":"2026-06-01T14:23:04.989Z","type":"tool_call","tool":"file_list","input":{"path":"./src/routes/"},"duration_ms":450,"token_used":120},{"step_id":"step_003","timestamp":"2026-06-01T14:23:05.439Z","type":"tool_result","tool":"file_list","output":"['users.py', 'auth.py', 'items.py']","duration_ms":0,"token_used":85,"status":"success"}],"errors":[{"step_id":"step_007","error_type":"ImportError","message":"cannot import name 'ValidationError' from 'models'","recovery_action":"added missing import to models/__init__.py","recovery_successful":true,"time_lost_ms":4200}],"artifacts":[{"type":"file_created","path":"./src/routes/products.py","lines":87,"hash":"sha256:f1e2d3c4..."},{"type":"test_result","tests_run":12,"tests_passed":12,"coverage_delta":"+3.2%"}],"memory_updates":[{"action":"upsert","node_id":"mem://project/fastapi-patterns","field":"crud_template_v2","reason":"new pattern: async CRUD with dependency injection"}],"verification_result":{"status":"verified","criteria_met":["endpoint_responds","validation_works","tests_pass"],"criteria_failed":[],"verifier_version":"v2.1.0"},"outcome":"success","quality_score":0.91,"human_feedback":null,"tags":["fastapi","crud","async","greenfield"]}}

这个Schema的每一个字段都服务于自进化的某个环节。注意几个关键设计:

  • memory_nodes_accessed:记录Agent在执行过程中"想到了什么",这是连接Memory系统与执行行为的桥梁,让RL训练能学到"在什么情境下应该检索什么记忆"。
  • errors[].recovery_action:不是记录"出了什么错",而是记录"怎么恢复的"——这才是进化的核心数据。成功的错误恢复策略可以直接转化为Skills。
  • quality_score:一个0-1的浮点数,是Reward Calculation的基础信号,决定了这条轨迹在RL训练中的权重。
  • tags:语义标签,支持后续的轨迹聚类与模式识别。

三、持久化策略——不只是存储,是数据基建

有了Schema,下一步是回答一个问题:每天数万条Trajectory,怎么存、怎么查、怎么用?

存储格式选型

+------------------+----------------+------------------+------------------+ | 维度 | JSON文件 | SQLite | Parquet | +------------------+----------------+------------------+------------------+ | 写入性能 | ★★★★☆ | ★★★★★ | ★★☆☆☆ | | 查询灵活性 | ★★☆☆☆ | ★★★★★ | ★★★★☆ | | 分析性能 | ★★☆☆☆ | ★★★☆☆ | ★★★★★ | | 压缩率 | ★★☆☆☆ | ★★★☆☆ | ★★★★★ | | 自进化用途 | 调试/审计 | 实时查询/索引 | 批量分析/RL训练 | +------------------+----------------+------------------+------------------+

Hermes采用混合存储策略,不赌单一格式:

  • 实时写入:JSON Lines格式追加写入(trajectory_2026-06-01.jsonl),每条轨迹一行,写入零阻塞
  • 结构索引:异步同步到SQLite,建立五类核心索引
  • 分析归档:定时批量转换为Parquet,供离线RL训练和模式识别

索引设计

-- 核心索引:支持自进化最频繁的查询模式CREATEINDEXidx_trajectory_sessionONtrajectories(session_id);CREATEINDEXidx_trajectory_goalONtrajectories(goal_id);CREATEINDEXidx_trajectory_outcomeONtrajectories(outcome,quality_score);CREATEINDEXidx_trajectory_timeONtrajectories(created_atDESC);CREATEINDEXidx_trajectory_tagsONtrajectory_tags(tag,outcome);-- 复合索引:支持"找某类任务的失败轨迹"这类模式识别查询CREATEINDEXidx_trajectory_patternONtrajectories(tags_hash,outcome,quality_scoreDESC);

分层存储——热度驱动的生命周期

┌─────────────────────────────────────────────────────────────────┐ │ Trajectory 存储生命周期 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ 热数据 │───>│ 温数据 │───>│ 冷数据 │───>│ 归档 │ │ │ │ 0-7天 │ │ 7-30天 │ │ 30-180天 │ │ 180天+ │ │ │ │ NVMe SSD│ │ HDD阵列 │ │ 压缩存储 │ │ 对象存储 │ │ │ │ JSON+DB │ │ SQLite │ │ Parquet │ │ Parquet │ │ │ │ 全字段 │ │ 索引字段 │ │ 分析字段 │ │ 采样字段 │ │ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ 用途: 用途: 用途: 用途: │ │ 实时反馈 近期模式识别 RL训练集构建 长期趋势分析 │ │ 即时查询 周级别统计 离线批量分析 合规审计 │ └─────────────────────────────────────────────────────────────────┘

这个分层不是随意的——每一层都对应自进化流水线的不同阶段。热数据支撑实时反馈循环(“刚执行的路径好不好?”),温数据支撑模式识别(“最近一周有没有重复的低效路径?”),冷数据支撑RL训练(“用过去半年的数据训练策略模型”)。


四、从Trajectory到RL训练数据——自动化的进化引擎

这是整篇最关键的部分。Trajectory Log本身只是原材料,Hermes的自进化魔法在于自动将原始轨迹转化为强化学习训练样本的完整管线。

┌─────────────────────────────────────────────────────────────────────────┐ │ Trajectory → RL Training Sample 转化管线 │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌─────────┐ │ │ │ Trajectory │──>│ State │──>│ Action │──>│ Reward │ │ │ │ Log (原始) │ │ Extraction │ │ Encoding │ │ Calc │ │ │ └──────────────┘ └──────────────┘ └──────────────┘ └─────────┘ │ │ | | | | │ │ v v v v │ │ 100条成功轨迹 状态向量: 动作向量: 标量奖励: │ │ 20条失败轨迹 [context + [tool_choice + R = f( │ │ memory_state + parameters + outcome, │ │ goal_state] execution_path] quality, │ │ efficiency)│ │ │ │ ┌──────────────────────────────────────────────────────────────────┐ │ │ │ RL Training Sample │ │ │ │ { │ │ │ │ "state": [0.23, 0.87, ...], # 环境状态编码 │ │ │ │ "action": [0.12, 0.95, ...], # 动作编码 │ │ │ │ "reward": 0.91, # 奖励信号 │ │ │ │ "next_state": [0.31, 0.82, ...], # 执行后状态 │ │ │ │ "done": true # 是否终止 │ │ │ │ } │ │ │ └──────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────┘

状态提取(State Extraction)

从Trajectory的context字段和当前step中提取状态向量:

defextract_state(trajectory:dict,step_index:int)->dict:"""将轨迹的某一步转化为状态描述"""step=trajectory["steps"][step_index]context=trajectory["context"]return{"goal_embedding":embed(trajectory["goal_id"]),# 目标语义向量"memory_hotness":len(context["memory_nodes_accessed"]),# 记忆活跃度"skills_available":context["skills_used"],# 已用技能"tokens_remaining":context["token_budget"]-context["token_used"],"error_count_so_far":count_errors_before(trajectory,step_index),"time_elapsed_ms":sum_duration_before(trajectory,step_index),"project_type":classify_project(context.get("tags",[]))}

动作编码(Action Encoding)

defencode_action(step:dict)->dict:"""将一步执行转化为动作编码"""action_type=step["type"]ifaction_type=="tool_call":return{"action_category":"tool_call","tool_name":step["tool"],"tool_input_shape":hash_input_shape(step["input"]),"tool_input_summary":summarize(step["input"])}elifaction_type=="reasoning":return{"action_category":"reasoning","thought_depth":step["metadata"]["chain_of_thought_depth"],"confidence":step["metadata"]["confidence"]}# ... tool_result, error_recovery, etc.

奖励计算(Reward Calculation)

这是最精妙的部分——奖励不是简单的"成功=1,失败=0",而是一个多维复合函数:

defcalculate_reward(trajectory:dict)->float:"""多维奖励函数"""outcome_score=1.0iftrajectory["outcome"]=="success"else-0.3quality_score=trajectory["quality_score"]# 0-1,来自验证器efficiency=1.0-(trajectory["context"]["token_used"]/trajectory["context"]["token_budget"])error_penalty=-0.1*len(trajectory["errors"])# 错误惩罚recovery_bonus=0.05*sum(# 成功恢复奖励1foreintrajectory["errors"]ife["recovery_successful"])speed_score=max(0,1.0-trajectory["duration_ms"]/120000)# 加权融合reward=(0.30*outcome_score+0.25*quality_score+0.15*efficiency+0.10*error_penalty+0.05*recovery_bonus+0.15*speed_score)returnround(max(-1.0,min(1.0,reward)),4)

震撼时刻:Agent自己"悟"出了最优策略

100条成功轨迹 + 20条失败轨迹,通过上述管线自动生成RL训练集。训练完成后,Hermes的Policy Model学到了一条非显而易见的策略:

在FastAPI项目中创建API端点,先执行file_listfile_read模式理解项目结构,再动手写代码,成功率92%;而直接开始写代码的成功率仅为67%。

这条策略不是任何工程师手写的规则,不是Prompt中的指令,不是文档中的最佳实践——这是Agent从120条自己的执行轨迹中,通过强化学习自己"悟"出来的

这就是Trajectory Log作为"自进化石油"的真正价值:你不需要告诉Agent应该怎么做,你只需要忠实记录它做了什么、结果如何,进化会自动发生。


五、成功/失败路径的模式识别

RL训练是"隐式学习",模式识别则是"显式洞察"——让进化过程可解释、可审计、可干预。

聚类分析:发现高效路径

┌─────────────────────────────────────────────────────────────┐ │ Trajectory Clustering:路径模式发现 │ │ │ │ 高效路径聚类 (centroid_1, avg_score=0.93) │ │ ┌──────────────────────────────────────────────────┐ │ │ │ goal_parse → file_list → file_read → code_write │ │ │ │ → test_run → verify → commit │ │ │ │ 样本数: 38/43 (88%) avg_duration: 42s │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ 低效路径聚类 (centroid_2, avg_score=0.61) │ │ ┌──────────────────────────────────────────────────┐ │ │ │ goal_parse → code_write → error → debug │ │ │ │ → code_edit → error → debug → code_edit│ │ │ │ → test_run → verify → commit │ │ │ │ 样本数: 5/43 (12%) avg_duration: 118s │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ 失败路径聚类 (centroid_3, avg_score=-0.15) │ │ ┌──────────────────────────────────────────────────┐ │ │ │ goal_parse → code_write → error → error → error │ │ │ │ → timeout → FAIL │ │ │ │ 样本数: 15/20 (75%) 共同特征: token耗尽 │ │ │ └──────────────────────────────────────────────────┘ │ │ │ │ ★ 洞察:centroid_2的5个样本是"差点失败的成功" │ │ → 提取为"边界案例",用于增强鲁棒性训练 │ └─────────────────────────────────────────────────────────────┘

根因分析:失败轨迹的共同特征

Hermes的Pattern Analyzer会对失败轨迹进行自动化根因分析:

  1. 时序对齐:将不同长度的轨迹通过Dynamic Time Warping对齐,找到"在哪个步骤开始分叉"
  2. 特征提取:从contextsteps中提取共同特征——相同的模型?相同的工具?相同的memory节点?
  3. 归因输出:生成人可读的根因报告
root_cause_analysis:failure_cluster_id:"fc_token_exhaustion"common_patterns:-pattern:"token_used / token_budget > 0.8 before step 3"frequency:"14/15 (93%)"-pattern:"no file_list/file_read in first 3 steps"frequency:"13/15 (87%)"-pattern:"reasoning_chain_depth > 5 in step_001"frequency:"12/15 (80%)"inferred_root_cause:>Agent在未充分理解项目结构的情况下启动深度推理, 导致生成大量无效token。根本原因是缺少"先探索再推理"的策略约束。suggested_fix:>在Skill Router中添加前置条件:code_write之前必须至少执行 一次file_list和一次file_read。可通过Policy Update自动注入。

异常检测:偏离正常模式的行为识别

不是所有异常都是失败——有时候异常代表"发现了更好的路径"。Hermes的异常检测使用Isolation Forest算法,不预设"好"或"坏",而是标记"与大多数不同"的轨迹,然后交给质量评分来判断。

这种设计避免了一个陷阱:如果只关注"偏离正常=坏",Agent将永远无法发现优于当前策略的新路径。自进化需要探索的空间,异常检测只是标记,不评判。


六、日志的隐私与安全

Trajectory Log记录了Agent的每一次思考、每一次操作,这意味着它可能包含:

  • 用户的项目结构、文件名、代码片段
  • 业务逻辑中涉及的敏感实体名称
  • 错误信息中暴露的系统内部路径

Hermes采用三层防护策略:

自动脱敏

SENSITIVE_PATTERNS={r"password\s*[:=]\s*\S+":"password: [REDACTED]",r"api_key\s*[:=]\s*\S+":"api_key: [REDACTED]",r"/home/[^/]+/":"/home/[USER]/",r"[\w.+-]+@[\w-]+\.[\w.]+":"[EMAIL]",}defsanitize_trajectory(raw:dict)->dict:"""在写入存储前自动脱敏"""sanitized=deep_copy(raw)forstepinsanitized["steps"]:step["content"]=apply_patterns(step["content"],SENSITIVE_PATTERNS)if"input"instep:step["input"]=apply_patterns(str(step["input"]),SENSITIVE_PATTERNS)returnsanitized

访问权限控制

Trajectory数据按敏感等级分为三级:

  • L1(公开):outcome、quality_score、duration等聚合指标——团队成员可见
  • L2(内部):steps、errors、工具调用细节——仅Agent运维团队可见
  • L3(敏感):完整content、工具输入输出——仅系统自身访问,用于RL训练

合规保留策略

不同行业对日志保留有不同要求。Hermes的保留策略完全可配置:

retention_policy:financial:# 金融场景hot_retention:30dcold_retention:2555d# 7年,满足金融审计要求anonymize_after:90d# 90天后自动脱敏详细内容healthcare:# 医疗场景hot_retention:14dcold_retention:2190d# 6年anonymize_after:30dexclude_phi:true# 排除所有PHI(受保护健康信息)general:# 通用场景hot_retention:7dcold_retention:365danonymize_after:60d

七、总结——记录即是进化的起点

Trajectory Log工程看似是"存储问题",实则是自进化的核心基础设施。让我们回顾Hermes的完整链路:

  1. 记录:每一次执行都被完整Schema化为结构化数据
  2. 存储:分层存储策略确保查询效率与成本可控
  3. 转化:自动管线将轨迹转化为RL训练样本
  4. 学习:RL训练让Agent从自己的经验中进化
  5. 洞察:模式识别让进化过程可解释、可干预

这不是一个调试工具,不是日志系统,不是可选项——这是让Agent从"每次从零开始"变为"越用越强"的进化引擎

上一篇#23拆解了推理解析与输出清理,为Trajectory Log提供了高质量的输入。本篇完成了"记录与存储"这一环。但一个关键问题尚未回答:所有执行被记录了,所有证据被收集了——如何判定"这个Goal真的完成了"?

下一篇#25将深入Hermes的Verification协议——从证据收集到目标达成判定的完整验证链。这是自进化系统的最后一道闸门:只有被验证的执行,才能成为高质量的进化数据。


延伸阅读与交流

本文涉及的Hermes Agent自进化智能体技术体系,目前已有系统化的深度学习资源可供参考。中国通信工业协会通信和信息技术创新人才培养工程项目办公室将于近期组织相关技术专题分享,围绕本文讨论的AI原生架构、智能体工作流、自进化数据层等方向展开系统讲解。

专题信息

  • 主题:AI原生Hermes自进化智能体系统
  • 时间:2026年7月4-5日(周末)
  • 形式:线上直播
  • 内容方向:AI原生架构 · Hermes智能体拆解 · 全栈扩展 · 智能自动化 · 产品级实战 · Context Engine · 自进化数据层

分享嘉宾

王老师(Gavin),Agentic AI企业联合创始人兼CTO,十余年硅谷AI系统工程经验。长期深耕NLP、强化学习、可控AI与智能体系统架构,提出"语言即控制(Language as Control)"原创范式,在RLHF、PPO、DPO、GRPO等方向有系统化工程实践,推动智能体技术在社交媒体、医疗、金融、法律、教育等专业场景落地。

技术交流

  • 联系人:Sam
  • WeChat:NLP_ChatGPT_LLM
  • Hermes Agent技术文档:https://hermes-agent.nousresearch.com/docs/
http://www.jsqmd.com/news/959005/

相关文章:

  • Video2X:免费AI视频超分辨率神器,让模糊视频瞬间变高清的终极解决方案
  • Photoshop PS 2025保姆级详细安装教程
  • 离散算子学习:结合数值分析与深度学习求解PDE
  • 论文党必看:从Word公式到MathType的完整避坑与批量美化指南
  • Windows下用VS2019编译CEF官方Demo,并开启离屏渲染(OSR)模式避坑实录
  • 毕业论文冲刺必看:这4款工具帮你一键搞定排版、降重和答辩PPT(而且还有答辩对策)
  • 别再为MATLAB摄像头支持包发愁了!用Add-On Explorer一站式安装与管理的完整指南
  • 实测落地复盘:多模型聚合不是噱头,从开发者日常看清真实使用价值
  • 别再手动改样式了!用Pycharm+PyQt5的pyrcc5一键管理界面资源(附虚拟环境路径避坑)
  • 入门大模型工程师第八课----让Agent加一道自检闭环
  • UiPath依赖项恢复失败?试试这个本地包缓存迁移大法(附Package文件夹位置详解)
  • Java 继承 Thread 与实现 Runnable 创建线程区别
  • STM32新手必看:用Proteus 8.13仿真ILI9341液晶屏,从零到显示“Hello World”的完整流程
  • 别再只会用‘等于’了!西门子博图TIA Portal比较指令的7种实战用法(附S7-1200程序)
  • 工控必看:温度传感器快速选型指南
  • 快速原型对比:用快马一键生成trae solo与ide的轻量级demo
  • 别再只会用BT下载了!手把手带你用Python模拟DHT协议,理解P2P网络的核心
  • 【2023个人AI助手黄金配置指南】:CPU/GPU/内存/存储四维平衡公式首次公开(附实测性能衰减拐点数据)
  • UOS统信服务器安全策略实战指南:从入门到精通
  • openclaw添加与更换服务商模型
  • 机器马达异响?别慌,先教你如何通过声音辨别健康状态
  • 持续高扩容!2026-2032电子防窥膜分析研究报告,深挖行业蓝海机遇
  • 广东谋根全新拖拽式网页 + 多语言 + 分离式架构:CRMEB二开开启独立站新纪元结合AI Schema加持让企业营销全系统打通,从私欲营销到大模型优化领先同行
  • 国际EMBA排行榜2026最新榜单|顶尖项目实力对比与报考解析
  • # 让 AI 扫描你的电脑——Codex/Claude Code 一句 Prompt 带来的震撼体验
  • 不止于脚本:从一次流片经历看VCS混合仿真环境的最佳实践与自动化
  • Visdom从入门到‘玩坏’:除了画Loss曲线,你还能用它做这些意想不到的骚操作
  • 新手福音:在快马平台免配置玩转anaconda与python数据分析
  • 智能债券整合不是选择题,而是生存线(2024Q2全市场AI债券平台渗透率骤降11%的真相)
  • 用Wireshark和Python实战拆解pcap文件:从十六进制到可读数据包的完整解析流程