当前位置: 首页
AI教程
Hermes Agent源码解析第二篇:入口与CLI从hermes命令到交互式REPL详解

Hermes Agent源码解析第二篇:入口与CLI从hermes命令到交互式REPL详解

热心网友 时间:2026-07-12
转载

解析HermesAgent启动链路:Shell脚本定位环境,引导层修复Windows编码,命令行界面类管理配置、技能与命令。配置采用硬编码、用户YAML配置和点env三层合并;技能通过用户消息注入以保持缓存稳定性;皮肤引擎支持纯数据定制功能。

Hermes Agent 源码解析(二):入口与 CLI —— 从 hermes 命令到交互式 REPL

如果你正在做一个自己的 CLI 工具,Hermes 的启动链路里有很多值得借鉴的设计——尤其是它的配置三层合并和技能注入缓存优化。

启动链路

1. hermes shell 脚本

仓库根目录的 hermes 是一个 shell 脚本(而非 Python 文件)。它负责:

  • 定位项目根目录下的 .venv
  • 设置 PYTHONPATH
  • cli.py 传递命令行参数

2. hermes_bootstrap.py —— Windows 兼容层

这个文件只有 129 行,但设计精妙:

# 在 Windows 上设置 PYTHONUTF8=1 和 PYTHONIOENCODING=utf-8
# 修复 cp1252 编码下 print("café") 的 UnicodeEncodeError
# 同时对子进程(execute_code sandbox、delegation children)生效

它的设计原则是:POSIX 上什么都不做,因为 99% 的 Linux/macOS 已经是 UTF-8 默认环境。

3. cli.py 的 HermesCLI 类

CLI 入口在 cli.py,行数 ~14,442。核心结构:

HermesCLI.__init__()
├── Rich 渲染 Banner(ASCII art 标题)
├── 加载配置 load_cli_config()
├── 初始化皮肤引擎
└── 扫描技能目录

HermesCLI.run()
├── 启动输入循环
├── prompt_toolkit 管理输入区域
├── KawaiiSpinner 管理 API 调用动画
└── process_command() 处理斜杠命令
配置加载链路
load_cli_config()
├── 硬编码 DEFAULT_CONFIG(hermes_cli/config.py)
├── 读取 ~/.hermes/config.yaml(用户设置)
├── 读取 ~/.hermes/.env(仅 API 密钥)
├── deep-merge 三层合并
└── 返回完整配置字典
斜杠命令注册中心

所有斜杠命令集中定义在 hermes_cli/commands.pyCOMMAND_REGISTRY 列表中:

CommandDef("mycommand", "描述文字", "Session", aliases=("mc",), args_hint="[arg]"),

每个 CommandDef 包含:

  • name — 规范名(无斜杠)
  • description — 描述
  • category — 分类(Session / Configuration / Tools & Skills / Info / Exit)
  • aliases — 别名元组
  • cli_only / gateway_only — 平台限制

设计亮点:这个注册中心是单点事实来源(Single Source of Truth)。所有下游消费者自动派生:

消费者自动生成内容
CLIprocess_command() 派发
GatewayGATEWAY_KNOWN_COMMANDS frozenset
微信BotCommand 菜单列表
Slack/hermes 子命令路由
自动补全SlashCommandCompleter 的候选项

这意味着添加一个新命令只需要在 COMMAND_REGISTRY 加一行,再在 process_command() 加一个 handler。

Skills 注入策略

技能文件的加载不嵌入 system prompt,而是以 user message 注入:

# agent/skill_commands.py
# 扫描 ~/.hermes/skills/,注入为 user message
# 这样不破坏 prompt cache 的稳定性

这是一个非常重要的缓存优化 —— system prompt 变了会清空 API 侧的 prefix cache,而 user message 变化不影响。

Skin 皮肤引擎

hermes_cli/skin_engine.py 提供纯数据驱动的视觉定制:

# 皮肤是纯 YAML 数据,无需改代码
# 内置 4 个皮肤:default(金色)、ares(深红)、mono(灰度)、slate(冷蓝)
# 用户可在 ~/.hermes/skins/ 放自定义 .yaml

皮肤控制:Banner 颜色、Spinner 表情/动词、工具输出前缀、品牌名称、提示符符号等。

下一篇进入最核心的部分 —— AIAgent 类的 run_conversation() 主循环。

来源:https://juejin.cn/post/7642608494764556322

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

同类文章
更多
天学会AI应用开发上下文与RAG阶段性总结

天学会AI应用开发上下文与RAG阶段性总结

系统梳理了AI应用开发中的上下文与RAG核心概念。搭建Python3 10开发环境后,通过提示词工程管理历史对话,利用截断、摘要提取及离线大模型压缩上下文。RAG采用加载文档、分块、向量化、存入FAISS或Chroma库、检索五个步骤,中文场景推荐BGE-small嵌入模型,实战证明离线检索有效。

时间:2026-07-12 16:04
Yank Note系列14:如何与AI协作写文章

Yank Note系列14:如何与AI协作写文章

YankNote3 92 1发布,新增“审阅批注”和“编辑装订线”扩展,聚焦AI写作的人机协作循环。审阅批注将反馈绑定到选中文本,编辑装订线高亮显示修改行,帮助人看清AI改动。同时升级Markdown-it至14 3 0,优化中日韩文本渲染。

时间:2026-07-12 16:04
一文读懂MCP:让AI大模型万能插拔协议

一文读懂MCP:让AI大模型万能插拔协议

MCP(模型上下文协议)由Anthropic提出,为AI大模型提供通用接口标准,解决工具调用碎片化问题。采用Host Client Server架构,支持动态发现工具,通过stdio或HTTP通信,实现工具即插即用、跨语言调用和统一对接规范。

时间:2026-07-12 16:04
BeeWeave开源:为AI Agent打造越用越懂你的知识创作台

BeeWeave开源:为AI Agent打造越用越懂你的知识创作台

BeeWeave是一个Agent原生的知识创作台,通过workbench和vault双层结构实现素材获取、内容创作、知识沉淀与上下文复用的持续闭环。它支持多Agent共用同一套知识库,内置41个Skills,采用MIT开源协议,旨在解决跨会话知识丢失问题。

时间:2026-07-12 15:04
AI闭环工程师自动推进工程任务

AI闭环工程师自动推进工程任务

LoopEngineer是一种将AI嵌入可执行、可验证、可持续迭代的工作循环中的工程协作方式。通过触发器、上下文、工具和验证机制,AI在循环中自动分析、执行、验证并调整,直至任务完成或需人工介入,实现复杂任务的可观察、可审计、可批准的分段自动化。

时间:2026-07-12 15:04
热门专题
更多
刀塔传奇破解版无限钻石下载大全 刀塔传奇破解版无限钻石下载大全
洛克王国正式正版手游下载安装大全 洛克王国正式正版手游下载安装大全
思美人手游下载专区 思美人手游下载专区
好玩的阿拉德之怒游戏下载合集 好玩的阿拉德之怒游戏下载合集
不思议迷宫手游下载合集 不思议迷宫手游下载合集
百宝袋汉化组游戏最新合集 百宝袋汉化组游戏最新合集
jsk游戏合集30款游戏大全 jsk游戏合集30款游戏大全
宾果消消消原版下载大全 宾果消消消原版下载大全
  • 热门数据榜