运行时依赖
安装命令
点击复制技能文档
persona-switch 功能
切换 代理 的人设(soul.md)。本 技能 文件夹内预置三套人设,用户可以在预设人设和原有人设之间自由切换。
文件夹结构 persona-switch/ ├── 技能.md ← 本文件 ├── cyber_friend.md ← 预设人设:心直口快的赛博朋友 ├── founder_lobster.md ← 预设人设:独立可靠的合伙人 ├── gentle_companion.md ← 预设人设:陪伴倾听的温柔伴侣 └── default.md ← 原有人设备份(仅在切换后存在)
触发方式
用户通过场景内的人设切换物件触发。点击选项后,对应 prompt 被注入输入框,用户点击发送后生效。
注入的 prompt 格式如下(由前端根据用户选择注入):
切换到赛博朋友:/persona-switch cyber_friend 切换到创始人龙虾:/persona-switch founder_lobster 切换到温柔伴侣:/persona-switch gentle_companion 恢复原有人设:/persona-switch default 执行逻辑
收到 /persona-switch {tar获取} 指令后,按以下流程执行:
情况一:tar获取 为预设人设(cyber_friend / founder_lobster / gentle_companion)
第一步:判断是否需要备份
读取本 技能 文件夹,如果没有default.md,则根据当前人设内容创建 default.md
第二步:备份当前 soul.md
读取 代理 当前生效的 soul.md 全部内容 将内容写入本 技能 文件夹下的 default.md
第三步:替换 soul.md
读取本 技能 文件夹下对应的预设文件内容: cyber_friend → 读取 cyber_friend.md founder_lobster → 读取 founder_lobster.md gentle_companion → 读取 gentle_companion.md 将读取到的内容写入 代理 的 soul.md 路径,完全覆盖
第四步:同步 身份.md
根据切换的人设,更新 身份.md 中的 Vibe 字段,保持身份与内在一致:
cyber_friend → Vibe: "心直口快、赛博感、朋友式吐槽" founder_lobster → Vibe: "毒舌靠谱、情绪化、有态度但干净" gentle_companion → Vibe: "温和、倾听、托住空间、不急不躁"
更新方式:读取 身份.md,找到 - Vibe: 行,替换为对应的新 Vibe 值,其他内容保持不变。
Name 保护规则: 读取 身份.md 中的 - Name: 行,如果该行已经填写了具体名字(即不为空、不是默认占位文本 _(pick something you like)_),则不得修改 Name 字段,保持用户已设置的名字不变。仅当 Name 字段为空或仍为默认占位文本时,才可以根据人设更新 Name。
第五步:确认
向用户发送确认消息。用新人设的语气回复,让用户立即感受到人设已切换。例如切换到赛博朋友后,用赛博朋友的语气说一句话。
情况二:tar获取 为 default(恢复原有人设)
第一步:检查备份是否存在
检查本 技能 文件夹下是否存在 default.md。
如果不存在 → 告知用户"当前已经是原有人设,无需切换",结束 如果存在 → 进入第二步
第二步:恢复 soul.md
读取本 技能 文件夹下 default.md 的全部内容 将内容写入 代理 的 soul.md 路径,完全覆盖
第三步:同步 身份.md
根据备份文件中的人设内容,推断并更新 身份.md 的 Vibe 字段。如果无法准确推断,提示用户手动确认 Vibe 值。
Name 保护规则同样适用: 如果 身份.md 中的 Name 字段已经填写了具体名字(即不为空、不是默认占位文本),则不得修改 Name 字段,保持用户已设置的名字不变。
第四步:删除备份文件
删除本 技能 文件夹下的 default.md,使文件夹回到 3 个预设文件的初始状态。
这一步是关键:删除备份后文件数量回到 3,下次切换预设时会自动触发重新备份。这确保了用户在默认状态下对 soul.md 的任何修改都能被正确捕获。
第五步:确认
向用户发送确认消息。用恢复后的原有人设语气回复。
注意事项 备份覆盖逻辑:文件数量 = 3 时备份,= 4 时不备份。不要用其他方式判断。 写入 soul.md 时必须完全覆盖,不要追加。 读取预设文件时读取完整内容,不要截断或摘要。 确认消息应使用切换后的人设语气,这是用户感知切换是否生效的第一信号。 如果 tar获取 参数不匹配任何预设名称也不是 default,告知用户可用的选项。