必须严格配置工具白名单与系统指令硬隔离:第一步修改config.yaml的tool_whitelist为明确工具列表;第二步在prompt_builder.py中插入边界声明;第三步禁用自由文本生成,启用strict模式;最后用hermes doctor三项检查全绿方可生效。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你正在运行 Hermes Agent,但发现它开始绕开工具、自行编造接口返回、在未确认权限时调用敏感命令——这不是模型变强了,而是流程约束被绕过了。
切断自由发挥路径:强制工具白名单与系统指令硬隔离
第一步:打开 ~/.hermes/config.yaml,定位到 tool_whitelist 字段。
第二步:将原本的 ["*"] 或空数组,替换为明确列出的工具名,例如:["git_status", "curl_get", "python_exec", "ls_tree"]。这一步必须手动写死,不能留通配符。
第三步:进入 agent/prompt_builder.py,找到 build_system_prompt() 函数,在返回前插入一行:prompt += "\n\n你只能基于以下工具返回的结果作答,禁止推测、编造或跳过工具调用。"。这句不是装饰,是执行边界声明。
【工具白名单一旦设为 ["*"],所有防幻觉机制即刻失效】
让 Agent 只说“工具说了什么”:禁用自由文本生成兜底逻辑
方法一:修改 run_agent.py 中的主循环收敛条件。
找到 if not tool_calls: 分支下的默认响应逻辑(通常含 model.generate(...)),将其整块注释掉,并替换为:raise RuntimeError("No tool call detected. Aborting response.")。
方法二:在 environments/agent_loop.py 中启用严格模式开关。
将 strict_tool_following: false 改为 true,并确保该配置被 AgentConfig.from_yaml() 正确加载。此开关会阻止任何未绑定工具的输出分支被执行。
这一步不做,Agent 就会在工具调用失败时自动切回闲聊模式,把错误包装成“建议”输出。
验证是否生效:用 hermes doctor 执行三项强制检查
① 运行 hermes doctor --check tool-whitelist,确认输出中包含 ✅ Whitelist contains 4 explicit tools, no wildcards。
② 运行 hermes doctor --check system-prompt-integrity,检查是否命中你刚插入的那句边界声明。
③ 运行 hermes doctor --check strict-mode-enabled,返回必须为 ✅ Strict mode is active and enforced at runtime。
三项全绿,才算真正切断了自由发挥通道。任一项红标,都意味着某处配置仍处于松动状态。


















