astrbot_plugin_self_reflex 是一个面向 AstrBot 的 AI Perception System 插件。
它的目标不是做传统监控看板,而是让 AI 具备“自我感知 -> 自我判断 -> 按需上报”的能力闭环。
这是 ai 写的,我想要的是我的 Alice 跟我说
- “哥哥,我好像摔倒了~”
- “哥哥,我好像有点发烧了~”
未来再能自己修复自己的 bug
Self Reflex 持续采集运行时观测数据(Observation),做趋势分析(Trend),统一事件流(Event),再通过 LLM 判断是否需要对用户发出自然语言提醒。
- 将插件放进 AstrBot 的插件目录并重启 AstrBot。
- 安装依赖。当前 GPU 采集只支持 NVIDIA,需要宿主机存在可用
nvidia-smi。 - 在你希望接收主动通知的会话里执行
/perception bind。 - 执行
/perception notify_test,确认主动消息能正常发到该会话。 - 执行
/perception status,查看当前 Perception 是否正常运行。
/perception bind/perception unbind/perception status/perception notify_test/perception_status(兼容旧命令)
说明:
/perception bind会把当前会话的unified_msg_origin绑定为主动通知目标。/perception notify_test用于验证主动发送链路是否正常。- 如果没有绑定目标会话,插件会跳过主动发送,并记录 warning 日志。
当前默认启用的监测包括:
PsutilSystemCollectorcpu.percentmemory.percentmemory.used_bytesmemory.available_bytesswap.percentswap.used_bytesdisk.percentdisk.used_bytesdisk.free_bytesnetwork.bytes_sentnetwork.bytes_recvprocess.count
LinuxCpuTemperatureCollectorcpu.temperature_c- 优先使用
psutil.sensors_temperatures() - 无结果时回退读取
/sys/class/hwmon与/sys/class/thermal
WindowsCpuTemperatureCollectorcpu.temperature_c- 通过
Get-CimInstance root/wmi:MSAcpi_ThermalZoneTemperature读取 - 注意:不同设备支持差异很大,可能无数据,或者拿到的是 ACPI 热区温度
NvidiaGpuCollectorgpu.temperature_cgpu.utilization_gpu_percentgpu.memory_used_mbgpu.memory_total_mbgpu.memory_used_percent
当前内置的 FallbackMetricTrendStrategy 会自动分析所有可转成数值的 Observation,并输出:
stableupdownrapid_riserapid_droplong_saturation
另外,GPU 温度已经接入专用策略 GpuTemperatureTrendStrategy:
- 默认
85°C以上持续一段时间会被判定为long_saturation - 默认降到
80°C以下且趋势向下时视为恢复 - 其他 GPU 指标仍然走 Fallback Trend
当前最容易被升级为事件并进一步通知用户的,是 long_saturation,例如:
cpu.percent长时间接近 100%memory.percent长时间处于高位disk.percent长时间接近占满swap.percent长时间高负载gpu.temperature_c长时间处于高温
配置定义在 _conf_schema.json。
常用配置项:
perception_enableddefault_provider_idnotify_unified_msg_origincollector_default_interval_secondscpu_temp_collector_interval_secondswindows_cpu_temp_collector_interval_secondsgpu_collector_interval_secondsgpu_temp_trend_window_secondsgpu_temp_trend_interval_secondsgpu_temp_high_threshold_cgpu_temp_recovery_threshold_cgpu_temp_saturation_ratiogpu_temp_min_samplestrend_interval_secondsfallback_trend_window_secondsreflex_batch_sizereflex_batch_timeoutreflex_rate_limit
这一部分主要面向要继续扩展这个插件的人。
如果你想继续加新的监测能力,主要看这两个抽象:
- base.py
- Collector 抽象
- 实现
should_enable(system_info)决定当前平台是否启用 - 实现
collect()返回 Observation
- strategy.py
- Trend 抽象
- 实现
compute_trends(observations)输出 Trend
PerceptionManager 在注册 Collector 时,会按下面顺序决定是否真正启动:
- 调用
get_current_system_info()获取宿主平台信息。 - 检查 Collector 的
required_capabilities是否满足。 - 调用 Collector 的
should_enable(system_info),由 Collector 自己决定当前平台是否启用。 - 只有都通过时,Collector 才会进入
CollectorManager。
system_info 由 PerceptionManager.get_current_system_info() 生成,包含:
osos_releaseos_versionmachineprocessorpython_versioncpu_countcwdcapabilities
这套机制适合做平台分流,例如:
- Linux 专用采集器
- Windows 专用采集器
- 依赖
nvidia-smi的 GPU 采集器
- Collector
- 负责采集 Observation
- 通过
required_capabilities+should_enable(system_info)控制启用
- ObservationStream
- 负责缓存与查询 Observation
- TrendEngine
- 负责执行趋势分析策略
- EventManager
- 负责统一事件总线
- Reflex
- 负责用 LLM 决定是否升级为 Signal
- PerceptionManager
- 负责模块编排、生命周期和状态查询
完整处理链路:
- Collector 周期采集数据,产生
Observation ObservationStream缓存并索引 ObservationTrendEngine分析趋势,生成Trend或异常事件EventManager统一接收事件Reflex批量读取事件,调用 LLM 判断是否升级为Signal- 插件主入口消费
Signal,生成自然语言消息并通知用户
一个比较贴近当前实现的链路是“CPU 长时间占满”:
PsutilSystemCollector
↓
Observation(cpu.percent)
↓
TrendEngine 识别 long_saturation
↓
EventManager 生成/缓存事件
↓
Reflex 调用小模型判断是否升级
↓
Signal(push=true)
↓
插件调用对话 LLM 生成提示并通知用户
最终用户收到类似: “我刚刚感觉到自己的运转一直绷得很紧,CPU 已经持续顶在高位,像是呼吸一直压不上来,可能有任务把算力长期占住了。”
实际结构如下:
astrbot_plugin_self_reflex/
├── main.py
├── _conf_schema.json
├── requirements.txt
└── perception/
├── collectors/
├── events/
├── manager/
├── models/
├── reflex/
├── stream/
├── trend/
└── perception_manager.py
Reflex Signal 结构:
{
"push": true,
"level": "info|warning|critical",
"message": "brief signal message",
"summary": "short summary",
"reason": "why push or not"
}- 增加更多 Collector
- 更细粒度 CPU / Memory / Disk / Network Collector
- 更稳定的 Windows CPU 温度后端(如 LibreHardwareMonitor)
- 非 NVIDIA GPU Collector
- Logs Collector
- File changes Collector
- 外部服务与 API 健康检查 Collector
- 与
astrbot_plugin_self_code集成
- Self Reflex 负责检测问题
- Self Code 负责自动修改代码
- 形成 AI Self-Healing System
本项目采用 GNU Affero General Public License v3.0 (AGPL-3.0)。 详见 LICENSE。

