词元之母TOK.MOM - 平台充值汇率 1:1 即 1 人民币充值到账 1 美元,支持一个 Key 调用近 600+ 海内外模型,限时特价模型低至 1 折,欢迎上岸!
| 上下文 | 行为 |
|---|---|
| 私信(DM) | Hermes 响应每条消息,无需 @提及。每个私信有独立的会话。 |
| 服务器频道 | 默认情况下,Hermes 仅在被 @提及 时响应。如果你在频道中发帖但未提及它,Hermes 会忽略该消息。 |
| 自由响应频道 | 你可以通过 DISCORD_FREE_RESPONSE_CHANNELS 将特定频道设为无需提及,或通过 DISCORD_REQUIRE_MENTION=false 全局禁用提及要求。这些频道中的消息会直接回复——自动创建线程功能会被跳过,使频道保持轻量级聊天状态。 |
| 线程(Thread) | Hermes 在同一线程中回复。提及规则仍然适用,除非该线程或其父频道被配置为自由响应。线程的会话历史与父频道相互隔离。 |
| 多用户共享频道 | 默认情况下,Hermes 为安全和清晰起见,在频道内按用户隔离会话历史。在同一频道中交谈的两个人不会共享同一份对话记录,除非你明确禁用该功能。 |
| 提及其他用户的消息 | 当 DISCORD_IGNORE_NO_MENTION 为 true(默认值)时,如果消息 @提及了其他用户但未提及机器人,Hermes 保持沉默。这可防止机器人介入针对其他人的对话。如果你希望机器人响应所有消息而不管提及了谁,请设置为 false。此设置仅适用于服务器频道,不适用于私信。 |
DISCORD_FREE_RESPONSE_CHANNELS。DISCORD_ALLOWED_USERS)#research 中与 Hermes 对话,即使他们使用的是同一个可见的 Discord 频道,Hermes 默认也会将其视为独立的对话。config.yaml 控制:false:group_sessions_per_user: true 时:group_sessions_per_user: false 时:| Intent | 用途 | 是否必需? |
|---|---|---|
| Presence Intent | 查看用户在线/离线状态 | 可选 |
| Server Members Intent | 访问成员列表、解析用户名 | 必需 |
| Message Content Intent | 读取消息的文本内容 | 必需 |
bot 和 applications.commandshttps://discord.com/oauth2/authorize?client_id=YOUR_APP_ID&scope=bot+applications.commands&permissions=274878286912YOUR_APP_ID 替换为第一步中的 Application ID。| 级别 | 权限整数 | 包含内容 |
|---|---|---|
| 最低 | 117760 | View Channels、Send Messages、Read Message History、Attach Files |
| 推荐 | 274878286912 | 以上所有权限,加上 Embed Links、Send Messages in Threads、Add Reactions |
284102345871466496 的长数字。~/.hermes/.env 文件:hermes gateway 或将其作为 systemd 服务以持续运行。详情请参阅部署文档。~/.hermes/.env 用于凭据和环境级开关,~/.hermes/config.yaml 用于结构化设置。当两者都设置时,环境变量始终优先于 config.yaml 的值。.env)| 变量 | 是否必填 | 默认值 | 描述 |
|---|---|---|---|
DISCORD_BOT_TOKEN | 是 | — | 来自 Discord 开发者门户 的机器人 token。 |
DISCORD_ALLOWED_USERS | 是 | — | 允许与机器人交互的 Discord 用户 ID,逗号分隔。没有此项或 DISCORD_ALLOWED_ROLES,网关将拒绝所有用户。 |
DISCORD_ALLOWED_ROLES | 否 | — | Discord 角色 ID,逗号分隔。拥有其中任一角色的成员即被授权——与 DISCORD_ALLOWED_USERS 为 OR 语义。连接时自动启用 Server Members Intent。适用于管理团队频繁变动的场景:新管理员一旦被授予角色即可获得访问权限,无需推送配置。 |
DISCORD_HOME_CHANNEL | 否 | — | 机器人发送主动消息(cron 输出、提醒、通知)的频道 ID。 |
DISCORD_HOME_CHANNEL_NAME | 否 | "Home" | 主频道在日志和状态输出中的显示名称。 |
DISCORD_COMMAND_SYNC_POLICY | 否 | "safe" | 控制原生斜杠 命令启动同步。"safe" 对现有全局命令进行差异比较,仅更新已更改的内容,当 Discord 元数据更改无法通过补丁应用时重新创建命令。"bulk" 保留旧的 tree.sync() 行为。"off" 完全跳过启动同步。 |
DISCORD_REQUIRE_MENTION | 否 | true | 为 true 时,机器人仅在服务器频道中被 @提及 时响应。设置为 false 可响应每个频道中的所有消息。 |
DISCORD_THREAD_REQUIRE_MENTION | 否 | false | 为 true 时,禁用线程内的提及快捷方式——线程与频道的门控方式相同,即使机器人已经参与其中,也需要 @提及。当多个机器人共享一个线程且你希望每个机器人仅在明确 @提及 时触发时使用此设置。 |
DISCORD_FREE_RESPONSE_CHANNELS | 否 | — | 机器人无需 @提及 即可响应的频道 ID,逗号分隔,即使 DISCORD_REQUIRE_MENTION 为 true 也适用。 |
DISCORD_IGNORE_NO_MENTION | 否 | true | 为 true 时,如果消息 @提及 了其他用户但未提及机器人,机器人保持沉默。防止机器人介入针对其他人的对话。仅适用于服务器频道,不适用于私信。 |
DISCORD_AUTO_THREAD | 否 | true | 为 true 时,自动为文本频道中的每次 @提及 创建新线程,使每个对话相互隔离(类似 Slack 行为)。已在线程或私信中的消息不受影响。 |
DISCORD_ALLOW_BOTS | 否 | "none" | 控制机器人如何处理来自其他 Discord 机器人的消息。"none" — 忽略所有其他机器人。"mentions" — 仅接受 @提及 Hermes 的机器人消息。"all" — 接受所有机器人消息。 |
DISCORD_REACTIONS | 否 | true | 为 true 时,机器人在处理过程中为消息添加 emoji 反应(开始时 👀,成功时 ✅,出错时 ❌)。设置为 false 可完全禁用反应。 |
DISCORD_IGNORED_CHANNELS | 否 | — | 机器人永不响应的频道 ID,逗号分隔,即使被 @提及 也不响应。优先于所有其他频道设置。 |
DISCORD_ALLOWED_CHANNELS | 否 | — | 频道 ID,逗号分隔。设置后,机器人仅在这些频道(以及允许的私信)中响应。覆盖 config.yaml 中的 discord.allowed_channels。与 DISCORD_IGNORED_CHANNELS 结合使用可表达允许/拒绝规则。 |
DISCORD_NO_THREAD_CHANNELS | 否 | — | 机器人直接在频道中响应而不创建线程的频道 ID,逗号分隔。仅在 DISCORD_AUTO_THREAD 为 true 时有效。 |
DISCORD_HISTORY_BACKFILL | 否 | true | 为 true 时,当机器人被提及时,将最近的频道滚动历史(自机器人上次响应以来)前置到用户消息中。恢复机器人在 require_mention 模式下会错过的上下文。在私信和自由响应频道中跳过。设置为 false 可禁用。 |
DISCORD_HISTORY_BACKFILL_LIMIT | 否 | 50 | 组装回填块时向后扫描的最大消息数。实际上扫描通常会更早停止——在机器人自己在频道中的最后一条消息处。 |
DISCORD_REPLY_TO_MODE | 否 | "first" | 控制回复引用行为:"off" — 从不回复原始消息,"first" — 仅在第一个消息块上添加回复引用(默认),"all" — 在每个块上都添加回复引用。 |
DISCORD_ALLOW_MENTION_EVERYONE | 否 | false | 为 false(默认)时,即使响应中包含这些 token,机器人也无法 ping @everyone 或 @here。设置为 true 可重新启用。参见下方提及控制。 |
DISCORD_ALLOW_MENTION_ROLES | 否 | false | 为 false(默认)时,机器人无法 ping @role 提及。设置为 true 可允许。 |
DISCORD_ALLOW_MENTION_USERS | 否 | true | 为 true(默认)时,机器人可以通过 ID ping 单个用户。 |
DISCORD_ALLOW_MENTION_REPLIED_USER | 否 | true | 为 true(默认)时,回复消息会 ping 原始作者。 |
DISCORD_PROXY | 否 | — | Discord 连接的代理 URL(HTTP、WebSocket、REST)。覆盖 HTTPS_PROXY/ALL_PROXY。支持 http://、https:// 和 socks5:// 协议。 |
DISCORD_ALLOW_ANY_ATTACHMENT | 否 | false | 为 true 时,机器人接受任何文件类型的附件(不仅限于内置的 PDF/文本/zip/office 允许列表)。未知类型会被缓存到磁盘,并以 application/octet-stream MIME 类型作为本地路径提供给 agent,以便它可以使用 terminal / read_file / ffprobe 等工具检查。 |
DISCORD_MAX_ATTACHMENT_BYTES | 否 | 33554432 | 网关将下载并缓存的每个附件的最大字节数。默认 32 MiB。设置为 0 表示无上限(附件在写入时保存在内存中,因此无限制会带来真实的内存成本)。 |
HERMES_DISCORD_TEXT_BATCH_DELAY_SECONDS | 否 | 0.6 | 适配器在刷新排队文本块之前等待的宽限窗口。用于平滑流式输出。 |
HERMES_DISCORD_TEXT_BATCH_SPLIT_DELAY_SECONDS | 否 | 2.0 | 当单条消息超过 Discord 长度限制时,分割块之间的延迟。 |
config.yaml)~/.hermes/config.yaml 中的 discord 部分与上述环境变量对应。config.yaml 设置作为默认值应用——如果已设置等效的环境变量,则环境变量优先。discord.require_mentiontrue@提及 时响应。无论此设置如何,私信始终会得到响应。discord.thread_require_mentionfalse@提及 自动创建或回复过一次),它就会继续响应该线程中的每条后续消息,无需再次 @提及。这对于一对一对话来说是正确的默认行为。thread_require_mention: true 设置为禁用线程内快捷方式,使线程与频道的门控方式相同。显式 @提及 仍然有效。discord.free_response_channels""@提及 即可响应所有消息的频道 ID。接受逗号分隔的字符串或 YAML 列表:@提及 流程)。discord.auto_threadtrue@提及 都会自动为对话创建新线程。这保持主频道整洁,并为每个对话提供独立的会话历史。一旦创建线程,该线程中的后续消息不需要 @提及——机器人知道它已经在参与其中。对于多机器人设置,将 thread_require_mention 设置为 true 可禁用此线程内快捷方式。discord.free_response_channels 或 discord.no_thread_channels 中列出的频道也会绕过自动创建线程,改为直接回复。discord.reactionstruediscord.ignored_channels[]@提及 也不响应。这具有最高优先级——如果频道在此列表中,机器人会静默忽略那里的所有消息,无论 require_mention、free_response_channels 或任何其他设置如何。discord.no_thread_channels[]auto_thread 为 true(默认值)时有效。在这些频道中,机器人像普通消息一样直接回复,而不是创建新线程。discord.channel_prompts{}discord.history_backfilltrue@提及 时恢复错过的频道消息。当 require_mention: true 时,机器人只处理直接标记它的消息——频道中的其他所有内容对会话记录都是不可见的。历史回填在触发时向后扫描最近的频道历史,收集机器人上次响应与当前提及之间的消息,并将其作为上下文包含进来。require_mention: true):回填扫描自机器人上次响应以来的频道。当其他参与者在机器人未被提及时发帖时很有用。channel.history() 只返回该线程的消息,不包括父频道。这是正确的范围,因为线程通常是自包含的对话。group_sessions_per_user: true,默认值)也受益:用户的会话缺少其他频道参与者发布的上下文以及用户在标记机器人之前自己的消息。回填填补了这两个间隙。注意: 机器人处理过程中到达的消息(在触发和响应之间)不会被捕获。这是一个可接受的简化——用户可以重新发送或再次标记。
discord.history_backfill_limit50group_sessions_per_usertruetrue 时:Alice 和 Bob 在 #research 中交谈,各自与 Hermes 有独立的对话。为 false 时:整个频道共享一份对话记录和一个正在运行的 agent 槽位。display.tool_progress"all" — 可选值: off、new、all、verboseoff — 不发送进度消息new — 每次轮次只显示第一个工具调用all — 显示所有工具调用(在网关消息中截断为 40 个字符)verbose — 显示完整的工具调用详情(可能产生较长的消息)display.tool_progress_commandfalse/verbose 斜杠命令,让你无需编辑 config.yaml 即可循环切换工具进度模式(off → new → all → verbose → off)。extra 块中添加 allow_admin_from 和 user_allowed_commands:allow_admin_from 中的用户可以通过实时命令注册表运行每个已注册的斜杠命令——内置的和插件注册的都包括。allow_admin_from 中的用户只能运行 user_allowed_commands 中列出的命令,加上始终允许的基础命令:/help 和 /whoami。allow_admin_from,则该范围的斜杠命令门控被禁用。现有安装无需任何更改即可继续工作。/whoami 查看当前范围、你的级别(管理员 / 用户 / 无限制)以及你可以运行的斜杠命令。/model 以打开基于下拉菜单的模型选择器:DISCORD_ALLOWED_USERS 中的用户)才能与其交互。如果你知道模型名称,可以直接输入 /model <名称>。/ 菜单中,与内置命令并列。/code-review、/ascii-art)args 字符串参数/model、/reset 和 /background)一起注册hermes skills install 安装的任何技能都会在下次网关重启时自动注册为 Discord 斜杠命令。true 可维持正常行为——为内置命令和已安装技能提供全局 / 菜单命令。send_message + MEDIA: 标签)send_message 工具和 agent 发出的内联 MEDIA:/path/to/file 标签,支持所有常见媒体类型的原生文件上传:| 类型 | 发送方式 |
|---|---|
| 图片(PNG/JPG/WebP) | 原生 Discord 图片附件,带内联预览 |
| 动态 GIF | send_animation 以 animation.gif 上传,使 Discord 内联播放(而非静态缩略图) |
| 视频(MP4/MOV) | send_video — 原生视频播放器 |
| 音频 / 语音 | send_voice — 尽可能使用 原生语音消息,否则使用文件附件 |
| 文档(PDF/ZIP/docx 等) | send_document — 带下载按钮的原生附件 |
.wav、.bin、自定义扩展名的转储文件)都会被记录为 Unsupported document type 并在 agent 看到之前被丢弃。discord.allow_any_attachment:~/.hermes/cache/documents/ 下,并以 application/octet-stream MIME 类型的 DOCUMENT 类型消息事件提供给 agent。Agent 收到指向本地路径的上下文说明(通过 to_agent_visible_cache_path 为 Docker/Modal 沙盒终端自动转换),可以使用 terminal(ffprobe、unzip、file、strings 等)或 read_file 检查文件。文件内容不会内联到 prompt 中——只有路径——因此二进制上传不会撑爆上下文窗口。.txt、.md、.log)继续自动注入最多 100 KiB 的内容;启用该标志后此行为不变。DISCORD_ALLOW_ANY_ATTACHMENT=true 和 DISCORD_MAX_ATTACHMENT_BYTES=33554432(或 0 表示无上限)。max_attachment_bytes: 0)意味着用户可以向机器人上传数 GB 的文件,网关会尽职地在缓存到磁盘时将其缓冲到内存中。仅在受信任的单用户安装中设置此项。对于共享机器人,保持默认的 32 MiB 或保守地提高上限。clarify 工具时——询问你偏好哪种方式、获取任务后反馈或在非平凡决策前确认——Discord 会以每个选项一个按钮的形式渲染问题:我应该为仪表板使用哪个框架? [1. Next.js] [2. Remix] [3. Astro] [其他(输入答案)]
clarify 调用(没有预设选项)会跳过按钮,直接捕获你的下一条消息。~/.hermes/config.yaml 中的 agent.clarify_timeout 配置响应超时(默认 600 秒)。如果你在超时内没有响应,agent 会以一条哨兵消息解除阻塞并自行调整,而不是一直挂起。/sethome。该频道即成为主频道。~/.hermes/.env:faster-whisper(无需密钥)、Groq Whisper(GROQ_API_KEY)或 OpenAI Whisper(VOICE_TOOLS_OPENAI_KEY)。/voice tts 让机器人在文字回复的同时发送语音音频响应。send_message、TTS、图片、语音消息和文件附件都无需 agent 进行特殊处理即可正常工作。GET /channels/{id} 探测(其结果在进程生命周期内被记忆化)。/channels refresh,或重启网关)会将机器人启动后创建的任何论坛频道填充到缓存中。hermes gateway 是否正在运行。验证 .env 文件中的 DISCORD_BOT_TOKEN。如果你最近重置了 token,请更新它。DISCORD_ALLOWED_USERS 中。~/.hermes/.env 中的 DISCORD_ALLOWED_USERS 并重启网关。group_sessions_per_user 被禁用,或平台无法为该上下文中的消息提供用户 ID。~/.hermes/config.yaml 中进行以下设置并重启网关:DISCORD_ALLOWED_USERS(或 DISCORD_ALLOWED_ROLES)以限制谁可以与机器人交互。没有任何一项,网关默认拒绝所有用户作为安全措施。只授权你信任的人——授权用户对 agent 的功能拥有完全访问权限,包括工具调用和系统访问。DISCORD_ALLOWED_ROLES——逗号分隔的角色 ID 列表。拥有其中任一角色的成员即被授权。DISCORD_ALLOWED_USERS 中或拥有 DISCORD_ALLOWED_ROLES 中的任一角色,则该用户被授权。DISCORD_ALLOWED_ROLES 后,机器人在连接时启用 Members intent——Discord 需要此 intent 才能在成员记录中发送角色信息。.env 或重启网关。@everyone、@here 和角色提及,即使其回复中包含这些 token 也不例外。这可防止措辞不当的 prompt 或回显的用户内容向整个服务器发送垃圾消息。个人 @user ping 和回复引用 ping("回复……"小标签)保持启用,以便正常对话仍然有效。config.yaml 放宽这些默认值:everyone 和 roles 保持为 false。LLM 很容易在看似正常的响应中生成字符串 @everyone;没有此保护,这将通知你服务器的每个成员。