Hermes Agent通过Observe→Execute→Reflect→Crystallize→Reuse循环将复合指令分解为可并行子任务,结合语义匹配引擎、DAG调度、上下文压缩与Skill结晶化实现高效执行。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您向Hermes Agent发出一条复合型指令(例如“帮我搜集今天的热点新闻,每条分类并附简要分析”),它并非直接调用单一工具完成全部动作,而是自动将该任务分解为多个可执行、可并行、可验证的子任务单元。以下是实现该能力的具体机制:
一、Observe→Execute→Reflect→Crystallize→Reuse 循环驱动的任务识别
该循环是Hermes Agent主控逻辑的核心节律,其中Observe阶段即启动结构化任务解析:Agent通过模型推理识别用户输入中的显式意图、隐含约束与多目标层级,并生成初始任务图谱(Task Graph)。此过程不依赖固定模板,而是基于当前上下文与历史技能记忆动态推导。
1、Agent加载当前会话的短期推理记忆(上下文窗口)与过程性技能记忆(~/.hermes/skills/*.md)。
2、调用模型对原始指令进行语义原子化切分,识别出动词主干(如“搜集”“分类”“分析”)、对象实体(如“热点新闻”“科技/财经/社会”)、时序要求(如“今天”)及输出格式约束。
3、将切分结果映射至已注册工具的能力边界,确认web_search、classify_news、summarize_text等工具是否具备对应语义覆盖能力。
4、若存在未覆盖语义节点,则触发Skill自学习流程,生成临时抽象节点并标记为待结晶(crystallize_pending)。
二、多粒度工具语义匹配引擎
model_tools.py模块内嵌的语义匹配器不采用关键词硬匹配,而是结合工具元数据(toolsets.py中定义的description、input_schema、output_schema)与当前任务节点的嵌入向量进行余弦相似度排序,从而支持模糊意图到精确工具的映射。例如,“附上简要分析”可同时匹配summarize_text(摘要)与analyze_sentiment(情感分析),由后续Reflect阶段依据上下文选择最优路径。
1、提取当前任务节点的意图嵌入向量,使用与工具注册时一致的embedding模型(默认all-MiniLM-L6-v2)。
2、遍历tools/registry.py中所有启用工具,计算其input_schema描述与意图向量的相似度得分。
3、筛选得分高于阈值0.65的候选工具,按置信度降序排列并注入上下文供模型决策。
4、若最高分低于0.5,则跳过工具调用,进入Crystallize阶段生成新Skill草案。
三、子任务图谱动态构建与并行调度
在Reflect阶段,Agent基于任务依赖关系(DAG)构建可执行图谱:无前置依赖的子任务(如并发搜索多个信源)被分配至线程池并行执行;有强顺序依赖的(如“先提取正文再分类”)则插入等待队列并绑定回调钩子。图谱结构实时写入SQLite会话状态表,支持中断恢复与错误回溯。
1、解析任务节点间的数据流依赖,识别出source→extract→classify→summarize→format五级流水线。
2、为每个叶子节点分配唯一task_id,并标记其required_inputs(如classify_news需content字段)与produced_outputs(如category标签)。
3、启动concurrent.futures.ThreadPoolExecutor,最大并发数由config.yaml中max_parallel_tasks控制(默认4)。
4、任一子任务失败时,自动触发error_recovery.py,根据错误类型(网络超时/格式异常/权限拒绝)选择重试、降级或跳过策略。
四、上下文压缩与跨子任务状态注入
为避免子任务执行过程中上下文膨胀导致模型失焦,Hermes在每个子任务启动前执行定向压缩:仅保留与该子任务强相关的前序输出片段、用户原始指令锚点及必要元信息(如会话ID、时间戳)。压缩后的上下文经FTS5全文索引预检,确保关键实体不被截断。
1、从SQLite会话存档中检索最近3轮包含“新闻”“分类”“分析”关键词的交互记录。
2、使用LLM-guided压缩策略(prompt: “请提取以下文本中与【当前子任务】直接相关的信息,删除所有背景说明与重复描述,保持原始术语不变”)生成精简上下文。
3、将压缩后文本与当前子任务schema拼接,构造最小可行输入(MVI)。
4、执行前校验MVI长度,若超过模型上下文窗口70%,则触发chunk_and_merge机制,分片处理后合并结果。
五、Skill结晶化反馈闭环
当某类复合任务被重复执行≥3次且路径稳定(各子任务调用顺序、参数模式、返回结构一致性达92%以上),Background Review子系统自动将其抽象为结构化Skill文件,存入~/.hermes/skills/目录,并更新向量索引。此后同类指令将直接命中该Skill,跳过实时拆解过程,显著提升响应效率与稳定性。
1、后台进程定期扫描sqlite.db中session_events表,筛选action_type = 'task_decomposition'且success = 1的记录。
2、对满足频次与一致性阈值的事件组,调用crystallize_skill.py生成Markdown Skill文档,包含name、description、input_schema、steps、example_call等字段。
3、将新Skill文件写入磁盘后,触发vector_indexer.py对其description与steps字段重新编码并注入FAISS索引。
4、更新skills/registry.py缓存,使下一次会话中model_tools.py可立即发现并匹配该Skill。


















