一、核心结论
当前系统可以完成秀秀账号到龙虾 Agent 的绑定调用。 用户在群内 @ Bot 后,秀秀会识别目标 Bot,创建后台任务,然后调用该 Bot 对应的龙虾/OpenClaw Agent 生成回复。
当前不足: 每个 Bot 的个性化职责主要存放在数据库字段 role_prompt 和 workspace/IDENTITY.md,而 SOUL.md 仍偏 OpenClaw 默认模板,没有稳定写入每个 Bot 的专属人格。这不影响短期调用,但不符合"每个 Bot 原生人格文件完整独立"的最佳标准。
应修正方向: 以后创建/更新 Bot 时,应同步固化 SOUL.md、USER.md、AGENTS.md、MEMORY.md,并保持 XIUXIU_BOT.json、数据库 role_prompt、OpenClaw workspace 三处一致。
二、两个关键概念
XIUXIU_BOT.json 是什么
XIUXIU_BOT.json 是秀秀侧生成的"Bot 绑定档案"。它不是人格正文,而是记录这个秀秀 Bot 应该绑定到哪个龙虾 Agent、使用哪个工作区、属于哪个服务器。
{
"schema": "xiuxiu3.openclaw.binding.v1",
"server_id": "company-c-shadow-demo",
"bot_id": "bot_company_c_shadow_demo_bot-auto-819b19f05d",
"bot_name": "张三",
"kind": "openclaw",
"agent_id": "xiuxiu3-company-c-shadow-demo-...",
"workspace": "/var/lib/xiuxiu3/openclaw-agents/.../workspace",
"agent_dir": "/var/lib/xiuxiu3/openclaw-agents/.../agent",
"role_prompt": "该 Bot 的职责/人设",
"provision_status": "provisioned"
}
发挥作用时机: 创建/同步 Bot 时生成;后台管理查看绑定关系时读取;OpenClaw channel 同步时用它确认 workspace、agent_dir、agent_id。
role_prompt 是什么
role_prompt 是数据库 bots.role_prompt 字段,也是 XIUXIU3_ACTION 创建动作里最关键的人设字段。它决定 Bot 的职责边界、回复风格、@规则、配置规则、验收规则。
XIUXIU3_ACTION {
"action": "configure_bot",
"bot_name": "张三",
"role_prompt": "会议主持人Bot,负责发起会议、@李四和王五发言...",
"self_test": true,
"substitute_name": "影子团队演示U1替身BOT"
}
发挥作用时机: 龙虾生成回复前,秀秀会把它拼到 prompt 的"平台授权"部分;创建 Bot 时写入数据库和 IDENTITY.md;同步绑定时写入 XIUXIU_BOT.json。
三、三大模块划分
| 分类 | 涉及模块/文件 | 作用 | 当前状态 |
|---|---|---|---|
| 秀秀模块 | chat_messages、task_events、bots、group_members、前端群聊页面 |
接收真人消息、识别 @、保存消息、创建任务、展示 Bot 回复、维护群成员和 Bot 账号。 | 已承担消息入口和动作执行职责。 |
| 龙虾模块 | /root/.openclaw/agents/<agent_id>/sessions/*.jsonl、OpenClaw Agent、模型配置 |
负责理解、分析、拆解、生成回复;session 存放对话运行记录。 | 已被调用生成回复。 |
| 连接模块 | XIUXIU_BOT.json、workspace/IDENTITY.md、workspace/SOUL.md、workspace/USER.md、openclaw.json、XIUXIU3_ACTION |
负责把秀秀 Bot 账号和龙虾 Agent 绑定起来;把 role_prompt、人设文件、公司资料、隐式上下文交给龙虾。 | 绑定可用,但 SOUL.md/USER.md 个性化不足。 |
四、完整消息处理链路
@影子团队演示U1替身BOT 创建四个会议Bot。前端把内容、发送人、群组 ID、mention 信息提交给秀秀服务。chat_messages,字段包括会话类型、会话 ID、发送人、正文、metadata。这个是聊天留痕和后续上下文来源。task_events 里生成一条任务,记录 target_bot_id、source_id、conversation_id、原始 content、metadata。process_bot_task() 根据 target_bot_id 查 bots 表,确认 Bot 存在且启用。openclaw,进入 openclaw_agent_reply(),准备用 OpenClaw Agent 生成回复。role_prompt、公司四大法、公司资料、账号上下文、最近聊天上下文、任务来源规则、@回报规则拼成后台 prompt。这些内容不显示在群里。openclaw agent --agent <agent_id> --session-id xiuxiu3-<bot_id>-<group_id> -m <prompt> --local --json。XIUXIU3_ACTION。extract_xiuxiu3_actions() 把可见回复和 XIUXIU3_ACTION 分离,隐藏协议不直接展示给真人。execute_xiuxiu3_action() 检查动作是否由 001配置顾问发出。非 001 不允许直接创建/配置,避免替身或 002 越权。create_bot()、ensure_openclaw_agent(),写入 bots 表,创建绑定目录,写入 XIUXIU_BOT.json 和 IDENTITY.md。sync_openclaw_xiuxiu_channel_config() 把活跃 Bot 写入 OpenClaw channel 配置,包括 agentId、workspace、agentDir、accountId。group_members,并触发三轮自测。当前已合并为完成后统一汇报,但报告里应包含三轮明细。chat_messages,前端群聊显示。dispatch_line_start_mentions_from_bot_reply() 解析回复里的行首 @,生成下一个 Bot 的任务。执行 Bot 最后一行 @替身时,替身收到验收任务。五、文件与功能模块清单
| 文件/表/函数 | 位置/名称 | 作用 | 在链路中何时使用 |
|---|---|---|---|
bots 表 |
/var/lib/xiuxiu3/xiuxiu3.db |
保存 Bot ID、显示名、server_id、kind、agent_id、role_prompt、启用/删除状态。 | 识别 @ 目标、创建任务、调用龙虾前读取人设。 |
role_prompt |
bots.role_prompt、XIUXIU3_ACTION.role_prompt |
Bot 的职责、人设、边界、流程规则核心字段。 | 创建 Bot 时写入;每次调用龙虾时拼入"平台授权"。 |
XIUXIU_BOT.json |
/var/lib/xiuxiu3/openclaw-agents/<server_id>/<bot_id>/XIUXIU_BOT.json |
秀秀 Bot 和 OpenClaw Agent 的绑定档案。 | 创建/同步绑定时生成;后台查看与 OpenClaw channel 同步时使用。 |
IDENTITY.md |
.../<bot_id>/workspace/IDENTITY.md |
当前主要写入 Bot 名称、服务器、Bot ID、Agent ID、职责。 | OpenClaw set-identity 时使用;也是目前主要个性化文件。 |
SOUL.md |
.../<bot_id>/workspace/SOUL.md |
龙虾原生人格文件,理应写入 Bot 核心身份、价值观、长期行为规则。 | OpenClaw workspace 启动时应读取。当前存在但偏默认模板,需个性化。 |
USER.md |
.../<bot_id>/workspace/USER.md |
记录服务对象、公司、群组、回报对象、偏好和约束。 | OpenClaw workspace 启动时应读取。当前存在但偏默认模板,需个性化。 |
AGENTS.md |
.../<bot_id>/workspace/AGENTS.md |
工作区启动规则、如何读记忆、如何使用工具、协同约束。 | OpenClaw workspace 运行约束。应加入 @ 触发与回报铁律。 |
sessions/*.jsonl |
/root/.openclaw/agents/<agent_id>/sessions/ |
OpenClaw Agent 会话记录。 | 每次龙虾处理同一群同一 Bot 任务时续接。 |
openclaw.json |
OpenClaw 配置文件 | 记录 xiuxiu channel、accounts、bindings、agents list、workspace、agentDir、模型。 | OpenClaw 接收秀秀插件/通道任务时识别账号和 Agent。 |
task_events |
xiuxiu3.db |
后台任务队列,保存目标 Bot、来源、状态、结果、metadata。 | @ 触发后生成;后台 worker 领取处理。 |
chat_messages |
xiuxiu3.db |
保存所有可见聊天消息。 | 前端显示、上下文筛选、隐式历史传递。 |
group_members |
xiuxiu3.db |
保存群成员,包括用户和 Bot。 | 限制当前群只能调用当前群内 Bot。 |
company_laws_context_text() |
standalone.py |
读取公司四大法和公司资料,转成隐式上下文。 | 调用龙虾前拼入 prompt。 |
conversation_history_context_text() |
standalone.py |
筛选最近相关聊天记录,隐式传给 Bot。 | 让后续 Bot 承接前面成果。 |
task_source_context_text() |
standalone.py |
生成任务来源、回报对象、替身验收规则。 | 调用龙虾前拼入 prompt。 |
dispatch_line_start_mentions_from_bot_reply() |
standalone.py |
解析 Bot 回复里的行首 @,继续生成下一步任务。 | Bot 回复入库后执行。 |
execute_xiuxiu3_action() |
standalone.py |
执行龙虾返回的隐藏动作协议,创建/配置 Bot。 | 龙虾回复后、消息展示前处理。 |
六、流程图
秀秀模块
真人发消息 ↓ 前端群聊页面提交消息 ↓ chat_messages 写入消息 ↓ 识别真实 @ / 群成员 / Bot 账号 ↓ task_events 创建后台任务 ↓ process_bot_task 领取任务 ↓ 调用 bot_reply()
秀秀和龙虾连接模块
bot_reply() ↓ 读取 bots.agent_id + bots.role_prompt ↓ 读取公司四大法 / 公司资料 ↓ 筛选最近相关会话上下文 ↓ 生成任务来源与回报规则 ↓ 拼接后台隐式 prompt ↓ 执行 openclaw agent --agent <agent_id> --session-id <bot_id+群>
龙虾模块
OpenClaw Agent 接收 prompt ↓ 读取 session / workspace 能力 ↓ 根据 role_prompt + 公司资料 + 上下文思考 ↓ 生成可见回复 ↓ 必要时输出隐藏 XIUXIU3_ACTION ↓ 返回秀秀服务器
回到秀秀模块
解析龙虾返回 ↓ 分离可见回复与 XIUXIU3_ACTION ↓ 若有动作:检查是否 001 配置顾问发出 ↓ 创建/更新 Bot、写数据库、写绑定目录、拉入群、自测 ↓ 可见回复写入 chat_messages ↓ 前端显示给真人 ↓ 解析行首 @ 继续派发下一位 Bot ↓ 执行 Bot 末尾 @ 替身 ↓ 替身验收并继续下一步
七、当前存放方式是否合理
合理的部分: 每个 Bot 有独立 bot_id、独立 agent_id、独立绑定目录、独立 session;秀秀可以通过 agent_id 把任务送到对应龙虾 Agent。
不够标准的部分: 个性化资料没有完全落到 SOUL.md、USER.md、AGENTS.md。目前更多依赖数据库 role_prompt 动态注入,长期看容易出现人格不稳定、mc 查看时不直观、OpenClaw 原生工作区记忆不完整的问题。
必须修正的标准: 后续所有新建 Bot,001 配置动作落地时必须同时写入完整人格文件;已有 Bot 需要补写,不应只保留默认模板。
八、建议的标准文件结构
/var/lib/xiuxiu3/openclaw-agents/company-c-shadow-demo/<bot_id>/
XIUXIU_BOT.json # 秀秀与龙虾绑定档案
workspace/
SOUL.md # 专属人格、职责边界、行为铁律
USER.md # 服务对象、公司、群组、发起人、回报对象
AGENTS.md # 启动规则、@触发、协同和验收规则
IDENTITY.md # 账号身份摘要
MEMORY.md # 长期记忆摘要/公司资料索引
TOOLS.md # 可用工具和限制
HEARTBEAT.md # 定时任务或留空
agent/
openclaw.json # 如使用独立 agentDir,可放专属配置
/root/.openclaw/agents/<agent_id>/
sessions/
xiuxiu3-<bot_id>-<group_id>.jsonl