geo/docs/plans/2026-05-28-001-feat-geo-pla...

16 KiB
Raw Blame History

GEO 平台新增 Agent 实现计划

Status: Draft Type: feat Created: 2026-05-28 Updated: 2026-05-28

Summary

为 GEO 平台新增 4 个专业 Agent构建完整的监测-分析-优化闭环:

  1. MonitorAgent — 效果追踪:定期检测内容发布后的引用变化
  2. SchemaAdvisor — Schema优化根据诊断结果推荐具体的 Schema 标记方案
  3. CompetitorAnalyzer — 竞品分析:深度分析竞品内容策略、引用模式
  4. TrendAgent — 趋势洞察:分析行业 AI 搜索趋势、热点话题

Problem Frame

当前 GEO 平台已有 4 个 AgentCitationDetector、ContentGenerator、DeAIAgent、GEOOptimizer覆盖检测→生成→去AI化→优化链路。但缺少

  • 效果追踪:内容发布后无法自动追踪引用变化
  • Schema 优化:诊断发现 Schema 问题但没有 Agent 提供具体方案
  • 竞品深度分析:仅做引用检测,缺乏策略层面的竞品分析
  • 趋势洞察:无法感知行业 AI 搜索趋势和热点话题

这 4 个 Agent 的缺失导致 GEO 平台只能发现问题,无法主动建议行动方向。


Scope Boundaries

In Scope

  • 4 个新 Agent 的完整实现
  • Agent 注册和调度集成
  • 相应的数据模型和 API
  • 前端展示(可选,取决于 API 完备性)

