如何实现真人客服接管智能体

本文将介绍在用户与智能体通话过程中,如何实现真人客服对智能体的接管。

真人接管介绍

真人接管功能是在用户服务过程中,当AI智能体(如聊天机器人)无法满足用户需求或遇到复杂问题时,能够无缝将对话转移给真人客服处理的一种机制。这个过程通过预设规则、客户主动请求或大模型判断分析来触发,确保在适当的时候进行转接。

限制说明

  • 在接入真人接管之前,您需要提交工单提供您的工作流ID,方便我们对您的工作流进行配置,以支持真人接管。

  • 在真人接管后,无法重新切换至AI智能体进行交互。

功能实现概览

在需要真人接管的情况下,AI实时互动整体业务流程如下:

image

在上述流程中,您需要关注的是如何触发真人接管通知真人客服进行接管以及真人客服进行接管三个流程。

  • 如何触发真人接管(流程5):

    • 用户主动发起真人接管请求:如果是由用户主动发起真人接管请求,那么您需要关注如何通知真人客服进行接管。

    • LLM自动判断需要真人接管:如需由大模型(LLM)判断是否需要由真人接管,您需自行实现自研的LLM。百炼大模型是通过自定义插件来实现的,具体步骤如下所示:

      判断是否需要真人接管(百炼)

      1. 进入百炼控制台,单击新增应用,选择智能体应用,单击直接创建

        image

      2. 选择您创建好的智能体应用,单击管理,进入配置页面。

      3. 在配置页面,单击选择插件,在右侧选择创建自定义插件。创建自定义插件并实现功能,请参见创建自定义插件

        image

      4. 在您的App Server中实现自定义插件定义的API接口。

      5. 在配置页面,配置LLMPrompt,当发现LLM输入有呼叫真人客服的意图,则调用自定义插件。

  • 通知真人客服进行接管(流程7):通知Web端进行真人接管,此部分涉及大模型与AppServerWeb端之间的通知机制,需您自行实现

  • 真人客服接管智能体(流程8):在真人客服接管智能体后,您还需实现接收来自智能体发送的字幕。具体实现,请参见客服侧Web端如何入会

真人客服接管实现

Web侧真人客服接管详细流程

image

客服侧Web端如何入会

  1. 客服侧调用TakeoverAIAgentCall - 开启真人接管模式接口。

  2. 客服侧获取入会和RTC Token等信息。

  3. 客服侧根据入会信息调用RTC入会和推拉流,接收来自智能体发送过来的字幕。RTC接入,请参考快速使用阿里云ARTC Web SDK

说明

在真人接管后,您可以选择使用智能体音色或客服自身音色。为确保真人接管后的音色与原本智能体保持一致,客户需提前进行人声克隆。具体操作,请参考基于百炼CosyVoice创建自定义音色

接收来自智能体发送过来的字幕,参考代码如下:

  1. 监听收到字幕事件。

    aliRtcEngine.on('dataChannelMsg', (uid, msg) => {
      try {
        const dataChannelMsg = JSON.parse(new TextDecoder().decode(msg.data));
        if (dataChannelMsg.type === 1002) {
          // 收到智能体字幕,data格式:
          // text: 文本
          // sentenceId: 语句Id,用于区分多句话,一句话会根据流式结果多次通知
          // end: 当前语句是否结束
          console.log('agentSubtitleNotify', dataChannelMsg.data);
        } else if (dataChannelMsg.type === 1003) {
          // 收到用户字幕
          // text: 文本
          // sentenceId: 语句Id,用于区分多句话,一句话会根据流式结果多次通知
          // end: 当前语句是否结束
          console.log('userSubtitleNotify', dataChannelMsg.data);
        } else {
          // 其他类型可以忽略
        }
      } catch(error) {
        console.error(error)
      }
    });
  2. 加入频道之前执行方法,开启接收字幕能力。

    aliRtcEngine.setParameter(
      JSON.stringify({
        data: {
          enableSubDataChannel: true,
        },
      }),
    );

进阶实现

用户侧感知真人客户接管过程

您可以通过回调接口获取真人客服在接管过程中的状态,并将该状态实时反馈给用户。

如需要对客服接管过程进行感知和提示,您需要实现回调接口onHumanTakeoverWillStartonHumanTakeoverConnected,示例代码如下所示:

说明

客户端需要使用AICallKit SDK v1.5.0及以上版本。

Android

// 回调处理(仅示例不分核心的回调操作)
ARTCAICallEngine.IARTCAICallEngineCallback mCallEngineCallbackWrapper = new ARTCAICallEngine.IARTCAICallEngineCallback() {
    
	@Override
    public void onHumanTakeoverWillStart(String takeoverUid, int takeoverMode) {
        // 当真人即将接管当前智能体
    }

    @Override
    public void onHumanTakeoverConnected(String takeoverUid) {
        // 当真人接管已经接通
    }

    // 其他回调
    ...
};

iOS

extension AUIAICallStandardController: ARTCAICallEngineDelegate {
    
	public func onHumanTakeoverWillStart(takeoverUid: String, takeoverMode: Int) {
        // 当真人即将接管当前智能体
        debugPrint("AUIAICallStandardController onHumanTakeoverWillStart:\(takeoverUid) , takeoverMode:\(takeoverMode)")
    }
    
    public func onHumanTakeoverConnected(takeoverUid: String) {
        // 当真人接管已经接通
        debugPrint("AUIAICallStandardController onHumanTakeoverConnected:\(takeoverUid)")
    }

    // 其他回调
    ...
}

Web

engine.on('humanTakeoverWillStart', (uid: string, mode: number) => {
  // 真人即将接管当前智能体
  console.log('AICallHumanTakeoverWillStart', uid, mode);
});
engine.on('humanTakeoverConnected', (uid: string) => {
  // 真人接管已经接通
  console.log('AICallHumanTakeoverConnected', uid);
});