OmniAgent Web UI与Gateway详解如何打通WebSocket会话管理、多端切换与记忆一致性完整指南【免费下载链接】OmniAgentAn agent capable of self-evolving and dynamically hardening security项目地址: https://gitcode.com/gh_mirrors/om/OmniAgentOmniAgent是一个可自进化、安全动态加固的开源 Agent 框架其Web UI 与 Gateway 网关通过WebSocket 会话管理将 Web 浏览器、飞书、Discord、Telegram 等多端统一接入并保证记忆一致性。本文用最直白的方式带你搞懂这套一个大脑、多个入口的多端切换架构是怎么实现的。{width480} 快速上手3步启动 OmniAgent Web UI新手最关心的问题是怎么跑起来只需三步pip install -e . # 1. 安装 omniagent onboard # 2. 交互式配置选提供商、填 API Key omniagent serve # 3. 启动 Gateway启动后终端会提示 Web UI 地址http://127.0.0.1:18790/浏览器打开即可开始对话。入口代码在 omniagent/cli/main.pyserve命令会创建GatewayServer并把 Agent 的处理器挂到路由上。️ Gateway 是什么一张图看懂消息流转Gateway 是 OmniAgent 的总机基于 aiohttp 同时提供WebSocket 长连接与HTTP 接口两种接入方式。它的角色可以类比为一家餐厅的前台端点作用面向谁GET /wsWebSocket 实时对话通道Web UIPOST /messageHTTP 单轮消息接口脚本 / 集成方GET /health健康检查会话数、连接数、渠道状态监控GET /内置 Web 聊天界面浏览器/api/sessions等会话、技能、工具、审批的 REST API开发者所有消息最终都会汇入同一个MessageRouter消息路由器再由路由分发给背后的 Reflexion Agent。两种工作模式直连模式WebSocket/HTTP 消息直接调用 Agent 处理器延迟最低总线模式飞书、Discord 等渠道消息先推入MessageBus消息总线由桥接循环消费后路由给 Agent响应再经总线发回对应渠道。这一层的核心实现在 omniagent/gateway/router.py。 WebSocket 会话管理连接与生命周期的完整流程这是本文的核心。当你通过 Web UI 发送一句话时Gateway 内部发生了这些事源码omniagent/gateway/server.py建立连接浏览器连接/ws服务端为每条连接生成唯一 ID断连时自动清理解析消息从 JSON 载荷中提取session_id、user_id、channel_id与内容获取或创建会话SessionManager.get_or_create_session()—— 若指定了已有且未过期的session_id直接复用否则创建新会话记录用户消息→ 路由给 Agent 处理 →记录助手回复双向写入会话历史回传结果把session_id、回复内容与元数据经 WebSocket 推回前端。会话本身是一个状态机只有三种状态active进行中、paused暂停、closed已关闭支持随时暂停、恢复与关闭。更重要的是持久化每个会话都会实时落盘为~/.omniagent/sessions/下的 JSON 文件服务重启后自动加载回来见 omniagent/gateway/session.py 与 加载逻辑。此外还有一个守夜人Gateway 后台任务每分钟扫描一次将超过session_timeout默认 1 小时未活动的会话自动清理防止内存与磁盘无限膨胀见 定时清理任务。 多端切换手机飞书聊到一半电脑浏览器接着聊多端部署是 OmniAgent 的招牌能力之一。渠道层通过 omniagent/channels/ 下的统一抽象接入飞书、Discord、Telegram、Webhook 等平台。每个渠道只需实现start()、stop()、send()三个方法并遵循基类的权限白名单机制allow_from为空则拒绝所有人*放行所有人然后统一把消息投递到消息总线见 omniagent/channels/base.py。切换的钥匙就是session_id消息路由层会把渠道消息的user_id做渠道:发送者的命名空间化如feishu:123456确保不同平台的用户互不串线会话以user_id channel_id session_id为身份只要客户端携带同一个session_id发起请求无论来自浏览器还是移动端命中的都是同一份会话历史会话文件按用户/渠道维度组织配合list_sessions接口可按user_id、channel_id、状态筛选方便管理多端会话。这意味着你在飞书上发起的任务把session_id带到 Web UI 打开上下文原样延续——换设备不换记忆。 记忆一致性三层保障机制为什么跨端切换后 Agent 还记得你是谁、聊到哪了靠三层设计层级机制说明会话层会话历史落盘 状态机每条消息含工具调用实时写入 JSON重启不丢路由层命名空间化的用户标识渠道:发送者ID保证跨渠道身份唯一、不混淆记忆层Agent 级主动式记忆长期记忆由 Agent 的记忆管理器全局维护与会话解耦天然跨端共享最后一点很关键OmniAgent 的主动式记忆Personalization Memory是挂载在 Agent 实例上的全局能力而不是某个聊天窗口私有的数据。所以即使新建会话、换端登录Agent 沉淀下来的用户画像与偏好依然一致——这正是记忆一致性的最终保障。 附带彩蛋高危操作的实时审批WebSocket 通道不只用来聊天。当 Agent 触发高危工具调用时安全层会发布审批事件Gateway 订阅该事件并实时推送approval_required消息给所有在线客户端你在任意端点击批准/拒绝approval_resolved会广播给所有端见 审批事件转发。配合 omniagent/security/ 下的策略引擎与审计模块这就是安全随使用动态加固在交互层的体现。 关键源码速览文件职责omniagent/gateway/server.pyWebSocket/HTTP 服务器、审批事件推送、定时清理omniagent/gateway/session.py会话模型、状态机、磁盘持久化omniagent/gateway/router.py消息路由直连模式 消息总线桥接omniagent/gateway/api.py会话/配置/技能/工具/审批 REST APIomniagent/gateway/web_ui.html内置 Web 聊天界面omniagent/channels/飞书、Discord、Telegram、Webhook 渠道实现❓ 常见问题FAQQ不开 Web UI能用其他端吗可以。omniagent serve启动后在config.yaml中启用对应渠道飞书/Discord/TelegramGateway 会自动挂上渠道管理器甚至可以直接POST /message走纯 HTTP。Q会话什么时候会被清理超过session_timeout默认 3600 秒无活动即过期由后台任务每分钟清理一次也可以通过 API 手动pause/close/delete。Q敏感信息会通过 API 泄露吗不会。GET /api/config返回前会对 API Key 等敏感字段做掩码处理且拒绝通过 API 修改敏感字段见 敏感字段掩码。小结OmniAgent 的 Gateway 用WebSocket 会话持久化 命名空间用户标识 Agent 级记忆四件套优雅地解决了多端接入下最棘手的两个问题——会话不丢、记忆不乱。对于想自建多端 AI 助手的开发者来说omniagent/gateway/ 与 omniagent/channels/ 这两个目录是值得精读的参考实现。【免费下载链接】OmniAgentAn agent capable of self-evolving and dynamically hardening security项目地址: https://gitcode.com/gh_mirrors/om/OmniAgent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考