← 返回蜂巢洞察

人工智能接待员的工作原理:人工智能电话客服系统背后的技术架构

从表面上看,人工智能接待员似乎很简单:来电者说话,系统做出响应,然后对话持续进行,直到来电者得到答案或与相关人员取得联系。 但实际上,在这一对话的背后,存在着一系列电话基础设施、语音识别技术、语言模型、应用逻辑、应用程序接口、数据库以及呼叫路由机制。 有趣的地方并不在于人工智能模型本身,而在于这些组件是如何协同工作,将音频流转化为有用的商业行动的。 那些希望拥有这类功能的企业有两种选择: 它们可以购买现成的产品。目前市场上已经有专门的人工智能接待系统,比如Nextiva公司的 XBert ,以及Goodcall、Dialzara等公司提供的相关工具。 或者,它们也可以自行开发这样的系统,而这篇

从表面上看,人工智能接待员似乎很简单:来电者说话,系统做出响应,然后对话持续进行,直到来电者得到答案或与相关人员取得联系。

但实际上,在这一对话的背后,存在着一系列电话基础设施、语音识别技术、语言模型、应用逻辑、应用程序接口、数据库以及呼叫路由机制。

有趣的地方并不在于人工智能模型本身,而在于这些组件是如何协同工作,将音频流转化为有用的商业行动的。

那些希望拥有这类功能的企业有两种选择:

它们可以购买现成的产品。目前市场上已经有专门的人工智能接待系统,比如Nextiva公司的XBert,以及Goodcall、Dialzara等公司提供的相关工具。

或者,它们也可以自行开发这样的系统,而这篇文章正是为了帮助大家了解这一开发过程。无论选择哪种方式,了解相关技术架构都是非常有必要的——它不仅能让我们明白商业产品内部的工作原理,也能帮助我们了解定制系统需要哪些组件。

一个典型的人工智能接待系统架构大致如下所示:

人工智能接待系统架构

在这篇文章中,我们将详细探讨人工智能电话接待系统的工作原理——从来电者拨打企业电话的那一刻开始,到通话结束之后会发生什么。

你会了解到电话系统是如何连接呼叫的、语音是如何被转换成文本的、人工智能是如何识别用户的意图并维持对话上下文的,以及这些功能是如何将系统与日历、客户关系管理软件等其他商业系统连接起来的。我们还会探讨智能接待系统是如何判断何时应该将通话转交给人类客服人员的,以及在交接过程中哪些信息是可以传递给对方的。

我们将涵盖的内容:

电话呼叫进入系统

这一过程与普通的电话通话十分相似。客户拨打企业的电话号码,电信服务提供商会接听这个呼叫。

随后,服务提供商需要将这个呼叫连接到能够处理它的应用程序上。

一种常见的方法是使用Webhook。当有来电时,电话服务提供商会向相关应用程序发送HTTP请求,而该应用程序则会返回指示,说明应该如何处理这个呼叫。

进行通话本身还需要通信网络的支持。在实际应用中,通常会使用SIP中继技术,通过互联网将语音应用程序或电话系统连接到公共电话网络中。

像Nextiva、Twilio和Bandwidth这样的服务提供商都提供SIP中继服务,它们可以为人工智能语音系统提供所需的电话号码和通话容量。之后,具体的处理工作就由应用程序层来完成。

例如,当有来电时,Twilio会向配置好的应用程序发送HTTP请求,该应用程序可以依据接收到的指令来控制通话过程。

一个简化的Node.js端点代码可能如下所示:

app.post("/incoming-call", (req, res) => {
  const response = new VoiceResponse();

  response.say("您好,今天有什么可以帮到您的?");

  res.type("text/xml");
  res.send(response.toString());
});

这个示例中还没有包含任何人工智能技术,它只是展示了系统架构中的第一个层次。

电话网络负责处理通话过程,而应用程序则会接收到相关事件,并决定接下来应该做什么。

之后,应用程序需要处理来电者的音频信息。

语音被转换成文本

人们是通过语音与系统进行交流的,但大多数应用程序的实际处理逻辑都是针对结构化数据和文本进行的。

一个自动语音识别系统会将来电者的语音转换成文本。

例如,来电者可能会说:“我需要把预约时间从周五改到周一下午。”

