跳到主要内容

技巧与最佳实践

这里汇集了让你立即提升 Hermes Agent 使用效率的实用技巧。每个章节针对不同方面——浏览标题,直接跳到相关内容。


获得最佳结果

明确你想要什么

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

预先提供上下文

在请求开头提供相关细节:文件路径、错误消息、预期行为。一条精心撰写的消息胜过三轮澄清。直接粘贴错误堆栈跟踪——Agent 能够解析它们。

使用上下文文件处理重复指令

如果你发现自己在重复相同的指令("用 tab 而非空格"、"我们使用 pytest"、"API 在 /api/v2"),把它们写入 AGENTS.md 文件。Agent 会在每次会话中自动读取它——设置一次,永远生效。

让 Agent 使用它的工具

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

对复杂工作流使用技能

在编写长篇提示词解释如何做某事之前,先检查是否已经有相应的技能(Skill)。输入 /skills 浏览可用技能,或直接调用,如 /axolotl/github-pr-workflow

CLI 高级用户技巧

多行输入

Alt+EnterCtrl+JShift+Enter 在不发送的情况下插入换行。Shift+Enter 仅在终端将其作为独立按键发送时才有效(Kitty / foot / WezTerm / Ghostty 默认支持;iTerm2 / Alacritty / VS Code 终端需要在启用 Kitty 键盘协议后使用)。其余两个快捷键在所有终端中都可用。这让你可以撰写多行提示词、粘贴代码块或在按下回车键发送前组织复杂请求。

粘贴检测

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

中断和重定向

按一次 Ctrl+C 可在 Agent 响应中途中断它。然后你可以输入新消息来重新引导。在 2 秒内双击 Ctrl+C 强制退出。当 Agent 开始走错方向时,这非常有用。

使用 -c 恢复会话

忘了上次会话中的某些内容?运行 hermes -c 可以在完整对话历史还原的情况下,精确地从上次离开的地方继续。你也可以按标题恢复:hermes -r "my research project"

剪贴板图片粘贴

Ctrl+V 直接将剪贴板中的图片粘贴到聊天中。Agent 使用视觉能力分析截图、图表、错误弹窗或 UI 原型——无需先保存到文件。

斜杠命令自动补全

输入 / 然后按 Tab 查看所有可用命令。这包括内置命令(/compress/model/title)和每个已安装的技能。不需要记住任何东西——Tab 补全帮你搞定。

提示

使用 /verbose 循环切换工具输出显示模式:off → new → all → verbose。"all" 模式非常适合观察 Agent 的操作;"off" 模式对于简单问答来说最简洁。

上下文文件

AGENTS.md:你的项目大脑

在项目根目录创建 AGENTS.md,包含架构决策、编码规范和项目特定指令。这会在每次会话中自动注入,确保 Agent 始终了解你的项目规则。

# Project Context
- This is a FastAPI backend with SQLAlchemy ORM
- Always use async/await for database operations
- Tests go in tests/ and use pytest-asyncio
- Never commit .env files

SOUL.md:自定义个性

想让 Hermes 拥有稳定的默认风格?编辑 ~/.hermes/SOUL.md(或者如果你使用自定义 Hermes 主目录,则是 $HERMES_HOME/SOUL.md)。Hermes 现在会自动播种一个入门 SOUL,并将该全局文件作为实例范围的个性来源。

完整演练请参阅在 Hermes 中使用 SOUL.md

# Soul
You are a senior backend engineer. Be terse and direct.
Skip explanations unless asked. Prefer one-liners over verbose solutions.
Always consider error handling and edge cases.

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

.cursorrules 兼容性

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

发现机制

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

提示

保持上下文文件简洁专注。每个字符都计入你的 token 预算,因为它们会注入到每条消息中。

记忆与技能

记忆与技能:什么放在哪里

**记忆(Memory)**用于事实:你的环境、偏好、项目位置以及 Agent 关于你学到的东西。**技能(Skills)**用于流程:多步骤工作流、工具特定指令和可重用方法。用记忆存"是什么",用技能存"怎么做"。