Out of Scope

  • 不实现前端页面(只提供 API供现有页面调用
  • 不实现自动执行闭环(内容发布后的自动追踪需要分发系统配合)
  • TrendAgent 的第三方数据源集成(仅使用现有 AI 引擎返回的引用数据)

Key Technical Decisions

KTD-1: MonitorAgent 触发方式

Decision: 采用「定时任务 + 手动触发」双模式

Rationale: 自动追踪需要内容分发系统配合,目前分发系统仅支持手动发布。定时任务模式可覆盖已有内容的手动追踪需求。手动触发作为 API 入口,可被前端页面直接调用。

Alternatives considered:

  • 仅定时任务:无法满足用户即时查询需求
  • 仅手动触发:无法实现自动化效果追踪

KTD-2: SchemaAdvisor 生成策略

Decision: 采用「规则模板 + LLM 增强」混合模式

Rationale: Schema 标记有明确的规范JSON-LD 格式),规则模板可覆盖 80% 常见场景。LLM 用于生成描述性内容(如 FAQ 的 questions/answers和处理边界情况。

Alternatives considered:

  • 纯规则:无法处理动态内容场景
  • 纯 LLMSchema 格式要求严格,纯 LLM 生成可能不合规

KTD-3: CompetitorAnalyzer 数据来源

Decision: 复用现有 CitationDetector 的检测数据

Rationale: 竞品分析依赖品牌和竞品的引用数据,现有 CitationDetector 已实现全量检测能力。新 Agent 只需在检测结果基础上做策略分析,避免重复建设。

Alternatives considered:

  • 独立检测通道:增加 API 调用成本和数据冗余
  • 仅分析历史数据:无法获取最新竞品动态

KTD-4: TrendAgent 趋势识别

Decision: 基于「品牌领域关键词 + AI 引擎引用模式」识别趋势

Rationale: TrendAgent 的定位是「GEO 趋势洞察」而非「通用舆情分析」。通过分析品牌核心关键词在 AI 引擎中的引用模式变化,可以识别用户关注度趋势,无需引入外部数据源。

Alternatives considered:

  • 接入第三方舆情 API成本高、数据不精准
  • 基于社交媒体趋势:与 GEO 关联度低

High-Level Technical Design

4 Agent 在现有架构中的位置

┌──────────────────────────────────────────────────────────────────┐
│                    Agent Framework (Dispatcher)                  │
└──────────────────────────────────────────────────────────────────┘
                              │
      ┌───────────┬───────────┼───────────┬───────────┐
      ▼           ▼           ▼           ▼           ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│Citation  │ │Monitor   │ │Schema    │ │Competitor│ │Trend     │
│Detector  │ │Agent 🆕  │ │Advisor 🆕│ │Analyzer 🆕│ │Agent 🆕  │
│          │ │          │ │          │ │          │ │          │
│引用检测   │ │效果追踪   │ │Schema    │ │竞品策略   │ │趋势洞察   ││
└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘
     │            │            │            │            │
     ▼            ▼            ▼            ▼            ▼
 CitationRecord  MonitoringRecord  SchemaSuggestion  CompetitorInsight  TrendInsight
     │            │            │            │            │
     ▼            ▼            ▼            ▼            ▼
  ScoringService  GeoPlanGenerator  DiagnosisReport  StrategyPage   Dashboard

MonitorAgent 数据流

内容发布 → 记录监测任务 → 定时执行检测 → 对比基线数据 → 生成变化报告 → 更新评分
                                    │
                            ┌───────┴───────┐
                            │ 变化类型判断   │
                            ├───────────────┤
                            │ + 引用量增加   │ → 正面反馈
                            │ - 引用量下降   │ → 告警 + 建议
                            │ = 无变化       │ → 持续观察
                            └───────────────┘

SchemaAdvisor 建议生成

诊断数据 → 识别 Schema 缺失维度 → 匹配模板 → 生成 JSON-LD → LLM 填充内容 → 验证格式
                                                              │
                                                      ┌───────┴───────┐
                                                      │  格式验证通过  │ → 返回建议
                                                      │  格式验证失败  │ → 回退到规则
                                                      └───────────────┘

Implementation Units

U1. MonitorAgent — 效果追踪 Agent

Goal: 实现内容发布后引用变化的自动追踪和对比分析

Requirements: R1效果追踪

Files:

  • app/agent_framework/agents/monitor_agent.py (新增)
  • app/models/monitoring.py (新增)
  • app/schemas/monitoring.py (新增)
  • app/services/monitoring/monitor_service.py (新增)
  • app/api/monitoring.py (新增)
  • tests/test_monitor_agent.py (新增)

Approach:

  1. 数据模型:MonitoringRecord 记录监测任务,ContentBaseline 存储发布时的基线数据
  2. Agent 逻辑:接收监测任务 → 提取关键词和平台 → 调用 CitationService 检测 → 对比基线 → 生成变化报告
  3. 变化判断:基于引用量、情感倾向、引用排名三个维度计算变化幅度
  4. API提供创建监测任务、查询监测历史、获取变化报告的端点

Test scenarios:

  • Happy path: 内容发布后创建监测任务,定时检测对比基线,生成正面/负面/无变化报告
  • Edge case: 基线数据为空时,使用首次检测作为基线
  • Error path: 检测服务不可用时,记录失败状态并重试
  • Integration: 监测任务触发时,通过 Dispatcher 正确分发给 MonitorAgent

U2. SchemaAdvisor — Schema 优化建议 Agent

Goal: 根据诊断结果生成具体的 Schema 标记方案

Requirements: R2Schema 优化)

Files:

  • app/agent_framework/agents/schema_advisor.py (新增)
  • app/models/schema_suggestion.py (新增)
  • app/schemas/schema_suggestion.py (新增)
  • app/services/schema/schema_advisor_service.py (新增)
  • app/api/schema_advisor.py (新增)
  • tests/test_schema_advisor.py (新增)

Approach:

  1. 诊断数据输入:接收 GEO 诊断结果,识别 Schema 缺失维度
  2. 模板匹配5 种 Schema 类型 × 3 种场景 = 15 个预定义模板
    • Organization: 品牌主页
    • Product: 产品详情页
    • FAQPage: 常见问题页
    • Article: 博客/新闻页
    • LocalBusiness: 本地商户页
  3. LLM 增强:使用 LLM 生成 FAQ 的 questions/answers、Product 描述等自然语言内容
  4. 格式验证:使用 JSON-LD 解析器验证生成结果的语法正确性
  5. 优先级排序:基于诊断得分和实施难度排序建议

