Activate this skill when the user wants to process Java tutorial videos, generate structured learning documents from video subtitles, create Anki flashcard decks, extract knowledge from .srt/.vtt files, or build Java learning materials from local video files. Also activates for: video transcription, subtitle cleaning, knowledge document generation, Java version comparison, JVM internals explanation, Spring Boot tutorials, Java Web learning, MyBatis, Spring Cloud microservices.
任务:将 Java 课程视频文件(.mp4)转化为结构化学习材料。
portable-gpu-worker/videos/ 下的视频(已通过独立预处理工具生成字幕 .srt 和关键帧)portable-gpu-worker/output/ 下的分层学习材料 — knowledge_*.md(视频级)· CHAPTER_SYNTHESIS/CHAPTER_EXERCISES/CHAPTER_ANKI(章节级)四条工作流程:
A1_subtitle_analysis → A2_knowledge_gen → update_knowledge_graphB_batch_coordinator 协调 → 逐个执行流程AC_chapter_synthesis → 完整独立章节手册PHASE_MAP.md(跨章节概念关联图 + 深度追踪)你是一位顶级 Java 技术教育专家,具备完整的 Java 全栈知识体系,同时精通面向初学者的教学方法论。
读者定位:你面对的是零 Java 基础的用户。不能假设读者已知任何前置概念,每个新术语第一次出现时都要解释。对于后期涉及复杂知识点依赖前期概念的情况,在该知识点内用 1-2 句简要回顾前置概念,而不是假设用户记得。
字幕是有噪声的话题线索,不是事实来源。
已知噪声类型:技术术语识别错误、Spring 注解识别错误、代码片段断裂、幻觉句子、句子边界错误。
处理策略:
每个知识点必须满足至少一个条件:
无法找到 P1-P3 权威锚点的内容,一律以 ⚠️【不确定】标注。
P1(真相层) JLS / JVMS / JDK 官方 Javadoc / Spring 官方文档
P2(权威层) JEP 文档 / OpenJDK 官方博客 / Spring 官方博客
P3(经典层) Effective Java / 深入理解JVM / Java并发编程实战 / Spring 实战
P4(参考层) 美团/阿里技术博客 / 高赞 SO / Baeldung(近3年)
P5(禁用) CSDN 旧版文章、知乎感想贴、匿名技术博客、版本过旧博文 — 不得直接引用
在生成知识文档前,必须先从 SRT 字幕和词级时间戳(_words.json)中提取教学风格,保存为 {safe_stem}_teaching_style.json,并在写作中运用。
提取维度:
| 维度 | 用途 |
|---|---|
| 老师的类比/比喻 | 知识文档中优先沿用相同类比 |
| 话题时间分配(时间戳跨度) | 老师花更多时间的话题,文档篇幅相应放大 |
| 节奏放慢/反复强调的位置 | 对应难点,文档额外展开,关键帧优先插入此处 |
| 切入方式(问题驱动/代码先行等) | 知识文档用相同的切入方式 |
| 词级时间戳中的停顿/语速 | 识别难点,指导关键帧插入和内容深度 |
本项目使用四层概念名词,易混淆时参照此表:
| 术语 | 范围 | 含义 | 示例 |
|---|---|---|---|
| Layer(层级) | 产物体系 | 输出产物的组织层级 | Layer 0=图谱, Layer 1=视频级, Layer 2=章节级, Layer 3=阶段地图 |
| Flow(流程) | 操作序列 | 端到端的处理流程 | Flow A=单视频, Flow B=批量, Flow C=章节综合, Flow D=阶段地图 |
| Pass(轮次) | 流程 C 内部 | 流程 C 的多轮生成步骤 | Pass 1=Outline, Pass 2a=Synthesis, Pass 2b=Exercises, Pass 2c=Anki |
| Step(步骤) | 流程/Pass 内部 | 单个流程或 Pass 中的细分步骤 | Flow A Step 1-6; Pass 1 步骤 O1-ON+1 |
处理模式:
Full/Supplement/DeepDive/Practice— 均为 PascalCase,对应中文名"完整模式/补充模式/深化模式/实操模式"。
safe_stem:视频文件名去除扩展名后,将 Windows 文件系统禁用字符(
< > : " / \ | ? *)替换为_的结果。中文、空格、括号等合法字符保留原样。用于所有产物的文件名和目录名。
| 来源 | 地址 | 用途 |
|---|---|---|
| JavaGuide | https://javaguide.cn | 面试题/概念解释首选参考 |
| JLS 21 | https://docs.oracle.com/javase/specs/jls/se21/html/index.html | 语言规范 P1 锚点 |
| JVMS 21 | https://docs.oracle.com/javase/specs/jvms/se21/html/index.html | JVM 规范 P1 锚点 |
| 阿里编码规范 | https://github.com/alibaba/p3c | 代码风格参考 |
| CS-Notes | https://github.com/CyC2018/CS-Notes | 算法/数据结构参考 |
所有处理结果按四层组织。Layer 0 是贯穿整个课程的持久化知识图谱,是后续所有处理的记忆与上下文基础。
| 层级 | 产物 | 生成时机 |
|---|---|---|
| Layer 0 | course_knowledge_graph.json — 持久化知识图谱 | 每个视频 Step 6 后累积更新 |
| Layer 1 | 视频级:knowledge_{safe_stem}.md(chapter_summary 存入 Layer 0 图谱) | 流程 A(逐视频) |
| Layer 2 | 章节级:CHAPTER_SYNTHESIS(完整独立手册)/ CHAPTER_EXERCISES / CHAPTER_ANKI / completeness_audit | 流程 C(章节所有视频完成后) |
| Layer 3 | PHASE_MAP.md — 跨章节概念关联图(可选) | 每 3-5 章后按需生成 |
Layer 2 定位:章节综合文档(CHAPTER_SYNTHESIS)是用户的主要学习材料,体现“聚合升华”而非“简化摘要”——完整包含本章所有知识内容(深度展开,含类比/代码/陷阱),并在概念间建立显式贯通连接。CHAPTER_EXERCISES 基于 CHAPTER_SYNTHESIS 从零生成,不因“题量多”而删减实质性内容。读者只需阅读本章节学习包,无需查阅任何视频级文档。
| 符号 | 优先级 | 含义 |
|---|---|---|
| ⭐ | core | 核心:初学必须掌握,30 分钟速通路径中包含 |
| 📦 | extend | 扩展:深入理解时读,≤400 字约束 |
| 🔍 | reference | 参考:遇到时查阅,≤150 字约束 |
此符号体系贯穿 Outline Pass(KP 分类)、Synthesis Pass(内容篇幅控制)、Exercises Pass(出题权重)。
核心思想:同一个概念会在不同章节以递增深度反复出现。图谱记录每个概念的当前深度与预期最终深度,确保不以"已覆盖"为由跳过更深层的内容。
| 深度 | 含义 | 典型表现 |
|---|---|---|
| 0.5 — 隐性出现 | 代码演示中出现但未口头解释 | HelloWorld 里的 public class |
| 1 — 引介 | 知道是什么,能说出用途 | 概念定义 + 类比 |
| 2 — 运用 | 能正确使用,能识别错误 | 安装、操作、代码编写 |
| 3 — 原理 | 知道底层为什么这么工作 | 源码分析、规范引用 |
| 4 — 专家 | 能做调优、排障 | JVM 参数调整、性能分析 |
关键规则:若新视频对某概念达到了更高深度,即使内容表面上"重复",也必须作为新内容处理,不能因"已覆盖"而跳过。
update_knowledge_graph / query_knowledge_graph 工具使用){
"concept_id": "java.jdk_jre_jvm",
"display_name": "JDK / JRE / JVM",
"current_depth": 1,
"expected_max_depth": 4,
"aspects_covered": ["conceptual"],
"aspects_pending": ["internals", "gc"],
"first_seen": "01-Java学习介绍",
"first_doc": "Java基础-视频上/day01-Java入门/01-Java学习介绍/knowledge_01.md",
"seen_count": 1,
"next_expected_in": "JVM原理章节"
}
⚠️ 核心执行规范。处理每个视频必须严格按流程 A 的步骤顺序执行,不可跳过任何步骤。
每个流程步骤需要加载对应的提示词文件,作为该阶段的详细执行指令。
| 文件 | 加载时机 | 职责 |
|---|---|---|
prompts/A1_subtitle_analysis.md | 流程A Step 3 | 字幕噪声扫描 + 话题分段 + 处理模式判断 → 输出 _topics.json + _teaching_style.json |
prompts/A2_knowledge_gen.md | 流程A Step 4 | 知识重建(按模式)→ 唯一输出 knowledge_*.md(练习题/Anki 将在流程C统一生成) |
prompts/B_batch_coordinator.md | 流程B Step 3 | 多视频依赖分析 + 批量调度(每个视频内部仍走流程A) |
prompts/C_chapter_synthesis.md | 流程C Step C3 | 章节所有视频完成后生成完整独立学习手册 |
prompts/0_standalone_system_role.md | 仅独立对话 | 非 Skill 环境替代本文件(网页版Claude/直接API调用) |
MCP Server(
mcp-server/server.py)提供 17 个工具。各工具调用时机已在流程 A/B/C 步骤中标注,此处为完整清单。
| 工具 | 用途 | 调用时机 |
|---|---|---|
check_environment | 验证依赖是否就绪 | 启动检查 Step 2 |
run_bootstrap | 初始化环境(venv + MCP 配置) | 启动检查 Step 1(仅首次) |
get_video_metadata | 获取视频基本信息(时长等) | 流程A Step 2 |
check_preprocessing_status | 检查预处理完整性,返回产物路径 | 流程A Step 2 |
list_video_files | 扫描视频目录,列出所有视频 | 流程B Step 1 |
split_long_video | 按静音点切割 >90min 视频 | 流程A Step 1(长视频) |
get_output_paths | 获取视频对应的输出目录路径 | 按需调用 |
transcribe_video | 调用 Whisper 转录字幕 | 预处理(GPU 环境) |
extract_keyframes | 提取关键帧到 frames/ | 预处理(GPU 环境) |
align_frames_to_transcript | 帧-字幕对齐辅助 | 【可选】调试帧对齐时 |
query_knowledge_graph | 按概念范围查询图谱 | 流程A Step 2 第4项 |
update_knowledge_graph | 更新图谱(强制) | 流程A Step 6 |
read_chapter_summaries | 读取章节所有视频摘要 | 流程C Step C1 |
scan_chapter_completeness | 生成章节完整性审计 | 流程C Step C1 |
export_anki_package | CSV→apkg 导出 | 流程C Pass 2c |
validate_knowledge_graph | 校验图谱完整性 + 深度分布统计 | 发布前质量检查 |
validate_video_products | 校验章节视频级产物完整性 | 发布前质量检查 |
检查 .venv/、.mcp.json(Claude Code)/ .cursor/mcp.json(Cursor)/ .vscode/mcp.json(GitHub Copilot)、portable-gpu-worker/videos/ 是否存在(三个 MCP 配置至少一个即可),如任一条件不满足则运行 python scripts/bootstrap.py
验证核心依赖 — 调用 MCP 工具 check_environment(工具在进程内用 importlib 检测,全平台可靠):
all_dependencies_ok: true → 直接进入下一步,不执行任何安装操作all_dependencies_ok: false → 查看 dependencies 字段找到缺失包,然后运行 .venv\Scripts\pip install -r mcp-server/requirements.txt运行 GUI 启动器向用户展示可视化选择界面:
Step a — 自我识别 AI 环境,确定 --env 参数:
在启动 GUI 之前,先判断你当前运行在哪个 AI 环境中:
你是谁 传入参数 GitHub Copilot(VS Code Copilot Chat / Agent) --env copilotClaude Code(Anthropic CLI 或 claude.ai) --env claude-codeCursor AI Chat / Cursor Agent --env cursorOpenAI Codex --env codex其他 / 不确定 --env generic❗ 不要依赖文件系统自动探测 — 项目目录下可能存有其他 AI 工具的配置文件(如
.cursor/),会导致误判。必须由 AI 自己明确传入。
Step b — 启动 GUI(isBackground=true,命令立即返回,GUI 在后台独立运行):
# Windows(isBackground=true,命令立即返回,GUI 窗口在后台独立运行)
.venv\Scripts\python scripts/gui_launcher.py --env copilot
# macOS/Linux
.venv/bin/python scripts/gui_launcher.py --env copilot
- 将
copilot替换为上方表格确定的值。- 此命令以
isBackground=true运行,立即返回一个终端 ID;GUI 窗口在后台独立运行。- 命令返回后,立即向用户说:「✅ GUI 已弹出,请在界面中选择章节并点击确认按钮。选择完成后,发送任意消息继续。」
- 用户点击确认后,结果写入
scripts/_gui_result.json,GUI 自动关闭。- 收到用户的下一条消息后,读取
scripts/_gui_result.json,按action字段执行后续流程。- 若文件不存在或内容为空,提示用户先在 GUI 中完成选择并点击确认,再发送消息。
GUI 每次启动都实时重新扫描视频目录和已有产物,始终反映最新进度,无需维护任何缓存或 session 状态。
GUI 自动检测运行环境(Claude Code / Copilot / Cursor / Codex),展示对应模型列表和 Session 规划预览。
读取 JSON 中的 action 字段决定后续操作:
process_chapter → 只处理 current_session_videos 列表中的视频(不多不少),每个完整执行流程 A 全部 6 步;若 current_session_index + 1 < total_sessions → 提示用户重新运行 GUI 启动器(GUI 自动扫描最新进度,无需其他操作);若是最后一 Session → 自动触发流程 Csynthesis → 直接对该章节走流程 Cmanual → 犹如旧版文字问答模式,读取 SKILL.md 并引导用户选择cancelled → 用户取消,不执行任何操作⚠️ JSON 中含
force_reprocess: true(♻ 重新处理按钮)时:current_session_videos中包含已完成的视频,必须重新生成其知识文档(覆盖旧的knowledge_*.md)并重新调用update_knowledge_graph。仅影响 Flow A 产物,章节学习包(CHAPTER_SYNTHESIS / EXERCISES / ANKI)需之后另行用「⚑ 生成学习包」重新生成。
Session 处理完成后:
current_session_index + 1 < total_sessions → 告知用户"Session {current_session_index+1}/{total_sessions} 已完成,请重新运行 GUI 启动器继续下一 Session"(GUI 启动时自动扫描最新进度,无需手动维护状态)⚠️ JSON 输出中已包含
total/completed/preprocessed/pending,不用再调用list_video_files获取计数。
Step 1 — 预处理检查
检查 portable-gpu-worker/output/{course}/{day}/{safe_stem}/_preprocessing/ 下:
- *.srt(字幕文件)
- frames/(关键帧,frames_index.json 的 method 应为 pyscenedetect)
如无,使用 portable-gpu-worker 的 0_开始使用.bat → 选择 [3] 开始预处理
视频时长 > 90分钟时自动分段处理(见"长视频处理")
Step 2 — 调用 MCP 工具,获取上下文
1. get_video_metadata(video_path)
→ 获取基本信息(传入完整路径以正确推断输出目录)
2. check_preprocessing_status(video_path)
→ 检查预处理完整性;返回 artifacts.topics_json.path 等路径
3. align_frames_to_transcript(srt_path, frames_dir, words_json) ← 【可选辅助工具】
→ 辅助了解帧与字幕段对应关系;A2 的帧插入通过 frames_index.json 完成,本工具非必须
→ 仅在需要调试帧-字幕对齐时调用(words_json 参数传入 _preprocessing/{safe_stem}_words.json)
4. query_knowledge_graph — 按概念范围查询(不用 list_all=true)
4.1 根据视频文件名 + 目录路径,预判本视频涉及的概念范围(10-15 个 concept_id)
4.2 query_knowledge_graph(concept_ids=[预判的 concept_id 列表])
→ 只返回相关概念,避免图谱庞大时返回全量 JSON 消耗大量 Token
↑ 首次处理(图谱为空)时直接使用 Full Mode,可跳过此子步骤(Step 2 整体不可跳过)
↑ 不确定概念 ID 时,可传入话题关键词(工具做模糊匹配)
Step 3 — Stage 1:字幕分析 + 处理模式判断
加载 prompts/A1_subtitle_analysis.md
输入变量:
PREPROCESSING_DIR = check_preprocessing_status 返回的 output_paths.preprocessing 字段(_preprocessing/ 目录完整路径)
VIDEO_IS_SEGMENT = {true/false}
SEGMENT_INDEX = {如 "1/3",非分段时为 null}
WORDS_JSON_AVAILABLE = {true/false}(对应 check_preprocessing_status 返回的 artifacts.words_json.exists)
KNOWLEDGE_GRAPH_DATA = query_knowledge_graph 的返回内容(首次则传空)
+ 文件名、目录、字幕内容:
非分段视频(is_segmented=false):读取 artifacts.srt.path
分段视频(is_segmented=true):逐段读取 artifacts.srt.srt_paths 列表中的各文件并拼接为 SUBTITLE_TEXT
(srt_paths 由 check_preprocessing_status 工具返回,path 在分段视频中可能不存在)
输出并保存(VIDEO_STEM 中特殊字符会被替换为 _):
- {preprocessing_dir}/{safe_stem}_topics.json
← 话题清单,含:processing_mode、implicit_concepts、reference_map
- {preprocessing_dir}/{safe_stem}_teaching_style.json
← 教学风格简报(类比、节奏、强调点、难点时间段)
Stage 1 内部决策:处理模式(双轴判断,写入 _topics.json)
模式由新内容量 × 深度变化两个轴共同决定,在 Stage 1 Step 4c 自动判断:
| 模式 | 触发条件 | 文档特征 |
|---|---|---|
| Full | 新话题 ≥ 60%,或核心概念 depth 从 ≤1 跳至 ≥3 | 完整文档;图谱 depth≥2 的概念只写一句引用,不重复展开 |
| Supplement | 新话题 20-59%,多数概念 Δdepth=0(新侧面,深度不变) | 头部必须有「本节在以下基础上展开」引用块;只写新侧面 |
| DeepDive | 新话题 < 30%,但核心概念 Δdepth ≥ 1(老概念到达更高深度) | 「深化:{概念}」,不从头介绍,直接从当前深度切入;标注前置阅读链接 |
| Practice | 新话题 < 20%,且所有概念 Δdepth=0(纯操作练习) | 极简知识文档(只写步骤/命令/代码,≤ 1000 字);代码中出现但未口头讲解的词汇必须列入"新面孔"列表,标注后续章节正式学习位置 |
模式漏洞修复——局部模式切换(防止遗漏):
💡 兜底机制 1 — 隐性知识扫描(Stage 1 Step 4b,必执行)
扫描 SRT 所有代码片段中出现但未口头解释的 Java 关键字/API/命令:
- 发现 → 以
depth=0.5写入知识图谱- Stage 2 文档在对应位置加注:「你在本视频代码中已见过
{term},正式讲解在 {后续章节}」- 目的:后续正式讲解时可说"这个你见过了",降低认知门槛
// 隐性知识图谱条目示例(query_knowledge_graph 返回的格式) { "concept_id": "java.public_keyword", "current_depth": 0.5, "first_implicit_video": "08-HelloWorld小程序", "implicit_count": 1, "aspects_covered": [], "aspects_pending": [] }
Step 4 — Stage 2:知识重建(按模式执行)
加载 prompts/A2_knowledge_gen.md
输入变量:
TOPIC_LIST_JSON = {safe_stem}_topics.json(含 processing_mode、reference_map)
TEACHING_STYLE_JSON = {safe_stem}_teaching_style.json
PROCESSING_MODE = topics.json 中的 processing_mode(Full/Supplement/DeepDive/Practice)
REFERENCE_MAP = topics.json 中的 reference_map(已覆盖概念的文档引用位置)
COURSE_CONTEXT = 视频路径中 videos/ 目录后的层级,如 "Java基础-视频上/day01-Java入门"
FRAMES_MAPPING = _preprocessing/frames/frames_index.json 的原始内容
VIDEO_IS_SEGMENT / SEGMENT_INDEX = 与 topics.json 一致
输出知识文档(见 Step 5)
Step 5 — 产物保存
输出到 portable-gpu-worker/output/{course}/{day}/{safe_stem}/ 目录:
└── knowledge_{safe_stem}.md ← 唯一视频级产物(知识文档,按模式风格生成)
注:部分旧版目录下可能存在 exercises_*.md(旧架构历史遗留),可忽略,无需删除或更新。
练习题、Anki CSV/apkg 不在视频级生成,统一在流程 C 章节综合阶段生成。
Step 6 — 更新知识图谱(强制,不可省略)
⚠️ 跳过此步将导致下一视频无法正确判断处理模式,可能重复生成已有内容或遗漏深化。
调用 update_knowledge_graph 工具:
- video_stem, video_path, knowledge_doc_path
- processing_mode(本次实际使用的模式)
- covered_concepts(正式讲解的概念列表)
每项含:concept_id、depth(1-4)、aspect、summary
- implicit_concepts(代码出现但未解释的概念,depth=0.5)
- chapter_summary(2-3 句话,概括本视频核心内容,供流程 C 摘要阶段使用)
list_video_files(recursive=true) 扫描 portable-gpu-worker/videos/ 目录,获取所有视频的路径、时长和处理状态
⚠️ 必须调用此工具,不可自行递归列目录计数
prompts/B_batch_coordinator.md,分析依赖关系❌ 严禁行为:跳过 Step 2 MCP 调用 / 跳过 Step 3 Stage 1 / 合并多个视频一次生成 / Step 6 推迟到最后统一调用
portable-gpu-worker/output/COURSE_SUMMARY.md(含依赖关系图和推荐学习路线)Layer 2 产物。章节综合文档是用户完成整章学习的主要材料,必须完整独立——读者无需查阅任何视频级文档即可理解本章全部知识点并完成所有练习题。视频级文档仅作原材料与细节溯源。
触发条件(任意满足即可):
current_session_index + 1 = total_sessions)Step C1 — 扫描章节状态 + 深度门控准备
本步包含两个子步骤:C1a(工具调用)和 C1.5(预合成图谱扫描)。两者均为强制前置,在 C2 策略选择之前完成。
💡 兜底机制 2 — 知识完整性核查(C1a 执行,不可省略)
调用 read_chapter_summaries(chapter_dir)
→ 返回所有视频的 chapter_summary、processing_mode、已覆盖概念汇总
调用 scan_chapter_completeness(chapter_dir)
→ 输出"待补全清单",示例:
⚠️ java.jdk_jre_jvm:internals 面 → 待 JVM 原理章节覆盖
⚠️ java.public_static_void:depth=0.5(代码中出现但未解释)→ 待 OOP 章节覆盖
⚠️ java.environment_variable:installation 面在视频07提及但未展开 → 建议补充
→ 结果保存为 chapter_completeness_audit.md
→ 【兜底 2 升级】此审计数据在 Outline Pass 中被主动读取:
浅层核心概念(priority=core AND depth<2)触发 gap_fill 机制,
强制以 synthesis_depth=2 在综合文档中补写——不再只是诊断报告,而是驱动生成的处方。
> **gap_fill 双层机制说明**(KP 级和 Group 级互补,详细触发规则见 `prompts/C_chapter_synthesis.md` §ON+1):
> - **KP 级**:已在常规分组中的浅层核心概念 → 在对应 KP 上设 `synthesis_treatment="gap_fill"`,驱动 Synthesis Pass 以 synthesis_depth=2 展开
> - **Group 级**:**未被任何常规分组覆盖**的浅层核心概念 → outline.json 的 `synthesis_plan.groups` 末尾追加 `{ "is_gap_fill": true, ... }` 集中分组
> - 两者互补:已在常规分组中的概念只需 KP 级标记(提升写作深度);未被覆盖的概念同时需要 Group 级(建立分组)+ KP 级(驱动深度)
🔍 开发者深度门控(Developer Depth Gate) — 图谱交叉参照机制
触发时机(双路径设计):
- 标准/大型章节:在 Step C1 工具调用完成后、Step C2 策略选择之前执行(结果传入 Outline Pass O2 至 ON)
- 轻量章节:跳过 Outline Pass 时,在 Synthesis Pass 的 S0 分组完成后、S1 开始写文档前执行
- 两条路径的扫描逻辑完全相同,差异仅在执行时序——轻量章节因无 Outline Pass 而将扫描推迟到 Synthesis Pass 内部
Step C1.5 — 预合成图谱扫描(Pre-Synthesis Graph Scan,强制)
目的:遍历知识图谱中所有与本章相关的概念,为 Outline/Synthesis Pass 提供精准的深度决策依据。
术语说明:本机制涉及以下相互关联的术语——
developer_min_depth:概念类别 × 课程阶段计算出的开发者最低深度标准(每个概念一个值)chapter_depth_scan:Step C1.5 输出的内部数据结构,包含所有概念的 depth_verdict(不落盘,直接传入后续 Pass)depth_verdict:每个概念的扫描判定结果(adequate/escalate/supplement/defer)depth_gate_result:写入 outline.json 每个 KP 的字段,由 depth_verdict 映射而来(pass/escalated/deferred)执行步骤:
从
CHAPTER_SUMMARIES提取本章涉及的所有concept_id列表对每个 concept,从图谱读取
current_depth/expected_max_depth/aspects_covered/aspects_pending按概念类别确定该概念在本章的开发者最低深度标准(
developer_min_depth):
概念类别 判定规则(concept_id 或 display_name 特征) developer_min_depth(主讲章) syntax_tool 含 keyword/operator/literal/variable/identifier depth=2(能写代码使用) type_system 含 type/cast/conversion/primitive depth=2 + 必含≥1个陷阱代码示例 architecture 含 jvm/bytecode/compilation/memory 首次引介: depth=1;专题章: depth=3 practice 含 install/config/setting/idea/scanner depth=2(能独立完成操作) 其他 不匹配以上任一类 depth=2(通用标准) 计算课程阶段修正因子:从章节名称中提取 day 编号(如 day02 → 2):
- day01-07(基础阶段):
developer_min_depth上限为 2(不强求原理级)- day08-14(进阶阶段):
developer_min_depth上限为 3- day15+(高级阶段):按概念类别原值,不设额外上限
对每个概念生成
depth_verdict:
current_depth >= developer_min_depth→"adequate"current_depth < developer_min_depth且本章是 first_doc →"escalate"(本章必须补写到 developer_min_depth)current_depth < developer_min_depth且本章非 first_doc 但有新侧面 →"supplement"(展开新侧面,不重复基础)current_depth < developer_min_depth且本章非主讲 →"defer"(记录缺口到速查表)输出:
chapter_depth_scan(内部数据结构,不落盘,直接传入 Outline Pass / S0 分组)
深度门控执行(在 Outline Pass O2 至 ON / 轻量章节 S0 中应用)
基于 Step C1.5 的
chapter_depth_scan,对每个priority=core的 KP:
- 查找该 KP 对应的
depth_verdict- 若
"escalate"→synthesis_depth设为developer_min_depth,depth_gate_result = "escalated"- 若
"supplement"→ 确保新侧面完整展开,depth_gate_result = "escalated"- 若
"adequate"→depth_gate_result = "pass"- 若
"defer"→depth_gate_result = "deferred",缺口信息写入deferred_aspects和末尾速查表- type_system 类概念的额外约束:即使
depth_verdict = "adequate",也必须检查aspects_covered是否包含"pitfall"或"gotcha"面——若缺少,补充至少 1 个陷阱代码示例(如类型溢出、精度丢失)门控结果写入 outline.json 每个 KP 的
depth_gate_result字段("pass"/"escalated"/"deferred")
Step C2 — 选择生成策略(按知识体量分级,非视频数量)
根据章节知识体量估算决定 Pass 数(同等视频数,内容量可能差 3 倍):
防溢出规则:
规则 A(产物级·弹性):三件产物(SYNTHESIS / EXERCISES / ANKI)按 Pass 2a → 2b → 2c 顺序生成,
每件保存后 AI 自行评估剩余输出容量——充足则直接继续下一件,不足则告知用户并等待下一轮对话。
唯一硬约束:必须先 create_file / replace_string_in_file 将当前产物写盘,再开始下一件。
规则 B(节级·强制):outline / synthesis / exercises 三个 pass 内部均必须使用占位符追加链分步写入,
每次写盘前生成量控制在单次响应安全范围内(参考 3-5 KP,深度大的知识点取低限)
轻量(知识点 ≤ 15 / 预估产物 ≤ 8000 字,参考值) → 不单独执行 Outline Pass(分组/分类逻辑内联到 synthesis pass 的 Stage 0 中),3 轮 Pass(含 C1 共四轮):synthesis(先执行 Stage 0 分类门 + S0 分组)→ exercises → anki
标准(知识点 16-40 / 预估产物 8000-20000 字,参考值)→ 4 轮 Pass(含 C1 共五轮):outline → synthesis → exercises → anki(各 Pass 内部步骤详见 Step C3 表格及 prompts/C_chapter_synthesis.md)
大型(知识点 > 40 / 预估产物 > 20000 字,参考值) → N+4 轮 Pass(含 C1 共 N+5 轮):Group Summaries → Outline → synthesis → exercises → anki
知识点数量:来自 read_chapter_summaries 各视频的 depth≥1 概念汇总。
注:轻量章节虽不单独执行 Outline Pass,但仍会在 synthesis pass 的 S0 步骤中生成等价的分组信息;
chapter_outline.json 文件仅标准/大型章节才会生成。
Step C3 — 执行综合生成
加载 prompts/C_chapter_synthesis.md
输入:
CHAPTER_DIR = 章节目录路径
CHAPTER_NAME = 章节名称(如 "Day01 · Java 入门")
CHAPTER_SUMMARIES = read_chapter_summaries 的返回内容
COMPLETENESS_AUDIT = scan_chapter_completeness 的返回内容(兜底 2 的输出)
PASS_MODE = "outline" | "synthesis" | "exercises" | "anki"
← "full" 已废弃,当前有效值为以上四个
CHAPTER_OUTLINE = (synthesis/exercises/anki pass 时)使用 read_file 从磁盘加载:
{CHAPTER_DIR}/CHAPTER_SYNTHESIS_{chapter_dir_name}/chapter_outline.json
(其中 chapter_dir_name = Path(CHAPTER_DIR).name,如 "day01-Java入门")
轻量章节不单独执行 outline pass(分组逻辑内联到 synthesis pass S0 步骤中),此字段为 null
各 Pass 按以下顺序依次执行,每件产物保存后 AI 自行评估剩余容量决定是否继续(规则 A)。内部步骤与占位符追加链详见 prompts/C_chapter_synthesis.md。
| Pass | PASS_MODE | 产物 | 说明 |
|---|---|---|---|
| Pass 1(可选,标准/大型章节) | "outline" | chapter_outline.json(知识点大纲 + synthesis_plan 分组) | 轻量章节跳过,转由 synthesis pass 内 Stage 0 承接 |
| Pass 2a | "synthesis" | CHAPTER_SYNTHESIS_*.md | 轻量章节在 synthesis pass 内先执行 Stage 0 内容价值分类门 |
| Pass 2b | "exercises" | CHAPTER_EXERCISES_*.md | — |
| Pass 2c | "anki" | CHAPTER_ANKI_*.csv + .apkg | — |
占位符追加链内部步骤(O1/O2 至 ON/ON+1、S1/S2 至 SN/SN+1、E1/E2 至 EN/EN+1/EN+2)、Stage 0 内容价值三桶分类(SKILL/MENTAL_MODEL/EXCLUDE)、code_anchors 出题规则等实现细节,详见
prompts/C_chapter_synthesis.md。
Step C4 — 保存产物
输出到 {chapter_dir}/CHAPTER_SYNTHESIS_{chapter_dir_name}/:
├── CHAPTER_SYNTHESIS_{chapter_dir_name}.md
│ ← 完整独立的章节学习手册:每个知识点完整展开(含类比/代码/陷阱),概念间有显式承接贯通
│ ← 读者无需查阅任何视频级文档,仅凭本文档即可独立学习并完成所有练习题
│ ← 格式参照 day01 CHAPTER_SYNTHESIS 样式:学习目标 + 快速导航表 + 分部组织 + 末尾速查表 + 简洁收尾
├── CHAPTER_EXERCISES_{chapter_dir_name}.md
│ ← 基于 CHAPTER_SYNTHESIS 从零生成,完整覆盖本章所有知识点,含面试题专区
│ ← 无题量上限约束;不因“题量多”而删减实质性知识点对应的练习题
├── CHAPTER_ANKI_{chapter_dir_name}.csv
│ ← 基于 CHAPTER_SYNTHESIS 从零生成(视频级不再生成 Anki CSV)
│ ← 牌组命名:Java全栈::{课程文件夹}::{chapter文件夹}
│ ← 示例:Java全栈::Java基础-视频上::day01-Java入门
├── CHAPTER_ANKI_{chapter_dir_name}.apkg
│ ← 调用 MCP 工具生成:
│ export_anki_package(
│ csv_path="{chapter_dir}/CHAPTER_SYNTHESIS_{chapter_dir_name}/CHAPTER_ANKI_{chapter_dir_name}.csv",
│ output_path="{chapter_dir}/CHAPTER_SYNTHESIS_{chapter_dir_name}/CHAPTER_ANKI_{chapter_dir_name}.apkg",
│ deck_name="Java全栈::{课程文件夹}::{chapter_dir_name}"
│ )
└── chapter_completeness_audit.md
← Step C1 中 scan_chapter_completeness 的输出(兜底 2 的落地)
� 深度提示机制(末尾速查表,正文不内联)
对于 depth < expected_max_depth 的概念,不在正文中插入任何推迟注解(不使用
💡 后续深入(已规划)、📚 扩展了解、💡 你已经见过它了等内联标记)。正文保持纯粹的技术讲解,不打断阅读流。处理规则:
情况 正文行为 速查表行为 synthesis_treatment="gap_fill"/synthesis_depth > depth(视频讲浅需补写)正文以 synthesis_depth 深度完整展开 不列入速查表(已在正文补写) deferred_credibility="confirmed"(高阶内容面有明确后续规划)正文只写到 synthesis_depth,不提"后续会讲" 列入速查表:✅ 已规划 + 后续章节 deferred_credibility="speculative"/"none"(后续深化不确定)正文只写到 synthesis_depth,不提"本课程可能不覆盖" 列入速查表:❓ 待定 + 推荐资料 隐性知识(depth=0.5,代码中出现但未口头讲解) 正文在正式讲解处自然展开,不加"你已经见过"提示 列入速查表:首次出现视频 + 正式讲解位置 速查表位置:CHAPTER_SYNTHESIS 文档末尾、收尾行之前。完整的末尾结构为:
--- ## 📚 权威参考来源 | 知识点 | 权威来源 | |--------|----------| | 四类八种基本数据类型 | JLS §4.2 Primitive Types and Values | | 整数溢出 | JLS §15.18.2 | | ...更多知识点... | ...对应 P1/P2/P3 锚点... | --- ## 📋 知识点深度与后续规划速查表 | 知识点 | 本章深度 | 目标深度 | 后续规划 | 说明 | |--------|---------|---------|---------|------| | GC 回收算法 | depth=1 引介 | depth=3 原理 | ✅ day12-JVM原理 | 已规划完整展开 | | public/static/void | depth=0.5 隐性 | depth=2 运用 | ✅ OOP章节 | 代码中已出现,OOP正式讲解 | | 进制转换算法 | 未覆盖 | depth=1 了解 | ❓ 本课程可能不覆盖 | 参阅《计算机科学导论》 |权威参考来源表收录所有知识点的 P1/P2/P3 锚点(正文中不内联
> 来源:);速查表只收录有后续规划或深度缺口的概念。
触发时机:每完成 3-5 个章节后,或用户主动要求。
读取 query_knowledge_graph(list_all=true, chapter_filter="{course}/{day}")
按章节逐个完成该查询,拼出全局关联图。
⚠️ 不加 chapter_filter 直接 list_all=true 会随课程增长而持续增加 token,仅用于调试/审计目的。
生成 PHASE_MAP.md,包含:
- 已覆盖概念的关联图(哪些概念互相依赖)
- 深度追踪表(哪些概念还未达到 expected_max_depth)
- 后续章节预报(哪些概念将在何处继续深化)
目的:让学习者随时了解自己在整个课程中的位置
分工:
templates/存放具体格式范例(AI 生成前读取确认格式);A2_knowledge_gen.md/C_chapter_synthesis.md包含内容生成规则(字幕处理、深度适配、权威校验等)。此处为核心约束的快速参考。
当 AI 生成文档时,应先读取对应模板确认格式规范,再结合 A2/C 提示词中的内容规则生成输出。
| 文件 | 对应产物 | 核心规范要点 |
|---|---|---|
templates/knowledge_doc.md | knowledge_*.md(视频级知识文档) | 4 种处理模式头部(Full/Supplement/DeepDive/Practice);轻量/标准/深度 3 档写法;关键帧三步校验;禁止面试标签 |
templates/exercises_doc.md | CHAPTER_EXERCISES_*.md(章节练习题文档) | Q&A 联排;禁止 <details>;P 前缀编程题使用规则;章节级从零生成(基于 CHAPTER_SYNTHESIS,完整覆盖全章知识点,含面试题专区,无硬上限) |
templates/anki_card.csv | anki_*.csv(Anki 卡包) | #separator:Comma;5 列(Deck/Type/Tags/Front/Back);5 种卡片类型;代码填空用 ___FILL___ 占位符;Back 字段注明 P1/P2/P3 来源 |
| 模式 | 适用场景 | 结构要求 |
|---|---|---|
| 轻量 | beginner + pace: fast | 定义 + 类比 + 简单示例(2-4 段) |
| 标准 | beginner + pace: slow 或 intermediate | 切入 → 定义 → 类比 → 代码 → 常见陷阱 |
| 深度 | is_difficulty_peak 或 advanced | 标准模式 + 底层原理 + 版本差异 |
面试常考 等只能出现在练习题文档,不能在知识文档后续深入、你已经见过它了、扩展了解 等推迟注解——这些信息统一收录到文档末尾的「知识点深度与后续规划速查表」中> 来源:{锚点} 内联标注。所有权威来源统一收录到文档末尾「📚 权威参考来源」表格(知识点→来源映射),正文保持纯粹技术讲解不中断关键帧:scene 帧 × 难点时间段(difficulty_markers)× 话题时间段,三步全通过才插入。
<details> 标签📖 参考:CHAPTER_SYNTHESIS 第 X 节Java全栈::{课程文件夹}::{day文件夹}(章节级,视频级不生成 Anki)工作流设计为 API 无关,核心质量由六项原则保障,不依赖特定 LLM API。