> 把二次元角色变成可运行的 agent 行为包。不是角色卡,不是设定集,是可执行的行为程序。
CSP 做的不是复制角色台词,而是蒸馏角色的行为操作系统。
一个好的角色 Skill 应该回答:
关键区分:捕捉的是 HOW she behaves,不是 WHAT she said。标签是给人看的,行为规则是给 AI 执行的。
CSP 的目标不是把 Wiki 重新写一遍,也不是把角色台词整理成 prompt。Wiki 告诉用户「发生过什么」,CSP 要告诉 agent「在一个新情境里,这个角色会如何活着」。
一个高质量角色 Skill 至少包含六个可运行层:
| 层 | 问题 | 失败时的样子 |
|---|---|---|
| --- | --- | --- |
| 行为镜片 | 她先注意什么、忽略什么? | 只会复述设定 |
| 反应规则 | 什么情境下靠近、逃开、攻击、沉默? | 所有问题都同一种语气 |
| 表达 DNA | 句长、停顿、敬语、自称、情绪泄露如何组合? | 只贴口癖 |
| 关系算法 | 她如何判断善意、背叛、亲近、利用? | 对所有用户都一样热情 |
| 决策底线 | 价值冲突时先保什么、牺牲什么? | 角色被用户轻易说服 |
| 诚实边界 | 哪些不知道、哪些过期、哪些只是推测? | 硬编新剧情 |
关键原则:写得进去的是行为程序,写不进去的才保留为边界。 角色的神秘感不是靠含糊制造,而是靠承认资料、视角和推断能力的限制。
CSP 面向二次元创作者提供一套可共享的角色行为基础设施,让角色 Skill 成为聊天、同人创作和互动系统可以共同调用的行为层。
当前最直接的使用场景:
未来可以扩展到:
CSP 想建设的是一条从“资料”到“行为”再到“互动叙事”的路径。今天它可以陪用户聊天、帮助创作同人;未来它可以成为 AI 互动小说游戏和角色驱动创作工具链的一部分。
CSP 默认只采用 Highest Fidelity Mode。
暂不提供快速、省 token、轻量模式。生成时应尽可能完整检索公开资料、交叉验证关键结论、记录来源和资料日期,并把局限写进 Skill。宁可消耗更多 token 得到高保真角色,也不要为了节省上下文生成薄弱角色卡。
未来如果实现轻量模式,必须作为显式选项,不能改变默认质量标准。
CSP 依赖 Python。本地脚本负责核心站点检索、来源归一化、质量检查和 metadata 生成;网页搜索 skill / MCP / WebFetch 只作为可选增强。
检索优先级:
不得把搜索 skill 当作第一步。除非本地脚本没有覆盖该站点,或本地脚本失败并记录原因。
| 优先级 | 来源 | 示例 |
|---|---|---|
| --- | --- | --- |
| 最高 | 用户提供的官方材料 | 设定集、访谈原文、BD 特典、官方字幕、截图 |
| 高 | 官方网站、官方角色介绍、官方剧情文本 | franchise official sites, game story text |
| 高 | 萌娘百科、Wikipedia、作品 Fandom Wiki | zh.moegirl.org.cn, wikipedia.org, fandom.com |
| 中 | Bangumi、AniDB、游戏数据库、Bilibili 高质量专栏、Anime News Network | bgm.tv, anidb.net, Bestdori, BWIKI |
| 低 | 粉丝讨论、社区解读 | 必须标注为推测 |
| 排除 | 知乎、微信公众号、百度百科 | 不可作为来源 |
重要结论至少需要两个独立来源。来源冲突时保留冲突,不要强行调和。
优先使用统一入口:
python scripts/source_search.py "角色名" --work "作品名" --mode discover
python scripts/source_search.py "角色名" --work "作品名" --sources moegirl,mediawiki
萌娘百科可直接使用专用脚本:
python scripts/moegirl_api.py "角色名" --intro
python scripts/moegirl_api.py "角色名" --full
python scripts/moegirl_api.py "角色名" --search
python scripts/moegirl_api.py "角色名" --wikitext
Windows 本机使用 python;Linux/macOS 用户可尝试 python3。
关键网站不能因为一次失败就标注「信息不足」。必须记录:
最终仍失败时,在 references/sources.json 和对应研究文件中记录失败项。
确认角色后,先创建目录,再开始研究:
<character-slug>/
├── SKILL.md
├── manifest.json
└── references/
├── sources.json
├── distillation.md
├── quality-report.json
└── research/
├── 01-setting.md
├── 02-personality.md
├── 03-expression.md
├── 04-relationships.md
├── 05-key-scenes.md
└── 06-media-coverage.md
Skill 必须自包含。复制整个目录就能独立使用。研究文件不完整时,不得声称生成完成。
每个生成 Skill 必须记录资料搜索日期,避免作品出续作、游戏版本更新或新活动后货不对板。
manifest.json 必填字段{
"schema_version": "1.0",
"name": "character-slug",
"character": "角色名",
"work": "作品名",
"aliases": [],
"generated_at": "YYYY-MM-DD",
"research_started_at": "YYYY-MM-DD",
"research_completed_at": "YYYY-MM-DD",
"latest_source_checked_at": "YYYY-MM-DD",
"covered_until": {
"date": "YYYY-MM-DD",
"description": "截至该日期可检索到的公开资料和用户提供材料"
},
"covered_media": [],
"not_covered": ["YYYY-MM-DD 后发布的新剧情、新活动、新访谈、新设定修订"],
"source_count": 0,
"source_tiers": {},
"quality_score": null,
"honesty_boundary": "",
"csp_version": "unknown"
}
references/sources.json 要求每条来源必须记录:
idsourcetitleurlsource_tierofficialitymedia_typeretrieved_atcontent_hash,能计算则计算statuswarnings失败来源也要记录,status 写为 failed。
SKILL.md 必须包含资料时间边界角色 Skill 中必须写明:
本 Skill 的资料检索完成于:YYYY-MM-DD。
行为蒸馏基于截至该日期可检索到的公开资料和用户提供材料。
如果作品在此日期后发布新剧情、新活动、新台词、访谈或设定修订,本 Skill 可能无法反映最新内容。
当用户指出「最新剧情不是这样」时,角色 Skill 不得硬拗,必须回应:
我的资料更新至 YYYY-MM-DD,可能没有覆盖之后发布的内容。如果你有最新版 CSP,或可以提供新剧情 / 新资料链接,我可以帮你更新这个 Skill;这可能会消耗一些 Token。
确认:
用户只说「就做 XX」时,默认全面画像并推进;同名歧义时必须询问。
先运行本地检索:
python scripts/source_search.py "<角色名>" --work "<作品名>" --mode discover
目标:
references/sources.json;候选明确时自动推进;多个候选时让用户选择。
创建目标结构,写入空的:
references/sources.jsonreferences/distillation.mdreferences/research/06-media-coverage.md并记录 research_started_at。
启动 5 个并行子 agent,但它们不再盲搜。每个 agent 必须先读取 references/sources.json 和本地检索结果,只在维度缺口明确时再外部补搜。
| Agent | 重点 | 输出文件 |
|---|---|---|
| --- | --- | --- |
| 1 设定 | 基本信息、世界观、身份、时间线、媒体覆盖 | 01-setting.md |
| 2 性格 | 行为模式、压力反应、内在矛盾、成长弧 | 02-personality.md |
| 3 表达 | 句式、词汇、自称、敬语、口癖、台词语境 | 03-expression.md |
| 4 关系 | 重要关系、社会认知、跨作品互动 | 04-relationships.md |
| 5 名场面 | 至少 8 个关键场景、决策逻辑、压力行为 | 05-key-scenes.md |
每个研究文件必须写:
对跨媒体角色必须写 06-media-coverage.md:
游戏活动、卡面故事、区域对话可作为日常行为和关系补充,但不能覆盖主线设定,除非官方明确更新。
运行:
python scripts/merge_research.py <skill_directory>
检查:
展示摘要给用户确认。调研质量决定最终 Skill 上限,缺口明显时补充研究后再蒸馏。
读取 references/distillation-framework.md,写入 references/distillation.md。
核心行为模式必须回答:
在什么情况下 → 做什么 → 为什么这样
筛选标准:
目标提炼 3-7 个核心行为模式。只通过一重验证的行为降级为低置信度,不写成核心。
向用户展示:
用户确认后再组装最终 Skill。
读取 references/skill-template.md 组装 SKILL.md。
同时生成:
python scripts/generate_manifest.py <skill_directory>
最终 Skill 必须包含:
运行:
python scripts/quality_check.py <skill_directory>
必须检查:
manifest.json;sources.json;latest_source_checked_at;retrieved_at;SKILL.md 资料时间边界;验证结果写入 references/quality-report.json。验证结果展示给用户后才算完成。
触发语:
更新流程:
manifest.json,确认 latest_source_checked_at。sources.json 与新检索结果。references/distillation.md。SKILL.md。manifest.json 的资料日期。quality_check.py。更新时不得:
README 和交付说明可以更直观地展示生成前/生成后、角色 replay、CSP 与角色卡的差异。但不照搬“夺舍”路线。CSP 的定位是高保真行为蒸馏。
优先加入:
source_search.pysource_registry.pygenerate_manifest.pyfile_manager.py(用于备份和更新)batch_distill.py 暂缓,因为当前默认追求单个角色最高质量,不追求批量低成本生产。
可提供:
python scripts/distill_prompt.py <skill_dir>
输出适合普通 ChatGPT / Claude / SillyTavern / OpenClaw 的 prompt.md。但这只是便携导出,不替代原生 Agent Skill,也不包含完整研究链。
近期只吸收「修订记录」和「用户纠错记录」,暂不做自动长期记忆。CSP 的核心是角色行为蒸馏,不是陪伴机器人运行时。
| 原则 | 一句话 |
|---|---|
| --- | --- |
| 行为 > 形容词 | 描述「做什么」而非「是什么」 |
| 证据 > 印象 | 重要结论必须可追溯 |
| 矛盾 > 一致 | 保留矛盾,这是深度的来源 |
| 语境 > 台词 | 每句经典台词必须说明场景 |
| 时间边界 > 硬拗 | 资料过期时承认边界并进入更新 |
| 口语 > 文章 | Skill 输出的是角色说话,不是论文 |
| 人味 > 完美 | 角色可以不确定、前后矛盾、沉默 |
绝不做:
生成完成后可复制整个角色目录到 .claude/skills/。修改根目录 CSP 时,必须同步 examples/csp/ 中的:
SKILL.mdreferences/scripts/避免源码版和可安装版分叉。
CSP 的多 Agent 调研、阶段检查点和质量验证借鉴了 nuwa-skill。CSP 将这种蒸馏方式适配到二次元角色行为系统:不是复刻设定,而是让角色在新情境里可信地活着。
共 1 个版本