Test scenarios:

  • Happy path: 诊断发现 FAQPage 缺失,生成完整的 FAQPage JSON-LD
  • Edge case: LLM 生成内容格式错误,回退到规则模板
  • Error path: 模板不存在时,返回"暂不支持该场景"的友好提示
  • Format validation: 生成的 JSON-LD 通过 schema.org 验证

U3. CompetitorAnalyzer — 竞品策略分析 Agent

Goal: 在引用检测数据基础上,深度分析竞品的内容策略和引用模式

Requirements: R3竞品分析

Files:

  • app/agent_framework/agents/competitor_analyzer.py (新增)
  • app/models/competitor_insight.py (新增)
  • app/schemas/competitor_insight.py (新增)
  • app/services/competitor/competitor_analyzer_service.py (新增)
  • app/api/competitor_analysis.py (新增)
  • tests/test_competitor_analyzer.py (新增)

Approach:

  1. 数据聚合:聚合品牌和所有竞品的引用检测数据
  2. 维度分析:
    • 引用量对比:品牌 vs 竞品在各平台的引用次数
    • 引用质量对比:正面/中性/负面引用比例
    • 引用场景分析:竞品在哪些查询词下被引用
    • 内容策略推断:竞品引用内容的类型(产品介绍/评测/新闻等)
  3. Gap 识别:对比发现品牌在哪些维度落后于竞品
  4. 机会发现:竞品未被引用的场景,即品牌的潜在机会
  5. 策略建议:基于分析结果生成"缩小差距"和"差异化竞争"两类建议

Test scenarios:

  • Happy path: 品牌 vs 3个竞品生成完整的竞品分析报告
  • Edge case: 竞品数据不足少于5次引用标记为"数据不足"并说明
  • Error path: 竞品数据获取失败,生成部分报告并提示缺失数据
  • Content strategy: 识别竞品的内容类型分布,给出差异化建议

U4. TrendAgent — 趋势洞察 Agent

Goal: 分析品牌领域关键词在 AI 引擎中的引用模式变化,识别趋势

Requirements: R4趋势洞察

Files:

  • app/agent_framework/agents/trend_agent.py (新增)
  • app/models/trend_insight.py (新增)
  • app/schemas/trend_insight.py (新增)
  • app/services/trend/trend_analyzer_service.py (新增)
  • app/api/trends.py (新增)
  • tests/test_trend_agent.py (新增)

Approach:

  1. 时间序列分析:聚合品牌关键词在过去 N 天的引用数据(按天/周粒度)
  2. 趋势识别算法:
    • 上升趋势:引用量环比增长 > 20%
    • 下降趋势:引用量环比下降 > 20%
    • 平稳趋势:变化率在 ±20% 以内
  3. 热点发现:引用量突增的关键词/话题
  4. 平台差异:同一趋势在不同 AI 引擎的差异表现
  5. 原因推断:结合情感分析推断趋势变化的可能原因(正面事件/负面事件/行业热点)

Test scenarios:

  • Happy path: 分析过去30天数据识别3个上升趋势、2个下降趋势、5个热点话题
  • Edge case: 数据不足30天使用可用数据进行趋势分析并注明
  • Error path: 引用数据获取失败,返回"趋势分析需要至少7天数据"提示
  • Platform comparison: 识别同一趋势在文心 vs Kimi 的差异

U5. Agent 注册和调度集成

Goal: 将 4 个新 Agent 注册到 Agent Framework支持 Dispatcher 统一调度

Requirements: 所有 R1-R4

Dependencies: U1, U2, U3, U4

Files:

  • app/agent_framework/registry.py (修改)
  • app/agent_framework/protocol.py (修改)

