# 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 个 Agent(CitationDetector、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:** - 纯规则:无法处理动态内容场景 - 纯 LLM:Schema 格式要求严格,纯 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:** R2(Schema 优化) **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 ### 编译验证 ```bash 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 验证 ```bash # 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 调度验证 ```bash # 通过 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"} }' ```