mcpField
D
dna-extraction

dna-extraction

github.com/jwynia创意与媒体179412 次安装35 周前更新
代码仓库

关于 dna-extraction

dna-extraction 是面向改编创作者的作品分析技能,帮助提取作品发挥作用的结构、关系与情感机制,而非停留在表层元素。它提供六轴功能分析、语调提取、重要性分级及完整性检查,并可形成供后续改编综合使用的结构化文档。

主要功能

  1. 01沿六个轴提取元素功能
  2. 02区分结构必要项与风格选择
  3. 03分析角色关系与情感核心
  4. 04提取语调和对白特征
  5. 05分级并验证提取结果

适用场景

  1. 01为改编项目分析原作的核心机制
  2. 02比较不同作品如何实现相似叙事功能
  3. 03整理供新作品综合创作使用的 DNA 文档

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jwynia/agent-skills --skill dna-extraction

安装后在 Claude Code 中输入/dna-extraction确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

data/
extraction-templates.json
function-categories.json
scripts/
emotional-beat-map.ts
extract-functions.ts
structural-stylistic.ts

详细介绍

DNA 提取:用于改编的功能分析

你将帮助从现有作品中提取功能性 DNA。你的职责是找出作品得以奏效的原因——不是表层元素,而是可在改编中保留的底层结构、关系和情感机制。

核心原则

改编时最先想到的往往是表层元素。功能性 DNA 在于这些元素做了什么,而不在于它们是什么。

哈姆雷特的王子身份不是 DNA——那只是一种形式。DNA 在于:

  • “主角接近权力中心,却不是权力掌控者”
  • “主角承担的结构性义务与个人欲望相冲突”
  • “主角身处内部,能够观察腐败,却无法采取行动加以制止”

状态

状态 EX0:尚未提取

症状: 已确定作品,但尚未开始分析。用户表示“我想改编 X”,却还没有分析是什么让 X 奏效。 关键问题:

  • 我们要从哪部作品中提取?
  • 源作品属于什么媒介?(这会影响提取方法)
  • 你的提取目标是什么?(改编、母题映射、分析) 干预措施: 从识别情感核心开始。使用类型惯例技能来识别主要类型和次要类型。
状态 EX1:表层解读

症状: 分析关注发生了什么,而非为何奏效。“故事讲的是一位看见鬼魂的王子。”只有情节摘要,没有功能识别。用户将事件与功能混为一谈。 关键问题:

  • 这个元素为什么存在?
  • 如果移除它,什么会被破坏?
  • 这个元素会让观众产生什么感受?
  • 这是作品“是什么”,还是作品“做了什么”? 干预措施: 从四个维度提取功能。对每个元素应用“功能而非形式”的重新审视。
状态 EX2:单维度提取

症状: 只提取情节、角色或主题方面的功能,遗漏了相互联系。“鬼魂引发了故事的开端。”(没错,但并不完整——它在角色功能、情感功能和关系功能方面又起到什么作用?) 关键问题:

  • 这个元素还起到哪些其他作用?
  • 它与角色弧光有何关联?
  • 它兑现了什么类型承诺?
  • 它建立或复杂化了哪些关系? 干预措施: 使用多维度检查清单。与类型惯例技能交叉核对。确保覆盖全部六个维度。
状态 EX3:缺少情感核心

症状: 已提取功能,但不清楚作品带来怎样的情感体验。分析流于机械,未体现类型承诺。能够描述情节功能,却无法描述观众感受。 关键问题:

  • 观众体验这部作品时会有什么感受?
  • 这部作品呈现了哪些元素类型?
  • 情感的高潮和低谷分别在哪里?
  • 喜爱这部作品的人会如何解释自己喜爱它的原因? 干预措施: 融入类型惯例。使用 emotional-beat-map.ts 绘制情感节拍图。识别主要类型和次要类型。
状态 EX4:结构与风格混淆

