# 内容生成Pipeline编排逻辑 ## 概述 本文档描述内容生成Pipeline的完整编排逻辑。 ## Pipeline架构 ``` 用户请求 → PipelineEngine.execute() │ ├─ 1. 加载Pipeline定义 (YAML) │ ├─ 2. 构建执行上下文 │ ├─ 3. 拓扑排序确定执行顺序 │ └─ 4. 逐阶段执行 │ ├─ Stage 1 (无依赖) ├─ Stage 2 (依赖Stage 1) ├─ Stage 3 (依赖Stage 1, 2) └─ ... ``` ## Pipeline定义结构 Pipeline通过YAML文件定义,位于 `backend/pipelines/` 目录: ```yaml name: content_production version: "1.0" description: 内容生产Pipeline variables: brand_name: "" keywords: "" platform: "zhihu" stages: - name: topic_selection agent: content_generator action: select_topic inputs: brand: "${brand_name}" keywords: "${keywords}" outputs: [selected_topic, topic_score] - name: content_generation agent: content_generator action: generate depends_on: [topic_selection] inputs: topic: "${stages.topic_selection.outputs.selected_topic}" brand: "${brand_name}" outputs: [content] - name: deai_processing agent: deai_agent action: humanize depends_on: [content_generation] inputs: content: "${stages.content_generation.outputs.content}" outputs: [natural_content] - name: seo_optimization agent: geo_optimizer action: optimize depends_on: [deai_processing] inputs: content: "${stages.deai_processing.outputs.natural_content}" keywords: "${keywords}" outputs: [optimized_content] ``` ## 核心组件 ### PipelineEngine 位置:`backend/app/agent_framework/pipeline/engine.py` | 方法 | 说明 | |------|------| | execute(pipeline, context) | 执行完整Pipeline | | _execute_stage(stage, exec_context, stages_context) | 执行单个阶段 | | _dispatch_and_wait(stage, inputs) | 分发任务并等待结果 | | _topological_sort(stages) | 拓扑排序 | | _resolve_variables(template, context) | 解析变量引用 | ### PipelineLoader 位置:`backend/app/agent_framework/pipeline/loader.py` | 方法 | 说明 | |------|------| | load(pipeline_name) | 从YAML加载Pipeline | | load_from_yaml(yaml_content) | 从字符串加载 | | validate_dag(stages) | 验证DAG无环 | | resolve_variables(template, context) | 解析${...}变量 | ### PipelineSchema 位置:`backend/app/agent_framework/pipeline/schema.py` | 类 | 说明 | |----|------| | Pipeline | Pipeline定义 | | PipelineStage | 单个阶段定义 | | StageResult | 阶段执行结果 | | PipelineResult | Pipeline执行结果 | | StageStatus | 阶段状态枚举 | ## 变量解析 支持 `${var.path}` 格式的变量引用: | 格式 | 说明 | |------|------| | `${brand_name}` | 全局变量 | | `${stages.step1.outputs.result}` | 上游阶段输出 | | `${stages.step1.outputs.result.substring(0,10)}` | 字符串截取 | ## 条件执行 Stage支持 `condition` 字段进行条件执行: ```yaml - name: optional_stage agent: some_agent action: do_something condition: "${enable_optional} == true" ``` 支持的比较操作: - `${var}` - 变量存在且非空 - `${var} == 'value'` - 等于 - `${var} != 'value'` - 不等于 ## 重试机制 每个Stage支持 `retry_count` 配置: ```yaml - name: unstable_stage agent: some_agent retry_count: 3 # 失败后重试3次 ``` ## 错误处理 | 配置 | 说明 | |------|------| | continue_on_failure: false | 阶段失败则Pipeline失败(默认) | | continue_on_failure: true | 阶段失败仍继续下游 | ## 内容生成服务层Pipeline 除了Agent Pipeline,还有服务层的内容处理Pipeline: 位置:`backend/app/services/content/content_pipeline.py` ``` 用户内容 → RuleValidator (规则校验) ├─ 高严重问题 → 中断Pipeline └─ 通过 → SensitiveFilter (敏感词过滤) └─ SEOOptimizer (SEO优化) └─ HTMLGenerator (HTML生成) └─ 输出 (html/markdown/plain) ``` ### ContentPipeline类 ```python class ContentPipeline: async def run(self, request: dict) -> PipelineResponse: """ request = { "content": "原始内容", "title": "标题", "platform": "目标平台", "optimize_for": ["validation", "sensitive", "seo"], "output_formats": ["html", "markdown", "plain"] } """ ``` ### 阶段说明 | 阶段 | 组件 | 说明 | |------|------|------| | validation | RuleValidator | 校验标题长度、内容长度、AI模式检测 | | sensitive_filter | SensitiveFilter | 敏感词过滤替换 | | seo_optimization | SEOOptimizer | 关键词密度调整、位置检查 | | html_generation | HTMLGenerator | 生成HTML/ Markdown/纯文本 | ## Dry-Run模式 当PipelineEngine初始化时未传入dispatcher,进入dry-run模式: ```python # Dry-run模式(测试/开发) engine = PipelineEngine(dispatcher=None) result = await engine.execute(pipeline, context) # 返回模拟结果用于测试Pipeline定义 ``` 生产环境若触发dry-run会记录ERROR级别日志。