如何使用 OpenAI API 构建高效语音代理(Voice Agents)

如何使用 OpenAI API 构建高效语音代理(Voice Agents)

在当今的智能化时代,语音交互已成为人机交互的重要方式。从客户支持到语言辅导,语音代理能够通过自然语言理解音频输入并作出响应,极大提升了用户体验。本文将详细介绍如何使用 OpenAI 的 API 和 Agents SDK 构建功能强大、上下文感知的语音代理,并推荐稳定高效的 API 调用方案。

选择合适的语音代理架构

OpenAI 提供了两种主流的语音代理构建架构,分别适用于不同的场景需求。

语音到语音(实时)架构

语音到语音(Speech-to-Speech,简称 S2S)架构通过多模态模型直接处理音频输入和输出,使用 gpt-4o-realtime-preview 模型实现实时语音交互。该模型无需依赖文字转录,能直接“聆听”情感和意图、过滤噪音并实时生成语音响应,非常适合高交互性场景。

语音到语音代理架构图

优势 适用场景
低延迟交互 交互式、非结构化对话
丰富的多模态理解(同时处理音频和文本) 语言辅导和互动学习体验
自然流畅的对话流程 对话式搜索与发现
通过语音上下文增强用户体验 交互式客户服务场景

链式架构

链式架构通过顺序处理流程实现语音交互:先将音频转文字(转录),再用大语言模型(LLM)生成智能响应,最后将文字合成为音频。这种架构流程清晰、可控性高,适合语音代理新手,也便于将现有 LLM 应用改造为语音代理。

其模型链为:gpt-4o-transcribe(转录)→ gpt-4.1(生成响应)→ gpt-4o-mini-tts(语音合成)

链式代理架构图

优势 适用场景
高可控性和透明度 聚焦特定目标的结构化工作流
强大的函数调用和结构化交互 客户支持服务
响应可靠可预测 销售和呼入分诊
支持扩展对话上下文 需要转录和脚本化响应的场景

本文将重点介绍语音到语音架构的构建方法,如需了解链式架构可参考 链式架构指南

构建语音代理的步骤

使用 OpenAI 的 API 和 SDK 构建语音到语音代理需完成以下核心步骤:建立实时数据传输连接、创建实时会话、使用支持实时音频输入输出的模型。对于新手,推荐使用 TypeScript Agents SDK 中的 Realtime Agents 快速上手。

1. 环境准备

首先安装 OpenAI Agents SDK:

npm install @openai/agents

在实际开发中,为确保 API 调用的稳定性和低延迟,推荐使用经过优化的 API 中转站服务。通过 API 中转站 可将请求 Base URL 设置为 https://api.aaaaapi.com,提升跨境调用效率,减少连接中断问题。

2. 选择传输方式

实时语音交互对延迟要求极高,Realtime API 提供两种低延迟传输方式:

  • WebRTC:点对点协议,适合浏览器等客户端应用的音视频实时通信。
  • WebSocket:通用实时数据传输协议,适合服务器端语音代理(如电话应答系统)。

使用 TypeScript Agents SDK 时,会自动根据场景选择传输方式:浏览器环境用 WebRTC,服务器环境用 WebSocket。

3. 设计语音代理

设计语音代理需遵循“聚焦单一任务”原则,初期应限制工具数量,并提供任务外场景的“逃生通道”(如转人工或固定回复)。对于语音代理,建议将关键信息直接纳入提示词,而非依赖工具调用获取,以减少延迟。

可通过 Realtime Playground 辅助设计,该工具提供提示词生成助手和函数工具模拟功能,便于测试完整流程。

4. 精准设计提示词

语音代理的提示词不仅控制响应内容,还能定义语音风格。一个完整的提示词应包含 personality 设定、任务目标、对话流程等要素。例如:

# 个性与语气
## 身份
// 你是一位友好的语言 tutors,擅长用耐心的方式讲解语法知识。

## 任务
// 帮助用户练习英语口语,纠正发音错误并提供例句。

