# Project Research Summary **Project:** kb-skills (Skill-based Workflow Orchestration System) **Domain:** Content Processing Pipeline with LLM Agent Orchestration **Researched:** 2026-03-13 **Confidence:** HIGH ## Executive Summary 这是一个技能型工作流编排系统,专门用于内容处理管道(视频/文章的元数据提取、ASR识别、AI深度分析)。专家构建此类系统时,通常采用分层架构将编排层、技能定义层、执行层和基础设施层分离,并使用步骤级状态管理实现断点续传和幂等执行。 基于研究,推荐采用**串行管道编排模式**,使用 `transitions` 状态机管理步骤状态,`Pydantic` 定义 Schema 并实现验证。核心原则是:每个步骤完成后立即持久化状态,失败时可以从断点恢复,重复执行不会产生重复文件。这与 Airflow/Prefect 等重量级编排工具不同——本项目专注于单机批处理场景,无需分布式执行。 关键风险在于**无状态执行**和**错误上下文丢失**。长时间运行的任务(Whisper识别可能需要30分钟)如果失败后需要从头开始,成本极高。缓解措施是在 Phase 1 就实现 `workflow_state.json` 状态文件,并确保每个步骤输出结构化错误信息。 ## Key Findings ### Recommended Stack 推荐使用 Python 3.12+ 作为运行时,配合 Pydantic 2.11+ 进行数据验证和 JSON Schema 生成,transitions 0.9.3+ 实现步骤状态机,Typer + Rich 构建现代化 CLI。这套组合轻量、Pythonic,与项目的 SKILL.md 规范模式完美契合。 **Core technologies:** - **Pydantic 2.11+**: 数据验证 & Schema 生成 — v2.11+ 解析速度更快,原生支持 JSON Schema,与 PIPE-07 需求匹配 - **transitions 0.9.3+**: 状态机 — 轻量级、支持回调和嵌套状态,无需数据库 - **pydantic-settings 2.8+**: 配置管理 — 解决现有 `~/.kb_env` 分散配置问题 - **Typer 0.15+**: CLI 框架 — 基于 Click 的现代 CLI,利用类型提示自动生成参数 - **tenacity 8.5+**: 重试机制 — 实现指数退避重试,处理 API 调用失败 **避免使用:** Airflow/Celery(过重)、argparse(样板代码多)、requests(同步阻塞) ### Expected Features **Must have (table stakes):** - **步骤级状态管理** — 用户期望能从断点恢复,不重新执行已完成的步骤 - **幂等执行** — 相同输入重复执行产生相同结果,无重复文件 - **JSON Schema 验证** — 数据契约确保步骤间接口一致性 - **结构化错误处理** — 错误消息包含上下文和可操作建议 - **平台特定内容处理** — B站/知乎元数据和内容提取 **Should have (competitive):** - **SKILL.md 声明式技能定义** — AI 代理可发现和执行技能 - **多模态内容处理** — 视频(ASR/OCR)+文本统一管道 - **Tmux 会话持久化** — 长时间运行操作可断开终端 **Defer (v2+):** - **并发执行** — 当前串行模式足够,并发增加复杂度 - **Web UI** — CLI 优先,可视化需求低 - **多租户** — 单用户工具 ### Architecture Approach 推荐四层架构:编排层(Workflow Coordinator、State Manager、Error Handler)、技能定义层(SKILL.md specs、Schema Definitions)、执行层(Platform/Processing/Analysis Skills)、基础设施层(File System、External APIs、AI Services)。 **Major components:** 1. **State Manager** — 管理 `workflow_state.json`,实现步骤级状态持久化和原子写入 2. **Schema Registry** — 统一的输入输出 JSON Schema 定义和验证 3. **Pipeline Engine** — 串行执行技能,检查状态跳过已完成步骤 4. **Platform Skills** — B站/知乎的元数据提取和内容下载 5. **Processing Skills** — Whisper/FunASR 语音识别、OCR 处理 6. **Analysis Skills** — kb-deep-analyzer AI 深度分析 ### Critical Pitfalls 1. **无状态执行 = 从头重来** — Whisper 识别 20 分钟后失败,没有状态文件则需要重新识别。避免:每个步骤完成后写入 `workflow_state.json` 2. **错误上下文丢失** — 步骤 6 失败只报告 "API error",不知道是哪个内容、什么输入。避免:结构化 JSON 错误,包含步骤名、输入摘要、失败原因、可操作建议 3. **假设模型"理解上下文"** — 主代理期望子代理知道之前发生了什么,但每次调用是独立会话。避免:显式传递所有需要的上下文,输入 JSON 自包含 4. **非幂等操作** — 每次执行创建 `output_1.mp4`、`output_2.mp4`。避免:基于输入生成确定性文件名,已存在则跳过 5. **环境变量分散** — `~/.kb_env`、子技能配置、HF_TOKEN 分散各处。避免:统一配置文件,启动时检查所有必需变量 ## Implications for Roadmap Based on research, suggested phase structure: ### Phase 1: Foundation (基础设施层) **Rationale:** 状态管理和 Schema 验证是所有后续组件的基础,必须首先实现。没有状态文件就无法实现断点续传和幂等执行。 **Delivers:** State Manager、Schema Registry、Error Handler、统一配置管理 **Addresses:** 步骤级状态管理、幂等执行、JSON Schema 验证、结构化错误处理 **Avoids:** 无状态执行、错误上下文丢失、环境变量分散 **Components:** - `skills/core/state_manager.py` — workflow_state.json 管理 - `skills/core/schema_registry.py` — JSON Schema 定义和验证 - `skills/core/error_handler.py` — 统一错误处理 - `config.py` — pydantic-settings 配置管理 ### Phase 2: Core Skills (核心技能集成) **Rationale:** 基于现有技能进行集成,将分散的技能统一到管道模型中。Link Parser 是入口点,无依赖;Platform Skills 依赖其输出。 **Delivers:** Link Parser 集成、B站/知乎 Metadata 和 Content 技能适配 **Uses:** Pydantic (Schema)、transitions (状态)、Typer (CLI) **Implements:** Pipeline Engine 原型 **Components:** - Link Parser 技能适配(已有 kb-link-parser) - B站/知乎技能适配(已有 kb-bilibili-*、kb-zhihu-*) - 管道执行引擎原型 ### Phase 3: Processing Skills (处理技能集成) **Rationale:** ASR 和 OCR 依赖视频文件,必须在内容下载后执行。这些技能已有实现,需要集成到管道。 **Delivers:** Whisper/FunASR 集成、OCR 集成、处理技能状态管理 **Addresses:** 多模态内容处理 **Avoids:** 假设模型理解上下文 — 显式传递转录结果给分析步骤 **Components:** - Whisper/FunASR 技能适配 - OCR 技能适配 - 处理结果 Schema 定义 ### Phase 4: Analysis & Orchestration (分析技能与编排) **Rationale:** 深度分析是管道的最终输出,依赖所有前置步骤。编排层整合所有技能形成完整工作流。 **Delivers:** Deep Analyzer 集成、完整管道编排、工作流定义文件 **Uses:** 所有前置组件 **Implements:** 声明式工作流定义 (YAML) **Components:** - Deep Analyzer 技能适配 - Pipeline Engine 完善 - `workflows/video_pipeline.yaml` - `workflows/article_pipeline.yaml` ### Phase 5: Polish & Testing (完善与测试) **Rationale:** 核心功能完成后,补充测试、文档和边缘情况处理。 **Delivers:** 单元测试、集成测试、错误恢复策略完善、用户文档 **Addresses:** 错误恢复策略、进度可见性 ### Phase Ordering Rationale - **依赖关系决定顺序:** State Manager 是所有组件的基础,必须 Phase 1;Analysis 依赖 Processing,Processing 依赖 Platform Skills - **架构模式指导分组:** Foundation -> Skills -> Orchestration 符合分层架构 - **避免陷阱:** Phase 1 就实现状态文件和 Schema,防止无状态执行和接口不一致 ### Research Flags Phases likely needing deeper research during planning: - **Phase 3:** ASR/OCR 集成可能需要研究 FunASR vs Whisper 选择逻辑,以及 HuggingFace token 缺失时的降级策略 - **Phase 4:** AI API 调用的重试策略和超时配置可能需要根据实际使用调整 Phases with standard patterns (skip research-phase): - **Phase 1:** 状态管理和 Schema 验证是成熟模式,Pydantic/transitions 文档充分 - **Phase 2:** 现有技能适配,无需额外研究 - **Phase 5:** 测试和文档是标准实践 ## Confidence Assessment | Area | Confidence | Notes | |------|------------|-------| | Stack | HIGH | Pydantic/transitions/Typer 都是成熟库,官方文档完善,与项目需求匹配度高 | | Features | HIGH | 基于现有代码库分析和行业标准,功能边界清晰 | | Architecture | HIGH | 四层架构是工作流系统的标准模式,管道编排模式适合内容处理场景 | | Pitfalls | HIGH | 基于多篇研究论文和行业实践,坑点识别充分 | **Overall confidence:** HIGH ### Gaps to Address - **ASR 后端选择:** Whisper vs FunASR 的选择逻辑需要根据实际性能测试确定,目前建议支持配置切换 - **错误恢复策略细节:** 403/超时等具体错误类型的处理策略需要在实现时细化 - **进度汇报机制:** 长时间运行的 Whisper 任务需要进度汇报,具体实现方式待定 ## Sources ### Primary (HIGH confidence) - Pydantic v2.11 Release & JSON Schema Docs — 技术选型验证 - transitions 0.9.3 on PyPI — 状态机库详情 - Dagster: Data Pipeline Architecture Design Patterns — 管道模式 - AI Architecture Patterns 101: Workflows, Agents — 架构模式 - Demystifying Failures in Platform-Orchestrated Workflows (arxiv) — 失败模式研究 ### Secondary (MEDIUM confidence) - Prefect vs Dagster Comparison — 编排工具对比 - Multi-Step LLM Chains: Best Practices — LLM 链最佳实践 - Data Pipeline State Management (Fivetran) — 状态管理挑战 - 9 Things I Hate About Environment Variables — 配置管理问题 ### Tertiary (LOW confidence) - AI Agent Anti-Patterns (Medium) — 反模式识别,需要结合实践验证 --- *Research completed: 2026-03-13* *Ready for roadmap: yes*