跳到主要内容

技巧与最佳实践

这是一份能让你立即更高效使用 Hermes 智能体的实用技巧速查集。每个部分针对一个不同方面——浏览标题,跳转到你需要的内容。

不知道该选哪个模型?

运行 hermes setup --portal —— 在一个订阅下,你将获得包括 Claude、GPT-5 和 Gemini 在内的 300+ 个模型。参见 Nous 门户


获得最佳结果

明确你的需求

模糊的提示会产生模糊的结果。与其说“修复代码”,不如说“修复 api/handlers.py 第 47 行的 TypeError —— process_request() 函数从 parse_body() 接收到了 None。” 你提供的上下文越多,所需的迭代就越少。

提前提供上下文

在你的请求开头就附上相关细节:文件路径、错误信息、预期行为。一条精心编写的请求胜过三轮澄清。直接粘贴错误回溯信息——智能体可以解析它们。

使用上下文文件存放重复指令

如果你发现自己总是在重复同样的指令(“使用制表符而不是空格”、“我们使用 pytest”、“API 在 /api/v2”),请将它们放在一个 AGENTS.md 文件中。智能体每次会话都会自动读取它——设置完成后即可一劳永逸。

让智能体使用它的工具

不要试图手把手指导每一步。与其说“打开 tests/test_foo.py,看第 42 行,然后……”,不如说“找到并修复失败的测试”。智能体拥有文件搜索、终端访问和代码执行能力——让它自己探索和迭代。

为复杂工作流使用技能

在撰写长篇提示来解释如何做某事之前,先检查是否已有现成的技能。输入 /skills 浏览可用技能,或者像 /axolotl/github-pr-workflow 这样直接调用一个。

CLI 高级用户技巧

多行输入

按下 Alt+EnterCtrl+JShift+Enter 可插入换行而不发送消息。Shift+Enter 仅当终端将其作为独立按键发送时才有效(默认支持的终端包括 Kitty / foot / WezTerm / Ghostty;在 iTerm2 / Alacritty / VS Code 终端中启用 Kitty 键盘协议后亦可支持)。另外两种组合在所有终端中均有效。

粘贴检测

CLI 会自动检测多行粘贴。直接粘贴代码块或错误追踪信息即可——它不会将每一行作为单独的消息发送。粘贴内容会被缓冲并作为单条消息发送。

中断与重定向

按下 Ctrl+C 可中断智能体的响应。之后您可以输入新消息来重定向它。在 2 秒内双击 Ctrl+C 可强制退出。当智能体开始走入错误方向时,此功能极为有用。

使用 -c 恢复会话

忘记上次会话中的内容了?运行 hermes -c 即可从上次中断处继续,并完全恢复对话历史。您也可以通过标题恢复:hermes -r "my research project"

剪贴板图像粘贴

按下 Ctrl+V 可将剪贴板中的图像直接粘贴到聊天中。智能体使用视觉能力来分析截图、图表、错误弹窗或 UI 模型——无需先保存为文件。

斜杠命令自动补全

输入 / 并按 Tab 键可查看所有可用命令。这包括内置命令(/compress/model/title)以及所有已安装的技能。您无需记忆任何内容——Tab 补全功能已为您准备好。

提示

使用 /verbose 循环切换工具输出显示模式:关闭 → 新 → 全部 → 详细。"全部"模式适合观察智能体的操作;"关闭"模式对于简单问答最为简洁。

上下文文件

AGENTS.md:您项目的大脑

在项目根目录下创建一个 AGENTS.md 文件,其中包含架构决策、编码规范和项目特定的指令。该文件会自动注入到每个会话中,因此智能体始终了解您项目的规则。

# 项目上下文
- 这是一个使用 SQLAlchemy ORM 的 FastAPI 后端
- 数据库操作始终使用 async/await
- 测试放在 tests/ 目录下,并使用 pytest-asyncio
- 切勿提交 .env 文件