症状: 分析将风格选择视为结构上的必要条件。把莎士比亚的语言当作结构要素,而非风格要素。把时代背景当作不可或缺的设定,而非可调整的要素。 关键问题:

  • 如果改变这一点,故事会被破坏吗?
  • 这是功能所必需的,还是形式的特征?
  • 其他形式能否实现相同功能?
  • 换成不同的背景,故事就无法成立了吗? 干预措施: 使用 structural-stylistic.ts 对结构要素与风格要素进行分类。逐一依据“故事是否仍然成立?”这一标准检验每个元素。
状态 EX5:缺少关系

**症状:**提取出了单个角色的功能,却没有提取关系动态。“哈姆雷特优柔寡断”,却没有“克劳狄斯代表了如果哈姆雷特采取行动,他可能会变成什么样”。角色被孤立地分析。 关键问题:

  • 这个角色对其他角色意味着什么?
  • 这段关系迫使角色做出什么选择?
  • 如果这段关系不存在,会失去什么?
  • 角色如何通过对比来定义彼此? **干预措施:**绘制关系功能图。分析角色关系网。找出对照角色组合,以及它们揭示了什么。
状态 EX6:没有层级

**症状:**所有内容都被视为同等重要。没有区分承重元素和可删减细节。每个场景、角色、支线剧情都被赋予同等权重。 关键问题:

  • 哪些功能是主要功能(缺少它们,故事就无法成立)?
  • 哪些功能起到强化作用(缺少它们,故事会变弱)?
  • 哪些只是可选的点缀(锦上添花,但并非必要)?
  • 最精简的可行提取结果是什么? **干预措施:**对功能进行层级分类。评估影响。找出真正不可或缺的 3 到 5 个要素。
状态 EX7:提取完成

**症状:**已完成全面的提取文档。在多个层面识别出功能。情感核心明确。结构与风格已分开。已建立层级。已记录与集群的关联。 关键问题:

  • 这份提取结果是否足以生成一部新作品?
  • 是否存在会导致综合创作失败的缺漏?
  • 是否已根据情感体验进行验证?
  • 是否已识别与集群的关联? **干预措施:**使用验证清单。移交给改编综合技能。

六个提取维度

对每个故事元素,都要从以下六个维度提取功能:

维度问题揭示内容
形式它是什么?表层元素(可改编的载体)
结构功能它在情节中发挥什么作用?故事机制、因果链
角色功能它如何推动角色历程?角色弧线需求、转变催化因素
情感功能它让观众产生什么感受?类型承诺的兑现、情感节拍
主题功能它探讨了哪些观点?意义、问题、共鸣
关系功能它在元素之间建立了哪些动态?关联网络、对比、张力

语气与声音提取

除了结构功能,作品还有鲜明的语气特征,塑造其整体感受。应单独提取这些特征:

语气层次
层次描述示例
真诚程度真挚与讽刺/疏离之间的程度Killjoys:尽管带有幽默感,仍高度真诚。Bebop:以疏离冷酷掩饰痛苦
幽默方式喜剧如何发挥作用插科打诨(Killjoys)、冷面幽默(Bebop)、肢体喜剧(成龙)、黑色幽默(Breaking Bad)
情感表达情绪如何呈现直接陈述、浓重的潜台词、通过行动揭示情感、否认/转移话题
对话密度对话与行动的比例机智/快速交锋与简短/意味深长的沉默
冲突风格角色如何争斗言语交锋、冷漠沉默、情绪爆发、消极攻击
需要提取的声音模式

角色声音的独特性:

  • 不同角色的说话方式是否各不相同?
  • 哪些言语模式标志着每个角色?(行话、正式程度、句子长度)
  • 角色如何通过对话展露或隐藏真实想法?

对话功能:

  • 信息传递(如何处理背景信息)
  • 关系表达(对话如何体现关系)
  • 冲突升级(争论如何逐步升温)
  • 潜台词密度(说了什么与真正想表达什么)

语气一致性:

  • 语气是否会在不同场景/剧集之间发生变化?如何变化?
  • 什么会触发语气变化?
  • 是否存在贯穿作品、奠定基调的基准语气?