Approach:

  1. protocol.py 中定义 4 种新任务类型:
    • monitor_track — 效果追踪
    • schema_advise — Schema 建议
    • competitor_analyze — 竞品分析
    • trend_insight — 趋势洞察
  2. registry.py 中注册 4 个 Agent 类
  3. 验证 Dispatcher 可正确分发任务到对应 Agent

Test scenarios:

  • Happy path: Dispatcher 分发 monitor_track 任务到 MonitorAgent
  • Happy path: Dispatcher 分发 schema_advise 任务到 SchemaAdvisor
  • Edge case: 未知任务类型返回"Agent not found"错误

U6. 数据库迁移

Goal: 创建新 Agent 所需的数据库表

Dependencies: U1, U2, U3, U4

Files:

  • alembic/versions/xxxx_add_new_agent_tables.py (新增)

Approach:

  1. 生成 Alembic 迁移脚本
  2. 创建 5 张新表:
    • monitoring_records — 监测记录
    • content_baselines — 内容基线
    • schema_suggestions — Schema 建议
    • competitor_insights — 竞品洞察
    • trend_insights — 趋势洞察
  3. 执行迁移并验证

Test scenarios:

  • Happy path: 迁移脚本成功执行5张表创建完成
  • Rollback: 执行 downgrade 后,表被正确删除

Open Questions

# Question Resolution
1 MonitorAgent 的定时检测间隔是多少? 建议默认 24 小时支持用户配置1h/6h/24h/7d
2 SchemaAdvisor 是否需要验证生成的 Schema 在目标网站上可正常解析? 否,验证 JSON-LD 语法即可,网站解析验证超出当前范围
3 TrendAgent 历史数据保留多久? 建议保留 90 天,超出后归档或删除
4 4 个新 Agent 是否需要独立启动入口(类似 standalone.py 否,通过 API 触发即可,无独立常驻需求

System-Wide Impact

  • 数据库:新增 5 张表,需要 Alembic 迁移
  • API 层:新增 4 个路由模块monitoring.py, schema_advisor.py, competitor_analysis.py, trends.py
  • Agent Framework:新增 4 种任务类型注册
  • 前端:可选,取决于是否需要页面展示(当前计划仅提供 API

Deferred to Follow-Up Work

  1. 前端监测页面MonitorAgent 的效果追踪报告需要页面展示
  2. 自动执行闭环:内容发布后自动创建监测任务(依赖分发系统)
  3. 告警集成:监测到负面变化时自动触发告警通知
  4. 定时调度TrendAgent 的周期性趋势报告(依赖 APScheduler 集成)

Verification

编译验证

cd geo/backend && python -m py_compile app/agent_framework/agents/monitor_agent.py app/agent_framework/agents/schema_advisor.py app/agent_framework/agents/competitor_analyzer.py app/agent_framework/agents/trend_agent.py

API 验证

# MonitorAgent
curl -X POST http://localhost:8000/api/v1/monitoring/tasks -H "Authorization: Bearer $TOKEN" -d '{"content_id": "xxx", "brand_id": "yyy"}'

# SchemaAdvisor
curl -X POST http://localhost:8000/api/v1/schema/advise -H "Authorization: Bearer $TOKEN" -d '{"brand_id": "yyy"}'

# CompetitorAnalyzer
curl -X POST http://localhost:8000/api/v1/competitor/analyze -H "Authorization: Bearer $TOKEN" -d '{"brand_id": "yyy"}'

# TrendAgent
curl -X POST http://localhost:8000/api/v1/trends/insight -H "Authorization: Bearer $TOKEN" -d '{"brand_id": "yyy", "days": 30}'

Agent 调度验证

# 通过 Agent Framework 调度
curl -X POST http://localhost:8000/api/v1/agents/tasks -H "Authorization: Bearer $TOKEN" -d '{
  "agent_type": "monitor",
  "task_type": "monitor_track",
  "params": {"content_id": "xxx", "brand_id": "yyy"}
}'