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 的具体实现算法和模型选型在模块指南中详细说明。