SOUL.md:自定义个性

希望 Hermes 拥有稳定的默认声音吗?编辑 ~/.hermes/SOUL.md(如果您使用自定义的 Hermes 主目录,则编辑 $HERMES_HOME/SOUL.md)。Hermes 现在会自动生成一个初始的 SOUL 文件,并将该全局文件用作实例范围的个性来源。

有关完整指南,请参阅将 SOUL.md 与 Hermes 配合使用

# 灵魂
你是一位资深后端工程师。简洁直接。
除非被要求,否则跳过解释。比起冗长的解决方案,优先选择单行代码。
始终考虑错误处理和边界情况。

SOUL.md 用于持久的个性。将 AGENTS.md 用于项目特定的指令。

.cursorrules 兼容性

已经有 .cursorrules.cursor/rules/*.mdc 文件了吗?Hermes 也能读取它们。无需重复编写您的编码规范——它们会从工作目录自动加载。

发现机制

Hermes 在会话启动时从当前工作目录加载顶层的 AGENTS.md 文件。子目录中的 AGENTS.md 文件在工具调用期间通过 subdirectory_hints.py 懒加载发现,并注入到工具结果中——它们不会预先加载到系统提示中。

提示

保持上下文文件重点突出且简洁。每个字符都会计入您的令牌预算,因为它们会被注入到每一条消息中。

记忆与技能

记忆与技能:如何区分

记忆用于存储事实:您的环境、偏好、项目位置以及智能体了解到的关于您的信息。技能用于存储流程:多步骤工作流、特定工具的指令和可重用的方案。用记忆记录"是什么",用技能记录"怎么做"。

何时创建技能

如果您发现一个需要 5 个以上步骤且会重复执行的任务,可以让智能体为此创建一个技能。比如说“将你刚才做的内容保存为名为 deploy-staging 的技能”。下次,只需输入 /deploy-staging,智能体就会加载完整的流程。

管理记忆容量

记忆容量是有意限制的(MEMORY.md 约 2,200 个字符,USER.md 约 1,375 个字符)。当它填满时,智能体会进行整合。您可以说“清理你的记忆”或“替换掉关于 Python 3.9 的旧笔记——我们现在用的是 3.12”。

让智能体记住

在一次富有成效的会话后,说“记住这个以备后用”,智能体就会保存关键要点。您也可以更具体:“保存到记忆中,我们的 CI 使用 GitHub Actions,工作流是 deploy.yml。”

注意

记忆是一个冻结的快照——会话期间进行的更改在下次会话开始前不会出现在系统提示中。智能体会立即写入磁盘,但会话期间提示缓存不会被清除。

性能与成本

不要破坏提示缓存

大多数 LLM 提供商缓存系统提示前缀。如果您保持系统提示稳定(相同的上下文文件、相同的记忆),会话中的后续消息将获得缓存命中,这要便宜得多。避免在会话中途更改模型或系统提示。

在达到限制前使用 /compress

长时间的会话会积累令牌。当您注意到响应变慢或被截断时,运行 /compress。这会总结对话历史,在保留关键上下文的同时显著减少令牌数量。使用 /usage 查看您当前的用量。

委托并行工作

需要同时研究三个主题吗?让智能体使用 delegate_task 并行处理子任务。每个子智能体在自己的上下文中独立运行,只有最终的摘要会返回——这大大减少了您主对话的令牌使用量。

使用 execute_code 进行批量操作

与其一次运行一个终端命令,不如让智能体编写一个脚本一次性完成所有操作。“编写一个 Python 脚本来将所有 .jpeg 文件重命名为 .jpg 并运行它”比逐个重命名文件更便宜、更快。

选择合适的模型

使用 /model 在会话中途切换模型。对于复杂的推理和架构决策,使用前沿模型(Claude Sonnet/Opus、GPT-4o)。对于简单的任务,如格式化、重命名或样板代码生成,切换到更快的模型。

提示

定期运行 /usage 以查看您的令牌消耗情况。运行 /insights 可以查看过去 30 天使用模式的更广阔视图。

消息传递技巧

设置主频道

在您首选的 Telegram 或 Discord 聊天中使用 /sethome 将其指定为主频道。Cron 作业结果和计划任务输出会发送到这里。没有它,智能体就无法发送主动消息。

使用 /title 组织会话

使用 /title auth-refactor/title research-llm-quantization 为您的会话命名。命名的会话可以通过 hermes sessions list 轻松找到,并使用 hermes -r "auth-refactor" 恢复。未命名的会话会堆积起来并变得无法区分。

团队访问的 DM 配对

无需手动收集用户 ID 来创建允许列表,只需启用 DM 配对功能。当队友向机器人发送私信时,他们会获得一个一次性的配对代码。您使用 hermes pairing approve telegram XKGH5N7P 进行批准——简单且安全。

工具进度显示模式

使用 /verbose 控制您看到的工具活动量。在消息传递平台上,少即是多——保持为“新”以仅查看新的工具调用。在 CLI 中,“全部”模式能让您满意地实时查看智能体的所有操作。

提示

在消息传递平台上,会话在空闲一段时间(默认:24 小时)后自动重置,或在每天凌晨 4 点重置。如果需要更长的会话时间,可以在 ~/.hermes/config.yaml 中按平台进行调整。

安全性

为不受信任的代码使用 Docker

当处理不受信任的仓库或运行不熟悉的代码时,使用 Docker 或 Daytona 作为您的终端后端。在您的 .env 中设置 TERMINAL_BACKEND=docker。容器内的破坏性命令无法损害您的宿主系统。

# 在您的 .env 文件中:
TERMINAL_BACKEND=docker
TERMINAL_DOCKER_IMAGE=hermes-sandbox:latest

避免 Windows 编码陷阱

在 Windows 上,一些默认编码(如 cp125x)无法表示所有 Unicode 字符,这可能在测试或脚本中写入文件时导致 UnicodeEncodeError

  • 优先使用显式 UTF-8 编码打开文件:
with open("results.txt", "w", encoding="utf-8") as f:
f.write("✓ All good\n")
  • 在 PowerShell 中,您也可以将当前会话切换到 UTF-8,以便控制台和原生命令输出:
$OutputEncoding = [Console]::OutputEncoding = [Text.UTF8Encoding]::new($false)

这可以使 PowerShell 和子进程保持在 UTF-8 编码下,并有助于避免仅 Windows 系统出现的故障。

在选择“始终”前请三思

当智能体触发危险命令批准(rm -rfDROP TABLE 等)时,您会看到四个选项:一次会话始终拒绝。在选择“始终”之前请仔细考虑——它会永久允许该模式。在您感到放心之前,先从“会话”开始。

命令批准是您的安全网

Hermes 在执行前会根据精心策划的危险模式列表检查每条命令。这包括递归删除、SQL 删除、将 curl 管道到 shell 等。不要在生产环境中禁用它——它的存在是有充分理由的。

注意

当在容器后端(Docker、Singularity、Modal、Daytona)中运行时,危险命令检查会被跳过,因为容器本身就是安全边界。请确保您的容器镜像已正确锁定。

为消息传递机器人使用允许列表

永远不要在具有终端访问权限的机器人上设置 GATEWAY_ALLOW_ALL_USERS=true。始终使用特定平台的允许列表(TELEGRAM_ALLOWED_USERSDISCORD_ALLOWED_USERS)或 DM 配对来控制谁可以与您的智能体交互。

# 推荐:每个平台使用显式允许列表
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678

# 或者使用跨平台允许列表
GATEWAY_ALLOWED_USERS=123456789,987654321

有想要出现在此页面上的技巧吗?欢迎提交 Issue 或 PR——社区贡献不胜感激。