Al实时对话智能体

介绍iOS&Mac端如何接入Al实时对话智能体。

简介

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

相关概念

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

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

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

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

集成方法

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

  2. 同时,从DingRtmClient获取DingRtmAgentClient :

    DingRtmAgentClient *agentClient = [rtmClient getRtmAgentClient];
  3. DingRtmAgentClient实例设置回调监听器:

    @implementation DingRtmAgentClientDelegateImpl
    
    ...
    - (void)registerRtcDelegate {
     [self.agentClient setDelegate:self];
    }
    ...
    //MARK: - DingRtmAgentClientDelegate
    
    - (void)onAgentUserReady:(NSString *)sessionId agentId:(NSString *)agentId {
    }
    
    - (void)onAgentStateChanged:(NSString *)sessionId agentId:(NSString *)agentId state:(DingAgentState)state {
    }
    
    - (void)onTranscriptionMessage:(NSString *)sessionId agentId:(NSString *)agentId data:(DingRtmAgentTranscriptionData *)data {
    }
    @end
    
    
  4. 入会成功后,通过OpenAPI接口 StartAgent - 启动智能体入会并加入Session。

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

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

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

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

    [agentClient sendGreetingReady:sessionId agentId:agentId];

    手动打断智能体:

    [agentClient sendInterrupt:sessionId agentId:agentId];

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

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

    [rtmClient leaveSession:sessionId];

注意事项

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

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

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

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