geo/docs/02-design/agent-framework.md

16 KiB
Raw Blame History

GEO 平台 - AI Agent 框架设计

概述

GEO 平台的 AI Agent 框架是系统的核心智能层,负责执行各种需要 AI 能力的业务任务。框架采用模块化、可插拔的设计,支持 Agent 的动态注册、任务分发和状态管理。

本文档定义 Agent 框架的整体架构、核心组件和通信机制。

Agent 列表

CitationDetector引用检测 Agent

属性 说明
职责 解析 AI 平台响应,识别其中是否包含品牌引用
输入 AI 平台原始响应文本、品牌名称列表、竞品名称列表
输出 引用检测结果(引用/未引用/竞品引用)、引用片段、置信度评分
核心能力 自然语言理解、实体识别、引用关系判定
触发方式 查询任务完成后自动触发
优先级 P0

处理流程

接收响应文本 ──▶ 文本预处理 ──▶ 品牌实体识别 ──▶ 引用关系判定
                                              │
                                              ▼
                                    竞品引用检测 ──▶ 置信度评估
                                              │
                                              ▼
                                    结果格式化 ──▶ 上报结果

引用类型判定

类型 判定标准 置信度权重
direct_quote 品牌名被直接提及并作为信息来源
indirect_reference 品牌信息被提及但未明确标注来源
no_reference 品牌完全未被提及 确定
competitor_reference 竞品被引用而品牌未被引用

ContentGenerator内容生成 Agent

属性 说明
职责 根据策略和规则生成 GEO 优化的内容资产
输入 内容主题、规则库配置、品牌素材、参考数据
输出 GEO 优化内容(文章/问答/指南等)、内容元数据
核心能力 创意写作、SEO/GEO 优化、多风格适配
触发方式 用户手动触发或按排期自动触发
优先级 P0

处理流程

接收生成任务 ──▶ 需求分析 ──▶ 素材收集 ──▶ 大纲生成
                                          │
                                          ▼
                                    内容撰写 ──▶ GEO 优化处理
                                          │
                                          ▼
                                    自检校验 ──▶ 输出结果

内容类型支持

类型 说明 适用场景
article 长篇文章800-2000 字) 深度行业内容
qa 问答对 常见品牌问题
guide 操作指南 产品使用场景
comparison 对比分析 竞品对抗
data_report 数据报告 行业研究

RuleChecker规则检查 Agent

属性 说明
职责 检查内容是否符合规则库中的约束条件
输入 待检查内容、规则库配置
输出 检查结果(通过/不通过)、问题列表、改进建议
核心能力 规则引擎、内容质量评估、语义分析
触发方式 ContentGenerator 生成后自动触发,或手动触发
优先级 P0

检查维度

维度 说明 示例规则
keyword_coverage 关键词覆盖度 必须包含核心关键词
readability 可读性评分 Flesch 阅读 ease 分数
tone_consistency 语气一致性 保持专业、客观语气
length_compliance 长度合规 符合目标平台偏好长度
fact_accuracy 事实准确性 品牌信息准确无误
geo_optimization GEO 优化度 符合 GEO 最佳实践

CompetitorAnalyzer竞品分析 Agent

属性 说明
职责 分析竞品的 GEO 表现和策略
输入 竞品名称、查询结果、引用数据
输出 竞品分析报告、SWOT 分析、策略建议
核心能力 竞品数据对比、模式识别、策略推断
触发方式 诊断分析流程中自动触发
优先级 P1

分析维度

维度 说明
citation_share 竞品引用份额占比
platform_presence 各平台出现频率
content_pattern 竞品被引用的内容模式
strength_weakness 竞品的优劣势分析
strategy_inference 推测竞品的 GEO 策略

PerformanceTracker性能追踪 Agent

属性 说明
职责 持续追踪品牌 GEO 表现,计算 KPI检测异常
输入 历史引用数据、当前查询结果、KPI 配置
输出 KPI 计算结果、趋势分析、异常告警、优化建议
核心能力 时间序列分析、趋势预测、异常检测
触发方式 按设定周期自动执行
优先级 P1

追踪指标

指标 计算方式 更新频率
citation_rate 被引用查询数 / 总查询数 每日
avg_confidence 引用记录置信度平均值 每次查询
platform_coverage 已覆盖平台数 / 目标平台数 每周
ranking_position 品牌在引用中的平均排名 每周
competitor_gap 品牌引用率 - 竞品平均引用率 每周

通信协议

Agent 间通信模型

GEO 平台 Agent 之间采用 基于 Redis 消息队列的异步通信协议

