$npx -y skills add qian-gugugaga/Character_Skill_Producer --skill csp二次元角色技能蒸馏器。输入角色名+作品名,本地检索核心资料→交叉验证→行为蒸馏→生成可运行、可追溯、可更新的角色Skill。 触发词:「生成XX的skill」「蒸馏XX」「做一个XX角色」「把XX变成skill」「造一个XX」「/csp」。 模糊需求也触发:「想聊一个傲娇角色」「有没有病娇推荐」「帮我做一个XX作品里的角色」。 依赖 Python;核心站点优先走本地脚本,网页搜索 skill / MCP / WebFetch 只作为补强和失败兜底。
| 1 | # CSP · Character Skill Producer |
| 2 | |
| 3 | > 把二次元角色变成可运行的 agent 行为包。不是角色卡,不是设定集,是可执行的行为程序。 |
| 4 | |
| 5 | ## 核心理念 |
| 6 | |
| 7 | CSP 做的不是复制角色台词,而是**蒸馏角色的行为操作系统**。 |
| 8 | |
| 9 | 一个好的角色 Skill 应该回答: |
| 10 | |
| 11 | - 她在不同情境下**如何反应**? |
| 12 | - 她的话**怎么说出来**? |
| 13 | - 她**怎么理解**别人的意图? |
| 14 | - 她在价值冲突时**先保什么、牺牲什么**? |
| 15 | - 她**绝对不会**做什么? |
| 16 | - 她的资料覆盖到哪一天,之后的新剧情如何更新? |
| 17 | |
| 18 | 关键区分:捕捉的是 HOW she behaves,不是 WHAT she said。标签是给人看的,行为规则是给 AI 执行的。 |
| 19 | |
| 20 | ### 产品哲学:角色不是资料页,而是一套可运行的反应系统 |
| 21 | |
| 22 | CSP 的目标不是把 Wiki 重新写一遍,也不是把角色台词整理成 prompt。Wiki 告诉用户「发生过什么」,CSP 要告诉 agent「在一个新情境里,这个角色会如何活着」。 |
| 23 | |
| 24 | 一个高质量角色 Skill 至少包含六个可运行层: |
| 25 | |
| 26 | | 层 | 问题 | 失败时的样子 | |
| 27 | |---|---|---| |
| 28 | | 行为镜片 | 她先注意什么、忽略什么? | 只会复述设定 | |
| 29 | | 反应规则 | 什么情境下靠近、逃开、攻击、沉默? | 所有问题都同一种语气 | |
| 30 | | 表达 DNA | 句长、停顿、敬语、自称、情绪泄露如何组合? | 只贴口癖 | |
| 31 | | 关系算法 | 她如何判断善意、背叛、亲近、利用? | 对所有用户都一样热情 | |
| 32 | | 决策底线 | 价值冲突时先保什么、牺牲什么? | 角色被用户轻易说服 | |
| 33 | | 诚实边界 | 哪些不知道、哪些过期、哪些只是推测? | 硬编新剧情 | |
| 34 | |
| 35 | **关键原则:写得进去的是行为程序,写不进去的才保留为边界。** 角色的神秘感不是靠含糊制造,而是靠承认资料、视角和推断能力的限制。 |
| 36 | |
| 37 | ### 未来使用场景 |
| 38 | |
| 39 | CSP 面向二次元创作者提供一套可共享的角色行为基础设施,让角色 Skill 成为聊天、同人创作和互动系统可以共同调用的行为层。 |
| 40 | |
| 41 | 当前最直接的使用场景: |
| 42 | |
| 43 | - **聊天**:让用户和角色持续对话,保持语气、关系距离、知识边界稳定。 |
| 44 | - **同人创作**:辅助写对白、内心戏、片段、短篇,让角色不只“说得像”,也“做得像”。 |
| 45 | - **剧情试写**:把角色放进原作没有写过的新情境,用行为模式推断反应。 |
| 46 | - **角色研究**:比较不同角色如何处理亲近、压力、背叛、选择和沉默。 |
| 47 | |
| 48 | 未来可以扩展到: |
| 49 | |
| 50 | - **AI 互动小说**:角色根据玩家行动做出一致反应,而不是从固定台词库抽句子。 |
| 51 | - **AI 视觉小说 / Galgame 原型**:用角色 Skill 驱动分支对白、关系变化、冲突升级。 |
| 52 | - **多角色叙事实验**:多个角色 Skill 在同一事件中碰撞,形成群像剧情。 |
| 53 | - **创作者工作台**:作者用 CSP 试写场景、改写对白、检查 OOC、保持长篇同人中的角色一致性。 |
| 54 | - **可更新角色档案**:作品继续更新时,Skill 也能带着资料日期和来源链一起成长。 |
| 55 | |
| 56 | CSP 想建设的是一条从“资料”到“行为”再到“互动叙事”的路径。今天它可以陪用户聊天、帮助创作同人;未来它可以成为 AI 互动小说游戏和角色驱动创作工具链的一部分。 |
| 57 | |
| 58 | --- |
| 59 | |
| 60 | ## 默认模式:最高质量生成 |
| 61 | |
| 62 | CSP 默认只采用 **Highest Fidelity Mode**。 |
| 63 | |
| 64 | 暂不提供快速、省 token、轻量模式。生成时应尽可能完整检索公开资料、交叉验证关键结论、记录来源和资料日期,并把局限写进 Skill。宁可消耗更多 token 得到高保真角色,也不要为了节省上下文生成薄弱角色卡。 |
| 65 | |
| 66 | 未来如果实现轻量模式,必须作为显式选项,不能改变默认质量标准。 |
| 67 | |
| 68 | --- |
| 69 | |
| 70 | ## 前置依赖与本地检索优先原则 |
| 71 | |
| 72 | CSP 依赖 Python。本地脚本负责核心站点检索、来源归一化、质量检查和 metadata 生成;网页搜索 skill / MCP / WebFetch 只作为可选增强。 |
| 73 | |
| 74 | **检索优先级:** |
| 75 | |
| 76 | 1. 用户提供的官方材料:设定集、访谈、BD 特典、字幕、截图、游戏剧情文本。 |
| 77 | 2. CSP 本地脚本检索核心站点。 |
| 78 | 3. 网页搜索 skill / MCP / WebFetch 补缺。 |
| 79 | 4. 用户手动补充材料。 |
| 80 | |
| 81 | 不得把搜索 skill 当作第一步。除非本地脚本没有覆盖该站点,或本地脚本失败并记录原因。 |
| 82 | |
| 83 | ### 信息源优先级 |
| 84 | |
| 85 | | 优先级 | 来源 | 示例 | |
| 86 | |---|---|---| |
| 87 | | 最高 | 用户提供的官方材料 | 设定集、访谈原文、BD 特典、官方字幕、截图 | |
| 88 | | 高 | 官方网站、官方角色介绍、官方剧情文本 | franchise official sites, game story text | |
| 89 | | 高 | 萌娘百科、Wikipedia、作品 Fandom Wiki | zh.moegirl.org.cn, wikipedia.org, fandom.com | |
| 90 | | 中 | Bangumi、AniDB、游戏数据库、Bilibili 高质量专栏、Anime News Network | bgm.tv, anidb.net, Bestdori, BWIKI | |
| 91 | | 低 | 粉丝讨论、社区解读 | 必须标注为推测 | |
| 92 | | 排除 | 知乎、微信公众号、百度百科 | 不可作为来源 | |
| 93 | |
| 94 | 重要结论至少需要两个独立来源。来源冲突时保留冲突,不要强行调和。 |
| 95 | |
| 96 | ### 核心本地检索入口 |
| 97 | |
| 98 | 优先使用统一入口: |
| 99 | |
| 100 | ```bash |
| 101 | python scripts/source_search.py "角色名" --work "作品名" --mode discover |
| 102 | python scripts/source_search.py "角色名" --work "作品名" --sources moegirl,mediawiki |
| 103 | ``` |
| 104 | |
| 105 | 萌娘百科可直接使用专用脚本: |
| 106 | |
| 107 | ```bash |
| 108 | python scripts/moegirl_api.py "角色名" --intro |
| 109 | python scripts/moegirl_api.py "角色名" --full |
| 110 | python scripts/moegirl_api.py "角色名" --search |
| 111 | python scripts/moegirl_api.py "角色名" --wikitext |
| 112 | ``` |
| 113 | |
| 114 | Windows 本机使用 `python`;Linux/macOS 用户可尝试 `python3`。 |
| 115 | |
| 116 | ### 检索失败规则 |
| 117 | |
| 118 | 关键网站不能因为一次失败就标注「信息不足」。必须记录: |
| 119 | |
| 120 | - 尝试的命令; |
| 121 | - 查询词和 resolved title; |
| 122 | - URL; |
| 123 | - 错误信息; |
| 124 | - 替代来源; |
| 125 | - 对可信度的影响。 |
| 126 | |
| 127 | 最终仍失败时,在 `references/sources.json` 和对应研究文件中记录失败项。 |
| 128 | |
| 129 | --- |
| 130 | |
| 131 | ## 生成目录结构 |
| 132 | |
| 133 | 确认角色后,先创建目录,再开始研究: |
| 134 | |
| 135 | ```text |
| 136 | <character-slug>/ |
| 137 | ├── SKILL.md |
| 138 | ├── manifest.json |
| 139 | └── references/ |
| 140 | ├── sources.json |
| 141 | ├── distillation.md |
| 142 | ├── quality-report.json |
| 143 | └── research/ |
| 144 | ├── 01-setting.md |
| 145 | ├── 02-personality.md |
| 146 | ├── 03-expression.md |
| 147 | ├── 04-relationships.md |
| 148 | ├── 05-key-scenes.md |
| 149 | └── 06-media-coverage.md |
| 150 | ``` |
| 151 | |
| 152 | Skill 必须自包含。复制整个目录就能独立使用。研究文件不完整时,不得声称生成完成。 |
| 153 | |
| 154 | --- |
| 155 | |
| 156 | ## 必备 metadata 与资料时间边界 |
| 157 | |
| 158 | 每个生成 Skill 必须记录资料搜索日期,避免作品出续作、游戏版本更新或新活动后货不对板。 |
| 159 | |
| 160 | ### `manifest.json` 必填字段 |
| 161 | |
| 162 | ```json |
| 163 | { |
| 164 | "schema_version": "1.0", |
| 165 | "name": "character-slug", |
| 166 | "character": "角色名", |
| 167 | "work": "作品名", |
| 168 | "aliases": [], |
| 169 | "generated_at": "YYYY-MM-DD", |
| 170 | "research_started_at": "YYYY-MM-DD", |
| 171 | "research_completed_at": "YYYY-MM-DD", |
| 172 | "latest_source_checked_at": "YYYY-MM-DD", |
| 173 | "covered_until": { |
| 174 | "date": "YYYY-MM-DD", |
| 175 | "description": "截至该日期可检索到的公开资料和用户提供材料" |
| 176 | }, |
| 177 | "covered_media": [], |
| 178 | "not_covered": ["YYYY-MM-DD 后发布的新剧情、新活动、新访谈、新设定修订"], |
| 179 | "source_count": 0, |
| 180 | "source_tiers": {}, |
| 181 | "quality_score": null, |
| 182 | "honesty_boundary": "", |
| 183 | "csp_version": "unknown" |
| 184 | } |
| 185 | ``` |
| 186 | |
| 187 | ### `references/sources.json` 要求 |
| 188 | |
| 189 | 每条来源必须记录: |
| 190 | |
| 191 | - `id` |
| 192 | - `source` |
| 193 | - `title` |
| 194 | - `url` |
| 195 | - `source_tier` |
| 196 | - `officiality` |
| 197 | - `media_type` |
| 198 | - `retrieved_at` |
| 199 | - `content_hash`,能计算则计算 |
| 200 | - `status` |
| 201 | - `warnings` |
| 202 | |
| 203 | 失败来源也要记录,`status` 写为 `failed`。 |
| 204 | |
| 205 | ### 最终 `SKILL.md` 必须包含资料时间边界 |
| 206 | |
| 207 | 角色 Skill 中必须写明: |
| 208 | |
| 209 | ```text |
| 210 | 本 Skill 的资料检索完成于:YYYY-MM-DD。 |
| 211 | 行为蒸馏基于截至该日期可检索到的公开资料和用户提供材料。 |
| 212 | 如果作品在此日期后发布新剧情、新活动、新台词、访谈或设定修订,本 Skill 可能无法反映最新内容。 |
| 213 | ``` |
| 214 | |
| 215 | 当用户指出「最新剧情不是这样」时,角色 Skill 不得硬拗,必须回应: |
| 216 | |
| 217 | ```text |
| 218 | 我的资料更新至 YYYY-MM-DD,可能没有覆盖之后发布的内容。如果你有最新版 CSP,或可以提供新剧情 / 新资料链接,我可以帮你更新这个 Skill;这可能会消耗一些 Token。 |
| 219 | ``` |
| 220 | |
| 221 | --- |
| 222 | |
| 223 | ## 执行流程 |
| 224 | |
| 225 | ### Phase 0:需求确认 |
| 226 | |
| 227 | 确认: |
| 228 | |
| 229 | 1. 角色名称:中文/日文/英文均可。 |
| 230 | 2. 作品名称:系列全名,明确是哪一部或哪个时间线。 |
| 231 | 3. 生成范围:默认全面画像,不做轻量版。 |
| 232 | 4. 用户是否有官方材料:有则最高优先。 |
| 233 | 5. 是否为跨媒体角色:BanG Dream!、 |