## 举止
// 耐心、鼓励性,对用户错误以引导为主。

## 语气
// 温暖自然,语速适中,关键词汇会适当放慢。

# 指令
- 当用户发音模糊时,用委婉方式请求重复:“可以请你再读一遍这个词吗?我想更清楚地听一下~”
- 纠正错误后必须提供3个实用例句,帮助用户理解。

对于结构化对话场景,可在提示词中定义对话状态流转,例如客户验证流程:

# 对话状态
[
  {
    "id": "1_greeting",
    "description": "问候用户并说明验证流程",
    "instructions": [
      "热情问候用户",
      "告知需要收集个人信息用于记录验证"
    ],
    "examples": [
      "早上好!我是前台管理员,将协助您完成信息验证。",
      "我们开始验证流程吧~ 能请您先提供姓名并逐字母拼写吗?这样更准确哦。"
    ],
    "transitions": [{
      "next_step": "2_get_first_name",
      "condition": "问候完成后"
    }]
  },
  // 更多状态...
]

可借助 Voice Agent Metaprompter 自动生成提示词,或直接使用 提示词模板

5. 实现代理切换功能

为保持代理专注度,可设计代理切换功能,让主代理在需要时将对话转交给专业代理。通过工具函数定义切换逻辑,例如:

import { RealtimeAgent } from "@openai/agents/realtime";

// 定义产品专家代理
const productSpecialist = new RealtimeAgent({
  name: '产品专家',
  instructions: '你是产品专家,负责解答产品相关问题。',
});

// 定义分诊代理(可切换到产品专家)
const triageAgent = new RealtimeAgent({
  name: '分诊代理',
  instructions: '你是客服前线代理,负责将呼叫转接给合适的专业代理。',
  tools: [productSpecialist] // 将产品专家设为可切换目标
})

SDK 会自动处理代理间的上下文传递和会话切换。若手动实现,可通过如下工具定义触发切换:

const transferTool = {
  type: "function",
  function: {
    name: "transferAgents",
    description: "将用户转接给专业代理,转接前需告知用户。",
    parameters: {
      type: "object",
      properties: {
        rationale_for_transfer: { type: "string", description: "转接原因" },
        conversation_context: { type: "string", description: "对话上下文" },
        destination_agent: { type: "string", enum: ["returns_agent", "product_specialist_agent"] }
      }
    }
  }
};

6. 扩展专业模型能力

语音到语音模型擅长对话,但特定任务(如复杂政策验证)可结合专业模型。通过工具函数调用专业模型,例如让退货代理调用审核模型:

import { RealtimeAgent, tool } from '@openai/agents/realtime';
import { z } from 'zod';

// 定义 supervisor 审核工具
const supervisorAgent = tool({
  name: 'supervisorAgent',
  description: '提交案例给审核员审批',
  parameters: z.object({ caseDetails: z.string() }),
  execute: async ({ caseDetails }, details) => {
    // 调用专业审核模型(通过 API 中转站提升稳定性)
    const response = await fetch('https://api.aaaaapi.com/verify-return', {
      method: 'POST',
      body: JSON.stringify({ caseDetails, history: details.context.history })
    });
    return response.text();
  },
});

// 退货代理配置
const returnsAgent = new RealtimeAgent({
  name: '退货代理',
  instructions: '处理退货请求,决策前必须通过审核工具确认。',
  tools: [supervisorAgent]
});

总结

构建语音代理需根据场景选择架构:实时交互选语音到语音架构,追求可控性选链式架构。借助 OpenAI Agents SDK 可快速实现核心功能,而通过 API 中转站 使用 https://api.aaaaapi.com 作为 Base URL,能有效提升 API 调用的稳定性和效率。

无论是客户服务、语言学习还是智能助手,语音代理都能通过自然交互提升用户体验,快去动手实践吧!

posted @ 2025-08-02 13:12  大A就是我  阅读(106)  评论(0)    收藏  举报