┌─────────────┐      ┌─────────────┐      ┌─────────────┐
│  Agent A    │◀────▶│   Redis     │◀────▶│  Agent B    │
│ (Producer)  │      │   Queue     │      │ (Consumer)  │
└─────────────┘      └──────┬──────┘      └─────────────┘
                            │
                     ┌──────▼──────┐
                     │  Registry   │
                     │ (Hash Map)  │
                     └─────────────┘

消息格式规范

class AgentMessage:
    """Agent 间通信消息标准格式"""
    
    message_id: str          # UUID消息唯一标识
    timestamp: datetime      # ISO 8601 格式时间戳
    sender: str              # 发送方 Agent 名称
    recipient: str           # 接收方 Agent 名称,或 "broadcast"
    message_type: str        # 消息类型
    correlation_id: str      # 关联 ID用于追踪请求-响应链路
    reply_to: str            # 回复目标 Agent
    payload: dict            # 消息负载数据
    ttl: int                 # 消息存活时间(秒),默认 300

消息类型message_type

类型 说明 使用场景
task_request 任务请求 Agent A 请求 Agent B 执行任务
task_result 任务结果 Agent B 返回任务执行结果
status_update 状态更新 Agent 上报自身状态变化
heartbeat 心跳 Agent 定期发送健康信号
config_update 配置更新 通知 Agent 配置变更
error_report 错误报告 Agent 报告执行错误

消息负载payload规范

class TaskPayload:
    """任务请求/结果负载"""
    
    task_id: str             # 任务唯一标识
    task_type: str           # 任务类型
    parameters: dict         # 任务参数
    data: dict               # 输入/输出数据
    priority: int            # 优先级 1-10默认 5
    deadline: datetime       # 截止时间(可选)
    retry_count: int         # 已重试次数
    max_retries: int         # 最大重试次数

通信模式

1. 点对点模式Point-to-Point

Agent A ──task_request──▶ Queue ──▶ Agent B
Agent A ◀──task_result─── Queue ◀── Agent B
  • 每个 Agent 有专属的输入队列
  • 任务按轮询方式分配
  • 适用于明确的任务分配场景

2. 发布/订阅模式Pub/Sub

Agent A ──config_update──▶ Topic
                            │
            ┌───────────────┼───────────────┐
            ▼               ▼               ▼
        Agent B         Agent C         Agent D
  • 使用 Redis Pub/Sub 频道
  • 适用于配置变更、状态广播

3. 工作流模式Workflow

┌────────────┐    ┌────────────┐    ┌────────────┐
│ QueryTask  │───▶│ Citation   │───▶│ Report     │
│  Completed │    │ Detector   │    │ Generator  │
└────────────┘    └────────────┘    └────────────┘
  • 基于事件驱动的工作流编排
  • 使用 correlation_id 串联整个工作流
  • 支持并行和串行执行

注册机制

Agent 注册流程

Agent 启动
    │
    ▼
读取配置(能力声明、资源需求、版本信息)
    │
    ▼
连接 Redis
    │
    ▼
向 Registry 注册
    │
    ▼
创建专属输入队列
    │
    ▼
启动心跳定时器
    │
    ▼
开始监听任务

Registry 数据结构

# Redis Hash: agent:registry:{agent_name}
{
    "name": "CitationDetector",
    "version": "1.0.0",
    "capabilities": "[\"citation_detect\", \"entity_recognition\"]",
    "status": "online",           # online / busy / offline
    "queue_name": "agent:citation_detector",
    "registered_at": "2026-01-01T00:00:00Z",
    "last_heartbeat": "2026-01-01T00:01:00Z",
    "current_task": "task_123",   # 当前执行任务 ID空闲时为 null
    "concurrency": 5,             # 最大并发数
    "load": 0.6                   # 当前负载 0-1
}

服务发现

# 获取所有在线 Agent
agents = redis.hgetall("agent:registry:*")
online_agents = [a for a in agents if a.status == "online"]

# 按能力筛选 Agent
capable_agents = [a for a in online_agents if "citation_detect" in a.capabilities]

# 选择负载最低的 Agent
selected = min(capable_agents, key=lambda a: a.load)

任务分发

分发策略

策略 说明 适用场景
round_robin 轮询分配 同类型 Agent 负载均衡
least_load 最低负载优先 不同 Agent 性能差异时
capability_match 能力匹配 需要特定能力的任务
priority_queue 优先级队列 任务有明确优先级差异
sticky 粘性分配 需要上下文连续性的任务

任务分发流程

任务提交
    │
    ▼
解析任务类型 ──▶ 确定所需能力
    │
    ▼
查询 Registry ──▶ 筛选可用 Agent
    │
    ▼
应用分发策略 ──▶ 选择目标 Agent
    │
    ▼
序列化消息 ──▶ 写入目标队列
    │
    ▼
