如何实现自动挂断/转呼

本文介绍如何实现智能体自动挂断/转呼。

功能说明

智能体自动挂断/转呼,指智能体在识别到用户挂断/转呼意图或自身任务完成后主动进行挂断/转呼。

应用场景

  1. 用户意图挂断:在对话过程中,若用户明确表达“我要挂了”、“不用了,谢谢”等结束语,大模型识别该意图并立即执行挂断。

  2. 智能体主动完成任务后挂断:当智能体已完成信息确认、订单创建等业务目标,可携带结束语进行播报并自动挂断,实现自然收尾。

  3. 业务规则驱动的智能转呼:当用户需求超出当前智能体服务能力范围时,智能体可依据预设策略进行人工转呼。

实现方案对比

您可以根据业务需求和技术架构,选择以下任一方案来实现自动挂断功能。

方案

说明

推荐场景

支持能力

通过 LLM 输出指定文本指令实现

在 LLM 的提示词(Prompt)中定义一个特殊的文本指令,引导 LLM 在需要挂断时输出该指令。

无模型限制,实现简单快捷,无需复杂的接口配置,通过 Prompt 精准控制挂断行为的场景。

自动挂断、自动转呼

通过 LLM 的 tool_calls 实现

遵循 OpenAI 的函数调用(Function Calling)规范,将挂断功能封装为工具(Tool)供 LLM 调用。

仅适用于遵循 OpenAI 协议的自研LLM模型集成,实现结构化、更可靠的功能调用。

自动挂断

方案一:通过LLM输出指定文本指令实现

此方案更为简单,您只需引导 LLM 在需要挂断/转呼时输出一个特定格式的文本指令。

挂断指令

指令格式

<imsagent_hangup endword=结束语/>

参数说明:

  • endword:挂断前向用户播报的结束语。通话将在结束语播报完成后自动挂断。

使用示例

<imsagent_hangup endword="那我挂断了,再见!"/>

转呼指令

指令格式

<imsagent_transfer_call caller=主叫号码, callee=被叫号码, err_msg=转呼失败提示语, msg=转呼成功提示语/>

参数说明:

  • caller:主叫方号码(当前用户号码或业务设定的虚拟号码)。

  • callee:被叫方号码(固定转呼目标)。

  • err_msg:转呼失败时播放给用户的提示语。

  • msg:转呼动作执行时播放给用户的提示语。

使用示例

<imsagent_transfer_call caller="111111", callee="123", err_msg="对不起,转呼繁忙中", msg="正在为您转呼中"/>

参考提示词(Prompt)

您可以将以下指令添加到您的 Prompt 中,以引导 LLM 在适当时机使用挂断指令。

你是一个智能语音助手,你能够支持以下能力:
1. 当需要主动挂断通话时,请按如下格式输出:
<imsagent_hangup endword=结束语/>
示例:
<imsagent_hangup endword="那我挂断了,再见!"/>
2. 当需要将用户转接到其他固定号码时,请按如下格式输出:
<imsagent_transfer_call caller=主叫号码, callee=被叫号码, err_msg=转呼失败提示语, msg=转呼提示语/>
示例:
<imsagent_transfer_call caller=111111, callee=123456, err_msg=对不起,转呼繁忙中, msg=正在为您转呼中/>

方案二:通过LLMtool_calls实现

智能体启动接口配置

要启用自动挂断功能,需要在启动智能体实例时,通过 LlmConfig.FunctionMap 将系统内置的挂断功能与 LLM 中的函数进行映射。

音视频通话:调用StartAIAgentInstance - 启动智能体实例时,配置AIAgentConfig中的LlmConfig。

电话通话:调用StartAIAgentOutboundCall - 启动智能体外呼电话时,配置AIAgentOutboundCallConfig中的LlmConfig。

LlmConfig:

名称

类型

描述

实例值

FunctionMap

array<object>

功能映射列表,用于将智能体能力与 LLM 函数对应。当前只支持和用户自定义 OpenAI 协议 LLM 的函数调用。

[{
	"Function": "hangup",
	"MatchFunction": "hangup"
}]

-Function

string

阿里智能体系统提供的内置功能名称。当前只支持 hangup(挂断)。

hangup

-MatchFunction

string

与该功能对应的 LLM 函数名称,由客户自定义,用于在 LLM 中调用对应功能。用户自定义 LLM 协议参考: LLM标准接口

hangup

FunctionMap 将 LLM 中定义的函数映射到智能体系统的内置功能。当系统在 LLM 的 tool_calls 响应中检测到 MatchFunction 定义的函数名,即会执行 Function 对应的内置功能。这个映射必填,如果不需要函数名转换可以两个都填写hangup。

实现LLMtool_calls

用户可以使用LLM本身能力或者其他算法能力,判断是否需要挂断,然后通过OpenAI协议格式返回tool_calls。详细请参见:LLM标准接口

def generate_stream_response(data):
    response = "这是一个模拟的AI助手流式响应。实际应用中,这里应该调用真实的AI模型。"
    words = list(response)
    for i, word in enumerate(words):
        chunk = {
            "id": "chatcmpl-123",
            "object": "chat.completion.chunk",
            "created": int(time.time()),
            "model": data['model'],
            "choices": [{
                "index": 0,
                "delta": {
                    "content": word, 
                    "tool_calls": [  
                        {
                            "id": "call_abc123",  
                            "type": "function",
                            "function": {
                                "name": "hangup", 
                                "arguments": "\{\}"  
                            }
                        }
                    ]
                },
                "finish_reason": None if i < len(words) - 1 else "stop"
            }]
        }
        logger.info(chunk)
        yield f"data: {json.dumps(chunk)}\n\n"
        time.sleep(0.1)  # 模拟处理时间

    yield "data: [DONE]\n\n"