菜单

通知系统

相关源文件

AutoGPT 中的通知系统负责向用户发送关于其代理活动的各种通知,包括代理运行、错误和摘要。它利用 RabbitMQ 进行消息排队,并使用 Postmark 进行电子邮件传递,同时为不同的通知类型配置了可配置的批处理策略。

有关凭证系统的信息,请参阅API 密钥管理

概述

通知系统由多个组件组成,它们协同工作,根据用户配置的首选项收集、批处理和传递通知。该系统支持不同类型的通知(例如代理运行、错误、使用摘要)和多种传递策略(即时、批量或计划)。

来源

通知类型和数据模型

系统支持多种通知类型,每种类型都有其特定的数据模型

通知类型描述发送策略数据模型
AGENT_RUN通知已完成的代理运行批处理AgentRunData
ZERO_BALANCE用户信用余额为零时发出警报退避ZeroBalanceData
LOW_BALANCE低信用余额时发出警告即时LowBalanceData
BLOCK_EXECUTION_FAILED报告块执行失败退避BlockExecutionFailedData
CONTINUOUS_AGENT_ERROR连续代理错误时发出警报退避ContinuousAgentErrorData
DAILY_SUMMARY每日活动摘要总结DailySummaryData
WEEKLY_SUMMARY每周活动摘要总结WeeklySummaryData
MONTHLY_SUMMARY每月活动摘要总结MonthlySummaryData
REFUND_REQUEST通知管理员退款请求管理员RefundRequestData
REFUND_PROCESSED通知已处理的退款管理员RefundRequestData

每种通知类型都有一个相应的数据模型,该模型定义了通知内容的结构。例如,AgentRunData 包含代理名称、使用的信用点、执行时间和输出等信息。

来源

通知发送策略

系统根据通知类型使用不同的策略发送通知

  1. 即时 (QueueType.IMMEDIATE):通知会立即发送,例如低余额警告。

  2. 批量 (QueueType.BATCH):相同类型的多条通知会被收集起来,并在延迟后或达到阈值时通过一封电子邮件发送。代理运行通知使用此策略。

  3. 摘要 (QueueType.SUMMARY):数据会在一个周期(每日、每周、每月)内收集,并在单次通知中进行汇总。

  4. 退避 (QueueType.BACKOFF):通知会以递增的延迟间隔发送,以避免过度发送相似通知。这用于错误通知。

  5. 管理员 (QueueType.ADMIN):发送给系统管理员的特殊通知,例如退款请求。

来源

消息队列实现

通知系统使用 RabbitMQ 进行消息队列,具有以下交换器和队列配置

每种通知类型都会根据其发送策略路由到相应的队列。例如,代理运行通知会路由到批量队列,路由键为notification.batch.AGENT_RUN

来源

NotificationManager 服务

NotificationManager 是处理通知系统所有方面的核心服务。它负责:

  1. 创建和配置 RabbitMQ 交换器和队列
  2. 公开用于队列通知的方法
  3. 处理队列中的通知
  4. 实现批处理和汇总逻辑
  5. 通过EmailSender发送电子邮件

NotificationManager 被实现为一个AppService,这允许它作为独立服务或作为主 AutoGPT 平台的一部分运行。

来源

电子邮件发送

EmailSender 类使用 Postmark API 处理实际的电子邮件发送。它使用 Jinja2 模板进行电子邮件格式化,并支持 HTML 电子邮件。

该系统包含用于不同通知类型的各种电子邮件模板,例如代理运行报告、错误通知和摘要报告。模板以 Jinja2 格式存储在templates 目录中。

来源

用户通知偏好设置

用户可以配置他们的通知偏好设置,包括他们想要接收的通知类型以及每日电子邮件限制。系统在发送通知前会检查这些偏好设置。

用户通知偏好设置存储在数据库中,包括:

  • 电子邮件地址
  • 每种通知类型的偏好设置(启用/禁用)
  • 每日电子邮件限制
  • 今日已发送邮件数
  • 最后重置日期

用户还可以使用包含安全令牌的特殊取消订阅链接来取消所有通知。

来源

批处理和处理逻辑

通知系统为不同的通知类型实现了复杂的批处理和处理逻辑

  1. 即时处理_process_immediate

    • 通知直接发送到用户的电子邮件
    • 发送前会检查用户偏好设置
  2. 批量处理_process_batch

    • 通知会被添加到数据库的批次中
    • 当批次达到一定年龄或数量时,它会被处理并作为一封电子邮件发送
    • _should_batch 方法决定何时处理批次
  3. 摘要处理_process_summary

    • 摘要数据会在一个周期(每日、每周、每月)内收集
    • _gather_summary_data 方法会汇总摘要的统计信息
    • 摘要会按计划发送(例如,每周摘要每周发送一次)
  4. 管理员处理_process_admin_message

    • 管理员通知会发送到指定的管理员电子邮件地址

批处理机制使用 RabbitMQ 进行消息排队,并使用数据库存储批次。

来源

配置

通知系统通过环境变量和 AutoGPT 配置中的设置进行配置

设置描述默认
notification_service_port通知服务的端口8007
postmark_server_api_tokenPostmark 的 API 令牌(无)
postmark_sender_email用于发送通知的电子邮件地址"invalid@invalid.com"
postmark_webhook_tokenPostmark Webhook 的令牌(无)
unsubscribe_secret_key生成取消订阅令牌的密钥(无)
rabbitmq_hostRabbitMQ 主机"localhost"
rabbitmq_portRabbitMQ 端口5672
rabbitmq_vhostRabbitMQ 虚拟主机"/"
rabbitmq_default_userRabbitMQ 默认用户(无)
rabbitmq_default_passRabbitMQ 默认密码(无)

这些设置可以在 .env 文件或通过环境变量进行配置。

来源

在AutoGPT平台中的用法

通知系统已集成到AutoGPT平台中,并由各个组件使用,以向用户发送通知。

  1. 执行引擎:代理执行完成后发送代理运行通知。
  2. 区块系统:区块执行失败时发送区块执行失败通知。
  3. 信用系统:发送余额不足和零余额通知。
  4. 调度器:触发每日和每周摘要等计划通知。

通知系统在 app.py 中的主AutoGPT应用程序启动时启动,并且也包含在 rest.py 中的REST API服务器中。

来源

通知流程

为了说明通知通过系统的完整流程,请考虑一个代理运行通知。

此流程展示了通知是如何创建、排队、批量处理并最终传递给用户的。

来源