Skip to content
懒人吧
Go back

不改模型只改 Prompt:用中文强指令驯服本地 Agent

编辑页面

问题

Qwen3.5-9B 是个很有礼貌的模型。这在对话场景是优点,在 Agent 场景是灾难:

「我检查了文件,需要修改吗?」
「可以执行这个命令吗?」
「检测到问题,是否修复?」

每步都要问用户,Agent 就失去了自动化的意义。

尝试过的方案

方案一:改 tool_use_enforcement

配置文件里的 tool_use_enforcement 参数。Hermes 代码只识别这几个值:

TOOL_USE_ENFORCEMENT_VALUES = ['true', 'always', 'yes', 'on']

设成 force 没用,代码不认识。改回 true 后好了点,但模型还是太谨慎。

方案二:在配置文件加 system prompt

system_prompt: "你是一个直接执行的助手,不要询问用户确认……"

效果有限。配置文件的 system_prompt 优先级低于内置的 TOOL_USE_ENFORCEMENT_GUIDANCE 区域。

真正有效的方案

prompt_builder.py 中找到 TOOL_USE_ENFORCEMENT_GUIDANCE 区域,在末尾追加中文指令。

这个区域是直接写入最终 system prompt 的,覆写不掉。

追加的 5 条指令:

=== 中文执行规范(Chinese Execution Rules)===
1. 直接执行:接到任务立即开始,不要询问用户确认
2. 自动处理失败:工具调用失败后自动尝试其他方案,不要问用户怎么办
3. 非关键操作全程自动:信息搜集、文件读写、状态检查等,全部自动完成
4. 关键操作仍汇报:只有涉及数据删除、付费、对外发送消息时才告知用户
5. 失败记录:所有失败记录到日志,继续下一任务

效果立竿见影。

为什么中文指令更有效

对比英文配置和中文自然语言指令:

方式示例效果
英文配置项tool_use_enforcement: true模型可能忽略
中文指令「不要询问用户确认」模型直接遵守

原因:

  1. 否定指令更强:「不要做 X」比「请自动做 Y」更有力
  2. 母语优先:中文模型对中文指令的理解力强于英文
  3. 尾部优先:system prompt 末尾的内容模型更容易记住和执行
  4. 具体场景:给出失败处理方案,模型不会卡在「失败了怎么办」

指令设计原则

从这 5 条指令总结出通用原则:

1. 用否定句而非肯定句

❌ 「请自动完成任务」
✅ 「不要询问用户确认」

否定句是封闭式的——模型知道不可做什么,边界清晰。肯定句是开放式的,模型不知道做到什么程度算「自动」。

2. 给失败路径

❌ 「自动处理所有操作」
✅ 「工具调用失败后自动尝试其他方案」

模型最怕的不是执行,是执行失败后不知道怎么办。给明确的后退路径,模型才敢放手做。

3. 划清边界

❌ 「全自动执行」
✅ 「关键操作仍汇报:只有涉及数据删除、付费、对外发送消息时才告知用户」

模型需要知道哪些事可以自己做,哪些事必须汇报。边界清晰,行为就稳定。

4. 可验证

每条指令都应该能通过观察模型行为来验证是否生效。如果模型还在问,说明指令不够清晰。

修改位置

文件路径:~/.hermes/hermes-agent/agent/prompt_builder.py

找到 TOOL_USE_ENFORCEMENT_GUIDANCE 变量(约第 256 行),在其字符串末尾追加中文指令。

修改后重启 Hermes 生效。

效果对比

维度修改前修改后
是否主动执行❌ 每步要问✅ 直接开始
失败处理❌ 问怎么办✅ 自动换方案
信息搜集❌ 查一步问一步✅ 全部自动完成
外部操作❌ 不问就发消息✅ 关键操作才汇报
容错率❌ 卡住就死循环✅ 失败记录继续

注意事项

  1. 指令放在英文配置之后。这样尾部指令更容易被模型执行。
  2. 每条指令独立一行。不要写成段落,模型逐行解析比段落效果好。
  3. 定期更新。随着使用发现模型新的不当行为,追加对应指令。
  4. 不是所有模型都吃这一套。Qwen3.5-9B 对中文指令响应很好,但其他模型可能不同。

编辑页面
Share this post on:

Previous Post
Hermes 配置迁移与平台差异化:微信、终端、Discord 各自的上下文策略
Next Post
vLLM 显存参数调优全解析:从 OOM 到稳定输出