语音识别系统处理后可能会生成如下结果:

{ "text": "我需要把预约时间从周五改到周一下午。” }

具体的识别结果取决于所使用的语音识别系统的性能。有些系统还会提供时间戳、置信度信息、说话者身份信息或部分转录文本。

之后,应用程序就可以将识别得到的文本传递给后续的对话处理环节。

这种分离设计非常有用,因为人工智能的推理层并不需要理解原始的电话音频信号,它只需要接收文本格式的信息,然后做出相应的决策或回复即可。

系统会判断来电者的真实需求

接下来的挑战在于理解来电者的真实意图。

假设有三位来电者分别说了这样的话:

"我想预约一次咨询服务。"

“我可以把预约时间改到下周吗?”

“你们的办公室在哪儿?”

系统需要认识到,这些请求需要不同的处理流程。

应用程序可以将检测到的意图表示为结构化数据:

{
  "intent": "reschedule_appointment",
  "entities": {
    "current_day": "Friday",
    "requested_day": "Monday",
    "time_preference": "afternoon"
  }
}

语言模型可以生成这种结构,或者应用程序也可以通过其他分类层来推导出这种结构。

重要的是,应用程序需要将自然语言转换成下游系统能够处理的信息。

虽然模型可能理解来电者想要重新安排预约时间,但它不应该仅仅因为得出了这个结论就直接修改日历。

应用程序必须控制后续发生的操作。

对话以循环的形式进行

通常情况下,人工智能电话代理不会在单次请求中处理整个对话过程。

相反,它会以循环的方式运行。

来电者说话,语音识别系统会将音频转换为文本,然后应用程序将文本及相关上下文信息发送给人工智能系统。人工智能系统会判断自己应该说什么或应该执行什么操作,之后应用程序会生成音频并将其发送回给来电者。

接着,来电者又会再次说话。

简化后的流程如下:

while (callIsActive) {
  const audio = await receiveAudio();

  const text = await speechToText(audio);

  const result = await processConversation({
    text,
    context: conversationContext
  });

  conversationContext = result.updatedContext;

  const audioResponse = await textToSpeech(result.response);

  await sendAudio/audioResponse);
}

这只是一个概念性的代码示例,并非完整的电话系统实现。实际系统还需要处理流式音频、中断、超时、错误、认证以及各种特定于服务提供商的协议。

上下文信息也同样重要。

如果来电者说:

“我想预约一个时间。”

系统可能会询问:

“您需要预约哪种类型的咨询?”

此时,如果来电者回答:“初次咨询”,那么这个请求才有意义,因为应用程序会记得之前的对话内容。

对话状态中可以包含以下信息:

{
  "intent": "book_appointment",
  "appointment_type": "initial_consultation",
  "customer_name": "Jane Smith",
  "preferred_date": null
}

随着对话的进行,系统可以不断更新这些状态信息。

人工智能会调用企业业务系统

正是在这里,人工智能接待员才不仅仅是一个语音聊天机器人。

假设有来电者提出这样的询问:

“明天下午有空的时间段吗?”

仅凭当前的对话内容,人工智能无法可靠地回答这个问题。它需要从日历或日程安排系统中获取实时信息。

这时,函数调用——也就是所谓的“工具调用”——就派上了用场。

应用程序可以向人工智能提供一组有限的函数:

const tools = [
  {
    name: "check_calendar",
    description: "查找可用的预约时间段",
    parameters: {
      date: "string",
      appointmentType: "string"
    }
  },
  {
    name: "book_appointment",
    description: "预订可用的预约时间",
    parameters: {
      slotId: "string",
      customerId: "string"
    }
  }
];

人工智能可以判断自己需要使用check_calendar这个函数。

然后应用程序会执行这个函数:

const slots = await checkCalendar({
  date: "2026-08-21",
  appointmentType: "consultation"
});

得到的结果会被重新纳入对话流程中:

{
  "available_slots": [
    "2026-08-21T14:00:00",
    "2026-08-21T15:30:00"
  ]
}

这样,人工智能就可以告诉来电者哪些时间段是可用的。

一个重要的架构原则是:人工智能负责判断需要执行什么操作,而应用程序代码则负责具体如何实现这些操作。