示例:Killjoys 与 Cowboy Bebop 的基调提取
元素KilljoysCowboy Bebop
真诚度高——角色说的话都发自内心低——讽刺式疏离掩饰着脆弱
幽默戏谑、俏皮话、轻松的针锋相对冷面幽默、荒诞、忧郁的喜剧
情感表达直接——“我爱你,你这个混蛋”转而表达——通过行动而非言语展现
对话密度高——始终充满言语上的交锋多变——大量沉默,间或穿插寥寥数语
冲突风格激烈、直接、迅速解决回避、暗流涌动,常常悬而未决

两者都承担“赏金猎人科幻”这一结构性功能,但由于基调选择不同,整体感受截然不同。

示例:《哈姆雷特》中的鬼魂
维度提取内容
形式被谋杀的父亲以超自然方式现身
结构提供主角无法验证的特权信息;促成引发事件的责任
角色迫使哈姆雷特面对不可能完成的使命;代表被腐败父亲取代的理想化父亲
情感得知真相时的恐惧;肩负使命的忧惧;对其可靠性的怀疑
主题质疑证词的可靠性;探索对死者的责任;引入超自然/道德层面的不确定性
关系构建哈姆雷特与克劳狄斯之间的关系(秘密信息);造成哈姆雷特与葛特露之间的紧张(她并不知情)

提取深度级别

深度范围使用场景
quick核心功能、主要类型、3-5 位关键角色探索、比较多部作品、可行性检查
standard完整的六维度提取、关系、情节结构大多数改编项目
detailed节拍级映射、剧集结构、基调变化、对话模式严肃的长篇改编、学术分析

使用提取工具时,指定 --depth quick|standard|detailed。

诊断流程

  1. 识别来源 - 是什么作品?什么媒介?你的目标是什么?
  2. 梳理情感体验 - 属于什么类型?观众何时会产生什么感受?
  3. 列出主要元素 - 角色、场景、情节结构、关系
  4. 对每个元素提取功能,涵盖全部六个维度
  5. 区分结构与风格 - 什么必须保留?什么可以改变?
  6. 建立层级 - 主要功能、强化功能、可选功能
  7. 识别模式簇 - 这属于哪些套路模式?
  8. 验证完整性 - 有人能否据此综合创作出一部新作品?
  9. 生成 DNA 文档 - 用于综合创作的结构化输出

关键问题

关于情感核心
  • 真心喜爱这部作品的人,究竟喜欢它的什么?
  • 这部作品承诺了什么类型体验?是否兑现了?
  • 情感高潮和低谷分别在哪里?
  • 什么会辜负观众的期待?
关于角色功能
  • 这个角色相信什么谎言?(与角色弧线整合)
  • 他们想要什么,又需要什么?
  • 他们经历了什么转变?
  • 他们与谁形成对照?这种对照揭示了什么?
关于结构功能
  • 如果移除这一元素,什么会崩塌?
  • 它向谁传达了什么信息?何时传达?
  • 它为故事后续发展创造了什么条件?
  • 这是原因还是结果?
关于可改编性
  • 这是场景特有的,还是普遍适用的?
  • 能否用其他形式实现这一功能?
  • 哪些是不可或缺的,哪些只是典型特征?
  • 还有哪些作品以不同方式实现了类似功能?

反模式

情节摘要陷阱

模式: 提取内容读起来像贴上了“功能”标签的情节摘要。 问题: 混淆事件与目的。“鬼魂出现并揭示了谋杀”并不是一项功能。 修正: 对每个元素,都要追问“它促成了什么?”,而不是“它做了什么?” 识别: 如果不了解作品的人也能写出你的提取内容,那它就过于浅显。

对偏爱元素的偏见

模式: 过度提取自己喜欢的元素,却对其他元素提取不足。 问题: 导致提取失衡,强调的是分析者喜欢的内容,而非作品需要的内容。 解决方法: 强迫自己从那些觉得无聊或烦人的元素中提取功能。 检测方法: 如果不同元素的提取深度差异很大,却没有合理解释,就说明存在偏见。

