【深度解析】Hermes Agent:用“提示反向传播”打造可自我进化的 AI 智能体

张开发
2026/5/4 16:50:55 15 分钟阅读
【深度解析】Hermes Agent:用“提示反向传播”打造可自我进化的 AI 智能体
摘要本文从工程视角解析开源智能体 Hermes Agent 的核心机制通过类反向传播的 KEPA 系统对“提示与技能”进行自我更新构建可持续进化的个人 AI Agent。文章将拆解其记忆体系、自动技能生成能力并给出基于 OpenAI 兼容接口以薛定猫 xuedingmao.com 为例的 Python 实战示例帮助你在自己的业务中落地“自学习智能体”。一、背景介绍从 ChatGPT 到“可成长的智能体”多数开发者当前的使用路径是LLMChatGPT / Claude / Gemini 一点 prompt engineering 若干工具调用。问题在于模型不会“记住”之前任务中的具体踩坑与修复过程每个项目都要重新写一套 prompt / workflow工具调用逻辑难以复用为“技能”Hermes Agent 试图解决的正是这一类“LLM 不会主动进化”的痛点开源智能体框架可本地运行支持多模型与多终端本地模型、手机端、WhatsApp、Telegram、Slack 等。自我改进机制每调用约 15 次工具就自动“回放”执行过程分析失败原因并更新自身配置。无需微调模型不修改模型参数而是动态优化提示prompts、工具调用策略和技能skills。自动技能生成任务解决后会被固化为可复用的技能未来在类似场景中自动调用。本质上它更接近一个“持续学习的 AI 操作系统”而非单一聊天工具。二、核心原理KEPA 提示反向传播 记忆与技能系统2.1 KEPA对“提示”做反向传播视频中提到的 KEPA可以理解为一种“针对提示与 Agent 配置的反向传播机制”传统深度学习前向输入 → 模型 → 输出反向根据损失函数更新模型权重Hermes 的做法前向用户意图 → HermesLLM 工具→ 执行序列工具调用链、代码生成等反向周期性回顾近期执行检测失败点工具调用失败、结果不符合预期、用户纠错等生成“改进提示 / 改进 skill 定义”更新记忆库、技能库和内部工作流描述关键差异不是更新“模型权重”而是更新“如何使用模型”的策略——包括提示模板、调用工具的顺序和条件、技能拆解方式等。这实际上是把 prompt engineering 和 workflow design 变成了一个自动化、闭环优化的过程。2.2 记忆系统从对话历史中抽象“可复用知识”Hermes 的记忆系统主要有两类短期执行记忆Execution Memory记录最近一次或若干次任务的执行轨迹调用了哪些工具、参数如何、结果怎样。被 KEPA 用来回放和分析失败原因。长期语义记忆Long-term Semantic Memory从对话中抽取结构化知识用户偏好的技术栈如大量使用 shadcn UI、TailwindCSS 等常用工作流例如先爬文档 → 同步到 Obsidian → 生成前端 UI存入向量库 / 知识库在后续任务中按相似度检索并提供上下文。视频中的 Obsidian 示例非常典型用户让 Hermes 将 shadcn UI 文档同步为 Obsidian 知识图谱Hermes 在之后生成前端时会主动检索这份知识库引用最新组件文档这部分“使用 Obsidian shadcn 的前端构建流程”被固化为记忆和技能。2.3 技能系统自动生成可复用的“Agent 函数”与传统工具调用不同Hermes 会把“成功的任务执行过程”抽象为可复用技能Skills技能包含输入 / 输出描述类似函数签名调用的工具链例如浏览器 → 代码生成 → 测试 → 修复所需的上下文 / 知识库引用方式例子“manim 技能”把复杂技术概念转成动画视频“obsidian 知识图谱技能”从指定文档源同步知识到 Obsidian并维护链接关系“前端仪表盘生成技能”基于 shadcn 文档历史 UI 偏好构建金融仪表盘前端。这意味着你不再需要手工设计所有 Agent WorkflowHermes 会在你使用的过程中把频繁出现的工作流封装为技能并在相似场景中重用。三、实战演示用 Python 薛定猫 API 搭建一个可进化的小型 Agent虽然 Hermes Agent 本身是一个独立的开源项目但在日常开发中我们可以借鉴它的思想用通用 LLM API 实现一个“简化版自进化 Agent”。下面示例使用薛定猫 AIxuedingmao.com作为 OpenAI 兼容接口模型使用claude-sonnet-4-6实现基础对话 工具调用简单的“经验回顾 提示优化”把成功解决方案固化为本地技能存 JSON3.1 环境准备pipinstallopenai3.2 Python 代码示例可直接运行importosimportjsonfromtypingimportList,Dict,AnyfromopenaiimportOpenAI# 配置区 # 在环境变量中设置你的薛定猫 API Key# export XUEDINGMAO_API_KEYyour_api_keyXDM_API_KEYos.getenv(XUEDINGMAO_API_KEY)ifnotXDM_API_KEY:raiseRuntimeError(请先在环境变量中设置 XUEDINGMAO_API_KEY)# 薛定猫使用 OpenAI 兼容接口只需要替换 base_url 即可clientOpenAI(api_keyXDM_API_KEY,base_urlhttps://xuedingmao.com/v1)MODEL_NAMEclaude-sonnet-4-6SKILL_STORE_PATHskills.jsonMEMORY_STORE_PATHmemory.json# 工具函数本地“记忆”和“技能”存储 defload_json(path:str,default:Any):ifnotos.path.exists(path):returndefaultwithopen(path,r,encodingutf-8)asf:returnjson.load(f)defsave_json(path:str,data:Any):withopen(path,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)defload_skills()-Dict[str,Dict]:returnload_json(SKILL_STORE_PATH,{})defsave_skills(skills:Dict[str,Dict]):save_json(SKILL_STORE_PATH,skills)defload_memory()-List[Dict]:returnload_json(MEMORY_STORE_PATH,[])defsave_memory(mem:List[Dict]):save_json(MEMORY_STORE_PATH,mem)# 核心调用 LLM 上下文记忆 技能 defbuild_system_prompt(skills:Dict[str,Dict])-str: 根据当前技能库构造系统提示相当于 Hermes 中的“技能注入”。 ifnotskills:return(你是一个会自我改进的 AI 助手。当你成功解决一个问题时会尝试用自然语言总结可复用步骤以便未来在类似任务中复用。)skill_descs[]forname,metainskills.items():skill_descs.append(f- 技能名{name}\nf 适用场景{meta.get(description,)}\nf 使用说明{meta.get(usage_hint,)})return(你是一个会自我改进的 AI 助手拥有以下已学习技能\n\n\n.join(skill_descs)\n\n当发现当前任务与某个技能的适用场景相似时请优先按照技能总结的步骤来规划解决方案并在必要时进行调整。)defcall_llm(messages:List[Dict[str,str]])-str: 调用薛定猫 OpenAI 兼容接口的对话模型。 respclient.chat.completions.create(modelMODEL_NAME,messagesmessages,temperature0.2,)returnresp.choices[0].message.content# 简易 KEPA基于对话回顾生成新技能 defreflect_and_learn(conversation:List[Dict[str,str]],success:bool): 对一次对话进行“反思”如果成功则让模型帮我们总结可复用技能。 ifnotsuccess:# 简化处理失败暂不学习真实场景可生成 “反模式说明” 或修复策略returnskillsload_skills()reflection_prompt[{role:system,content:(你现在是一个 Agent 教练需要从下面这段对话中抽取一个可复用的技能如果合适。技能用于未来当用户提出类似问题时可以重复使用这套步骤。输出严格使用 JSON 格式\n{\n should_create: true/false,\n name: 技能名称简短,\n description: 适用场景的描述,\n usage_hint: 详细步骤或使用说明面向未来的模型\n})},{role:user,content:json.dumps(conversation,ensure_asciiFalse,indent2)}]resultcall_llm(reflection_prompt)try:datajson.loads(result)exceptjson.JSONDecodeError:# 如果模型输出不合法直接忽略returnifnotdata.get(should_create):returnnamedata.get(name)orunnamed_skill# 若重名加个简单后缀ifnameinskills:idx2whilef{name}_{idx}inskills:idx1namef{name}_{idx}skills[name]{description:data.get(description,),usage_hint:data.get(usage_hint,)}save_skills(skills)print(f[Agent] 新技能已学习{name})# 一个简单的交互循环示例 definteractive_agent(): 一个最小可用的可进化 Agent Demo - 持续与用户对话 - 用户输入 exit 退出 - 用户输入 ok 代表当前问题解决触发一次“反思学习” print(自进化 Agent Demo基于 xuedingmao.com claude-sonnet-4-6)print(输入自然语言提问输入 ok 表示当前问题已解决exit 退出。\n)conversation_history:List[Dict[str,str]][]turn_counter0whileTrue:user_inputinput(你).strip()ifuser_input.lower()exit:breakifuser_input.lower()ok:# 认为最近这段对话“成功”触发一次学习ifconversation_history:reflect_and_learn(conversation_history,successTrue)# 清空当前轮对话模拟 Hermes 中“分段回顾”conversation_history[]continue# 加载当前技能构造系统提示skillsload_skills()system_promptbuild_system_prompt(skills)messages[{role:system,content:system_prompt},*conversation_history,# 保留本轮对话的上下文{role:user,content:user_input}]assistant_replycall_llm(messages)print(fAgent{assistant_reply}\n)# 写入当前轮对话历史conversation_history.append({role:user,content:user_input})conversation_history.append({role:assistant,content:assistant_reply})# 简单模拟每 15 条消息可以触发一次自动学习类似 Hermesturn_counter1ifturn_counter%150:reflect_and_learn(conversation_history,successTrue)conversation_history[]if__name____main__:interactive_agent()使用方式在薛定猫xuedingmao.com获取 API Key并设置环境变量XUEDINGMAO_API_KEY。运行脚本和 Agent 进行多轮对话当你觉得某个问题“解决得不错”时输入ok脚本会触发反思学习把这段对话总结为技能存入skills.json后续对话Agent 会自动在 system prompt 中注入这些技能从而在类似任务中复用解决思路。这只是一个极简 Demo但已经具备了 Hermes Agent 的三大核心特征对话分段回顾从成功经验中抽取“技能”通过系统提示“进化”自身行为四、注意事项与工程实践建议4.1 与本地模型结合成本与性能权衡视频中展示了 Hermes Agent 可以检测本地 GPU / CPU 能力推荐合适的本地模型如 Gemma在本地运行 Agent免去云端 API 费用实际工程中可采用混合策略高频、对隐私友好的任务→ 本地模型如 Gemma / Llama 家族对推理质量要求高的场景→ 云端强模型如 GPT-5.4 / Claude 4.6 / Gemini 3 Pro利用类似薛定猫这样聚合多模型、统一接口的平台可以轻松根据场景切换后端模型而无需改动业务代码。4.2 记忆与技能的“污染”问题持续学习意味着存在“自我污染”的风险用户偶然给出错误信息被当作长期记忆某次错误示范被固化为技能在未来持续放大负面影响。建议为记忆与技能库增加“可视化审阅 清理接口”为技能添加元信息创建时间、可信度、使用次数等做“技能降权或废弃”对关键任务的技能更新添加人工审批流程。4.3 与外部知识库的集成设计像视频中那样将 Obsidian 作为知识图谱后端是非常值得借鉴的实践模式Agent 通过爬文档 → 清洗 → 写入 Obsidian vault利用 Obsidian 的图谱/反向链接增强知识结构化在 Agent 中通过“技能”来使用这些知识例如生成前端时优先引用 shadcn 文档类似方法可以替换为Notion / Confluence / 自建 Markdown 仓库向量库Milvus、Weaviate、PGVector 等 Agent 技能封装关键在于把“知识库更新”本身也做成一个技能并纳入 Agent 的自我改进回路。五、技术资源如何更高效地玩转多模型 Agent在开发类似 Hermes 的多模型智能体时会面临两个典型难点不同模型厂商的 API 形态各不相同OpenAI / Anthropic / Google / 本地推理框架新模型迭代非常快频繁接入和切换成本高。这类场景下可以考虑使用薛定猫 AIxuedingmao.com这一类统一接口平台聚合500 主流大模型包括 GPT-5.4、Claude 4.6、Gemini 3 Pro 以及各类开源模型的推理端点新模型基本是上线即开放 API开发者可以第一时间在自己的 Agent 框架中做 A/B 测试提供OpenAI 兼容接口像上面代码示例一样只需替换base_url和model即可接入极大降低多模型集成复杂度方便构建“带模型路由器的 Agent”根据任务类型动态选用最优模型高推理 低成本 本地 or 云端。在实现 Hermes 类的自进化 Agent 时这种统一接入点可以显著减少你在“对接厂商 API”上的时间成本把注意力放在KEPA 反向传播策略设计技能抽象粒度记忆系统结构化方案与业务系统的集成这些才是 Agent 系统真正的工程价值所在。结语Hermes Agent 展示了一条清晰的路线不再把 LLM 当成一次性回答的聊天工具而是打造一个会随着你使用逐渐变强的“第二大脑”。从工程角度这条路线的几个关键点是把“反思与改进”做成系统能力而不是靠人工微调 prompt把“任务执行过程”抽象为可复用技能并持续沉淀强化长期记忆体系与外部知识库深度集成在多模型环境下做好技术选型与路由使 Agent 既便宜又好用。希望本文的解析和代码示例能帮助你在自己的项目中落地一个真正会“自己变聪明”的 AI 智能体。#AI #大模型 #Python #机器学习 #技术实战

更多文章