这种设计使得开发人员能够控制权限管理、验证输入数据、处理错误,并决定谁可以访问企业的业务系统。

预订预约

现在来看最后一步。

来电者会从可用的时间段中选择一个。

人工智能可以请求进行预约预订:

{
  "tool": "book_appointment",
  "arguments": {
    "slotId": "slot_123",
    "customerId": "customer_456"
  }
}

在调用日历系统之前,应用程序会先验证这些参数的有效性。

例如:

async function bookAppointment(slotId, customerId) {
  const slot = await getAvailableSlotslotId);

  if (!slot || slot.booked) {
    throw new Error("该预约时间段已不可用");
  }

  return calendar.createEvent({
    customerId,
    start: slot.start,
    end: slot.end
  });
}

之后,应用程序会将最终结果反馈给人工智能。

这种区分非常重要。

人工智能不能仅仅因为自己决定了要调用book_appointment函数,就直接告诉来电者预约已经成功预订了。

日历系统必须确认这个操作确实完成了。

常见的日历API都会提供创建事件的相关功能。例如,Google Calendar就提供了events.insert方法来创建新的事件。

只有在收到成功的回复后,对话系统才应告知来电者预约已经确认。

收集潜在客户信息

同样的架构也可以在销售对话过程中收集相关信息。

来电者可能会提供姓名、电子邮件地址、公司名称、电话号码、服务需求以及希望的跟进时间。

通过这些对话,可以逐步构建出一个结构化的潜在客户信息记录:

{
  "name": "Jane Smith",
  "email": "jane@example.com",
  "company": "Example Corp",
  "interest": "企业咨询",
  "appointment_booked": true
}

应用程序随后可以将这些信息发送到客户关系管理系统中。

这种处理方式明确了对话数据与业务数据之间的区别。

对话记录反映了来电者所说的话,而客户关系管理系统中的记录则包含了企业需要采取行动的结构化信息。

客户关系管理系统可能会存储来电者的联系信息、咨询类型、资格认证数据、预约详情以及跟进状态等信息。

具体包含哪些字段取决于所使用的客户关系管理系统及企业的销售流程。

知道何时需要人工介入

并非所有的对话都适合由人工智能系统来处理。

<

在实际运营中,系统需要制定相应的升级规则。

< p>当来电者要求与人类客服人员交谈、当请求超出了客服人员的处理范围,或者当企业认为某些类型的请求确实需要人工介入时,就需要进行升级处理。

< p>应用程序可以明确地表示这一决策过程:

if (shouldEscalate(conversation)) {
  return transferToHuman({
    callerId,
    reason,
    conversationContext
  });
}
< p>关键在于在信息转移过程中需要确保什么。

< p>有效的信息交接应该能够保留原有的上下文,而不会迫使员工从零开始重新处理这些信息。

< p>人工客服人员收到的信息可能包括:

{
  "caller": {
    "name": "Jane Smith",
    "phone": "+1-555-0100"
  },
  "reason": "复杂的计费问题",
  "summary": "来电者需要帮助解决发票相关的问题。",
  "actionsCompleted": [
    "客户身份已核实"
  ]
}
< p>具体的信息交接内容取决于所使用的系统。

< p>电话平台也可以通过其语音API支持呼叫转移和回拨功能。例如,Twilio的语音文档中介绍了呼叫路由以及<Dial>功能,这些功能可用于将呼叫转接到其他目的地。

通话结束后会发生什么

< p>当来电者挂断电话后,对话流程并不一定就此结束。

< p>根据所使用系统的配置不同,应用程序可以保留对话记录及其他相关数据。

< p>一个简化的通话记录可能如下所示:

{
  "callId": "call_123",
  "duration": 342,
  "customerId": "customer_456",
  "intent": "book_appointment",
  "appointmentId": "appointment_789",
  "leadCaptured": true,
  "escalated": false
}
通话记录可以提供详细的对话内容,而结构化字段则能向后续应用提供可供查询的信息。 因此,一次电话通话可能会触发多项业务操作。
  • 一场销售电话可能会生成一个新的潜在客户信息。

  • 一场预约电话可能会在日历中添加新的预约记录。

  • 一场客服电话可能会创建一张服务工单。

  • 一次复杂的对话可能会导致需要人工介入处理。

