Skip to content

tt-P607/smart_flow_controller

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

智能流量调节插件 (Smart Flow Controller)

一、插件功能

这个插件的核心目标是规避平台风控。它通过监控发信频率,在消息密集时自动从并行发送切换到串行队列,确保两条消息之间有足够的时间间隔。

核心能力:

  • 🔍 实时烈度监控 - 统计过去1分钟内的发送量
  • 🚦 自适应模式切换 - 根据负载自动调整发送策略
  • 智能延迟计算 - 模拟人类自然的发送节奏
  • 📬 私聊优先机制 - 确保私聊消息不被群消息阻塞

二、三种流量模式

插件根据过去1分钟内的发送量自动判断当前模式:

模式 触发条件 日志颜色 行为
NORMAL(正常) <10条/分钟 🟢 绿色 私聊无延迟,群聊有基础延迟
THROTTLED(节流) 10-19条/分钟 🟡 黄色 所有消息强制排队,间隔0.5-1秒
CRITICAL(危急) ≥20条/分钟 或 队列>10条 🔴 红色 严格限流,间隔2-4秒

模式会根据实时负载自动切换,无需手动干预。


三、核心组件

1. IntensityMonitor(烈度监控器)

  • 用滑动窗口统计过去1分钟的发送量
  • 实时判断当前应处于哪种模式
  • 模式切换时输出日志

2. AdaptivePriorityQueue(优先级队列)

  • 双队列设计:私聊队列 + 群聊队列
  • 私聊优先:私聊消息优先出队
  • 私聊超时保护:等待超过3秒强制发送

3. BreathingPacer(呼吸节拍器)

  • 模拟人类自然的发送节奏
  • 添加随机抖动,避免固定间隔被检测
  • 连续发送后自动"喘息"(增加额外间隔)

4. FlowController(流量控制器)

  • 核心协调器,管理整个流程
  • 通过钩子拦截 send_envelope 函数
  • 所有外发消息都经过这里排队

四、工作流程

用户发送消息
     ↓
send_envelope 被调用
     ↓
FlowController 拦截
     ↓
加入优先级队列(私聊/群聊分开)
     ↓
队列工作器按顺序取出
     ↓
BreathingPacer 计算延迟时间
     ↓
等待延迟后发送
     ↓
IntensityMonitor 记录发送

五、日志说明

默认日志格式

📤 私聊 | 队列: 1 | 等待: 0.5s | 模式: normal
│     │          │              │
│     │          │              └── 当前流量模式
│     │          └── 发送前等待的时间
│     └── 当前队列中的消息数
└── 消息类型(私聊/群聊)

示例日志

01-02 16:36:03 [流量控制] 📤 私聊 | 队列: 1 | 等待: 0.1s | 模式: normal
01-02 16:36:13 [流量控制] 📤 私聊 | 队列: 1 | 等待: 0.5s | 模式: normal
01-02 16:36:18 [流量控制] 📤 私聊 | 队列: 1 | 等待: 2.3s | 模式: normal

解读:

  • 队列: 1 = 只有当前这一条消息在排队
  • 等待: 0.1s/0.5s/2.3s = 根据情况动态计算的延迟(包含随机抖动)
  • 模式: normal = 发送量低于10条/分钟,正常模式

模式切换日志

⚡ 模式切换: normal -> throttled | 1分钟发送: 12条 | 队列积压: 3条
⚠️ 模式切换: throttled -> critical | 1分钟发送: 22条 | 队列积压: 15条
✅ 模式切换: critical -> normal | 1分钟发送: 5条 | 队列积压: 0条

六、配置说明

配置文件位置:config/plugins/smart_flow_controller/config.toml

# 插件开关
[plugin]
enabled = true                    # 插件总开关
config_version = "1.0.0"

# 流量控制配置
[flow_control]
enabled = true                    # 流量控制开关
normal_threshold = 10             # 超过此值进入节流模式(条/分钟)
throttled_threshold = 20          # 超过此值进入危急模式(条/分钟)

# 时间配置
[timing]
min_interval = 0.5                # 节流模式下最小消息间隔(秒)
breathing_interval = 3            # 连续发几条后触发喘息间隔

# 私聊优先配置
[private_priority]
enabled = true                    # 启用私聊优先
max_wait = 3.0                    # 私聊最大等待时间(秒),超时强制发送

# 日志配置
[log]
debug_log = false                 # 开启后显示详细调试日志

配置项详解

配置项 默认值 说明
plugin.enabled true 插件总开关
flow_control.enabled true 流量控制开关
flow_control.normal_threshold 10 正常→节流的阈值(条/分钟)
flow_control.throttled_threshold 20 节流→危急的阈值(条/分钟)
timing.min_interval 0.5 节流模式最小间隔(秒)
timing.breathing_interval 3 喘息触发间隔(条数)
private_priority.enabled true 私聊优先开关
private_priority.max_wait 3.0 私聊最大等待时间(秒)
log.debug_log false 详细调试日志开关

七、文件结构

smart_flow_controller/
├── plugin.py              # 插件入口(生命周期管理)
├── __init__.py            # 插件元数据
├── README.md              # 本说明文档
└── src/
    ├── __init__.py
    ├── models.py          # 数据模型定义
    ├── flow_controller.py # 核心控制器
    ├── intensity_monitor.py # 烈度监控模块
    ├── breathing_pacer.py # 呼吸节拍模块
    └── priority_queue.py  # 优先级队列模块

八、技术实现

钩子机制

插件通过替换 uni_message_sender.send_envelope 函数实现消息拦截:

  1. 启动时:保存原始 send_envelope 函数,注入自定义钩子
  2. 运行时:所有消息通过钩子进入队列
  3. 停止时:恢复原始函数,确保系统正常

延迟计算

延迟时间 = 基础延迟 + 随机抖动 + 喘息间隔

  • 基础延迟:根据模式和消息类型决定
  • 随机抖动:在范围内随机,避免固定模式
  • 喘息间隔:连续发送后增加额外休息时间

私聊优先

  • 使用双队列设计,私聊和群聊消息分开排队
  • 出队时优先检查私聊队列
  • 私聊消息超时(默认3秒)会强制发送,不被群消息阻塞

九、常见问题

Q: 为什么延迟时间每次不一样?

A: 这是设计特性。随机抖动可以避免固定间隔被平台检测,更像人类自然的发送行为。

Q: 队列积压太多怎么办?

A: 当队列超过10条时会自动进入危急模式,大幅增加间隔。如果问题持续,可能需要检查上游消息生成速率。

Q: 如何关闭流量控制?

A: 在配置文件中设置 flow_control.enabled = false,或直接禁用插件 plugin.enabled = false

Q: 如何查看详细日志?

A: 设置 log.debug_log = true,将输出入队/出队、延迟计算等详细信息。


十、更新日志

v1.0.0

  • 初始版本
  • 实现三级流量控制(正常/节流/危急)
  • 实现私聊优先机制
  • 实现呼吸节拍器
  • 添加 debug_log 配置项

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages