Al实时对话智能体

介绍Android端如何接入AI实时对话智能体。

简介

通过DingRTC的实时消息能力,可以接收AI实时对话智能体的服务状态、转录消息以及控制命令等。DingRTC的实时消息能力依托于会议,使用前需先成功入会。

相关概念

会话(Session):实时消息会话,由sessionId唯一标识。Session支持join/leave/close操作,收发智能体实时消息前,需先加入对应Session。

智能体ID:智能体用户ID。

转录消息:与智能体对话的转录信息。

自然对话/对讲机模式:通过OpenAPI创建的智能体的对话模式。

集成方法

  1. 入会前,先集成基础实时消息Android集成方法

  2. 同时,从DingRtmClient获取DingRtmAgentClient :

    DingRtmAgentClient agentClient = rtmClient.getAgentClient();
  3. DingRtmAgentClient实例设置回调监听器:

    agentClient.setListener(new DingRtmAgentEventListener() {
        @Override
        public void onAgentUserReady(String sessionId, String agentId) {
        }
    
        @Override
        public void onAgentStateChanged(String sessionId, String agentId, DingRtmAgentClient.AgentState state) {
        }
    
        @Override
        public void onTranscriptionMessage(String sessionId, String agentId, DingRtmAgentClient.TranscriptionData data) {
        }
    });
  4. 入会成功后,通过OpenAPI接口 StartAgent - 启动智能体入会并加入Session。

  5. 会中其他成员会收到onSessionCreate事件通知,然后加入相同Session:

    rtmClient.joinSession(sessionId); // Session存在时调用joinSession直接加入
  6. 加入指定Session(如果Session有智能体)或者是中途有智能体加入Session,都会收到onAgentUserReady事件通知。需要应用层维护Session的智能体列表:

    @Override
    public void onAgentUserReady(String sessionId, String agentId) {
        // 应用层需保留agentId,以便调用agent相关方法
    }
  7. 用户通过onAgentStateChanged事件获取当前智能体的状态变更:

    @Override
    public void onAgentStateChanged(String sessionId, String agentId, DingRtmAgentClient.AgentState state) {
        // 通过state获取当前智能体以下状态:Listening,Thinking,Responding。
    }
  8. SDK支持发送指定信令控制智能体行为,如让智能体回复开场白:

    agentClient.sendGreetingReady(sessionId, agentId);

    手动打断智能体:

    agentClient.sendInterrupt(sessionId, agentId);

    在对讲机模式下,发送控制信令,注意在发送DingAgentPushToTalkCmdSend前需先发送DingAgentPushToTalkCmdStart:

    // 让智能体开始接收用户语音输入
    agentClient.sendPushToTalk(sessionId, agentId, AgentPushToTalkCmd.Start);
    ...
    // 让智能体开始处理用户当前已输入的语音数据
    agentClient.sendPushToTalk(sessionId, agentId, AgentPushToTalkCmd.Send);
    ...
    // 取消用户当前语音输入
    agentClient.sendPushToTalk(sessionId, agentId, AgentPushToTalkCmd.Cancel);
  9. 如果本端不再使用智能体实时消息功能,可以离开Session:

    rtmClient.leaveSession(sessionId);

注意事项

  1. 智能体创建及加入RTM Session由服务端OpenAPI StartAgent - 启动智能体接口决定。

  2. 有智能体的RTM Session请不要主动关闭,Session会由服务端智能体服务 OpenAPI 管理。

  3. 远端用户不调leaveSession直接leaveChannel,有可能收不到这个远端用户的onSessionRemoteUserLeave事件通知。应用层需要在收到他的onRemoteUserOffLineNotify事件通知后,主动将该用户从所有Session的成员列表里移除。

  4. 推荐在入会前给DingRtmAgentClient实例设置回调监听器,避免丢失回调消息。