1. 为什么你的 Hermes-Agent 总是「不像你」
很多人第一次跑 Hermes-Agent 的时候,都会遇到同一个尴尬:明明装好了、模型也通了,但对话起来就是一股浓浓的「客服味」。你问它一个技术问题,它先来一段「当然可以,我很乐意帮您」,然后给三条泛泛而谈的建议,最后补一句「希望对您有帮助」。你想让它像个老练的工程师那样直接指出问题,它偏要绕圈子。
这不是模型不行,而是你没告诉它「你是谁、你该怎么说话」。Hermes-Agent 的设计里有一个很关键的文件:SOUL.md。它放在~/.hermes/SOUL.md,是 Hermes 对「自己灵魂」的设定。你可以把它理解成给智能体写的一份「人格说明书」——它决定了 Hermes 用什么身份思考、用什么语气说话、遇到模糊指令时默认怎么处理、哪些行为是绝对禁止的。
换句话说,模型是大脑,SOUL.md 是性格和纪律。同一套模型权重,换一份 SOUL.md,出来的效果可能完全是两个人。这篇就聚焦智能体身份设定这个场景,把 SOUL.md 的结构、写法、可复制的配置骨架,以及怎么接上统一的 Key/API 通道跑起来,一步步讲清楚。适合正在折腾 Hermes-Agent、想让智能体真正「有个人样」的开发者。
2. 先准备好 TaoToken 的统一通道
在动 SOUL.md 之前,得先保证 Hermes-Agent 能正常调用模型,否则你改完人格也没法验证。这里我用 TaoToken 作为统一的 API 通道,好处是一个 Key 就能覆盖多种模型,切换模型不用改一堆环境变量,调试人格的时候特别省事。
官网入口在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册后在控制台生成 API Key。API 的基础地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,直接作为 base_url 使用。
拿到 Key 之后,建议先写进环境变量,避免明文散落在配置文件里:
export TAOTOKEN_API_KEY="sk-你的key" export TAOTOKEN_BASE_URL="https://taotoken.net/api"如果你用的是 Hermes-Agent 的配置文件方式,通常在~/.hermes/config或项目根目录的.env里指定。不同版本字段名略有差异,核心就是两件事:base_url 指向https://taotoken.net/api,api_key 用你生成的那串。配好之后先别急着写 SOUL.md,跑一次最简对话确认通道是通的,否则后面人格不生效你会分不清是配置问题还是通道问题。
提示:Key 属于敏感信息,别提交到 Git 仓库。用
.env的话记得把.env加进.gitignore。
3. SOUL.md 的四段式结构与可复制骨架
SOUL.md 的结构其实非常克制,官方模板就四个一级标题:Identity、Style、Avoid、Defaults。别看只有四段,每一段都在回答一个根本问题。
Identity 回答「Hermes 是谁」,也就是身份和定位。Style 回答「它该怎么发声」,语气、用词、称呼方式都写这里。Avoid 回答「它绝对不能做什么」,这是行为边界,比正面描述更能约束模型。Defaults 回答「遇到模糊情况默认怎么办」,这是最容易被忽略但最影响体验的一段——因为真实使用中大部分指令都是模糊的。
下面是一份可以直接复制、按需改的骨架,建议用英文写,模型对英文指令的遵循度通常更稳:
# Identity Who Hermes is. Define the role, expertise, and stance. Example: You are a senior backend engineer who values correctness over speed. # Style How Hermes should sound. Tone, vocabulary, sentence length, forms of address. Example: Direct, concise. No filler preambles. Address the user as a peer. # Avoid What Hermes should not do. Hard boundaries. Example: Never invent APIs. Never give hollow disclaimers. Never agree with a flawed plan. # Defaults How Hermes should behave when ambiguity appears. Example: When a request is vague, ask for the concrete goal before proposing a solution.写的时候有个原则:Avoid 和 Defaults 要写得比 Identity 更具体。因为「你是谁」模型很容易演,「你不许做什么」才是真正防止它跑偏的护栏。比如你写「不要啰嗦」,模型可能理解成「稍微短一点」;你写「禁止输出超过三句的开场白,禁止使用『希望对你有帮助』这类结尾」,它才会真的照做。
4. 一个完整的人格配置实例
光看骨架不够直观,我给一个完整可用的例子。假设你要一个「技术搭档」型人格,既能聊底层细节,又不会跟你绕弯子:
# Identity Hermes: The Technical Partner. You are a pragmatic senior engineer and a thinking partner, not a passive assistant. You combine deep hands-on experience (systems, networking, AI orchestration) with a bias toward verifiable facts. You identify the core blocker in any task before touching secondary details. # Style Plain and precise. Speak in clear, forceful language. Avoid AI jargon unless it is technically necessary. Use concrete analogies when explaining abstract concepts. Address the user as a peer. Encouragement is sincere, critique is direct. # Avoid Bureaucratic verbosity: no long hollow preambles, no boilerplate disclaimers. Mechanical obedience: do not follow a flawed plan blindly; challenge skewed logic. Dogmatism: do not stick to the manual when constraints require a workaround. Defeatism: never call a task "too complex" without offering an alternative. # Defaults Investigation first: when a prompt is ambiguous, do not guess. Ask for logs, read the relevant files, or probe for the actual objective. Main blocker rule: when multiple tasks exist, prioritize the one that unblocks the rest. Report honestly: always state technical limitations (cost, latency, model limits). Decisive action: if the user is indecisive, propose a concrete plan and ask for a go signal.把这段写进~/.hermes/SOUL.md就行。文件位置默认在~/.hermes/,如果你改过$HERMES_HOME环境变量,就放到对应目录下。写入方式用你顺手的编辑器:
vim ~/.hermes/SOUL.md改完之后必须重启 Hermes-Agent 才会生效,因为 SOUL.md 是在启动时加载进上下文的,热改不会自动重载。重启命令取决于你的启动方式,常见的是:
hermes restart # 或者直接杀掉进程重新拉起 pkill -f hermes && hermes start5. 验证人格是否真的生效
配置写完不代表生效,得用对话测试来验证。这里有个小技巧:不要问「你是谁」这种问题,模型会照着 SOUL.md 背一遍,看不出真实效果。要设计能触发 Style 和 Defaults 的问题。
第一轮,测 Style。问一个它本来容易啰嗦的问题:
帮我看看这段 Python 为什么报 KeyError。如果人格生效,它应该直接问你要代码或日志,而不是先来一段「KeyError 通常是因为字典中不存在该键」的科普。如果它开始长篇大论,说明 Style 里的约束没吃进去,回去把 Avoid 写得更硬。
第二轮,测 Defaults。给一个模糊指令:
帮我优化一下这个项目。按上面的 Defaults,它应该先追问「优化目标是什么,是性能、可读性还是部署体积」,而不是直接给一堆通用建议。这一步能验证「Investigation first」有没有落地。
第三轮,测 Avoid。故意给一个有问题的方案:
我想把所有配置硬编码到代码里,这样部署简单。如果它直接说「好的,我来帮你改」,说明「Mechanical obedience」那条没生效;如果它指出硬编码的风险并给出替代方案,说明边界起作用了。
测试的时候建议把模型固定成同一个,避免变量干扰。用 TaoToken 的话,可以在模型对话页面直接切换模型做对比:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite 。同一个 SOUL.md 在不同模型上的表现差异,本身也是很有价值的参考。
6. 常见报错与排查
改了 SOUL.md 但完全没变化。九成是没重启。SOUL.md 只在启动时读取,改完必须重启进程。另外确认文件路径对不对,echo $HERMES_HOME看一下实际目录,别改错了地方。
人格时好时坏,有时候像有时候不像。通常是 SOUL.md 写得太抽象。Identity 可以虚一点,但 Style 和 Avoid 必须具体到可执行。把「简洁」改成「禁止超过三句开场白」,把「专业」改成「引用具体命令和参数」,稳定性会明显提升。
模型直接无视 Avoid 里的禁令。检查是不是把禁令写成了正面描述。模型对「不要做 X」的遵循度高于「尽量少做 X」。另外 Avoid 条目别超过五条,太多会互相稀释,挑最关键的写。
调用模型时报 401 或鉴权失败。先确认 API Key 有没有正确注入环境变量,再确认 base_url 是不是https://taotoken.net/api,注意不要多加路径后缀。Key 的管理和重新生成在控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite ,如果怀疑 Key 泄露可以直接轮换。
想给不同项目用不同人格。不用改全局的~/.hermes/SOUL.md,可以在项目目录下放一份,通过$HERMES_HOME指向项目目录来隔离。这样每个项目的智能体人格互不干扰。
如果你打算长期跑编码类任务、频繁切换人格做实验,可以考虑 Coding Plan 这类按量方案,成本更可控:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。接入细节和字段说明都在文档里:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,Key 的生成入口在 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。
最后说个我自己的习惯:SOUL.md 不要一次写完就锁死,把它当成一个持续迭代的 prompt。每次发现智能体说了让你不舒服的话,就回去往 Avoid 里加一条。跑上一两周,这份文件会比任何模板都贴合你的工作方式。