hermes agent重构需五步:一、解耦调度与技能逻辑,新建skills包并动态加载;二、外置记忆路径配置,抽象memorybackend接口;三、提取kepa策略判定为可插拔组件;四、用mcpadapter统一模型协议适配;五、以pydantic schema中心化管理cli与gateway配置。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您正在维护基于Hermes Agent构建的遗留系统,发现其代码结构松散、模块耦合度高、技能注册逻辑分散或记忆加载路径硬编码,则可能是由于初始部署时未遵循可维护性设计原则所致。以下是针对Hermes Agent相关代码实施重构的具体步骤:
一、识别并解耦核心运行时与业务技能逻辑
原始Hermes Agent代码中,tool_dispatch.py常混杂模型路由判断、工具参数校验与具体业务执行逻辑,导致单文件职责过载、难以单元测试。重构目标是将“调度决策”与“技能实现”物理分离,为后续替换模型或扩展工具链预留接口边界。
1、在hermes/agent/目录下新建skills/子包,将原散落在model_tools.py和registry.py中的具体工具实现(如git_commit_analyze、log_search)迁移至此。
2、修改tool_dispatch.py,移除所有if tool_name == "xxx"分支,改用importlib.import_module按名称动态加载skills/下对应模块。
3、为每个技能模块定义统一入口函数execute(params: dict) -> dict,确保调用契约一致。
二、标准化记忆加载与序列化路径
当前Hermes Agent默认将MEMORY.md与USER.md硬编码于~/.hermes/memories/,导致多实例部署时记忆冲突、测试环境无法隔离。重构需将路径配置外置,并支持内存/文件/数据库三类后端抽象。
1、在hermes/config.py中新增MEMORY_BACKEND枚举项,值为"file"、"memory"或"redis"。
2、创建hermes/memory/backend.py,定义抽象基类MemoryBackend,声明load()与save()方法。
3、为每种后端实现子类:FileMemoryBackend读写本地Markdown;InMemoryBackend使用dict暂存;RedisMemoryBackend通过redis-py序列化存储。
4、修改prompt_builder.py中记忆注入逻辑,依据配置实例化对应后端并调用load()。
三、提取KEPA闭环中的策略判定层
Hermes Agent的KEPA(Knowledge, Experience, Policy, Action)自我进化能力依赖于对任务成败的实时判定与技能沉淀触发,但原始代码将判定逻辑嵌入run_agent.py主循环,造成策略与流程强绑定。重构需将其抽象为可插拔策略组件,便于灰度验证不同判定规则。
1、新建hermes/policy/包,在其中定义EvolutionPolicy抽象类,含should_evolve(task_result: dict) -> bool方法。
2、实现两个具体策略:SuccessCountPolicy(连续5次成功则触发)、ErrorRecoveryPolicy(从错误中恢复即触发)。
3、在run_agent.py中移除内联判定代码,改为从配置读取策略类名,通过policy_factory.get_policy()获取实例并调用should_evolve()。
4、将策略选择开关暴露至config.yaml,键名为evolution_policy: success_count。
四、重构ACCP适配器以支持MCP协议热插拔
当前acp_adapter/仅适配Anthropic模型,若需接入百炼或Ollama等新模型,须修改多处硬编码字符串与参数映射。重构目标是将模型协议适配逻辑下沉为独立插件,实现MCP(Model Calling Protocol)标准兼容。
1、在hermes/runtime_provider/下创建mcp/子目录,定义MCPAdapter基类,声明to_mcp_request()与from_mcp_response()方法。
2、为Anthropic、Qwen、Llama-3分别实现子类,如AnthropicMCPAdapter,封装各自的消息格式转换逻辑。
3、修改runtime_provider.py中的get_provider()函数,依据配置中model_provider字段(如"anthropic-mcp")动态导入对应适配器。
4、删除原acp_adapter/目录,将其功能完全由mcp/子系统接管。
五、将CLI与Gateway配置统一至中心化Schema
目前cli.py与gateway/run.py各自维护一套命令行参数与环境变量解析逻辑,导致相同配置项(如API密钥路径、日志级别)需在两处同步修改,易引发不一致。重构需引入Pydantic V2 Schema统一描述配置契约,并由单一模块完成校验与加载。
1、新建hermes/config/schema.py,定义HermesConfig Pydantic模型,包含api_key_path: str、log_level: Literal["INFO", "DEBUG"]等字段及验证约束。
2、创建hermes/config/loader.py,提供load_config() -> HermesConfig函数,依次尝试从pyproject.toml、环境变量、命令行参数加载并合并。
3、修改cli.py主函数,移除argparse代码,直接调用load_config()并传入main()。
4、修改gateway/run.py,同样替换为load_config(),并将结果注入FastAPI的app.state.config。











