ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

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

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/opensreOpenSRE 是一个开源的 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/各平台是互不导入的对等包每个传输自带固定的五件套Settings— 环境变量配置缺失即报错Listener监听器— 接收消息调用共享回调Inbound Security— 逐条消息鉴权 审计日志Turn Output— 实现流式状态与最终回复的投递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.pySessionResolver负责平台会话键 ↔ 会话 ID的查找、创建、轮换生命周期本身委托给SessionManagergateway/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给出容量SMALL1、MEDIUM2、LARGE4 个并行轮次。聊天消息采用忙则丢弃回复 at-capacity 提示而调度器任务采用忙则排队传输级并发*_GATEWAY_MAX_CONCURRENT限制单个传输在触及共享TurnRunner之前可并行处理的消息数。同一会话内轮次串行、不同会话间在闸门内并行——这就是为什么你可以同时和 Slack 线程、Telegram 私聊分别对话互不干扰。 扩展指南如何接入一个新聊天平台得益于核心唯一设计新增平台不需要碰代理、提示词或工具只需提供一个包含上述五件套的包settings.py读取环境变量监听器收到消息后调用共享回调(text, session, output, logger)接入integrations/messaging_security做鉴权与审计实现TurnOutput流式状态 最终答案投递在SessionResolver中注册新的platform值完成会话绑定。最后把新传输注册进 gateway/transports/registration.py 即可。完整入口清单见 gateway/AGENTS.md 与 gateway/README.md。 小结一张速查表想了解的去哪里看启动与进程模型gateway/core/lifecycle/controller.pySlack 处理与分发gateway/transports/slack/processing/dispatcher.pyTelegram 轮询与启动gateway/transports/telegram/startup.py会话绑定与存储gateway/core/storage/session/resolver.py身份/入站中间件gateway/core/middleware/identity_policy.py消息平台配置指南docs/messaging/index.mdxOpenSRE 网关的架构哲学可以概括为一句话核心只有一份表面可以有很多。传输层保持对等而隔离共享逻辑一律下沉到core/middleware与infrastructure/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),仅供参考
返回列表