# GEO Workflow 业务分析与开发规划 > 本文档整合了GEO平台Workflow业务合理性分析、缺失节点技术方案和分阶段开发计划,作为后续开发的权威参考。 --- ## 第一部分:GEO Workflow 业务合理性分析 ### 1.1 当前流程问题诊断 原7步流程: ``` 1. 客户行业/产品/卖点分析 2. AI分析主流AI引擎的回答模式 3. 识别"AI会引用什么样的内容" 4. 生成优化策略 5. 执行优化 6. 定期检测 7. 生成GEO效果报告 ``` **问题诊断:** | 问题 | 说明 | 影响 | |------|------|------| | 缺少竞品对标环节 | 原流程只关注自身品牌,缺少与竞品在AI回答中的对比分析 | 无法衡量相对竞争力,优化方向不明确 | | 缺少内容发布后验证 | 步骤5执行优化后,缺少对优化效果的即时验证 | 无法快速验证优化是否生效,浪费迭代周期 | | 步骤2和3可合并 | AI回答模式分析和引用模式识别是同一数据源的两个分析维度 | 流程冗余,增加用户理解成本 | | 缺少反馈闭环 | 检测结果应反馈到策略生成,形成迭代优化循环 | 无法持续改进,优化效果递减 | | 缺少客户画像环节 | 步骤1过于简单,缺少对目标受众AI使用习惯的分析 | 策略缺乏针对性,无法精准触达目标用户 | **与现有代码的对应关系:** 当前代码库已实现的能力: - [CitationEngine](../../backend/app/workers/citation_engine.py) — 已实现7个AI平台的查询和引用检测 - [QueryScheduler](../../backend/app/workers/scheduler.py) — 已实现基于APScheduler的定时查询调度 - [BrandMatcher](../../backend/app/workers/citation_engine.py) — 已实现品牌匹配(精确/别名/模糊) - [CompetitorDetector](../../backend/app/workers/citation_engine.py) — 已实现竞品检测(但仅限预定义品牌列表) - [OptimizationAdvisor](../../backend/app/services/optimization_advisor.py) — 已实现基于规则和LLM的优化建议生成 - [CitationRecord](../../backend/app/models/citation_record.py) — 已实现引用记录数据模型(含情感分析、引用源分析字段) 当前代码库的不足: - 缺少引用模式识别引擎(当前仅做品牌匹配,未分析AI引用偏好模式) - 缺少GEO效果报告生成(当前仅有评分,无趋势报告) - 缺少Workflow编排引擎(当前Pipeline仅用于内容生成,未覆盖GEO全流程) - 缺少内容自动优化执行(当前仅生成建议,未执行优化) - 缺少效果即时验证(优化后无自动重新查询验证) ### 1.2 优化后的流程设计(10步闭环) ``` ┌─────────────────────────────────────────────────────────────────────────┐ │ GEO 10步闭环流程 │ ├─────────────────────────────────────────────────────────────────────────┤ │ │ │ ① 品牌画像构建 ──→ ② 竞品基准设定 ──→ ③ AI引擎查询分析 │ │ │ │ │ ▼ │ │ ⑩ 迭代优化 ← ⑨ GEO效果报告 ← ⑧ 定期监测 ← ⑦ 效果即时验证 │ │ │ ▲ │ │ │ │ │ │ └──────→ ⑤ 优化策略生成 ← ④ 引用模式识别 │ │ │ │ │ ▼ │ │ ⑥ 内容优化执行 │ │ │ └─────────────────────────────────────────────────────────────────────────┘ ``` #### 步骤1:品牌画像构建 | 属性 | 说明 | |------|------| | 输入 | 品牌信息、行业、产品、卖点 | | 输出 | 品牌画像(含行业分类、目标受众、差异化价值) | | 自动化 | 半自动(AI辅助分析+人工确认) | | 现有基础 | [Brand](../../backend/app/models/brand.py) 模型已有 name/aliases/industry 字段,需扩展画像维度 | **扩展字段设计:** ```python # 在 Brand 模型中新增字段 profile_data: Mapped[dict | None] = mapped_column( JSONType, nullable=True, comment="品牌画像数据: {target_audience, differentiators, key_products, ai_usage_habits}" ) ``` #### 步骤2:竞品基准设定 | 属性 | 说明 | |------|------| | 输入 | 竞品列表、目标查询词 | | 输出 | 竞品AI可见性基准数据 | | 自动化 | 半自动(自动查询+人工确认竞品) | | 现有基础 | [Competitor](../../backend/app/models/competitor.py) 模型已存在,[CompetitorDetector](../../backend/app/workers/citation_engine.py) 已实现基础竞品检测 | **改进方向:** 当前 `CompetitorDetector.KNOWN_BRANDS` 仅包含3个行业的预定义品牌,需要改为从数据库动态加载竞品列表。 #### 步骤3:AI引擎查询分析 | 属性 | 说明 | |------|------| | 输入 | 查询词列表、品牌名、竞品名 | | 输出 | 各AI引擎的回答数据(含引用来源、引用位置、引用频率) | | 自动化 | 全自动(定时并行查询) | | 现有基础 | [CitationEngine](../../backend/app/workers/citation_engine.py) 已实现7平台查询,[BasePlatformAdapter](../../backend/app/workers/platforms/base.py) 已定义适配器基类 | **现有平台适配器:** | 适配器 | 文件 | API来源 | |--------|------|---------| | WenxinAdapter | [wenxin.py](../../backend/app/workers/platforms/wenxin.py) | 文心一言 API | | KimiAdapter | [kimi.py](../../backend/app/workers/platforms/kimi.py) | Moonshot API | | TongyiAdapter | [tongyi.py](../../backend/app/workers/platforms/tongyi.py) | 通义千问 API | | DoubaoAdapter | [doubao.py](../../backend/app/workers/platforms/doubao.py) | 豆包 API | | QingyanAdapter | [qingyan.py](../../backend/app/workers/platforms/qingyan.py) | 轻颜 API | | TiangongAdapter | [tiangong.py](../../backend/app/workers/platforms/tiangong.py) | 天工 API | | XinghuoAdapter | [xinghuo.py](../../backend/app/workers/platforms/xinghuo.py) | 星火 API | **改进方向:** 增加ChatGPT和Perplexity适配器,实现批量并行查询,增加查询结果的结构化存储。 #### 步骤4:引用模式识别 | 属性 | 说明 | |------|------| | 输入 | AI引擎回答数据 | | 输出 | 引用模式报告(AI偏好内容类型、结构特征、权威信号) | | 自动化 | 全自动(规则引擎+LLM分析) | | 现有基础 | [citation_extractor.py](../../backend/app/workers/citation_extractor.py) 已实现引用源提取,需扩展为模式识别 | **新增能力:** 从单次引用检测升级为跨查询的模式分析,识别AI引擎的内容偏好规律。 #### 步骤5:优化策略生成 | 属性 | 说明 | |------|------| | 输入 | 品牌画像+引用模式报告+竞品基准 | | 输出 | 优化策略清单(Schema/FAQ/权威引用/内容格式) | | 自动化 | 半自动(AI生成+人工审核) | | 现有基础 | [OptimizationAdvisor](../../backend/app/services/optimization_advisor.py) 已实现5类建议生成,需扩展输入源 | **改进方向:** 当前策略生成仅基于评分差距,需增加引用模式分析结果作为输入,使策略更精准。 #### 步骤6:内容优化执行 | 属性 | 说明 | |------|------| | 输入 | 优化策略清单 | | 输出 | 优化后的内容/结构化数据 | | 自动化 | 半自动(AI生成+人工审核发布) | | 现有基础 | [ContentPipeline](../../backend/app/services/content/content_pipeline.py) 已实现内容处理流水线 | **改进方向:** 增加 Schema 生成器和 FAQ 生成器,实现从策略到内容的自动化执行。 #### 步骤7:效果即时验证 | 属性 | 说明 | |------|------| | 输入 | 优化后的内容 | | 输出 | AI引擎重新查询结果对比 | | 自动化 | 全自动 | | 现有基础 | CitationEngine 可复用,需增加前后对比逻辑 | **新增能力:** 优化执行后自动触发AI引擎重新查询,对比优化前后的引用变化。 #### 步骤8:定期监测 | 属性 | 说明 | |------|------| | 输入 | 监测配置(频率、指标、阈值) | | 输出 | 监测数据、告警通知 | | 自动化 | 全自动(定时任务+告警) | | 现有基础 | [QueryScheduler](../../backend/app/workers/scheduler.py) 已实现定时查询,[AlertEngine](../../backend/app/services/alert_engine.py) 已实现告警 | **改进方向:** 增加自定义监测指标和阈值配置,支持基于引用率变化的智能告警。 #### 步骤9:GEO效果报告 | 属性 | 说明 | |------|------| | 输入 | 监测数据+优化记录 | | 输出 | 效果报告(趋势、对比、ROI) | | 自动化 | 半自动(自动生成+人工解读) | | 现有基础 | [ScoringService](../../backend/app/services/scoring_service.py) 已实现评分,需扩展为趋势报告 | **新增能力:** 多时间维度的趋势分析、优化前后对比、竞品横向对比。 #### 步骤10:迭代优化(反馈闭环) | 属性 | 说明 | |------|------| | 输入 | 效果报告+监测数据 | | 输出 | 新一轮优化策略 | | 自动化 | 半自动(AI建议+人工决策) | | 现有基础 | OptimizationAdvisor 可复用,需增加反馈输入 | **新增能力:** 将效果报告自动反馈到策略生成,形成闭环迭代。 ### 1.3 与行业最佳实践对比 | 维度 | 我们的流程 | Profound | Otterly AI | 新榜智汇 | |------|-----------|----------|------------|---------| | 多引擎查询 | 7+引擎(可扩展) | 3引擎 | 4引擎 | 国内3引擎 | | 竞品对标 | ✅ 闭环 | ✅ | ✅ | ❌ | | 引用模式分析 | ✅ 规则+LLM | ✅ | ❌ | ❌ | | 自动优化执行 | 半自动 | 半自动 | 手动 | 手动 | | 效果报告 | ✅ 趋势+对比 | ✅ | ✅ | ✅ | | 反馈闭环 | ✅ 10步闭环 | ❌ | ❌ | ❌ | | 效果即时验证 | ✅ | ❌ | ❌ | ❌ | **差异化优势:** 反馈闭环和效果即时验证是我们的核心差异化能力,竞品均未实现。 --- ## 第二部分:缺失节点必要性与技术方案 ### 2.1 节点优先级矩阵 | 节点 | 重要性 | 紧迫性 | 技术难度 | 推荐优先级 | 现有基础 | |------|--------|--------|---------|-----------|---------| | AI引擎查询分析 | P0 | 高 | 中 | **Phase 1** | CitationEngine + 7个适配器 | | 引用模式识别 | P0 | 高 | 高 | **Phase 1** | citation_extractor | | 定时自动检测 | P1 | 高 | 低 | **Phase 1** | QueryScheduler + APScheduler | | GEO效果报告 | P1 | 中 | 中 | **Phase 2** | ScoringService | | 基于AI分析的策略生成 | P1 | 中 | 中 | **Phase 2** | OptimizationAdvisor | | Workflow引擎 | P2 | 低 | 高 | **Phase 3** | PipelineEngine | | 网站内容自动优化 | P2 | 低 | 高 | **Phase 3** | ContentPipeline | ### 2.2 各节点详细技术方案 #### 节点1:AI引擎查询分析 **现状分析:** [CitationEngine](../../backend/app/workers/citation_engine.py) 已实现7个平台的查询和引用检测,但存在以下不足: - 不支持批量并行查询(当前串行执行) - 不支持ChatGPT和Perplexity等国际平台 - 查询结果仅存储为CitationRecord,缺少结构化的回答分析 **数据模型:** 扩展现有 [CitationRecord](../../backend/app/models/citation_record.py) ```python class AIQueryResult(Base): """AI引擎查询结果 - 存储完整的查询响应供后续分析""" __tablename__ = "ai_query_results" id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4) brand_id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), ForeignKey("brands.id", ondelete="CASCADE"), nullable=False) query_keyword: Mapped[str] = mapped_column(String(200), nullable=False) engine: Mapped[str] = mapped_column(String(50), nullable=False, comment="AI引擎标识") raw_response: Mapped[str | None] = mapped_column(Text, nullable=True) response_length: Mapped[int | None] = mapped_column(Integer, nullable=True) cited: Mapped[bool] = mapped_column(Boolean, default=False, nullable=False) citation_position: Mapped[int | None] = mapped_column(Integer, nullable=True) citation_text: Mapped[str | None] = mapped_column(Text, nullable=True) source_urls: Mapped[list | None] = mapped_column(JSON, nullable=True) source_titles: Mapped[list | None] = mapped_column(JSON, nullable=True) confidence: Mapped[float | None] = mapped_column(Float, nullable=True) match_type: Mapped[str | None] = mapped_column(String(20), nullable=True) competitor_brands: Mapped[list] = mapped_column(JSON, default=list) queried_at: Mapped[datetime] = mapped_column(server_default=func.now(), nullable=False) __table_args__ = ( Index("idx_ai_query_results_brand_id", "brand_id"), Index("idx_ai_query_results_engine", "engine"), Index("idx_ai_query_results_queried_at", "queried_at"), Index("idx_ai_query_results_brand_engine", "brand_id", "engine"), ) ``` **API设计:** ``` POST /api/v1/ai-engines/query # 单引擎查询 POST /api/v1/ai-engines/query-batch # 批量并行查询 GET /api/v1/ai-engines/results # 获取查询结果(支持分页、过滤) GET /api/v1/ai-engines/results/{id} # 获取单条查询结果详情 ``` **核心逻辑:** 基于现有 `BasePlatformAdapter` 扩展适配器模式 ```python # 扩展现有 BasePlatformAdapter class EnhancedPlatformAdapter(BasePlatformAdapter): """增强版平台适配器 - 支持结构化响应""" @abstractmethod async def query_structured(self, keyword: str) -> StructuredQueryResult: """查询并返回结构化结果""" pass @abstractmethod async def health_check(self) -> bool: """检查平台API是否可用""" pass @dataclass class StructuredQueryResult: engine: str keyword: str raw_response: str citations: list[CitationInfo] response_length: int queried_at: datetime success: bool error_message: str | None = None ``` **新增适配器:** ```python # ChatGPT适配器 - 基于OpenAI API class ChatGPTAdapter(EnhancedPlatformAdapter): platform_name = "chatgpt" platform_url = "https://chat.openai.com" _api_base = "https://api.openai.com/v1" _model = "gpt-4o" # Perplexity适配器 - 基于Perplexity API class PerplexityAdapter(EnhancedPlatformAdapter): platform_name = "perplexity" platform_url = "https://www.perplexity.ai" _api_base = "https://api.perplexity.ai" _model = "pplx-70b-online" ``` **批量并行查询服务:** ```python class BatchQueryService: """批量并行查询服务""" def __init__(self): self.engine = CitationEngine() self.enhanced_adapters: dict[str, EnhancedPlatformAdapter] = {} async def query_batch( self, brand_id: uuid.UUID, keywords: list[str], engines: list[str], target_brand: str, brand_aliases: list[str] | None = None, ) -> list[AIQueryResult]: """批量并行查询多个引擎""" tasks = [] for keyword in keywords: for engine_name in engines: tasks.append( self._query_single(brand_id, keyword, engine_name, target_brand, brand_aliases) ) results = await asyncio.gather(*tasks, return_exceptions=True) return [r for r in results if isinstance(r, AIQueryResult)] async def _query_single(self, brand_id, keyword, engine, target_brand, brand_aliases): adapter = self.enhanced_adapters.get(engine) if not adapter: raise ValueError(f"不支持的引擎: {engine}") result = await adapter.query_structured(keyword) # ... 存储到数据库 ``` **外部依赖:** - OpenAI API(ChatGPT适配器) - Perplexity API(Perplexity适配器) - 现有7个平台API(已集成) #### 节点2:引用模式识别 **现状分析:** [citation_extractor.py](../../backend/app/workers/citation_extractor.py) 已实现引用源提取(URL、标题、上下文),但缺少跨查询的模式分析能力。 **数据模型:** ```python class CitationPattern(Base): """引用模式 - AI引擎的引用偏好规律""" __tablename__ = "citation_patterns" id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4) brand_id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), ForeignKey("brands.id", ondelete="CASCADE"), nullable=False) pattern_type: Mapped[str] = mapped_column( String(50), nullable=False, comment="模式类型: content_structure/authority_signal/citation_format/topic_preference" ) engine: Mapped[str] = mapped_column(String(50), nullable=False, comment="AI引擎标识") frequency: Mapped[float] = mapped_column(Float, default=0.0, comment="该模式出现的频率") content_features: Mapped[dict | None] = mapped_column(JSON, nullable=True, comment="内容特征描述") engine_preference: Mapped[dict | None] = mapped_column(JSON, nullable=True, comment="引擎偏好数据") sample_count: Mapped[int] = mapped_column(Integer, default=0, comment="分析样本数") confidence: Mapped[float] = mapped_column(Float, default=0.0, comment="模式置信度") analyzed_at: Mapped[datetime] = mapped_column(server_default=func.now(), nullable=False) __table_args__ = ( Index("idx_citation_patterns_brand_id", "brand_id"), Index("idx_citation_patterns_pattern_type", "pattern_type"), Index("idx_citation_patterns_engine", "engine"), ) ``` **API设计:** ``` POST /api/v1/citation-patterns/analyze # 触发引用模式分析 GET /api/v1/citation-patterns # 获取模式列表(支持分页、过滤) GET /api/v1/citation-patterns/{id} # 获取模式详情 GET /api/v1/citation-patterns/summary # 获取模式摘要(按引擎聚合) ``` **核心逻辑:** 规则引擎(结构化特征提取)+ LLM(语义分析) ```python class CitationPatternEngine: """引用模式识别引擎""" def __init__(self): self.rule_analyzers = { "content_structure": ContentStructureAnalyzer(), "authority_signal": AuthoritySignalAnalyzer(), "citation_format": CitationFormatAnalyzer(), "topic_preference": TopicPreferenceAnalyzer(), } async def analyze(self, brand_id: uuid.UUID, db: AsyncSession) -> list[CitationPattern]: """分析引用模式""" # 1. 获取该品牌的所有查询结果 results = await self._fetch_query_results(brand_id, db) # 2. 规则引擎分析结构化特征 patterns = [] for pattern_type, analyzer in self.rule_analyzers.items(): rule_patterns = analyzer.analyze(results) patterns.extend(rule_patterns) # 3. LLM语义分析(补充规则引擎无法发现的模式) if settings.ENABLE_LLM: llm_patterns = await self._llm_analyze(results) patterns.extend(llm_patterns) # 4. 存储并返回 for pattern in patterns: db.add(pattern) await db.commit() return patterns class ContentStructureAnalyzer: """内容结构分析器 - 识别AI偏好的内容结构""" def analyze(self, results: list[AIQueryResult]) -> list[CitationPattern]: patterns = [] # 分析引用内容中的结构特征 # - 列表/表格出现频率 # - FAQ格式出现频率 # - 标题层级结构 # - 数据/统计信息出现频率 return patterns class AuthoritySignalAnalyzer: """权威信号分析器 - 识别AI偏好的权威性信号""" def analyze(self, results: list[AIQueryResult]) -> list[CitationPattern]: patterns = [] # 分析引用来源中的权威信号 # - .gov/.edu/.org 域名占比 # - 维基百科引用频率 # - 学术论文引用频率 # - 官方网站引用频率 return patterns ``` #### 节点3:定时自动检测 **现状分析:** [QueryScheduler](../../backend/app/workers/scheduler.py) 已实现基于APScheduler的定时查询调度,支持每小时检查和每分钟pending任务兜底。需扩展为支持自定义频率和智能调度。 **数据模型:** 扩展现有 [Query](../../backend/app/models/query.py) 模型 ```python # 在 Query 模型中新增字段 detection_config: Mapped[dict | None] = mapped_column( JSONType, nullable=True, comment="检测配置: {metrics: [...], thresholds: {...}, alert_rules: [...]}" ) ``` **API设计:** ``` POST /api/v1/detection/tasks # 创建检测任务 GET /api/v1/detection/tasks # 获取任务列表 PUT /api/v1/detection/tasks/{id} # 更新任务配置 DELETE /api/v1/detection/tasks/{id} # 删除检测任务 POST /api/v1/detection/tasks/{id}/trigger # 手动触发检测 ``` **核心逻辑:** 扩展现有 QueryScheduler ```python class EnhancedQueryScheduler(QueryScheduler): """增强版查询调度器 - 支持自定义频率和智能调度""" def __init__(self): super().__init__() self._detection_configs: dict[str, DetectionConfig] = {} async def create_detection_task(self, config: DetectionConfig, db: AsyncSession): """创建检测任务""" # 1. 创建 Query 记录 query = Query( user_id=config.user_id, keyword=config.keyword, target_brand=config.target_brand, brand_aliases=config.brand_aliases, platforms=config.platforms, frequency=config.frequency, detection_config=config.to_dict(), ) db.add(query) await db.commit() # 2. 注册定时任务 self._register_job(query) return query def _register_job(self, query: Query): """根据频率注册定时任务""" freq_map = { "hourly": IntervalTrigger(hours=1), "daily": IntervalTrigger(hours=24), "weekly": IntervalTrigger(days=7), "monthly": IntervalTrigger(days=30), } trigger = freq_map.get(query.frequency, IntervalTrigger(days=7)) self.scheduler.add_job( self._execute_detection, trigger=trigger, id=f"detection_{query.id}", name=f"检测任务: {query.keyword}", args=[query.id], replace_existing=True, ) ``` #### 节点4:GEO效果报告 **现状分析:** [ScoringService](../../backend/app/services/scoring_service.py) 已实现V2评分(5维度),但缺少趋势分析和报告生成能力。 **数据模型:** ```python class GEOResultReport(Base): """GEO效果报告""" __tablename__ = "geo_result_reports" id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4) brand_id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), ForeignKey("brands.id", ondelete="CASCADE"), nullable=False) period_start: Mapped[datetime] = mapped_column(nullable=False, comment="报告周期起始") period_end: Mapped[datetime] = mapped_column(nullable=False, comment="报告周期结束") overall_score: Mapped[float] = mapped_column(Float, nullable=False) previous_score: Mapped[float | None] = mapped_column(Float, nullable=True, comment="上期评分") score_change: Mapped[float | None] = mapped_column(Float, nullable=True, comment="评分变化") metrics: Mapped[dict] = mapped_column(JSON, nullable=False, comment="各维度指标数据") trends: Mapped[dict | None] = mapped_column(JSON, nullable=True, comment="趋势数据") competitor_comparison: Mapped[dict | None] = mapped_column(JSON, nullable=True, comment="竞品对比数据") recommendations: Mapped[dict | None] = mapped_column(JSON, nullable=True, comment="AI生成的建议") generated_at: Mapped[datetime] = mapped_column(server_default=func.now(), nullable=False) __table_args__ = ( Index("idx_geo_result_reports_brand_id", "brand_id"), Index("idx_geo_result_reports_period", "period_start", "period_end"), ) ``` **API设计:** ``` POST /api/v1/reports/generate # 生成报告 GET /api/v1/reports # 获取报告列表 GET /api/v1/reports/{id} # 获取报告详情 GET /api/v1/reports/trends # 获取趋势数据 ``` **核心逻辑:** 数据聚合 + 趋势计算 + LLM解读 ```python class GEOReportService: """GEO效果报告生成服务""" async def generate_report( self, brand_id: uuid.UUID, period: str, db: AsyncSession ) -> GEOResultReport: """生成GEO效果报告""" # 1. 聚合周期内数据 current_metrics = await self._aggregate_metrics(brand_id, period, db) previous_metrics = await self._aggregate_metrics(brand_id, self._previous_period(period), db) # 2. 计算趋势 trends = self._calculate_trends(current_metrics, previous_metrics) # 3. 竞品对比 competitor_comparison = await self._compare_competitors(brand_id, period, db) # 4. LLM解读(可选) recommendations = None if settings.ENABLE_LLM: recommendations = await self._llm_interpret(current_metrics, trends, competitor_comparison) # 5. 生成报告 report = GEOResultReport( brand_id=brand_id, period_start=current_metrics["period_start"], period_end=current_metrics["period_end"], overall_score=current_metrics["overall_score"], previous_score=previous_metrics.get("overall_score"), score_change=current_metrics["overall_score"] - previous_metrics.get("overall_score", 0), metrics=current_metrics, trends=trends, competitor_comparison=competitor_comparison, recommendations=recommendations, ) db.add(report) await db.commit() return report ``` #### 节点5:基于AI分析的策略生成 **现状分析:** [OptimizationAdvisor](../../backend/app/services/optimization_advisor.py) 已实现5类建议生成(content_optimization/platform_targeting/competitor_gap/query_expansion/citation_improvement),支持规则生成和LLM生成两种模式。需扩展输入源,增加引用模式分析结果。 **改进方案:** 扩展 `BrandAnalysisContext` 数据结构 ```python @dataclass class EnhancedBrandAnalysisContext(BrandAnalysisContext): """增强版品牌分析上下文 - 增加引用模式分析输入""" citation_patterns: list[dict] = field(default_factory=list) ai_engine_preferences: dict[str, dict] = field(default_factory=dict) content_structure_insights: dict[str, Any] = field(default_factory=dict) authority_signal_insights: dict[str, Any] = field(default_factory=dict) ``` **API设计:** 扩展现有 `/api/v1/suggestions` 端点 ``` POST /api/v1/suggestions/generate-with-patterns # 基于引用模式生成策略 GET /api/v1/suggestions # 获取建议列表(已有) PUT /api/v1/suggestions/{id}/status # 更新建议状态(已有) ``` **核心逻辑:** 引用模式 → 策略模板匹配 → LLM生成具体建议 ```python async def generate_pattern_based_suggestions( ctx: EnhancedBrandAnalysisContext, ) -> list[SuggestionItem]: """基于引用模式分析生成优化策略""" suggestions = [] # 1. 基于内容结构模式生成策略 for pattern in ctx.citation_patterns: if pattern["pattern_type"] == "content_structure": if pattern.get("features", {}).get("faq_frequency", 0) > 0.5: suggestions.append(SuggestionItem( type="content_optimization", priority="high", title="增加FAQ结构化内容", description=f"AI引擎偏好FAQ格式内容(出现频率{pattern['frequency']:.0%})", action="1. 在核心页面添加FAQPage Schema标记\n2. 创建常见问题解答页面\n3. 使用问答式标题结构", expected_impact="预计提升引用率15-25%", difficulty="medium", )) # 2. 基于权威信号模式生成策略 # 3. 基于引用格式模式生成策略 # 4. LLM补充生成 return suggestions ``` #### 节点6:Workflow引擎 **现状分析:** [PipelineEngine](../../backend/app/agent_framework/pipeline/engine.py) 已实现DAG执行引擎,支持条件执行、重试机制和变量解析。但当前仅用于内容生成Pipeline,需扩展为通用Workflow引擎。 **数据模型:** ```python class WorkflowDefinition(Base): """Workflow定义""" __tablename__ = "workflow_definitions" id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4) name: Mapped[str] = mapped_column(String(100), nullable=False) description: Mapped[str | None] = mapped_column(Text, nullable=True) steps: Mapped[dict] = mapped_column(JSON, nullable=False, comment="Workflow步骤定义(DAG)") version: Mapped[int] = mapped_column(Integer, default=1) is_active: Mapped[bool] = mapped_column(Boolean, default=True) created_at: Mapped[datetime] = mapped_column(server_default=func.now(), nullable=False) updated_at: Mapped[datetime] = mapped_column(server_default=func.now(), onupdate=func.now(), nullable=False) class WorkflowExecution(Base): """Workflow执行记录""" __tablename__ = "workflow_executions" id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4) workflow_id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), ForeignKey("workflow_definitions.id", ondelete="CASCADE"), nullable=False) brand_id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), ForeignKey("brands.id", ondelete="CASCADE"), nullable=False) status: Mapped[str] = mapped_column(String(20), default="pending", comment="pending/running/completed/failed") current_step: Mapped[str | None] = mapped_column(String(100), nullable=True) step_results: Mapped[dict | None] = mapped_column(JSON, nullable=True) error_message: Mapped[str | None] = mapped_column(Text, nullable=True) started_at: Mapped[datetime | None] = mapped_column(nullable=True) completed_at: Mapped[datetime | None] = mapped_column(nullable=True) created_at: Mapped[datetime] = mapped_column(server_default=func.now(), nullable=False) __table_args__ = ( Index("idx_workflow_executions_workflow_id", "workflow_id"), Index("idx_workflow_executions_brand_id", "brand_id"), Index("idx_workflow_executions_status", "status"), ) ``` **API设计:** ``` POST /api/v1/workflows # 创建工作流 GET /api/v1/workflows # 获取工作流列表 GET /api/v1/workflows/{id} # 获取工作流详情 POST /api/v1/workflows/{id}/execute # 执行工作流 GET /api/v1/workflows/{id}/status # 获取执行状态 POST /api/v1/workflows/{id}/pause # 暂停执行 POST /api/v1/workflows/{id}/resume # 恢复执行 ``` **核心逻辑:** 基于现有 PipelineEngine 扩展 ```python class GEOWorkflowEngine: """GEO Workflow引擎 - 编排10步闭环流程""" def __init__(self): self.pipeline_engine = PipelineEngine() async def execute_geo_workflow( self, brand_id: uuid.UUID, db: AsyncSession ) -> WorkflowExecution: """执行完整的GEO Workflow""" execution = WorkflowExecution( workflow_id=self._get_geo_workflow_id(), brand_id=brand_id, status="running", ) db.add(execution) await db.commit() try: # Step 1: 品牌画像构建 execution.current_step = "brand_profile" await db.commit() brand_profile = await self._build_brand_profile(brand_id, db) # Step 2: 竞品基准设定 execution.current_step = "competitor_baseline" await db.commit() competitor_baseline = await self._set_competitor_baseline(brand_id, db) # Step 3: AI引擎查询分析 execution.current_step = "ai_engine_query" await db.commit() query_results = await self._execute_ai_queries(brand_id, brand_profile, db) # Step 4: 引用模式识别 execution.current_step = "citation_pattern" await db.commit() patterns = await self._analyze_citation_patterns(brand_id, query_results, db) # Step 5: 优化策略生成 execution.current_step = "strategy_generation" await db.commit() strategies = await self._generate_strategies(brand_profile, patterns, competitor_baseline, db) # Step 6: 内容优化执行 execution.current_step = "content_optimization" await db.commit() optimization_results = await self._execute_optimization(strategies, db) # Step 7: 效果即时验证 execution.current_step = "immediate_verification" await db.commit() verification = await self._verify_immediately(brand_id, optimization_results, db) # Step 8-10: 由定时任务驱动 execution.status = "completed" execution.completed_at = datetime.utcnow() except Exception as e: execution.status = "failed" execution.error_message = str(e) execution.completed_at = datetime.utcnow() await db.commit() return execution ``` #### 节点7:网站内容自动优化 **现状分析:** [ContentPipeline](../../backend/app/services/content/content_pipeline.py) 已实现内容处理流水线(规则校验→敏感词过滤→SEO优化→HTML生成),但缺少 Schema 生成和 FAQ 生成能力。 **数据模型:** ```python class ContentOptimizationTask(Base): """内容优化任务""" __tablename__ = "content_optimization_tasks" id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4) brand_id: Mapped[uuid.UUID] = mapped_column(Uuid(as_uuid=True), ForeignKey("brands.id", ondelete="CASCADE"), nullable=False) suggestion_id: Mapped[uuid.UUID | None] = mapped_column(Uuid(as_uuid=True), ForeignKey("suggestions.id", ondelete="SET NULL"), nullable=True) optimization_type: Mapped[str] = mapped_column( String(50), nullable=False, comment="优化类型: schema_markup/faq_content/content_rewrite/authority_link" ) target_url: Mapped[str | None] = mapped_column(String(500), nullable=True, comment="目标页面URL") original_content: Mapped[str | None] = mapped_column(Text, nullable=True) optimized_content: Mapped[str | None] = mapped_column(Text, nullable=True) changes: Mapped[dict | None] = mapped_column(JSON, nullable=True, comment="变更详情") status: Mapped[str] = mapped_column( String(20), nullable=False, default="pending", comment="pending/ai_generated/human_reviewed/published/rejected" ) reviewer_id: Mapped[uuid.UUID | None] = mapped_column(Uuid(as_uuid=True), nullable=True) created_at: Mapped[datetime] = mapped_column(server_default=func.now(), nullable=False) updated_at: Mapped[datetime] = mapped_column(server_default=func.now(), onupdate=func.now(), nullable=False) __table_args__ = ( Index("idx_content_optimization_brand_id", "brand_id"), Index("idx_content_optimization_status", "status"), Index("idx_content_optimization_type", "optimization_type"), ) ``` **API设计:** ``` POST /api/v1/content-optimization # 创建优化任务 GET /api/v1/content-optimization # 获取任务列表 GET /api/v1/content-optimization/{id} # 获取任务详情 PUT /api/v1/content-optimization/{id}/review # 人工审核 POST /api/v1/content-optimization/{id}/publish # 发布优化内容 ``` **核心逻辑:** 半自动模式,AI生成+人工审核发布 ```python class ContentOptimizer: """内容自动优化服务""" async def generate_schema_markup(self, brand: Brand, db: AsyncSession) -> dict: """生成Schema.org结构化数据""" schema_types = { "Organization": self._generate_organization_schema, "Product": self._generate_product_schema, "FAQPage": self._generate_faq_schema, "Article": self._generate_article_schema, } results = {} for schema_type, generator in schema_types.items(): results[schema_type] = await generator(brand) return results async def generate_faq_content(self, brand: Brand, patterns: list[CitationPattern]) -> list[dict]: """基于引用模式生成FAQ内容""" # 从引用模式中提取高频问题 # 使用LLM生成FAQ回答 # 返回结构化FAQ数据 pass async def optimize_content( self, task: ContentOptimizationTask, db: AsyncSession ) -> ContentOptimizationTask: """执行内容优化""" if task.optimization_type == "schema_markup": task.optimized_content = await self._apply_schema_optimization(task) elif task.optimization_type == "faq_content": task.optimized_content = await self._apply_faq_optimization(task) elif task.optimization_type == "content_rewrite": task.optimized_content = await self._apply_content_rewrite(task) task.status = "ai_generated" await db.commit() return task ``` --- ## 第三部分:开发计划 ### Phase 1 - 核心能力建设(4周) #### Week 1-2:AI引擎查询分析 | 任务 | 类型 | 说明 | |------|------|------| | AIQueryResult 数据模型 | 后端 | 新增查询结果模型,含迁移脚本 | | EnhancedPlatformAdapter | 后端 | 扩展适配器基类,支持结构化响应 | | ChatGPT 适配器 | 后端 | 基于 OpenAI API 实现 | | Perplexity 适配器 | 后端 | 基于 Perplexity API 实现 | | BatchQueryService | 后端 | 批量并行查询服务 | | AI引擎查询API | 后端 | 3个端点(单查询/批量/结果) | | AI引擎查询结果展示页 | 前端 | 查询结果表格+详情弹窗 | | 单元测试+集成测试 | 测试 | 覆盖适配器和服务层 | **关键交付物:** - 9个AI平台适配器(现有7个+新增2个) - 批量并行查询服务 - 查询结果API和前端展示 #### Week 3-4:引用模式识别+定时检测 | 任务 | 类型 | 说明 | |------|------|------| | CitationPattern 数据模型 | 后端 | 新增引用模式模型,含迁移脚本 | | CitationPatternEngine | 后端 | 引用模式识别引擎(4类分析器) | | ContentStructureAnalyzer | 后端 | 内容结构特征分析 | | AuthoritySignalAnalyzer | 后端 | 权威信号分析 | | EnhancedQueryScheduler | 后端 | 扩展定时调度器 | | DetectionConfig 扩展 | 后端 | Query模型增加检测配置字段 | | 引用模式分析API | 后端 | 4个端点(分析/列表/详情/摘要) | | 检测任务配置API | 后端 | 5个端点(CRUD+手动触发) | | 引用模式分析页面 | 前端 | 模式可视化+引擎偏好对比 | | 检测任务配置页面 | 前端 | 任务创建/编辑/触发 | | 单元测试+集成测试 | 测试 | 覆盖分析器和调度器 | **关键交付物:** - 引用模式识别引擎(4类分析器) - 增强版定时调度器 - 分析和配置API及前端页面 ### Phase 2 - 策略与报告(3周) #### Week 5-6:策略生成+效果报告 | 任务 | 类型 | 说明 | |------|------|------| | EnhancedBrandAnalysisContext | 后端 | 扩展分析上下文,增加引用模式输入 | | generate_pattern_based_suggestions | 后端 | 基于引用模式的策略生成 | | GEOResultReport 数据模型 | 后端 | 新增报告模型,含迁移脚本 | | GEOReportService | 后端 | 报告生成服务(聚合+趋势+LLM解读) | | 策略生成API扩展 | 后端 | 新增基于模式的策略生成端点 | | 报告API | 后端 | 4个端点(生成/列表/详情/趋势) | | 策略生成结果页面 | 前端 | 策略卡片+引用模式关联展示 | | 效果报告展示页面 | 前端 | 趋势图表+竞品对比+AI解读 | | 单元测试+集成测试 | 测试 | 覆盖策略生成和报告服务 | #### Week 7:集成测试+优化 | 任务 | 类型 | 说明 | |------|------|------| | 端到端测试 | 测试 | 品牌创建→查询→分析→策略→报告全流程 | | 性能优化 | 后端 | 批量查询并发优化、缓存策略 | | Bug修复 | 全栈 | 修复集成测试发现的问题 | ### Phase 3 - 自动化引擎(3周) #### Week 8-9:Workflow引擎 | 任务 | 类型 | 说明 | |------|------|------| | WorkflowDefinition 数据模型 | 后端 | Workflow定义模型 | | WorkflowExecution 数据模型 | 后端 | Workflow执行记录模型 | | GEOWorkflowEngine | 后端 | 基于PipelineEngine扩展的Workflow引擎 | | Workflow API | 后端 | 7个端点(CRUD+执行+暂停+恢复) | | Workflow配置页面 | 前端 | 可视化Workflow编辑器 | | Workflow监控页面 | 前端 | 执行状态+步骤进度+日志 | | 单元测试+集成测试 | 测试 | 覆盖Workflow引擎 | #### Week 10:内容自动优化 | 任务 | 类型 | 说明 | |------|------|------| | ContentOptimizationTask 数据模型 | 后端 | 内容优化任务模型 | | ContentOptimizer | 后端 | 内容优化服务 | | Schema生成器 | 后端 | Organization/Product/FAQPage/Article | | FAQ生成器 | 后端 | 基于引用模式的FAQ内容生成 | | 半自动审核流程 | 后端 | AI生成→人工审核→发布 | | 内容优化API | 后端 | 5个端点(创建/列表/详情/审核/发布) | | 单元测试+集成测试 | 测试 | 覆盖优化器和审核流程 | ### Phase 4 - 打磨上线(2周) #### Week 11-12:全面测试+上线准备 | 任务 | 类型 | 说明 | |------|------|------| | 全量E2E测试 | 测试 | 覆盖所有用户流程 | | 性能压测 | 测试 | 批量查询并发、报告生成性能 | | 安全审计 | 安全 | API权限、数据隔离、敏感信息 | | 文档完善 | 文档 | API文档更新、用户手册更新 | | 上线部署 | 运维 | 数据库迁移、服务部署、监控配置 | ### 开发时间线总览 ``` Week 1 ────┬─── Phase 1: AI引擎查询分析 Week 2 ────┤ Week 3 ────┼─── Phase 1: 引用模式识别+定时检测 Week 4 ────┤ Week 5 ────┼─── Phase 2: 策略生成+效果报告 Week 6 ────┤ Week 7 ────┤ Phase 2: 集成测试+优化 Week 8 ────┼─── Phase 3: Workflow引擎 Week 9 ────┤ Week 10 ────┤ Phase 3: 内容自动优化 Week 11 ────┼─── Phase 4: 全面测试+上线 Week 12 ────┘ ``` --- ## 第四部分:技术架构 ### 4.1 新增模块架构 ``` backend/app/ ├── services/ │ ├── ai_engine_query.py # AI引擎查询服务(批量并行) │ ├── citation_pattern.py # 引用模式识别引擎 │ ├── detection_scheduler.py # 增强版检测任务调度 │ ├── geo_report.py # GEO报告生成服务 │ ├── workflow_engine.py # GEO Workflow引擎 │ └── content_optimizer.py # 内容自动优化服务 ├── workers/ │ ├── platforms/ │ │ ├── base.py # 适配器基类(扩展为EnhancedPlatformAdapter) │ │ ├── chatgpt.py # ChatGPT适配器 [新增] │ │ ├── perplexity.py # Perplexity适配器 [新增] │ │ ├── kimi.py # Kimi适配器(已有) │ │ ├── wenxin.py # 文心一言适配器(已有) │ │ ├── tongyi.py # 通义千问适配器(已有) │ │ ├── doubao.py # 豆包适配器(已有) │ │ ├── qingyan.py # 轻颜适配器(已有) │ │ ├── tiangong.py # 天工适配器(已有) │ │ └── xinghuo.py # 星火适配器(已有) │ └── citation_engine.py # 引用检测引擎(扩展) ├── models/ │ ├── ai_query_result.py # 查询结果模型 [新增] │ ├── citation_pattern.py # 引用模式模型 [新增] │ ├── geo_report.py # 报告模型 [新增] │ ├── workflow.py # Workflow模型 [新增] │ └── content_optimization.py # 内容优化模型 [新增] ├── schemas/ │ ├── ai_query.py # 查询相关Schema [新增] │ ├── citation_pattern.py # 引用模式Schema [新增] │ ├── geo_report.py # 报告Schema [新增] │ ├── workflow.py # Workflow Schema [新增] │ └── content_optimization.py # 内容优化Schema [新增] └── api/ ├── ai_engines.py # AI引擎API [新增] ├── citation_patterns.py # 引用模式API [新增] ├── detection.py # 检测任务API [新增] ├── reports.py # 报告API [扩展] ├── workflows.py # Workflow API [新增] └── content_optimization.py # 内容优化API [新增] ``` ### 4.2 数据流架构 ``` 品牌画像 ──→ 查询词 ──→ AI引擎查询 ──→ 引用模式识别 ──→ 策略生成 ──→ 内容优化 ↑ ↓ │ 效果即时验证 │ ↓ └──────────── 反馈闭环 ←── 效果报告 ←── 定期监测 ←─── 验证结果 ``` **详细数据流:** ``` ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ Brand │────→│ Query │────→│ AIQueryResult │ │ (品牌画像) │ │ (查询词) │ │ (查询结果) │ └──────────────┘ └──────────────┘ └────────┬─────────┘ │ ▼ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ Suggestion │←────│ Citation │←────│ CitationPattern │ │ (优化建议) │ │ Record │ │ (引用模式) │ └──────┬───────┘ └──────────────┘ └──────────────────┘ │ ▼ ┌──────────────────┐ ┌──────────────┐ ┌──────────────┐ │ ContentOptim │────→│ Verification│────→│ Detection │ │ Task (优化任务) │ │ (即时验证) │ │ Task (定期监测)│ └──────────────────┘ └──────┬───────┘ └──────┬───────┘ │ │ ▼ ▼ ┌──────────────────────────────┐ │ GEOResultReport │ │ (GEO效果报告) │ └──────────────┬───────────────┘ │ ▼ ┌──────────────┐ │ 新一轮 │ │ Suggestion │ │ (迭代优化) │ └──────────────┘ ``` ### 4.3 与现有系统的集成点 | 新模块 | 集成点 | 集成方式 | |--------|--------|---------| | AI引擎查询服务 | CitationEngine | 扩展:增加批量查询和结构化响应 | | 引用模式识别 | citation_extractor | 扩展:从单次提取升级为模式分析 | | 检测任务调度 | QueryScheduler | 扩展:增加自定义频率和智能调度 | | GEO报告 | ScoringService | 扩展:增加趋势计算和报告生成 | | 策略生成 | OptimizationAdvisor | 扩展:增加引用模式输入源 | | Workflow引擎 | PipelineEngine | 扩展:从内容生成Pipeline升级为通用Workflow | | 内容优化 | ContentPipeline | 扩展:增加Schema/FAQ生成器 | ### 4.4 数据库迁移计划 | Phase | 迁移脚本 | 新增表 | 修改表 | |-------|---------|--------|--------| | Phase 1 | `add_ai_query_results_table.py` | ai_query_results | - | | Phase 1 | `add_citation_patterns_table.py` | citation_patterns | - | | Phase 1 | `add_detection_config_to_queries.py` | - | queries(新增detection_config字段) | | Phase 2 | `add_geo_result_reports_table.py` | geo_result_reports | - | | Phase 2 | `add_brand_profile_data.py` | - | brands(新增profile_data字段) | | Phase 3 | `add_workflow_tables.py` | workflow_definitions, workflow_executions | - | | Phase 3 | `add_content_optimization_tasks_table.py` | content_optimization_tasks | - | ### 4.5 前端新增页面 | Phase | 页面 | 路由 | 说明 | |-------|------|------|------| | Phase 1 | AI引擎查询结果 | `/dashboard/ai-queries` | 查询结果表格+详情弹窗 | | Phase 1 | 引用模式分析 | `/dashboard/citation-patterns` | 模式可视化+引擎偏好对比 | | Phase 1 | 检测任务配置 | `/dashboard/detection` | 任务创建/编辑/触发 | | Phase 2 | 效果报告 | `/dashboard/reports` | 趋势图表+竞品对比+AI解读 | | Phase 2 | 策略详情 | `/dashboard/strategy` | 策略卡片+引用模式关联 | | Phase 3 | Workflow配置 | `/dashboard/workflows` | 可视化Workflow编辑器 | | Phase 3 | Workflow监控 | `/dashboard/workflows/[id]` | 执行状态+步骤进度+日志 | | Phase 3 | 内容优化 | `/dashboard/content-optimization` | 优化任务管理+审核发布 |