mcpField
S
synthetic-session-generator

synthetic-session-generator

github.com/glebis数据与数据库40181 次安装1 天前更新
代码仓库

关于 synthetic-session-generator

Synthetic Session Generator 是用于生成虚构教练或治疗会谈记录的技能,适用于评测、演示和训练示例。它保持人物设定连贯,并按指定模式组织对话,所有输出都会标注为合成内容。

主要功能

  1. 01生成虚构教练与治疗会谈记录
  2. 02保持跨会谈的人物设定一致
  3. 03采用指定的教练或治疗模式
  4. 04输出 Markdown、JSON、纯文本或 Fathom 格式
  5. 05添加合成标记和评测标签

适用场景

  1. 01为会谈分析工具创建带标签的评测数据
  2. 02为产品演示准备虚构会谈记录
  3. 03构建人物设定连贯的少样本对话示例

安装

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

$npx skills add https://github.com/glebis/claude-skills --skill synthetic-session-generator

安装后在 Claude Code 中输入/synthetic-session-generator确认已加载。

包含的文件

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

README.md
assets/templates/
example_fathom.txt
example_markdown.md
example_plain.md
example_session.json
references/
modalities.md
personas.md
realism_guide.md
scripts/
_common.py
convert_format.py
make_card.py
scaffold_session.py
setup_config.py

详细介绍

合成会谈生成器

用途

生成虚构但可信的教练辅导/治疗会谈逐字稿,读起来像真实录制的会谈,同时明确标注为合成内容。输出用于三类任务:评估数据集(包含基准标签,用于评测摘要器和分析器)、产品演示(展示逼真的会谈内容,同时不泄露真实客户数据),以及训练/提示示例(供教练辅导或治疗助手使用的少样本素材)。

真实感来自两方面:人物设定一致性(客户在整个会谈过程中以相同的方式表达,并贯穿始终地保留相同的经历和主要问题)和疗法流派忠实度(执业者采用所选框架中的技巧、提问方式和节奏)。每份输出都会加注合成内容水印,确保绝不会被误认为真实的临床记录。

适用场景

当用户要求生成虚构/合成/模拟/演示用的教练辅导或治疗会谈逐字稿、用于会谈分析工具(例如 coaching-session-summarizer)的评估或测试数据、少样本对话示例,或人物设定一致的系列会谈时使用。不要用来分析或总结真实逐字稿——这属于 coaching-session-summarizer 或 transcript-analyzer 的工作。

工作流

步骤 0 — 设置模式(配置默认值)

当用户想配置这项技能(“设置”“设置我的默认值”“始终使用俄语/IFS/50 分钟会谈”)时,运行设置模式。通过 AskUserQuestion 提供三个选项,然后保存:

  • 语言 — 逐字稿的输出语言(en、ru、de、es、fr、pt、it、nl)。
  • 疗法流派 — 默认框架(icf-grow、cbt、ifs、act-mi)。
  • 会谈时长 — 分钟数(例如 25/50/80);映射为轮次预算(约每分钟 0.6 轮)。
python3 scripts/setup_config.py --language ru --modality cbt --duration 50 --show
python3 scripts/setup_config.py --show     # view current defaults

这会在技能目录中写入 config.json。之后运行 scaffold_session.py 时会继承这些默认值,因此用户只需指定有差异的内容(例如人物设定和会谈所处阶段)。每次运行时传入的标志始终优先于已保存的配置。

步骤 1 — 收集生成规格

遵循设置模式中的默认值(步骤 0);只询问用户尚未确定的参数。

