Skip to content

响应通道与外部即时通信 ​

统一抽象 ​

AgentResponseChannel 统一返回方式,要求实现:

  • 提供 StreamHandler。
  • 返回通道类型和活跃状态。
  • 发送错误并在关闭时释放资源。

AgentResponseChannelRegistry 维护 sessionId → AgentResponseChannel。普通注册不会覆盖仍活跃的通道;SSE 重连使用 replace,避免旧通道关闭时误删新建 emitter。

流式事件 ​

浏览器通过 AiChatbotAgentController 建立 SSE 连接,SseConnectionManager 管理 emitter、超时、错误和完成回调,并发送心跳注释保持反向代理连接。SseStreamHandler 推送 token、节点状态、工具结果和完成事件;断线期间的事件由 PendingSseEventStore 按会话保存,重连后再读取。

外部即时通信适配 ​

ExternalImInboundGateway 把平台事件转换为 ExternalImInboundMessage,ExternalImConversationKeyFactory 为平台用户生成稳定会话键,ExternalImReplyRegistry 保存回复目标。出站消息由 ExternalImOutboundMessageFactory 统一生成,再交给微信、企业微信、钉钉或 QQ 的客户端实现。

平台关键实现管理控制器
微信channel/wechatWechatChannelController
企业微信channel/wecomWeComChannelController
钉钉DingTalkChannelRuntimeManager、扫码服务DingTalkChannelController
QQQqBotAgentServer、WebSocket clientQqChannelController

多实例注意事项 ​

共享队列可以分发 Agent 消息,但外部 IM 的回复目标通常只在接入节点内存中。若消息被其他节点消费,可能出现执行完成但无法回发的问题。部署多实例时,应让同一外部会话固定到接入节点,或把 reply target 改为可共享存储并在网关层做路由。