电话系统还可以通过状态回调机制,向相关应用通知通话过程中的各种事件。例如,Twilio会在通话结束时,向目标号码的状态回调URL发送请求,并支持使用statusCallbackEvent属性来订阅诸如“呼叫开始”、“电话正在响铃”、“接听成功”等通话状态变化事件。

企业视角看到的内容

从员工的角度来看,所有这些技术架构都可以被隐藏在几条业务记录的背后。 员工可能会看到一条新的CRM潜在客户信息,其中包含联系人的详细资料以及此次通话的目的。 日历中也会显示新预约的会议时间。 对话系统则会保存通话记录及其摘要。 如果电话被转接给了其他同事,员工在与客户通话之前也能了解相关的背景信息。 这就是人工智能电话代理背后的核心设计理念。 语音界面只是整个系统的一层而已。在其底层,还有一系列其他的系统:它们负责将语音转换为文本、解析来电者的请求、维护对话状态、调用外部服务、验证各项业务操作的有效性,并最终将结果反馈给来电者。 语言模型为对话过程提供了逻辑支持;而外围的应用程序则负责提供必要的状态信息、工具、权限设置、集成接口以及业务规则,这些因素共同将对话转化为实际的工作流程。 希望您喜欢这篇文章。您可以通过在LinkedIn上与我联系。

相关文章

技术实践

演示主题:性能爆发的GPU

Andrew Martin探讨了为什么人工智能安全与Kubernetes的安全性密切相关。他分析了当前不断变化的人工智能威胁形势,涵盖了非确定性智能体的行为特征、GPU供应链中的安全漏洞、共享计算环境带来的风险,以及一系列实用的防御策略——从使用防火墙来保护系统,到对智能体进行身份验证——这些措施都有助于保障生产环境中基于云技术构建的人工智能应用系统的安全性。 作者:Andrew Martin

阅读全文
技术实践

演讲主题:你不能信任自己收到的人工智能生成的账单——我也一样无法相信。

埃里克·彼得森探讨了为何人工智能相关支出的规模正在超过云服务的费用,这一现象是如何引发一场重大的软件工程成本危机的。他解释了“tokenmaxxing”机制、单位经济效益的概念、开发者被强制提升职位的现象,以及为什么到2028年,完全自主的人工智能系统将能够自行编写代码、部署系统并管理相关流程。 作者:埃里克·彼得森

阅读全文
技术实践

人工智能是如何改变电子邮件送达率的:关于发件人信誉及邮件在收件箱中的排列顺序的技术指南

发送电子邮件并不一定意味着它能够到达收件人的收件箱。有时,虽然应用程序成功发送了邮件,但它最终却被归入了垃圾邮件文件夹。 对于开发者来说,这种情况确实是一个严重的问题,尤其是当他们需要发送密码重置链接、账户验证码或支付确认信息等重要消息时。 这时,“电子邮件的送达率”就显得尤为重要了。电子邮件服务提供商并不会仅仅检查邮件是否已经发出,还会审查谁发送了这条邮件、它是如何被发送的,以及这条邮件看起来是否可信。 为了实现这一目标,这些服务提供商会使用诸如发件人信誉评估、电子邮件认证以及基于人工智能的垃圾邮件过滤技术。随着人工智能在这一过程中扮演的角色越来越重要,了解这些系统的工作原理对开发者来说也变

阅读全文
技术实践

在你们解决数据问题之前,医疗领域的人工智能技术是无法正常运行的。

为临床环境开发人工智能其实比看起来要困难得多。这不仅仅意味着需要选择一个合适的模型或调整正确的参数。 当工程师们进入医院这个生态系统时,他们会很快发现:那些在其他行业中被他们广泛使用的工具,在这里往往无法正常使用。临床数据杂乱无章、极其敏感,而且分散在许多不同的系统中。妥善处理这些数据并非可有可无,而是整个系统能否正常运行的基础。 临床数据有多种形式。其中一部分是结构化的数据,比如存储在表格中的实验室检测结果;另一部分则是非结构化数据,比如医生手写的病历被扫描成PDF文件。所有这些数据都受到严格的隐私保护规定的约束,而且每一条数据都可能直接影响患者的诊疗效果。 与电子商务或广告领域不同,在这些

阅读全文