更新任务状态 ──▶ 等待结果

任务状态机

┌──────────┐    提交任务     ┌──────────┐
│  PENDING │───────────────▶│  QUEUED  │
└──────────┘               └─────┬────┘
                                 │ 入队
                                 ▼
                           ┌──────────┐
                    开始执行│ RUNNING  │
                   ┌───────┤          │
                   │       └─────┬────┘
                   │             │
              执行成功         执行失败
                   │             │
                   ▼             ▼
            ┌──────────┐   ┌──────────┐
            │COMPLETED │   │  FAILED  │
            └──────────┘   └─────┬────┘
                                 │
                    重试次数 < 最大重试
                                 │
                                 ▼
                           ┌──────────┐
                           │  RETRY   │
                           └────┬─────┘
                                │ 重新入队
                                └────▶ QUEUED

状态上报

上报内容

每个 Agent 需要定期上报以下状态信息:

字段 说明 上报频率
status 当前状态 每次变化 + 心跳
current_task 正在执行的任务 每次变化
load 当前负载 0-1 心跳时
queue_depth 待处理任务数 心跳时
processed_count 已处理任务总数 心跳时
error_count 错误次数 心跳时
avg_process_time 平均处理时间 心跳时

心跳机制

# 心跳间隔30 秒
HEARTBEAT_INTERVAL = 30

# 心跳超时判定90 秒3 个心跳周期)
HEARTBEAT_TIMEOUT = 90

# 心跳消息格式
heartbeat_message = {
    "message_type": "heartbeat",
    "sender": "CitationDetector",
    "timestamp": "2026-01-01T00:01:00Z",
    "payload": {
        "status": "online",
        "load": 0.4,
        "queue_depth": 2,
        "processed_count": 150,
        "error_count": 3,
        "avg_process_time": 2.5
    }
}

状态监控

  • Registry 定期检查 Agent 心跳超时
  • 超时 Agent 自动标记为 offline
  • 正在执行的任务自动重新分发
  • 管理员可通过 Dashboard 查看 Agent 状态

配置管理

配置层级

层级 说明 优先级
system_default 系统默认配置 最低
tenant_config 租户级配置(覆盖默认)
agent_override Agent 本地配置(覆盖租户) 最高

配置项

class AgentConfig:
    """Agent 配置项"""
    
    # 通用配置
    max_concurrency: int = 5           # 最大并发数
    task_timeout: int = 300            # 任务超时时间(秒)
    retry_policy: str = "exponential"  # 重试策略
    max_retries: int = 3               # 最大重试次数
    
    # CitationDetector 专用
    confidence_threshold: float = 0.7  # 置信度阈值
    enable_semantic_analysis: bool = True
    
    # ContentGenerator 专用
    default_content_length: int = 1500
    content_styles: List[str] = ["professional", "casual", "technical"]
    
    # RuleChecker 专用
    strict_mode: bool = False
    custom_rules: List[dict] = []

动态配置更新

管理员更新配置
    │
    ▼
写入 Redis 配置存储
    │
    ▼
发布 config_update 消息
    │
    ▼
各 Agent 接收消息
    │
    ▼
Agent 热重载配置(无需重启)

管理功能需求

Agent Dashboard

管理员需要通过 Dashboard 监控和管理所有 Agent

功能 说明 优先级
Agent 列表 查看所有已注册 Agent 的状态 P0
实时状态看板 展示 Agent 在线状态、负载、任务数 P0
任务队列监控 查看各队列的待处理任务数 P0
任务执行日志 查看任务执行的详细日志 P1
错误告警 Agent 异常时发送告警通知 P1
配置管理 在线修改 Agent 配置 P1
Agent 启停 远程启动或停止 Agent P2
版本管理 查看和升级 Agent 版本 P2
性能统计 查看 Agent 的性能指标和趋势 P2

Agent 日志规范

# 日志格式
{
    "timestamp": "2026-01-01T00:00:00Z",
    "level": "INFO",          # DEBUG / INFO / WARNING / ERROR
    "agent": "CitationDetector",
    "task_id": "task_123",
    "message": "开始执行引用检测",
    "metadata": {
        "query_id": "q_456",
        "brand": "ExampleBrand"
    }
}

错误处理

错误类型 处理方式 告警级别
任务执行失败 自动重试,达到最大重试后标记失败 Warning
Agent 心跳超时 标记离线,任务重新分发 Error
队列积压 触发弹性扩容或告警 Warning
Agent 崩溃 自动重启(配合 supervisor Critical
配置错误 拒绝加载,保持上次有效配置 Error

本文档定义 GEO 平台的 AI Agent 框架设计,各 Agent 的具体实现算法和模型选型在模块指南中详细说明。