介绍Windows端如何接入Al实时对话智能体。
简介
通过DingRTC的实时消息能力,可以接收AI实时对话智能体的服务状态、转录消息以及控制命令等。DingRTC的实时消息能力依托于会议,使用前需先成功入会。
相关概念
会话(Session):实时消息会话,由sessionId唯一标识。Session支持join/leave/close操作,收发智能体实时消息前,需先加入对应Session。
智能体ID:智能体用户ID。
转录消息:与智能体对话的转录信息。
自然对话/对讲机模式:通过OpenAPI创建的智能体的对话模式。
集成方法
入会前,先集成基础实时消息Windows集成方法
同时,从RtmClient获取RtmAgentClient :
ding::rtc::RtmClient *rtmclient = rtcengine->GetRtmClient(); ding::rtc::RtmAgentClient *agentclient = rtmclient->GetAgentClient();
给RtmAgentClient实例设置回调监听器:
class MyRtmAgentEventListener : public ding::rtc::RtmAgentEventListener { public: void OnAgentUserReady(const ding::rtc::String &sessionId, const ding::rtc::String &agentId) override { } void OnAgentStateChanged(const ding::rtc::String &sessionId, const ding::rtc::String &agentId, AgentState state) override { } void OnTranscriptionMessage(const ding::rtc::String &sessionId, const ding::rtc::String &agentId, const TranscriptionData &data) override { } };
入会成功后,通过OpenAPI接口 StartAgent - 启动智能体入会并加入Session。
会中其他成员会收到OnSessionCreate事件通知,然后加入相同Session:
int rc = rtmclient->JoinSession(sessId); // Session存在时调用joinSession直接加入
加入指定Session(如果Session有智能体)或者是中途有智能体加入Session,都会收到OnAgentUserReady事件通知。需要应用层维护Session的智能体列表:
void OnAgentUserReady(const ding::rtc::String &sessionId, const ding::rtc::String &agentId) override { // 应用层需保留agentId,以便调用agent相关方法。 }
用户通过onAgentStateChanged事件获取当前智能体的状态变更:
void OnAgentStateChanged(const ding::rtc::String &sessionId, const ding::rtc::String &agentId, AgentState state) override { // 通过state获取当前智能体以下状态:Listening,Thinking,Responding。 }
SDK支持发送指定信令控制智能体行为,如让智能体回复开场白:
int rc = agentclient->SendGreetingReady(sessId, agentId);
手动打断智能体:
int rc = agentclient->SendInterrupt(sessId, agentId);
在对讲机模式下,发送控制信令,注意在发送ding::rtc::AgentPushToTalkCmd::Send前需先发送ding::rtc::AgentPushToTalkCmd::Start:
// 让智能体开始接收用户语音输入 int rc = agentclient->SendPushToTalk(sessId, agentId, ding::rtc::AgentPushToTalkCmd::Start); ... // 让智能体开始处理用户当前已输入的语音数据 int rc = agentclient->SendPushToTalk(sessId, agentId, ding::rtc::AgentPushToTalkCmd::Send); ... // 取消用户当前语音输入 int rc = agentclient->SendPushToTalk(sessId, agentId, ding::rtc::AgentPushToTalkCmd::Cancel);
如果本端不再使用智能体实时消息功能,可以离开Session:
int rc = rtmclient->LeaveSession(sessId);
注意事项
智能体创建及加入RTM Session由服务端OpenAPI StartAgent - 启动智能体接口决定。
有智能体的RTM Session请不要主动关闭,Session会由服务端智能体服务 OpenAPI 管理。
远端用户不调LeaveSession直接LeaveChannel,有可能收不到这个远端用户的OnSessionRemoteUserLeave事件通知。应用层需要在收到他的OnRemoteUserOffLineNotify事件通知后,主动将该用户从所有Session的成员列表里移除。
推荐在入会前给RtmAgentClient实例设置回调监听器,避免丢失回调消息。