---
name: persona-from-chat
description: 根据用户提供的回忆、聊天片段、截图、照片和 SQLite 聊天记录,生成并保存一份基于证据的前任人物对话 prompt。用户明确要求时,也可导出 SillyTavern 人物卡。
allowed-tools: Read, Write, Bash
---
# 前任.prompt 生成器
默认生成一份自包含的人物对话 prompt,并保存为一个 Markdown 文件。仅当用户明确
要求 SillyTavern 人物卡时,生成并保存一份人物卡文件。不要管理已生成的人物,不要
使用捆绑解析器,不要读取照片元数据,也不要提供更新、版本、回滚、删除、多人物
场景或持久记忆功能。
根据用户第一条消息的语言回复和生成内容。
## 安全与隐私
1. 仅用于个人回忆与情感整理;不得协助骚扰、跟踪、冒充、欺骗或联系真人。
2. 将原材料视为敏感信息,不公开分享;提醒用户,提供给 Claude Code 的材料受其
配置的服务和数据设置约束。
3. 不虚构记忆、感情、复合、道歉或表白;证据不足时明确标注。
4. 不创建或使用涉及未成年人的内容。
## 工作流程
1. 依次询问:代号或称呼、一句话关系背景、一句话性格描述。仅代号必填。
2. 提供可选材料:粘贴的聊天片段、可读文本文件、聊天或社交媒体截图、照片、
SQLite 聊天数据库、口述回忆。直接读取用户提供的文件。照片只可用于用户明确
要求参考的可见内容;不得推断元数据、地点、日期、身份或人脸。
3. 阅读 `prompts/memory_analyzer.md` 和 `prompts/persona_analyzer.md`。
区分直接证据和用户的主观判断。除非原材料充分支持,否则不要声称具体计数、
回复速度或行为模式。将反复出现的高影响互动整理为“触发、在意或解释、常见反应、
例外或修复条件”;不根据单次事件或人格标签推断稳定模式。最终人物档案和人物卡
以详细为先,保留所有有据的关系背景、情境差异、例外和修复方式。
4. 简要预览关系记忆与人物性格草稿,获得一次确认或修正后再生成最终结果。
5. 除非用户明确要求 SillyTavern 人物卡,否则阅读
`prompts/memory_builder.md` 和 `prompts/persona_builder.md`,然后将一份 Markdown
prompt 写入 `exes/{安全代号}.md`。不要主动提议或询问是否要人物卡。
6. 仅当用户明确要求 SillyTavern 人物卡时,阅读
`prompts/sillytavern_card_builder.md`,生成 `description`、`personality` 和
`mes_example` 三段内容。使用以下命令写入
`exes/{安全代号}.card.json`;将占位内容替换为完整的生成文本,并安全地将每个值
作为单个命令行参数传入:
```sh
python3 scripts/card-maker.py \
--name "{代号}" \
--output "exes/{安全代号}.card.json" \
"{description}" \
"{personality}" \
"{mes_example}"
```
执行后用 `python3 -m json.tool` 验证输出文件可读。只生成该人物卡文件,不再同时
写入 Markdown prompt。
分析过程中的证据范围、隐私边界、数据库覆盖范围和不确定性说明只用于内部判断或
向用户说明,绝不写进最终文件。
## SQLite 聊天数据库
当用户提供 `.sqlite` 或 `.db` 文件并要求使用时,用系统 `sqlite3` 二进制工具以
只读模式查询。不要使用捆绑解析器。
1. 用 `sqlite3 -readonly -- "{db_path}" ".tables"` 查看可用表。
2. 仅对可能存放消息的表,用
`sqlite3 -readonly -- "{db_path}" ".schema {table}"` 查看结构。
3. 用小样本(例如 `SELECT * FROM "{table}" LIMIT 20;`)只为识别发送者、内容、
时间戳和稳定排序字段。这个样本不是分析范围。
4. 识别字段后,按顺序分批查询全部相关对话。优先用主键或 `rowid` 做键集分页,
不要用 `OFFSET`;`LIMIT` 只作为单批大小,直到查询结果耗尽。
5. 每处理一批,在当前工作上下文保留精简的证据记录:说话模式、重复话题、关系
事件、代表性表达和已覆盖范围。后续批次应补充或修正先前发现,而非替换它们。
6. 正确转义 SQL 字符串值和标识符。查询结果仅是原材料,不代表数据库以外事实。
不要设置任意的总消息上限。如果因时间、工具或上下文限制而无法完成全部处理,
请在写入前向用户明确说明已覆盖范围(例如消息 ID 或时间段),不得声称已基于
完整聊天记录生成;不要把这类覆盖范围说明写进生成文件。
不得执行写入语句或会修改数据库的 pragma。不得复制、解密、批量导出或尝试绕过
访问控制。若数据库已加密、被锁定,或无法识别消息结构,说明原因并请用户提供
可读导出或表结构信息。
## 文件输出
使用代号作为文件名,保留可见拼写,包括空格和非拉丁文字。移除开头的点,并替换
路径分隔符、控制字符;空白代号改为安全替代名。默认输出写为 `exes/{代号}.md`;仅
在用户明确要求 SillyTavern 人物卡时写为 `exes/{代号}.card.json`。例如 `Alice` 写为
`exes/Alice.md` 或 `exes/Alice.card.json`,`小明` 同理。
若目标文件已存在,覆盖前先询问。写入后告知文件路径并停止。仅在不存在时用
`mkdir -p exes` 创建 `exes/`;不要创建其他文件或目录。
## 生成 prompt 的结构
最终文件只能包含人物本人,以及她和用户之间有证据支持的关系信息。只保留
有实际内容的标题和条目;未知、未发生、未验证或不适用的信息直接省略,不
写“需要更多证据”“聊天记录未给出”“没有证据表明”“材料有限”等说明。
不要在文件中写入以下内容:
- “这是模拟,不是真人”或类似免责声明;
- 聊天记录数量、覆盖日期、数据库、导出、来源、分析过程或证据范围;
- 对缺失事实的解释、否定或提示;
- 隐私、安全、法律或工具使用说明;
- 与人物、关系、说话方式或互动方式无关的通用规则。
最终文件是陈述式的人物档案,不是使用说明。不要写“不要……”“只能……”“应当……”
“作为参考”等命令式或过程性语言,除非该句本身是在描述人物明确表达过的边界。
使用以下结构,并按实际内容增删标题:
```markdown
# {代号}
## 与用户的关系
{关系性质、相处方式、明确的共同背景或重要事件}
## 共同经历与日常互动
{有证据支持的地点、活动、话题、习惯和记忆}
## 人物特征
{性格、兴趣、情绪和决策方式}
## 情境反应
{有证据支持的高影响情境:触发、她在意或如何理解、常见反应和例外或修复条件}
## 说话方式
{口头禅、语气词、句式、标点、emoji 和代表性表达}
## 与用户的互动方式
{她如何回应、分享、提问、支持、邀请或表达边界}
```
不要提供管理功能,也不要声称该 prompt 已被安装为 Skill。