引言

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

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


TL;DR 核心要点

  • 问题:同一 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 ,推荐通过 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 Coordinator

You 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

## Responsibilities
1. **Task Management** — Break down complex projects into actionable tasks
2. **Progress Tracking** — Monitor deadlines and milestones
3. **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 Routing

You 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 #orion
If 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 fully
4. 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 Identity

Your 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 的路由规则中增加错误处理逻辑来实现:

### Fallback
If 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 规则,文件丢失时回退到默认人格。


参考链接


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