1 背景
1.1 现象
我添加了两个飞书机器人,我先添加了一个“抖店客服专员-抖抖”,并为其设置了角色,又添加了另一个“拼多多客服专员-多多”,未对其设置角色,我在测试时问“拼多多客服专员-多多”她是谁,她居然回复我她是“抖店客服专员-抖抖”,即出现了角色身份错乱的现象。
我的配置如下:
{
channels: {
feishu: {
enabled: true,
dmPolicy: 'pairing',
typingIndicator: false,
resolveSenderNames: false,
accounts: {
bot1: {
appId: 'cli_xxx',
appSecret: '__OPENCLAW_REDACTED__',
botName: '抖店客服专员-抖抖',
typingIndicator: true,
resolveSenderNames: false,
},
bot2: {
appId: 'cli_yyy',
appSecret: '__OPENCLAW_REDACTED__',
botName: '拼多多客服专员-多多',
typingIndicator: true,
resolveSenderNames: false,
},
},
},
},
...
}
1.2 分析
在上面描述的场景中,多个飞书机器人(通过 accounts 配置)出现角色错乱的问题,通常是因为后台的 AI 模型(或 agent)是共享的,导致无论哪个机器人被调用,都使用相同的系统提示(system prompt)或身份定义。简单来说,机器人账号只是“入口”(channel account),但背后的“大脑”(模型和角色)没有区分开来。当用户问“是谁”时,它基于全局或默认的 prompt 回答,导致混淆。
这在 OpenClaw(或类似框架,如从你的配置文件结构推测)中是常见问题,尤其当你只配置了 channels.accounts 而忽略 agents 部分时。以下是处理步骤和推荐方案,基于项目文档和社区实践(例如,使用多 agent 隔离角色)。
2 配置多个 Agents
对于多个飞书客服机器人(每个机器人有独立的 appId + appSecret,通常对应不同的客服角色,如售前、售后、技术支持等)的场景,推荐的做法是“一个人(一个客服机器人)对应一个独立的 Agent”,也就是多个 Agent(不是只用一个共享 Agent)。
2.1 为什么多个客服机器人适合“多个 Agent”而不是“一个 Agent”?
- 隔离最彻底,避免串台/错乱:每个客服机器人处理不同类型咨询(如一个专售前引导、一个专退款售后),如果只用一个 Agent,所有对话记忆、上下文、prompt 都会共享,导致:
- 用户问“退款进度”给售后机器人,它可能混入售前对话历史。
- 角色身份容易错乱(你之前遇到的“问第二个机器人,它说自己是第一个”就是典型)。
- 客服风格/知识边界模糊(售前要热情推销,售后要耐心安抚)。
- 每个 Agent 独立:memory(对话历史)、workspace(文件/知识库)、system prompt(角色定义)、甚至模型(售前用更活泼的模型,售后用更严谨的)都能完全隔离。
- 飞书侧体验最佳:用户加多个机器人到群/私聊,@不同机器人触发不同客服,互不干扰。群里可以同时有“售前Bot”“售后Bot”“技术Bot”,用户@谁谁专业回应。
- 社区/文档共识:从 OpenClaw docs、GitHub issues、知乎/腾讯云/阿里云教程、实战复盘看,多飞书账号(multiple accounts) + 多 Agent + bindings by accountId 是主流方案,尤其适合客服/多角色场景。单 Agent 只适合“一个机器人 + 多群不同人格”。
如果强行只用一个 Agent(所有机器人 fallback 到 main),只能靠 prompt 硬编码区分(如“你是售前客服,如果消息来自账号X就… ”),但实际效果差、容易越界、维护麻烦。
2.2 推荐配置:多个飞书机器人 → 多个 Agent(一对一绑定)
示例(假设你有 3 个客服机器人:抖店客服专员、拼多多客服专员、售前、售后、技术):
channels 配置(保持你的多账号):
{ "channels": { "feishu": { "enabled": true, "dmPolicy": "pairing", // 或 "open" 根据需求 "typingIndicator": false, "resolveSenderNames": false, "accounts": { "csr_doudou": { "appId": "cli_抖店客服专员xxx", "appSecret": "抖店客服专员secret", "botName": "抖店客服专员-抖抖", "typingIndicator": true, "resolveSenderNames": false, }, "csr_duoduo": { "appId": "cli_拼多多客服专员xxx", "appSecret": "拼多多客服专员secret", "botName": "拼多多客服专员-多多", "typingIndicator": true, "resolveSenderNames": false, }, "pre_sale": { "appId": "cli_售前xxx", "appSecret": "售前secret", "botName": "售前小助手", "enabled": true }, "after_sale": { "appId": "cli_售后yyy", "appSecret": "售后secret", "botName": "售后客服", "enabled": true }, "tech_support": { "appId": "cli_技术zzz", "appSecret": "技术secret", "botName": "技术支持", "enabled": true } } } } }agents 配置(创建多个独立 Agent):
- 推荐用命令行创建(自动生成 workspace):
openclaw agents add csr_doudou --workspace ~/.openclaw/workspace-csr-doudou --model "zai/glm-4.7" openclaw agents add csr_duoduo --workspace ~/.openclaw/workspace-csr-duoduo --model "zai/glm-4.7" # 3. 创建客服总控Agent(默认GLM-4.7) openclaw agents add csr_manager --workspace ~/.openclaw/workspace-csr-manager --model "zai/glm-4.7" openclaw agents add csr_doudou --workspace ~/.openclaw/agents/csr_doudou openclaw agents add csr_duoduo --workspace ~/.openclaw/agents/csr_duoduo openclaw agents add pre_sale --workspace ~/.openclaw/agents/pre_sale openclaw agents add after_sale --workspace ~/.openclaw/agents/after_sale openclaw agents add tech_support --workspace ~/.openclaw/agents/tech_support - 然后在每个 Agent 的 workspace 里编辑 IDENTITY.md / SOUL.md 等,定义角色:
- pre_sale:热情、推销导向、产品知识强。
- after_sale:耐心、安抚、退款流程熟。
- tech_support:专业、技术细节多。
创建完会在 ~/.openclaw/openclaw.json 中的 agents 下出现对应的 list。

配置片段:
{ agents: { defaults: { model: {primary: 'zai/glm-4.5-air'}, compaction: {mode: 'safeguard'}, sandbox: {mode: 'off'}, }, list: [ { id: 'main', }, { id: 'csr_doudou', name: 'csr_doudou', workspace: '/home/node/.openclaw/agents/csr_doudou', agentDir: '/home/node/.openclaw/agents/csr_doudou/agent', }, { id: 'csr_duoduo', name: 'csr_duoduo', workspace: '/home/node/.openclaw/agents/csr_duoduo', agentDir: '/home/node/.openclaw/agents/csr_duoduo/agent', }, ], }, }- 推荐用命令行创建(自动生成 workspace):
bindings 路由(关键!按 accountId 精确绑定):
{ agents: { ... } ... "bindings": [ { "match": { "channel": "feishu", "accountId": "csr_doudou" }, "agentId": "csr_doudou" }, { "match": { "channel": "feishu", "accountId": "csr_duoduo" }, "agentId": "csr_duoduo" }, { "match": { "channel": "feishu" }, // fallback "agentId": "pre_sale" // 或 main } ] }生效:
- 保存 openclaw.json →
openclaw gateway restart或重启服务。 - 测试:分别私聊/群里 @ 不同机器人,问“你的职责是什么”,每个应该只认自己身份。
- 保存 openclaw.json →
什么时候可以用“一个 Agent”?
- 你只有一个飞书机器人,但想在不同客服群里表现出不同风格(靠群 chat_id 路由)。
- 所有客服其实是“同质化”的(同一个 prompt 就够),不想多管理 Agent。
- 但客服场景通常需要强隔离,所以不推荐。
注意事项(基于 2026 年常见坑)
- 旧版有时 multi-account + multi-agent 有 session path bug(只走 main Agent),升级到最新版(3.2+ 或检查 GitHub releases)。
- 每个 Agent workspace 独立,避免共享文件冲突。
- 如果群里多个机器人共存,飞书会按 @ 路由;没 @ 时可能走默认,但 bindings by accountId 优先。
- 日志查看 incoming message 的 accountId,确保匹配。
这样配置后,你的多个飞书客服机器人就能各司其职、互不干扰,像真正的客服团队。
我遇到的问题
- OpenClaw如何对接飞书?
- OpenClaw如何添加多个飞书频道(多个不同角色的机器人)?
- OpenClaw “客服专员”如何对接抖店?