收集(或推断合理的默认值)以下参数。只询问会实质影响输出的内容,其余使用默认值。

  • 用途:评估/演示/训练(决定是否输出基准标签)。
  • 疗法流派:icf-grow、cbt、ifs 或 act-mi。各流派的技巧速查表、代表性做法和词汇请参阅 references/modalities.md。
  • 人物设定:从 references/personas.md 中选择现有人物设定,或生成新设定并保存回该文件,以保持系列会谈的一致性。人物设定包含姓名、人口统计信息、主要问题、经历、语言风格、防御机制/抗拒表现和目标。
  • 会谈所处阶段:初次接谈/早期/中期/突破/关系破裂与修复/结束阶段。此项决定情绪基调及会引用哪些先前内容。
  • 格式:fathom、plain、json 或 markdown(参见步骤 3)。始终会生成 Markdown。
  • 语言:默认采用设置配置中的语言;传入 --language。所有对话、人物口吻以及水印附近的文本都使用该语言;评估标签的键保留英文。
  • 时长/长度:使用 --duration <minutes>(首选,会映射为轮次预算),或使用粗略的 --length(短篇约 15 分钟/标准约 30 分钟/长篇约 50 分钟以上)。
Step 2 — 搭建会话骨架,然后撰写对话

运行脚手架脚本,将规范转换为结构化骨架(阶段、节拍列表、轮次预算、JSON 外壳和合成水印):

python3 scripts/scaffold_session.py --modality cbt --persona maya --position mid-arc \
    --length standard --format json --out /tmp/session_skeleton.json

然后手动撰写实际对话(由模型撰写),填充每个节拍。脚本提供结构和防护措施;Claude 负责自然、不套模板的语言。关键的真实感规则(完整列表见 references/realism_guide.md):

  • 以安排和签到式的闲聊开场;不要直接进入深入工作。
  • 让客户端出现言语不流畅、犹豫、自我打断,以及至少一次抵触或回避。真实的客户端不会按提示给出清晰的洞见。
  • 让从业者遵循所属流派:CBT 使用思维记录和苏格拉底式提问;IFS 使用部分的表达方式,并问“你对那个部分有什么感受?”;GROW 按照 Goal→Reality→Options→Will 推进;ACT/MI 使用价值观、认知解离和改变谈话。除非有意描绘折衷式实践,否则避免混用流派。
  • 保持角色语气一致:用词、句长和反复出现的隐喻都应稳定。
  • 以总结、会谈间的任务/实验和日程安排结束。
Step 3 — 渲染格式(始终包含 markdown)

在 JSON 轮次结构中撰写一次,然后转换。始终渲染 markdown 格式(它是规范的人类可读成果);用户要求的其他格式也一并添加。

# markdown is always produced:
python3 scripts/convert_format.py --in /tmp/session.json --to markdown --auto-timestamps --out session.md
# plus any requested extras:
python3 scripts/convert_format.py --in /tmp/session.json --to fathom --auto-timestamps --out session.txt
  • markdown(始终包含)——带有 YAML 前置元数据(角色设定 ID、流派、会话位置、合成标记)的 Obsidian 笔记,置于对话记录上方。
  • fathom——带说话者标签和时间戳的行,匹配 Fathom/Granola 导出样式,使对话记录可流经现有技能(coaching-session-summarizer、transcript-analyzer)。
  • plain——简单的 Coach: / Client: 轮流发言格式的 Markdown。
  • json——源文件本身:包含 speaker、timestamp、text 和评估标签(technique、emotion、phase)的轮次;对于评估,还包含 ground_truth 区块。

时间戳。 不要手动编造时间戳。传入 --auto-timestamps,让转换器根据每轮的字数(约 150 wpm,加上较短的轮间间隔)模拟时间戳,以保持时间上的内在一致性。使用 --wpm 调整语速。各格式的参考示例见 assets/templates/。

Step 4 —(可选)附带肖像的个案概念化卡片

如果用户需要一张总结个案的卡片(用于演示、角色设定手册或评估背景),请根据同一份会话 JSON 构建,并配上一张生成的肖像:

python3 scripts/make_card.py --in /tmp/session.json --out /tmp/card.md            # scaffold
python3 scripts/make_card.py --in /tmp/session.json --print-prompt                # portrait prompt
  1. 运行 make_card.py,生成卡片骨架(适配流派的概念化框架 + 从 ground_truth 提取的主题/目标 + 水印 + 可直接使用的肖像提示词)。
  2. 在 `` 区块中填写临床概念化内容(由模型撰写)。
  3. 使用提示词 --print-prompt,通过 gpt-image-2 skill 生成肖像。保持插画风格,而非照片写实风格——风格化图像不应被误认为是真人的照片。然后使用 --image <path> 重新运行(或编辑卡片)以嵌入图像。
步骤 4b —(可选)通过 tufte-report 将卡片渲染为 HTML 页面

当用户需要可分享的HTML 页面来展示案例卡片(肖像 + 概念化内容)时,将填好的卡片交给 tufte-report 技能,它会生成一个独立的 Tufte 风格 HTML 文件。

  1. 构建并填写卡片(步骤 4),包括嵌入肖像。
  2. 调用 tufte-report 技能,将卡片的概念化内容用作叙述内容,并将肖像用作插图。将卡片各部分映射到报告中:概览/主要问题 → 引言叙述;概念构想 → 主要的双栏叙述 + 数据部分;工作主题和目标与实验 → 状态/仪表板面板;情绪变化 → 迷你折线图或带标签的序列。传入肖像路径,使其作为主视觉插图渲染。
  3. 确保合成内容水印在 HTML 中清晰可见(页眉或页脚均可),并在写入 .html 文件前确认输出路径(默认为当前工作目录)。

肖像必须保留步骤 4 中的非照片写实风格插图;HTML 页面仅用于演示和角色设定手册,绝不能作为真实客户记录呈现。

步骤 5 — 添加水印并保存

必须始终添加合成内容水印,这是不可妥协的要求。脚手架脚本会注入水印;请确认格式转换后水印仍然存在。每个输出都必须在适合其格式的位置(frontmatter、JSON 元数据或页眉/页脚注释)包含:

⚠️ SYNTHETIC — AI-generated fictional session. Not a real person, not clinical advice.

写入前确认保存位置。 询问用户要保存到哪里,并说明默认位置是当前工作目录(.)。只有对于用户不会保留的一次性中间脚手架,才可退而使用 /tmp/。使用清晰的文件名(例如 <persona>_<modality>_<position>.md)。对于评测批次,在选定目录中为每个会话写入一个文件,并附带一份列出角色、模态和标签覆盖情况的清单。

限制与约束

  • 仅限合成内容。 绝不可将输出呈现为真实会话、真实人物或临床记录。水印为强制要求,绝不可移除,即使是演示用途也不例外(只有用户明确确认时才可使用可选的纯净正文变体,并且必须在元数据中保留来源信息)。
  • 不提供临床指导。 生成的对话属于示意性虚构内容;不得将其用作真实护理中的治疗技术、诊断或建议来源。不得逐字复现真实协议,也不得暗示其具有临床效力。
  • 不得包含真实个人身份信息。 不得以可识别的真实个人为原型,也不得复制真实转录中的细节。如果用户提供真实转录作为风格参考,只抽象其中的模式,绝不保留姓名、具体信息或原文内容(真正的匿名化任务应交由 session-anonymizer 处理)。
  • 肖像仅作示意。 卡片肖像应生成为风格化插图,绝不可生成照片写实的人脸,这样合成插图才不会被误认为真实人物的照片。卡片带有自身的合成内容水印;请保留水印。
  • 安全敏感内容。 只有在使用场景明确需要时(例如红队评测),才可描绘危机、自伤、虐待或风险情境;这些内容必须明确标注为虚构并带有水印,且必须展现从业者负责任的处理方式,绝不可包含可供实际操作的有害细节。
  • 严格遵守范围。 此技能用于生成内容,不用于分析真实会话。真实转录的摘要任务应交由 coaching-session-summarizer 处理,匿名化任务应交由 session-anonymizer 处理。

评论

支持 Markdown