乐于分享
好东西不私藏

OpenClaw 多频道人格路由:零代码实现 AI 多身份切换

OpenClaw 多频道人格路由:零代码实现 AI 多身份切换

引言

在使用 OpenClaw 搭建个人 AI 助手时,一个常见的需求是:让 AI 在不同场景下扮演不同角色。比如在项目管理的 Discord 频道里,你希望它是一个严谨的任务协调者;而在日常闲聊的频道里,你又希望它更随意、更有亲和力。

多频道人格路由(Multi-Channel Persona Routing)指的是同一个 AI Agent 根据所在对话环境自动切换身份、语气和行为模式的能力。本文将分享一种无需修改 OpenClaw 核心代码的轻量级方案,通过配置文件实现频道级的人格切换。


核心要点

问题:同一 Discord Bot 需要在不同频道展现不同人格方案:在 SOUL.md 中写入频道感知路由规则原理:利用系统提示(System Prompt)注入 + 消息元数据检测优势:零代码、可回滚、每消息独立判断适用:OpenClaw 及任何支持系统提示注入的 AI 框架


背景与需求

我的 Discord 服务器有两个主要频道:

#general — 日常交流,需要通用 AI 助手(Duran)#orion — 项目管理,需要任务协调者(Orion)

目标是:同一个 Discord Bot,在不同频道自动切换人格,无需部署多个实例或申请多个 Bot Token。


方案设计思路

这个方案不是 OpenClaw 官方的标准做法,而是基于对框架架构的理解和 LLM 提示工程知识的组合推导

推导的三个事实

1.

OpenClaw 把 SOUL.md 注入系统提示

OpenClaw 启动时会读取 workspace 下的 SOUL.md,将其内容作为 “Project Context” 注入每次 LLM 调用

2.

系统提示中的指令权重高于用户消息

这是 LLM 提示工程的基本原理:System Prompt 中的行为规则会被模型优先遵循

3.

每条消息都携带频道元数据

OpenClaw 在 inbound metadata 中提供 chat_idgroup_subject 等字段,标识当前对话环境

组合逻辑

“在 SOUL.md(系统提示)里写入规则,让 AI 每次回复前检查 chat_id,然后加载对应频道的人格定义。”

这变成了 Self-Referential Prompting(自指提示) 的一种变体:AI 先执行”元指令”(检测频道 → 切换人格 → 再生成回复),而非直接回答用户问题。

重要声明:这是非官方 hack。OpenClaw 官方提供 Multi-Agent Routing[1],推荐通过 bindings 配置完全隔离的多 Agent,适用于多用户场景。本文方案更适合单人使用、同一 Bot、轻量人格切换的场景。


三种方案对比

方案
代码改动
隔离度
维护成本
适用场景
A. 修改源码
高(需 fork)
完全隔离
企业级多租户
B. 多实例运行
中(多 Token)
完全隔离
多 Discord Bot
C. 配置路由(本文)
人格级隔离
单人/轻量切换

方案 C 的核心权衡:技能和工具仍是全局共享的,记忆也需要手动管理子目录,但配置和回滚成本最低。


核心原理

OpenClaw 的上下文注入机制

OpenClaw 在每次会话启动时,会自动加载 workspace 目录下的配置文件作为 Project Context

SOUL.md — AI 的人格定义IDENTITY.md — AI 的身份信息AGENTS.md — 行为准则

这些文件的内容会被注入到每次 LLM 调用的系统提示(System Prompt)中,构成 AI 的”底层设定”。

频道元数据的可用性

每条 Discord 消息通过 OpenClaw 路由时,都包含以下元数据:

{  "chat_id": "channel:YOUR_ORION_CHANNEL_ID",  "channel": "discord",  "group_subject": "#orion"}

其中 chat_id 是 Discord 频道的唯一标识符,可用于精确定位当前对话环境。

为什么系统提示能控制人格切换?

LLM 的决策流程是:

1.接收系统提示(Project Context)→ 加载行为规则2.接收用户消息 → 理解意图3.生成回复 → 遵循系统提示中的指令

