本文介绍如何实现智能体自动挂断通话。
功能说明
智能体自动挂断,指智能体在识别到用户挂断意图或自身任务完成后主动结束通话。此功能可确保通话在恰当时机结束,避免无效等待或突然中断,进而提升用户体验和座席效率。
应用场景
用户意图挂断:在对话过程中,若用户明确表达“我要挂了”、“不用了,谢谢”等结束语,大模型识别该意图并立即执行挂断。
智能体主动完成任务后挂断:当智能体已完成信息确认、订单创建等业务目标,可携带结束语进行播报并自动挂断,实现自然收尾。
实现方案对比
您可以根据业务需求和技术架构,选择以下任一方案来实现自动挂断功能。
方案 | 说明 | 推荐场景 |
通过 LLM 的 tool_calls 实现 | 遵循 OpenAI 的函数调用(Function Calling)规范,将挂断功能封装为工具(Tool)供 LLM 调用。 | 仅适用于遵循 OpenAI 协议的自研LLM模型集成,实现结构化、更可靠的功能调用。 |
通过 LLM 输出指定文本指令实现 | 在 LLM 的提示词(Prompt)中定义一个特殊的文本指令,引导 LLM 在需要挂断时输出该指令。 | 无模型限制,实现简单快捷,无需复杂的接口配置,通过 Prompt 精准控制挂断行为的场景。 |
方案一:通过LLM的tool_calls实现
智能体启动接口配置
要启用自动挂断功能,需要在启动智能体实例时,通过 LlmConfig.FunctionMap 将系统内置的挂断功能与 LLM 中的函数进行映射。
音视频通话:调用StartAIAgentInstance - 启动智能体实例时,配置AIAgentConfig中的LlmConfig。
电话通话:调用StartAIAgentOutboundCall - 启动智能体外呼电话时,配置AIAgentOutboundCallConfig中的LlmConfig。
LlmConfig:
名称 | 类型 | 描述 | 实例值 |
FunctionMap | array<object> | 功能映射列表,用于将智能体能力与 LLM 函数对应。当前只支持和用户自定义 OpenAI 协议 LLM 的函数调用。 | |
-Function | string | 阿里智能体系统提供的内置功能名称。当前只支持 hangup(挂断)。 | hangup |
-MatchFunction | string | 与该功能对应的 LLM 函数名称,由客户自定义,用于在 LLM 中调用对应功能。用户自定义 LLM 协议参考: LLM标准接口 | hangup |
FunctionMap 将 LLM 中定义的函数映射到智能体系统的内置功能。当系统在 LLM 的 tool_calls 响应中检测到 MatchFunction 定义的函数名,即会执行 Function 对应的内置功能。这个映射必填,如果不需要函数名转换可以两个都填写hangup。
实现LLM的tool_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. 其它情况下,请自由与用户进行正常对话。