# funstat BOT MCP 封装 - 架构流程图 ## 1. 整体系统架构 ```mermaid graph TB subgraph "用户层" U1[用户 1] U2[用户 2] U3[用户 N...] end subgraph "Claude Code" C1[Claude Instance 1] C2[Claude Instance 2] C3[Claude Instance N] end subgraph "MCP Server" MCP[MCP 工具接口] Q[请求队列
Rate Limiter] S[智能调度器] Cache[结果缓存
Redis/内存] end subgraph "Telegram 客户端层" TC1[Telethon Client 1] TC2[Telethon Client 2] TC3[Telethon Client N] end subgraph "Telegram 生态" Bot[@openaiw_bot
funstat/infostat] end U1 --> C1 U2 --> C2 U3 --> C3 C1 --> MCP C2 --> MCP C3 --> MCP MCP --> Q Q --> S S --> Cache S --> TC1 S --> TC2 S --> TC3 TC1 --> Bot TC2 --> Bot TC3 --> Bot Bot --> TC1 Bot --> TC2 Bot --> TC3 TC1 --> S TC2 --> S TC3 --> S S --> Cache Cache --> MCP MCP --> C1 MCP --> C2 MCP --> C3 style MCP fill:#e1f5ff style Q fill:#fff9c4 style S fill:#c8e6c9 style Cache fill:#ffccbc style Bot fill:#f3e5f5 ``` --- ## 2. 单次请求完整流程 ```mermaid sequenceDiagram participant U as 用户 participant C as Claude Code participant M as MCP Server participant RL as Rate Limiter participant Cache as 缓存 participant TC as Telethon Client participant Bot as @openaiw_bot U->>C: 发起查询
"搜索 python 群组" C->>M: openaiw_search_groups(query="python") M->>Cache: 检查缓存 alt 缓存命中 Cache-->>M: 返回缓存结果 M-->>C: 返回结果 C-->>U: 展示结果 else 缓存未命中 M->>RL: 请求令牌 RL->>RL: 检查速率限制 alt 未达到限制 RL-->>M: 授予令牌 M->>TC: send_message("/search python") TC->>Bot: 发送消息 Bot->>Bot: 处理查询 Bot-->>TC: 返回搜索结果 TC-->>M: 解析响应 M->>Cache: 存储结果 M-->>C: 返回结果 C-->>U: 展示结果 else 达到限制 RL->>RL: 等待令牌补充 Note over RL: 等待 50-100ms RL-->>M: 授予令牌 M->>TC: send_message("/search python") TC->>Bot: 发送消息 Bot-->>TC: 返回结果 TC-->>M: 解析响应 M-->>C: 返回结果 C-->>U: 展示结果 end end ``` --- ## 3. 批量并发请求处理流程 ```mermaid graph TB subgraph "并发请求" R1[请求 1
搜索群组] R2[请求 2
查询用户] R3[请求 3
热门群组] R4[请求 N...] end subgraph "请求队列" Q[FIFO Queue
最大 1000] end subgraph "速率限制器" RL[Token Bucket
18 令牌/秒] T1[令牌 1] T2[令牌 2] T3[令牌 3] end subgraph "账号池" A1[账号 1
空闲] A2[账号 2
使用中] A3[账号 3
空闲] end subgraph "负载均衡" LB{负载均衡器
最少使用策略} end R1 --> Q R2 --> Q R3 --> Q R4 --> Q Q --> RL RL --> T1 RL --> T2 RL --> T3 T1 --> LB T2 --> LB T3 --> LB LB --> A1 LB --> A2 LB --> A3 A1 --> Bot1[@openaiw_bot] A2 --> Bot2[@openaiw_bot] A3 --> Bot3[@openaiw_bot] style Q fill:#fff9c4 style RL fill:#c8e6c9 style LB fill:#e1f5ff style Bot1 fill:#f3e5f5 style Bot2 fill:#f3e5f5 style Bot3 fill:#f3e5f5 ``` --- ## 4. 多账号负载均衡策略 ```mermaid stateDiagram-v2 [*] --> 收到请求 收到请求 --> 检查账号池 检查账号池 --> 选择策略 选择策略 --> 轮询: Round Robin 选择策略 --> 最少使用: Least Used 选择策略 --> 加权: Weighted 轮询 --> 选择账号1 最少使用 --> 检查使用率 加权 --> 根据权重选择 检查使用率 --> 选择最空闲账号 选择账号1 --> 发送请求 选择最空闲账号 --> 发送请求 根据权重选择 --> 发送请求 发送请求 --> 检查结果 检查结果 --> 成功: 正常响应 检查结果 --> FloodWait: Flood Wait 错误 检查结果 --> 失败: 其他错误 成功 --> 更新统计 FloodWait --> 标记账号: 等待中 失败 --> 故障转移 故障转移 --> 选择下一个账号 选择下一个账号 --> 发送请求 标记账号 --> 选择其他账号 选择其他账号 --> 发送请求 更新统计 --> [*] ``` --- ## 5. 限流与重试机制 ```mermaid flowchart TD Start[开始请求] --> CheckCache{检查缓存?} CheckCache -->|命中| ReturnCache[返回缓存结果] CheckCache -->|未命中| GetToken[获取令牌] GetToken --> HasToken{有令牌?} HasToken -->|是| SelectAccount[选择账号] HasToken -->|否| WaitToken[等待令牌
50ms] WaitToken --> GetToken SelectAccount --> SendRequest[发送请求] SendRequest --> CheckResponse{检查响应} CheckResponse -->|成功| ParseResponse[解析响应] CheckResponse -->|FloodWait| HandleFlood{重试次数<3?} CheckResponse -->|网络错误| HandleError{重试次数<3?} CheckResponse -->|超时| HandleTimeout[返回超时提示] HandleFlood -->|是| WaitFlood[等待 Flood 时间] HandleFlood -->|否| ReturnError[返回错误] HandleError -->|是| RetryRequest[重试请求] HandleError -->|否| ReturnError WaitFlood --> RetryRequest RetryRequest --> SendRequest ParseResponse --> CacheResult[缓存结果] CacheResult --> ReturnResult[返回结果] ReturnCache --> End[结束] ReturnResult --> End ReturnError --> End HandleTimeout --> End style Start fill:#e1f5ff style End fill:#c8e6c9 style CheckCache fill:#fff9c4 style CacheResult fill:#ffccbc ``` --- ## 6. 请求限制说明 ### 单账号限制 - **速率**: ~18-20 请求/秒 - **队列**: 最多 100 个待处理请求 - **超时**: 20 秒无响应则超时 ### 多账号限制(3 个账号) - **总速率**: ~54-60 请求/秒 - **队列**: 最多 500 个待处理请求 - **故障转移**: 自动切换到其他账号 ### 缓存机制 - **热门查询**: 缓存 1 小时 - **用户信息**: 缓存 24 小时 - **命中率**: 预计 30-40% --- ## 7. 普通用户调用方式 ### 方式 1: 通过 Claude Code (推荐) ``` 用户: 帮我搜索 "python" 相关的 Telegram 群组 Claude: [自动调用 openaiw_search_groups] 查询中... 找到以下群组: 1. Python 学习交流群 2. Python 开发者社区 ... ``` ### 方式 2: 通过 API 调用 ```bash curl -X POST http://localhost:8080/api/search \ -H "Content-Type: application/json" \ -d '{"query": "python"}' ``` ### 方式 3: 通过 Web 界面 ``` 访问: http://localhost:8080/web 输入查询 → 点击搜索 → 查看结果 ``` --- ## 8. 性能指标 | 配置 | 账号数 | 吞吐量 | 延迟 | 成本 | |-----|-------|--------|------|------| | 小规模 | 1 | 15-18 req/s | 1-2s | $5/月 | | 中等 | 3 | 45-54 req/s | 1-3s | $15/月 | | 大规模 | 10 | 150-180 req/s | 1-2s | $50/月 |