news 2026/9/16 13:19:53

OpenSRE 网关(Gateway)架构解析:Slack/Telegram 会话、存储与身份中间件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenSRE 网关(Gateway)架构解析:Slack/Telegram 会话、存储与身份中间件

OpenSRE 网关(Gateway)架构解析:Slack/Telegram 会话、存储与身份中间件

【免费下载链接】opensreBuild your own AI SRE agents. The open source toolkit for the AI era.项目地址: https://gitcode.com/GitHub_Trending/op/opensre

OpenSRE 是一个开源的 AI SRE(智能运维)工具包,它的Gateway(网关)模块是一个常驻进程,负责把Slack、Telegram、Discord 等聊天平台接入 AI 运维代理:你在 Slack 里 @ 一下机器人,或在 Telegram 里发一条私信,代理就会开始调查线上故障。本文带你从会话、存储、身份中间件三个维度,快速看懂 gateway/ 的架构设计。

🧭 先搞懂:OpenSRE 网关解决什么问题?

OpenSRE 有 3 种与代理对话的"界面(Surface)":交互式 Shell、CLI 一次性命令、以及网关。网关是唯一常驻运行的界面——它持续监听聊天平台的消息,把"人 → 代理"的输入和"代理 → 人"的输出桥接起来。

关键设计只有一条:所有界面共用同一个核心。无论你从哪个平台发消息,最终都交给同一个回调(text, session, output, logger四参数),由TurnRunner驱动代理思考。网关只负责"如何收消息、如何回消息",永远不改变代理本身如何推理。

各平台接入方式见官方文档:docs/messaging/slack.mdx、docs/messaging/telegram.mdx。

🚀 启动链路:一条命令如何拉起整个网关

执行opensre gateway start后,启动链路层层委托,职责清晰:

阶段文件职责
守护进程gateway/core/process/supervision.pypidfile + 子进程派生,支持start/stop/status
组合根gateway/core/lifecycle/controller.pyGatewayController:构建唯一的TurnRunner,编排各表面
表面装配gateway/startup.pystart_gateway:一次性启动 Web 表面 + 全部聊天传输
传输注册gateway/transports/startup.pyTRANSPORTS注册表:Telegram / Slack / Discord / Buzz

其中 Web 表面是一个 FastAPI 应用(健康检查 + 告警接收,见 gateway/web/webapp.py);网关进程还会顺带托管定时任务调度器——这是"平台组件",不是聊天传输。

💬 Slack 与 Telegram:两种传输,同一核心

传输层位于 gateway/transports/,各平台是互不导入的对等包,每个传输自带固定的"五件套":

  1. Settings— 环境变量配置,缺失即报错;
  2. Listener(监听器)— 接收消息,调用共享回调;
  3. Inbound Security— 逐条消息鉴权 + 审计日志;
  4. Turn Output— 实现流式状态与最终回复的投递;
  5. Session Binding— 把平台会话键绑定到Session

两种平台的差异只在"消息如何到达":

  • Telegram:长轮询(long polling),无需公网地址,适合移动端值班场景;
  • Slack:默认Socket Mode(同样无需公网 URL),可选Events API HTTP(需要可达 URL 和签名密钥),每个 Slack 线程就是一个独立会话。

💡 出入站是独立的:Slack 既可以是入站聊天通道,也可以通过 webhook/bot token 工具出站发告警。

🗄️ 会话存储:一个对话如何变成稳定的 Session

聊天平台里的"一个对话"(Slack 线程、Telegram 私聊)与代理的Session之间,靠**绑定存储(Binding Store)**连接:

  • gateway/core/storage/session/resolver.py:SessionResolver负责"平台会话键 ↔ 会话 ID"的查找、创建、轮换,生命周期本身委托给SessionManager
  • gateway/core/storage/postgres.py:配置DATABASE_URL后全进程共享一个已迁移的 Postgres 数据库,事件与反馈各有repository.py选择器——有 Postgres 走 Postgres,没有则退回进程本地实现;
  • 安全审计日志由 gateway/core/storage/security_audit.py 承接。

值得注意的细节能体现多租户意识:绑定键是principal(组织 silo)+ actor(平台用户 ID)双维度的。首次运行时,解析器会把旧版"空 ID"的遗留绑定一次性采纳为带作用域的键并删除旧行,防止第二个用户意外继承别人的会话。

🛡️ 身份中间件:入站消息的三重防线

每条入站消息在到达代理之前,都要穿过 gateway/core/middleware/ 中的逐轮(per-turn)步骤——这些步骤是所有传输共享的,避免"同一个逻辑在 4 个平台各抄一份、互相漂移":