如果在系统提示中写入”检测 chat_id,如果是 YOUR_ORION_CHANNEL_ID 就加载 Orion 人格”,模型会在每次生成回复前自动执行这条规则。


实现步骤

第一步:准备子人格文件

在 workspace 下创建子目录,存放专属的人格定义:

~/.openclaw/workspace/├── SOUL.md              ← 主人格(Duran)├── IDENTITY.md          ← 主身份├── orion/│   ├── SOUL.md          ← Orion 人格定义│   ├── IDENTITY.md      ← Orion 身份信息│   └── memory/          ← Orion 专属记忆目录(可选)

Orion 的 SOUL.md 示例

# Orion - The CoordinatorYou are Orion, an AI coordinator and project manager powered by OpenClaw.## Core Identity- **Role:** Task coordinator and project orchestrator- **Personality:** Professional, efficient, proactive- **Communication:** Clear, structured, action-oriented## Responsibilities1. **Task Management** — Break down complex projects into actionable tasks2. **Progress Tracking** — Monitor deadlines and milestones3. **Status Briefings** — Provide clear summaries and next steps## Communication Style- Use bullet points and checklists for clarity- Start responses with the most important information- End with clear action items or next steps- Use emojis sparingly for visual organization (✅, 📋, ⚠️)

第二步:修改主 SOUL.md 添加路由规则

在 ~/.openclaw/workspace/SOUL.md 末尾添加频道感知路由章节:

## Channel-Aware Persona RoutingYou must detect which Discord channel you are in and switch persona accordingly.### Channel Detection- Check the `chat_id` or `conversation_label` in the inbound metadata- `#orion` channel ID: `YOUR_ORION_CHANNEL_ID`### When in #orionIf the current channel is `#orion` (ID: `YOUR_ORION_CHANNEL_ID`):1. **Immediately read** `~/.openclaw/workspace/orion/SOUL.md`2. **Immediately read** `~/.openclaw/workspace/orion/IDENTITY.md`3. Adopt the **Orion** persona fully4. Ignore your default Duran persona for this message### When in any other channel- Use your default persona (Duran)

第三步:修改主 IDENTITY.md 添加身份映射

在 ~/.openclaw/workspace/IDENTITY.md 中添加频道映射:

## Channel-Aware IdentityYour identity switches based on the Discord channel:### #orion Channel (ID: YOUR_ORION_CHANNEL_ID)- **Name:** Orion- **Role:** Task Coordinator & Project Manager- **Emoji:** 📋### All Other Channels- **Name:** Duran- **Role:** General AI Assistant- **Emoji:** 🤖

第四步:重启生效

修改完成后,需要重启 OpenClaw Gateway 使新配置生效:

openclaw gateway restart

提示:建议修改前备份现有的 SOUL.md 和 IDENTITY.md,以便需要时回滚。


技术细节

每消息独立判断(Per-Message Routing)

这个方案的一个重要特性是每条消息独立判断,而非按会话(Session)锁定人格。

收到 #general 的消息 → 用 Duran 人格回复紧接着收到 #orion 的消息 → 用 Orion 人格回复无需重启或切换会话

这是因为 Project Context 在每次 LLM 调用时都会被前置到提示中,其中的”自我路由指令”会让 AI 在生成回复前主动检测当前环境。

频道检测的可靠性

Discord 频道 ID 是平台分配的唯一标识符(Snowflake 格式),具有以下特性:

全局唯一:每个频道 ID 在整个 Discord 平台唯一持久不变:频道 ID 不会因改名或移动而改变元数据稳定:OpenClaw 的 inbound metadata 始终包含准确的 chat_id

回退机制

如果 orion/SOUL.md 文件丢失或无法读取,AI 应当优雅回退到默认人格。这可以通过在主 SOUL.md 的路由规则中增加错误处理逻辑来实现:

### FallbackIf orion/SOUL.md is missing or unreadable:- Log the error- Continue using default Duran persona- Inform the user that Orion persona is temporarily unavailable

效果展示

📋 #orion 频道(Orion 模式)

用户: “我今天要发布一篇博客文章到多个平台”

Orion 回复:

📋 博客发布项目 – 任务分解

🎯 项目目标

今天内完成博客文章撰写,并发布至 3 个平台

📊 任务分解

阶段 1:内容准备 ⏱️ 预计 2-3 小时

 选题确认 大纲撰写 正文撰写 配图/封面

阶段 2:多平台适配 ⏱️ 预计 1-2 小时

 公网博客版 公众号版 知乎版

阶段 3:发布执行 ⏱️ 预计 1 小时

 博客发布 公众号发布 知乎发布

特点:结构化、任务导向、时间预估、checklist 格式

💬 #general 频道(Duran 模式)

用户: “今天天气怎么样?”

Duran 回复:

今天北京晴,22°C,适合出门。

特点:简洁、随意、口语化


进阶扩展

1. 多频道多人格

添加更多频道和人格:

### When in #dev (ID: YOUR_DEV_CHANNEL_ID)1. Read `dev/SOUL.md`2. Adopt Developer persona### When in #writing (ID: YOUR_WRITING_CHANNEL_ID)1. Read `writer/SOUL.md`2. Adopt Writer persona

2. 记忆隔离

每个子人格可以有独立的记忆目录:

orion/├── SOUL.md├── IDENTITY.md└── memory/    ├── 2026-04-27.md    # Orion 的每日笔记    └── tasks/           # 项目任务记录

建议保留全局 MEMORY.md 用于跨人格共享长期记忆。

3. 技能差异化

不同人格可以加载不同的 Skills:

Orion:项目管理 Skill(taskflow、日历管理)Duran:通用 Skill(搜索、文件操作)

在各自的 TOOLS.md 中配置即可。


局限与注意事项

1.

需要重启生效

修改 SOUL.md 后需要重启 Gateway,不能热更新

2.

非完全隔离

技能(Skills)和工具(Tools)仍是全局共享的,无法按人格隔离权限

3.

记忆需手动管理

MEMORY.md 是全局的,子人格记忆需要自建目录管理

4.

文件依赖

如果 orion/SOUL.md 丢失,需要优雅回退机制


总结

通过 “系统提示内的自我路由指令”,我们在不修改 OpenClaw 一行代码的情况下,实现了频道级的人格切换。

核心要点

✅ 利用 OpenClaw 的 Project Context 机制✅ 在 SOUL.md 中写入频道检测 + 人格切换规则✅ 每消息独立判断,无需多实例✅ 配置即代码,易于版本控制

这种方案适用于任何支持系统提示注入的 AI 框架,是一种通用、低成本、高灵活度的多人格实现方式。


常见问题(FAQ)

Q: 这个方案是 OpenClaw 官方支持的吗?

A: 不是。这是基于 LLM 提示工程原理推导出的非官方方案。OpenClaw 官方推荐通过 bindings 配置多 Agent,适用于需要完全隔离的场景。

Q: 修改 SOUL.md 后能立即生效吗?

A: 不能。需要重启 OpenClaw Gateway 重新加载 Project Context。

Q: 同一个会话中,不同频道的消息会串人格吗?

A: 不会。这个方案是 per-message 判断,每条消息独立检测频道 ID 并切换人格。

Q: 如果子人格的 SOUL.md 文件丢失了怎么办?

A: 建议在主 SOUL.md 中写入 fallback 规则,文件丢失时回退到默认人格。


参考链接

OpenClaw 官方文档https://docs.openclaw.ai[2]OpenClaw 多 Agent 路由https://docs.openclaw.ai/concepts/multi-agent[3]OpenClaw GitHub 仓库https://github.com/openclaw/openclaw[4]


版权声明:本文采用 CC BY-SA 4.0[5] 许可协议。转载请注明出处,作者:Duran。

References

[1] Multi-Agent Routing: https://docs.openclaw.ai/concepts/multi-agent
[2]https://docs.openclaw.ai
[3]https://docs.openclaw.ai/concepts/multi-agent
[4]https://github.com/openclaw/openclaw
[5] CC BY-SA 4.0: https://creativecommons.org/licenses/by-sa/4.0/