如何实现自动挂断

本文介绍如何实现智能体自动挂断通话。

功能说明

智能体自动挂断,指智能体在识别到用户挂断意图或自身任务完成后主动结束通话。此功能可确保通话在恰当时机结束,避免无效等待或突然中断,进而提升用户体验和座席效率。

应用场景

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

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

实现方案对比

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

方案

说明

推荐场景

通过 LLM 的 tool_calls 实现

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

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

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

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

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

方案一:通过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"

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

此方案更为简单,无模型选择限制,您只需引导 LLM 在需要挂断时输出一个特定格式的文本指令。

指令格式

<imsagent_hangup endword=结束语/>

参数说明:

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

使用示例

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

参考提示词(Prompt)

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

你是一个智能助手,你能够支持以下能力:
1. 当需要主动挂断通话时,请按如下格式输出:
<imsagent_hangup endword=结束语/>
示例:
<imsagent_hangup endword="那我挂断了,再见!"/>
2. 其它情况下,请自由与用户进行正常对话。