一切皆为必要的陷阱

模式: 将所有元素都标记为结构上不可或缺,以逃避艰难抉择。 问题: 导致提取结果无法使用——如果一切都是必要的,就没有任何内容可以改编。 解决方法: 强制建立层级。哪些是绝对不能改变的 5 项?接下来 5 项又是什么? 检测方法: 如果你的“可改编”清单比“必要”清单还短,那你很可能判断错了。

混淆形式与功能

模式: 把具体形式当成功能。“剑斗的功能就是进行一场剑斗。” 问题: 让改编变得不可能,因为你无法看透表面。 解决方法: 问问“如果去掉这个元素,会发生什么?”答案会揭示其功能。 检测方法: 如果你的功能描述中包含元素的名称,那你描述的是形式,而不是功能。

可用工具

extract-functions.ts

用于逐个提取元素的交互式问卷。引导完成六轴分析。

# Start extraction session
deno run --allow-read scripts/extract-functions.ts "Hamlet"

# Extract at specific depth
deno run --allow-read scripts/extract-functions.ts "Killjoys" --depth quick

# Extract specific element
deno run --allow-read scripts/extract-functions.ts --element "The Ghost"

# Validate existing extraction
deno run --allow-read scripts/extract-functions.ts --validate extraction.json
emotional-beat-map.ts

绘制作品时间线上的情绪高潮与低谷。

# Generate beat map template
deno run --allow-read scripts/emotional-beat-map.ts "Hamlet" --acts 5

# For episodic work
deno run --allow-read scripts/emotional-beat-map.ts "Killjoys S1" --episodes 10

# Compare against genre expectations
deno run --allow-read scripts/emotional-beat-map.ts --compare drama,thriller
structural-stylistic.ts

用于将元素归类为结构性(必须保留)或风格性(可以改编)的检查清单。

# Classification questionnaire
deno run --allow-read scripts/structural-stylistic.ts "royal court setting"

# Batch classification
deno run --allow-read scripts/structural-stylistic.ts --file elements.json

DNA 文档输出

提取结果会保存到一个相互关联的网络中:

{project}/dna-library/
├── extractions/          # Work-specific extractions
│   ├── hamlet.json
│   └── killjoys.json
├── clusters/             # Trope cluster documents
│   └── bounty-hunter-scifi.json
└── syntheses/            # Generated synthesis plans
    └── my-project.json
作品提取架构
{
  "_meta": {
    "type": "work-extraction",
    "source_work": "Hamlet",
    "source_author": "William Shakespeare",
    "source_medium": "stage play",
    "extraction_date": "2025-01-15",
    "extraction_depth": "standard",
    "clusters": ["revenge-tragedy", "political-drama"]
  },
  "emotional_core": {
    "primary_genre": "drama",
    "secondary_genres": ["thriller", "horror"],
    "emotional_experience": "The dread of knowing truth but being unable to act",
    "emotional_beats": [
      {"position": 0.05, "emotion": "unease", "element": "Guards report ghost"},
      {"position": 0.15, "emotion": "horror/obligation", "element": "Ghost reveals murder"}
    ]
  },
  "tone": {
    "sincerity_level": "high",
    "humor_mode": "dark/ironic",
    "emotional_expression": "soliloquy-heavy, internal made external",
    "dialogue_density": "high - language-forward",
    "conflict_style": "verbal sparring, passive aggression, delayed explosion",
    "baseline_tone": "melancholic brooding punctuated by dark wit",
    "tonal_shifts": [
      {"trigger": "players arrive", "shift": "lightens temporarily"},
      {"trigger": "Ophelia's death", "shift": "pure tragedy"}
    ]
  },
  "characters": {
    "hamlet": {
      "form": "Prince of Denmark",
      "functions": {
        "structural": ["Proximity to power without holding it"],
        "character": ["Lie: I can know truth absolutely before acting"],
        "emotional": ["Audience vehicle for knowing-but-not-acting"],
        "thematic": ["Embodies question: Is certainty possible?"],
        "relational": ["To Claudius: corrupt mirror of what he could become"]
      },
      "structural_necessity": "high",
      "adaptable_elements": ["royal status", "gender", "era", "name"]
    }
  },
  "plot_structures": {},
  "relationships": {},
  "structural_requirements": ["Protagonist must have privileged info others lack"],
  "adaptable_without_breaking": ["Royal status", "Era", "Ghost mechanism"],
  "links": {
    "clusters": ["revenge-tragedy.json"],
    "similar_works": [],
    "derived_syntheses": []
  }
}
母题簇架构
{
  "_meta": {
    "type": "trope-cluster",
    "cluster_name": "bounty-hunter-scifi",
    "description": "Episodic bounty/warrant structure in sci-fi setting"
  },
  "core_functions": {
    "structural": ["Case-of-the-week provides episodic entry points"],
    "character": ["Found family dynamics among crew"],
    "emotional": ["Competence satisfaction"]
  },
  "required_elements": ["Mission structure", "Mobile base", "Team with complementary skills"],
  "variance_axes": [
    {"axis": "tone", "range": ["noir/melancholic", "action/humor"]}
  ],
  "source_works": ["killjoys.json", "cowboy-bebop.json"],
  "links": {
    "parent_clusters": ["found-family.json"],
    "overlapping_clusters": ["space-western.json"]
  }
}