中间件文件作用
入站决策inbound_decision.py统一编排:持久化策略变更 → 发送回复 → 拒绝即停 → 遇/new轮换会话
身份策略identity_policy.py从集成记录读写MessagingIdentityPolicy(入站开关 + 白名单),无记录时默认放行,首跑友好
会话锁conversation_locks.py每个会话一把锁,串行化同一会话的轮次;空闲锁有上限,自动清理
在途取消active_turns.py注册在途轮次的取消事件;/stop锁外查找并触发,不会排队阻塞
工具审批approvals.py敏感工具调用前弹出确认(Slack 用 Block Kit、Telegram 用内联键盘)

配合opensre messaging allow -p slack -u U0123ABCD之类的白名单命令,未授权用户的消息会在第一层就被拦截并留下审计记录——这是"fail closed"(默认拒绝)的安全姿态。

⚖️ 并发控制:两层阀门,消息不打架

网关用两层不同的限流防止并发风暴:

  • 进程级闸门process_turn_gate():按OPENSRE_SIZE_PROFILE给出容量(SMALL=1、MEDIUM=2、LARGE=4 个并行轮次)。聊天消息采用"忙则丢弃"(回复 at-capacity 提示),而调度器任务采用"忙则排队";
  • 传输级并发*_GATEWAY_MAX_CONCURRENT:限制单个传输在触及共享TurnRunner之前可并行处理的消息数。

同一会话内轮次串行、不同会话间在闸门内并行——这就是为什么你可以同时和 Slack 线程、Telegram 私聊分别对话,互不干扰。

🔌 扩展指南:如何接入一个新聊天平台

得益于"核心唯一"设计,新增平台不需要碰代理、提示词或工具,只需提供一个包含上述"五件套"的包:

  1. settings.py读取环境变量;
  2. 监听器收到消息后调用共享回调(text, session, output, logger)
  3. 接入integrations/messaging_security做鉴权与审计;
  4. 实现TurnOutput(流式状态 + 最终答案投递);
  5. SessionResolver中注册新的platform值完成会话绑定。

最后把新传输注册进 gateway/transports/registration.py 即可。完整入口清单见 gateway/AGENTS.md 与 gateway/README.md。

📚 小结:一张速查表

想了解的去哪里看
启动与进程模型gateway/core/lifecycle/controller.py
Slack 处理与分发gateway/transports/slack/processing/dispatcher.py
Telegram 轮询与启动gateway/transports/telegram/startup.py
会话绑定与存储gateway/core/storage/session/resolver.py
身份/入站中间件gateway/core/middleware/identity_policy.py
消息平台配置指南docs/messaging/index.mdx

OpenSRE 网关的架构哲学可以概括为一句话:核心只有一份,表面可以有很多。传输层保持"对等而隔离",共享逻辑一律下沉到core/middlewareinfrastructure/turn_host——这正是它能以极小成本不断接入新平台的原因。🚀

【免费下载链接】opensreBuild your own AI SRE agents. The open source toolkit for the AI era.项目地址: https://gitcode.com/GitHub_Trending/op/opensre

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 13:19:51

OptiScaler 使用指南:免费把 DLSS、FSR、XeSS 跨显卡自由切换

OptiScaler 使用指南:免费把 DLSS、FSR、XeSS 跨显卡自由切换 【免费下载链接】OptiScaler OptiScaler bridges upscaling/frame gen across GPUs. Supports DLSS2/XeSS/FSR2 inputs, replaces native upscalers, enables FSR-FG/XeFG on non-FG titles. Supports N…

作者头像 李华
网站建设 2026/9/16 13:18:57

通信信号处理MATLAB脚本全解析:从采样到随机过程

简介:这套MATLAB Simulink通信系统建模与仿真源码包,面向通信专业学生、研究人员及需要快速上手Simulink仿真的工程技术人员。内容覆盖信号与系统基础、傅里叶变换与反变换、希尔伯特变换、随机过程分析、离散时间系统、卷积运算以及带通/低通变换等核心…

作者头像 李华
网站建设 2026/9/16 13:18:23

Python turtle绘制圣诞树:从坐标系到交互动画的完整实践

简介:一份面向Python初学者、编程爱好者及信息技术教师的趣味绘图实例,借助turtle库绘制圣诞树及星星、圣诞帽等节日装饰元素,既能用于圣诞节主题的编程练习,也可作为课堂讲解循环与函数的教学案例。压缩包内仅含1个Python脚本&am…

作者头像 李华
网站建设 2026/9/16 13:17:20

page-agent安全漏洞报告流程解读:SECURITY.md里的正确姿势

page-agent安全漏洞报告流程解读:SECURITY.md里的正确姿势 【免费下载链接】page-agent JavaScript in-page GUI agent. Control web interfaces with natural language. 项目地址: https://gitcode.com/GitHub_Trending/pa/page-agent page-agent 是一个运行…

作者头像 李华