[特殊字符]深度解剖!Hermes-Agent 源码全解析(架构+核心流程+二次开发指南)
深度解剖Hermes-Agent 源码全解析架构核心流程二次开发指南专注AI Agent源码拆解、大模型实战、开源项目深度解析上一篇我们完成了Hermes-Agent保姆级安装部署本篇直接进入硬核源码层逐模块拆解架构、扒透核心执行流程、标注关键代码、告诉你如何二次开发全文可直接复制发布CSDN逻辑清晰、代码标注详细、新手也能看懂 前言引流定位Hermes-Agent 是NousResearch开源的轻量级、生产级AI智能体框架支持终端对话、多平台消息网关、工具调用、定时任务、浏览器自动化、文件检索代码结构极简、扩展性极强非常适合学习Agent工作原理本篇基于GitHub官方主分支源码深度解析整体架构分层核心入口与启动流程LLM对接、工具调用、记忆系统源码配置系统、命令行系统二次开发最佳实践建议收藏关注下期带来《Hermes自定义工具/插件开发》一、项目结构总览最清晰的源码地图1.1 项目根目录结构hermes-agent/ ├── hermes/ # 核心源码包99%逻辑都在这里 │ ├── agent/ # Agent核心逻辑 │ ├── cli/ # 命令行入口 │ ├── config/ # 配置管理 │ ├── llm/ # 大模型对接层 │ ├── tools/ # 工具调用系统 │ ├── memory/ # 记忆/上下文管理 │ ├── gateway/ # 消息网关Telegram/Discord │ ├── cron/ # 定时任务 │ └── utils/ # 工具函数 ├── scripts/ # 安装/启动脚本 ├── tests/ # 测试用例 └── pyproject.toml # 依赖管理1.2 核心设计思想模块化解耦LLM、记忆、工具、网关完全独立插件化扩展新增工具/模型无需修改核心代码配置驱动所有行为由配置文件统一控制极简入口单命令启动内部自动编排流程二、核心入口源码解析从 hermes 命令开始2.1 CLI 命令入口hermes/cli/main.py用户执行hermes、hermes chat、hermes model全部从这里进入# hermes/cli/main.pyimporttyper# 主命令组apptyper.Typer(namehermes,helpNousResearch Hermes Agent - 轻量级生产级AI智能体,)# 加载子命令chat、model、tools、gateway等from.chatimportappaschat_appfrom.modelimportappasmodel_appfrom.toolsimportappastools_appfrom.configimportappasconfig_app app.add_typer(chat_app,namechat)# 对话命令app.add_typer(model_app,namemodel)# 模型配置app.add_typer(tools_app,nametools)# 工具管理app.add_typer(config_app,nameconfig)# 配置管理# 主入口defmain():app()关键点基于typer构建现代化CLI所有功能以子命令形式模块化拆分执行hermes默认进入chat交互模式三、Agent 核心执行流程最关键3.1 Agent 主类hermes/agent/agent.py这是整个智能体的大脑所有思考、调用、回复都在这里# hermes/agent/agent.pyclassHermesAgent:def__init__(self,config:Config):self.configconfig# 配置self.llmLLMManager(config)# LLM模型管理器self.memoryMemory(config)# 记忆系统self.tool_managerToolManager(config)# 工具管理器# 一次完整对话流程asyncdefrun(self,user_input:str)-str:# 1. 将用户输入存入记忆self.memory.add_user_message(user_input)# 2. 获取历史上下文contextself.memory.get_context()# 3. 调用LLM生成思考是否需要调用工具llm_responseawaitself.llm.generate(context)# 4. 解析LLM返回判断是否调用工具tool_callsself.tool_manager.parse_tool_calls(llm_response)iftool_calls:# 5. 执行工具tool_resultsawaitself.tool_manager.execute_tools(tool_calls)# 6. 工具结果放回上下文再次调用LLMself.memory.add_tool_results(tool_results)llm_responseawaitself.llm.generate(self.memory.get_context())# 7. 最终回答存入记忆self.memory.add_assistant_message(llm_response)# 8. 返回最终结果returnllm_response3.2 标准Agent执行流程必须背下来用户输入 → 存入记忆读取历史上下文LLM思考决策解析工具调用执行工具联网/搜索/文件/浏览器工具结果返回LLM二次生成最终回答返回用户全部对话存入记忆四、LLM 对接层源码解析支持所有大模型4.1 LLM 管理器hermes/llm/manager.py# hermes/llm/manager.pyclassLLMManager:def__init__(self,config):self.configconfig self.providerself._init_provider()# 自动加载模型厂商# 根据配置初始化OpenAI/Anthropic/Ollama等def_init_provider(self):provider_nameself.config.get(llm.provider)ifprovider_nameopenai:returnOpenAIProvider(self.config)elifprovider_nameanthropic:returnAnthropicProvider(self.config)elifprovider_nameollama:returnOllamaProvider(self.config)# 更多厂商...# 统一生成接口asyncdefgenerate(self,messages):returnawaitself.provider.generate(messages)关键点统一接口上层无需关心底层是GPT、Claude还是本地模型热切换hermes model命令可随时切换模型支持本地Ollama完全离线运行五、工具调用系统源码Agent的手脚5.1 工具注册与执行核心# hermes/tools/manager.pyclassToolManager:def__init__(self,config):self.tools{}self._register_builtin_tools()# 注册内置工具# 注册工具搜索、文件、浏览器、定时等def_register_builtin_tools(self):self.register_tool(SearchTool())self.register_tool(FileTool())self.register_tool(BrowserTool())self.register_tool(CronTool())# 解析LLM返回的工具调用指令defparse_tool_calls(self,response):# 从LLM返回中提取 toolxxx/tool 或 JSON格式returnextract_tool_calls(response)# 执行工具并返回结果asyncdefexecute_tools(self,tool_calls):results[]forcallintool_calls:toolself.tools[call.name]resultawaittool.execute(call.params)results.append(result)returnresults5.2 工具扩展方式超级简单# 自定义工具示例classMyCustomTool(BaseTool):namemy_tooldescription这是我的自定义工具asyncdefexecute(self,params):returnf执行成功参数{params}六、记忆系统源码上下文管理# hermes/memory/memory.pyclassMemory:def__init__(self,config):self.messages[]# 对话历史self.max_tokensconfig.get(memory.max_tokens,8192)# 添加用户消息defadd_user_message(self,content):self.messages.append({role:user,content:content})# 添加助手消息defadd_assistant_message(self,content):self.messages.append({role:assistant,content:content})# 获取上下文自动裁剪超长文本defget_context(self):returnself._trim_context(self.messages)# 裁剪防止超过LLM token限制def_trim_context(self,messages):# 自动计算token并裁剪最早记录returntrim_messages(messages,self.max_tokens)七、配置系统源码# hermes/config/config.pyclassConfig:# 自动加载配置env → config.yaml → 默认配置def__init__(self):self.envload_env_file()self.yaml_configload_yaml_config()self.configself._merge_configs()# 获取配置项defget(self,key,defaultNone):keyskey.split(.)valueself.configforkinkeys:valuevalue.get(k,default)returnvalue八、架构总结面试/讲解必备8.1 五层经典架构CLI层命令入口Agent层大脑决策LLM层大模型对接Tool层工具执行Memory层记忆存储8.2 技术亮点低耦合、高扩展纯Python、轻量无依赖支持本地/云端模型生产级稳定性多平台消息网关工具调用标准化 评论区互动你最想研究Hermes哪个模块评论区扣数字1Agent核心 2工具调用 3本地模型部署 4消息网关遇到任何源码看不懂的地方直接贴代码行号我逐条解答下期想看《Hermes自定义插件开发》吗点赞过50立即更新 关注我下期带来《Hermes-Agent 自定义工具/插件实战5分钟写一个AI工具》