如何使用 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 调用的稳定性和效率。
无论是客户服务、语言学习还是智能助手,语音代理都能通过自然交互提升用户体验,快去动手实践吧!

浙公网安备 33010602011771号