跳到主要内容

提示与最佳实践

收集了一系列实用的快速技巧,让你立即更高效地使用 Hermes Agent。每个部分针对不同方面——扫描标题跳转到相关内容。


获得最佳结果

清楚表达你想要什么

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

提前提供上下文

在你的请求前端加载相关细节:文件路径、错误消息、预期行为。一条精心制作的消息胜过三轮澄清。直接粘贴错误追踪——代理可以解析它们。

为重复指令使用上下文文件

如果你发现自己重复相同的指令("使用 tab 而不是空格"、"我们使用 pytest"、"API 在 /api/v2"),将它们放在 AGENTS.md 文件中。代理每个会话自动读取它——设置后零努力。

让代理使用它的工具

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

为复杂工作流使用技能

在写一个长提示解释如何做某事之前,检查是否已经有相关技能。输入 /skills 浏览可用技能,或者直接调用如 /axolotl/github-pr-workflow

CLI 高级用户技巧

多行输入

Alt+Enter(或 Ctrl+J)插入新行而不发送。这让你在按 Enter 发送之前组合多行提示、粘贴代码块或构建复杂请求。

粘贴检测

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 home,则是 $HERMES_HOME/SOUL.md)。Hermes 现在自动用一个初学者 SOUL 播种,并使用该全局文件作为实例范围的人格来源。

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

# Soul
你是一个高级后端工程师。简洁直接。
除非被要求,否则跳过解释。喜欢一行解决方案而非冗长方案。
始终考虑错误处理和边缘情况。

为持久人格使用 SOUL.md。为项目特定指令使用 AGENTS.md

.cursorrules 兼容性

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

发现

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

提示

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

记忆和技能

记忆 vs 技能:什么放哪里

记忆用于事实:你的环境、偏好、项目位置以及代理了解你的事情。技能用于程序:多步骤工作流、工具特定指令和可重用配方。记忆用于"什么",技能用于"如何"。

何时创建技能

如果你发现一个需要 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

长会话会累积 token。当你注意到响应变慢或被截断时,运行 /compress。这会总结对话历史,保留关键上下文,同时显著减少 token 计数。使用 /usage 检查你的情况。

为并行工作委托

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

使用 execute_code 进行批处理操作

不要一次运行一个终端命令,让代理编写一个一次性完成一切的脚本。"写一个 Python 脚本将所有 .jpeg 文件重命名为 .jpg 并运行它"比单独重命名文件更便宜更快。

选择正确的模型

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

提示

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

消息提示

设置主频道

在你首选的 Telegram 或 Discord 聊天中使用 /sethome 将其指定为主频道。Cron 作业结果和计划任务输出在这里投递。没有它,代理无处发送主动消息。

使用 /title 组织会话

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

DM 配对以实现团队访问

不要手动收集用户 ID 进行允许列表,启用 DM 配对。当队友 DM 机器人时,他们会收到一次性配对码。你用 hermes pairing approve telegram XKGH5N7P 批准它——简单安全。

工具进度显示模式

使用 /verbose 控制你看到多少工具活动。在消息平台上,越少通常越好——保持在"新"只看到新工具调用。在 CLI 中,"全部"为你提供令人满意的代理所做一切的实时视图。

提示

在消息平台上,会话在空闲时间后自动重置(默认:24 小时)或每天 4 AM。如果你需要更长的会话,在 ~/.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 drops、curl pipe 到 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——欢迎社区贡献。