Aura Bot

Aura Bot 运行驾驶舱

Aura Bot 是嵌入即时通讯通道的 AuraBoot AI Agent。它运行在 DM 中,响应群聊中的 @AI 提及,并支持与 Web Copilot 面板相同的流式聊天管道。在幕后,每一次 Aura Bot 回合都是一次 ConversationTurnService 执行,因此它继承了与其他每个 Agent 入口相同的持久化、审计与审批行为。

概念

Aura Bot 不是独立的 AI 运行时,而是共享 Agent 运行时的一个交付入口。这个区分很重要:路由到 Aura Bot 的消息在运行时层面与 Copilot 或 ACP 回合无法区分,只有 ResponseSink 不同。

入口触发Sink
/chat/streamWeb / 移动端聊天会话SseResponseSink
IM DM私聊机器人BroadcastResponseSink
IM 群组 @AI群聊提及BroadcastResponseSink
群聊自动回复频道规则触发BroadcastResponseSink

何时使用

  • 用户希望停留在 IM 客户端中,不打开管理后台。
  • 团队希望在频道中保留 Agent 交互的共享、可回溯记录。
  • 运维希望从聊天中被告警或查询记录(例如"订单 X 的状态如何")。
  • 群聊回复规则在分类事件上分派 Agent。

Aura Bot 不适合长耗时的批量 Agent 工作,那属于 ACP 的范畴。

架构

IM channel (DM or group)
        |
        v
+--------------------+      +---------------------------+
| Bot inbound adapter|----->| ConversationTurnService   |
| (DM | @mention |   |      |   runTurn / resumeTurn    |
|  group rule)       |      +-------------+-------------+
+--------------------+                    |
                                          v
                              +-----------+-----------+
                              |  Agent Runtime         |
                              |  - tool selection      |
                              |  - LLM call            |
                              |  - command pipeline    |
                              +-----------+-----------+
                                          |
                          +---------------v---------------+
                          |   BroadcastResponseSink       |
                          |   - chunked streaming         |
                          |   - final message persisted   |
                          +---------------+---------------+
                                          |
                                   IM channel reply

入站适配器将 IM 载荷(发送者、频道、线程、提及列表)归一化为 Web 聊天使用的同一份输入信封。从该点开始,只存在一条代码路径。

Chokepoint 规则

所有会话回合必须经过 ConversationTurnService.runTurn(或恢复暂停审批时的 resumeTurn)。不要在聊天实现内部直接向 IM 频道写入;不要手写 SSE 或 WebSocket 帧;不要在 turn 服务之外持久化消息。详见 conversation turn chokepoint 纪律。

一次回合会产出:

  • 一条持久化的用户消息和一条助手消息
  • 一个 trace span,包含 prompt、Tool 调用、延迟、成本
  • 可选的事件发布供下游监听者使用
  • 一个或多个流式 chunk 输出到所选 sink

示例:群聊 @AI 处理器

@Component
public class GroupMentionHandler {

    private final ConversationTurnService turns;

    public void onMention(GroupMessageEvent event) {
        // TurnRequest 是一个 record,使用位置参数直接构造(无 builder)。
        TurnRequest req = new TurnRequest(
            event.tenantId(),
            event.senderUserId(),
            /*humanMemberId=*/ null,
            "im_group",                          // channel
            "aura-bot",                          // agentCode
            event.conversationId(),
            /*clientMsgId=*/ null,
            event.cleanedText(),                 // userMessage
            /*pageContext=*/ null,
            /*options=*/ null,
            InboundMode.EXISTING_MESSAGE_ID,     // 群聊消息已先行落库
            /*precomputedBucket=*/ null,
            event.messageId(),                   // inboundMessageId
            /*parentTaskPid=*/ null,
            /*overrides=*/ null,
            /*legacyRequest=*/ null);

        ResponseSink sink = new BroadcastResponseSink(/* broadcaster, members, ... */);
        turns.runTurn(req, sink);
    }
}

需要审批的回复(例如"删除此客户")会挂起回合。当审批人点击同意时,恢复回调会调用 turns.resumeTurn(turnId, decision, sink),同一个 sink 将流式输出后续内容。

权限

Aura Bot 以 IM 用户身份运行,而不是服务账号。标准权限模型同样适用:

  • 用户必须对 Agent 调用的每个 Tool 拥有 <module>.<resource>.<action> Permission。
  • 用户手动无法运行的 Tool,也不能通过机器人调用。
  • 群聊规则自动回复仍会解析为具体用户身份,通常是频道所有者或配置的机器人操作者。

验证清单

  • 入站适配器调用 runTurn,绝不直接持久化或广播。
  • 恢复路径调用 resumeTurn,而非新建 runTurn
  • IM 使用 BroadcastResponseSink,而非 SseResponseSink
  • Tool 调用继承 IM 用户的 Permission。
  • 在 AI trace 查看器中可见来自 IM 的回合的 trace span。

相关

Aura Bot 运行记录