何时创建技能

如果你发现某个任务需要 5 步以上,并且你会重复执行,请让 Agent 为它创建技能。说"把你刚才做的事保存为名为 deploy-staging 的技能"。下次只需输入 /deploy-staging,Agent 就会加载完整的流程。

管理记忆容量

记忆有意限制大小(MEMORY.md 约 2,200 字符,USER.md 约 1,375 字符)。满了之后,Agent 会合并条目。你可以通过说"清理你的记忆"或"替换旧的 Python 3.9 注释——我们现在用 3.12"来帮助它。

让 Agent 记住内容

在富有成效的会话结束后,说"记住这个以备下次使用",Agent 会保存关键要点。你也可以具体说明:"保存到记忆中:我们的 CI 使用 GitHub Actions 的 deploy.yml 工作流。"

注意

记忆是一个冻结的快照——会话中所做的更改在下一次会话开始之前不会出现在系统提示中。Agent 会立即写入磁盘,但提示缓存在会话中途不会失效。

性能与成本

不要破坏提示词缓存

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

在达到限制前使用 /compress

长会话会积累 token。当你注意到响应变慢或被截断时,运行 /compress。这会对对话历史进行摘要,在大幅减少 token 数量的同时保留关键上下文。使用 /usage 查看当前状态。

使用委派进行并行工作

需要同时研究三个主题?让 Agent 使用带有并行子任务的 delegate_task。每个子 Agent 独立运行,拥有自己的上下文,只有最终摘要会返回——大幅减少主对话的 token 使用。

使用 execute_code 进行批量操作

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

选择合适的模型

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

提示

定期运行 /usage 查看你的 token 消耗。运行 /insights 获取过去 30 天使用模式的更广泛视图。

消息平台技巧

设置主频道

在你首选的 Telegram 或 Discord 聊天中使用 /sethome,将其指定为主频道。定时任务结果和计划任务输出会投递到这里。没有它,Agent 就没有地方发送主动消息。

使用 /title 组织会话

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

DM 配对用于团队访问

与其手动收集用户 ID 设置白名单,不如启用 DM 配对。当队友向机器人发送 DM 时,他们会获得一次性配对码。你用 hermes pairing approve telegram XKGH5N7P 批准它——简单安全。

工具进度显示模式

使用 /verbose 控制你看到多少工具活动。在消息平台上,通常越少越好——保持在"new"模式以只查看新的工具调用。在 CLI 中,"all"模式可以让你满足地实时查看 Agent 的所有操作。

提示

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

安全

对不可信代码使用 Docker

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

# In your .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 上发生的故障。

选择"始终"前仔细审查

当 Agent 触发危险命令审批(rm -rfDROP TABLE 等)时,你有四个选项:once(一次)session(会话)always(始终)deny(拒绝)。在选择"始终"之前请仔细考虑——它会永久将该模式加入白名单。先使用"session",直到你感到满意。

命令审批是你的安全网

Hermes 在执行前会对照一系列危险模式检查每个命令。这包括递归删除、SQL DROP、将 curl 导管到 shell 等。不要在生产环境中禁用它——它的存在有充分理由。

注意

在容器后端(Docker、Singularity、Modal、Daytona)运行时,危险命令检查会被跳过,因为容器是安全边界。确保你的容器镜像经过适当的加固。

为消息机器人使用白名单

切勿在有终端访问权限的机器人上设置 GATEWAY_ALLOW_ALL_USERS=true。始终使用平台特定的白名单(TELEGRAM_ALLOWED_USERSDISCORD_ALLOWED_USERS)或 DM 配对来控制谁可以与你的 Agent 交互。

# Recommended: explicit allowlists per platform
TELEGRAM_ALLOWED_USERS=123456789,987654321
DISCORD_ALLOWED_USERS=123456789012345678

# Or use cross-platform allowlist
GATEWAY_ALLOWED_USERS=123456789,987654321

有应该出现在本页的技巧?提交 issue 或 PR——欢迎社区贡献。