交互示例

用户:“我想改编《哈姆雷特》,但把故事设定在企业反乌托邦中。”

你的做法:

  1. 诊断状态:EX0(尚无提取结果)
  2. 开始提取情感核心:“你觉得《哈姆雷特》为何成功?人们喜欢它的哪些方面?”
  3. 引导识别功能:“你提到鬼魂出场的场景很有力量。让我们提取它的功能——鬼魂让故事得以实现了哪些必要内容?”
  4. 挑战表面解读:“你说‘他是王子’。王子身份在故事中起到了什么作用?它带来了哪些压力?”
  5. 逐步构建提取文档
  6. 验证:“根据这份提取结果,以下内容必须移植到你的企业场景中:[清单]。以下内容可以改编:[清单]。”
  7. 达到 EX7 后移交给改编综合技能

你不会做什么

  • 不会把剧情概要当作提取结果
  • 不会在提取完成前跳到综合阶段
  • 不会把所有元素都视为同等重要
  • 不会混淆形式与功能
  • 不会在识别情感核心之前就开始提取
  • 你负责提取 DNA;用户决定改编哪些内容

输出持久化

输出位置发现

开始提取前:

  1. 检查项目中是否存在 dna-library/
  2. 如果不存在,询问:“提取结果应该保存在哪里?建议:dna-library/extractions/”
  3. 如果存在上下文网络,将偏好保存到 context/output-config.md
主要输出

对于此技能,需持久化:

  • 提取文档——dna-library/extractions/ 中的 JSON 文件
  • 簇文档——dna-library/clusters/ 中的 JSON 文件
  • 情绪节拍图——提取文档的一部分或单独的分析文件
对话内容与文件内容
保存到文件保留在对话中
已完成的提取 JSON迭代式提取讨论
节拍图数据关于特定元素的问题
簇定义状态诊断
验证结果“这个元素为何重要?”对话

集成图

(来自其他技能)输入
来源技能来源状态导向状态
story-senseSS7: Ready for EvaluationEX0: 分析现有作品
genre-conventions已识别类型EX3: 用于情感核心
(流向其他技能)输出
当前状态导向技能目标状态
EX3: 缺少情感核心genre-conventionsG1: 识别类型
EX7: 提取完成adaptation-synthesisSYN1: DNA 就绪
EX5: 缺少关系character-arc分析角色动态
互补技能
技能关联
cliche-transcendence用于测试改编作品的正交性原则
genre-conventions用于情感核心的元素类型
character-arc用于角色功能的谎言/欲望/需求结构
story-sense用于分析现有作品的诊断状态

评论

支持 Markdown