GPT-Live-1 进入 API:全双工语音 Agent 的工程指南

·阅读约11分钟·Evergreen Tools Team

语音 Agent 过去两年一直被困在一个尴尬的架构里:先把用户的话转成文字(STT),再交给大模型思考(LLM),最后把答案合成语音播出去(TTS)。三段流水线串起来,延迟叠延迟,打断几乎没法自然处理——用户说了一半,系统还在念上一句。2026 年 9 月 10 日,OpenAI 把 GPT-Live-1 放进 API,定价每分钟 0.05 美元,走的正是全双工路线:同一时刻既能听也能说,能对停顿、打断和「嗯、好」这类反馈做出反应。这不是一个更快的语音模型,而是把语音 Agent 的架构整个换掉了。

"语音与音频波形"

"全双工:边听边说,而不是轮流说话"

一、9 月 10 日到底发布了什么

GPT-Live-1 从 ChatGPT Voice 走进 API,官方描述里几个关键词值得逐字读:全双工(full duplex)、更强的指令遵循、自定义音色、电话(telephony)支持。它自带语音转写与回复文本,也就是说你不再需要自己拼一套 STT 组件来做日志与合规。安全方面,通过 ChatGPT Voice 和 API 生成的音频会带上 SynthID 水印,OpenAI 的公开验证工具可以检测这种出处信号,并且开放了 API 层面的校验入口,方便团队把「这段音频是不是 AI 生成」纳入自己的流程。

// 1) Open a full-duplex session and pick a voice. The model listens
//    and speaks concurrently; you never wait for a "turn" to end.
const session = await fetch("https://api.openai.com/v1/realtime/sessions", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + process.env.OPENAI_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "gpt-live-1",
    voice: "alloy-custom",
    instructions: "You are a support agent. Keep replies under 20 seconds.",
    input_audio_transcription: { model: "whisper-1" }, // built-in transcripts
  }),
}).then((r) => r.json());

console.log("session", session.id, "expires", session.expires_at);

二、全双工为什么不只是「快一点」

三段式架构里,每个环节都必须等上一个环节结束,延迟是加法。全双工把这件事变成并发:模型一边接收音频流,一边生成音频流,中间不再有「轮次」这个强边界。真正被解锁的能力有三个。第一是自然打断——模型能分辨用户是插话还是附和。第二是等待策略,用户思考时沉默变长,系统不必急着填空。第三是多任务并行:会话由语音模型维持,而真正耗时的动作交给后面一个 Agent 去做,用户在等待时依然有人陪着说话。如果你做过轮次式的语音机器人,就知道它背后藏着一笔隐形成本:一个专门跟踪「现在轮到谁」的状态机,外加一个待播队列。全双工把状态机删掉了,同时也删掉了你的安全网——轮次式设计里模型永远不会在用户说话时开口,所以不会出现抢话;现在这条规则得你自己守,靠播放门控和明确的抢话策略。

// 2) Interruptions are events, not exceptions. React to the stream.
function wire(ws, { onUserSpeech, onModelSpeech }) {
  ws.on("message", (raw) => {
    const evt = JSON.parse(raw);
    switch (evt.type) {
      case "input_audio_buffer.speech_started":
        // user cut in: stop local playback immediately, do not finish the sentence
        stopPlayback();
        onUserSpeech();
        break;
      case "response.audio.delta":
        queueAudio(evt.delta);
        onModelSpeech();
        break;
      case "response.done":
        logTurn(evt.response_id, evt.usage);
        break;
    }
  });
}

三、把推理委托出去,而不是塞进语音模型

一个容易踩的坑是把语音模型当成全能大脑:让它查数据库、算价格、跑长链推理。正确的做法是让 GPT-Live-1 只负责「对话」,把深度推理与动作交给后端 Agent——官方文档明确说,你可以自选后端模型、工具和 Agent 框架,GPT-Live-1 负责把对话维持住,并把更重的推理和动作委托出去。这条边界一旦划清,语音层就能保持低延迟,而复杂任务在自己的 Agent 里慢慢跑,跑完再回到对话层播报。

// 3) Keep the conversation alive while the backend agent does the work.
async function handleToolCall(call, voice) {
  // fire the slow work behind the voice layer
  const job = await backendAgent.start({
    task: call.name,
    args: call.arguments,
    traceId: call.id,
  });

  // never let the caller sit in silence
  voice.say("Let me pull that up for you.");

  const result = await job.done();
  voice.say(result.spokenSummary);   // voice layer only receives the summary
  return result.payload;             // structured data stays server-side
}

四、算清单价:每分钟 0.05 美元意味着什么

按分钟计费对语音产品来说是个重要信号:成本随「通话时长」线性增长,而不是随 token 数抖动。一通 6 分钟的电话大约是 0.3 美元,1000 通就是 300 美元——这个数字让「高峰期并发」「平均通话时长」变成最该监控的两个指标。反过来说,如果你的后端 Agent 还会额外烧 token,那真实成本是语音费加后端推理费。所以上线前一定要把两笔账分开算,并为「用户开着麦克风沉默」这种情况设一个自动挂断阈值。另外要盯分布而不是均值:账单通常被少数超长通话主导,所以告警应该设在通话时长 P95 和「超过上限仍未结束」这两项上。

# 4) Per-minute economics: two separate bill lines, not one.
VOICE_PER_MIN = 0.05          # USD, GPT-Live-1
BACKEND_IN = 3.0 / 1_000_000  # USD per input token
BACKEND_OUT = 15.0 / 1_000_000

def call_cost(minutes, backend_in, backend_out):
    voice = minutes * VOICE_PER_MIN
    agent = backend_in * BACKEND_IN + backend_out * BACKEND_OUT
    return round(voice + agent, 4), round(voice, 4), round(agent, 4)

total, voice, agent = call_cost(6.0, 40_000, 3_000)
print("total", total, "| voice", voice, "| backend", agent)
# Guard the silent-mic case: cap duration, do not bill by surprise.
MAX_MINUTES = 30

五、音频出处与合规:别等出事才补

语音是最容易被伪造和滥用的一种媒介。GPT-Live-1 自带转写,意味着你的通话记录天然有文本版本,审计与质检都方便;SynthID 水印与验证 API 则给了你一个「判断出处」的工具。实际做法是:在入库时同时保存音频与转写,记录水印校验结果,并把「这通电话是真人还是 AI」作为元数据放进合规链路。对做客服、医疗与金融的场景,这不是加分项,而是准入门槛。

// 5) Provenance: store audio + transcript + watermark verdict together.
async function recordTurn(turn) {
  const verdict = await verifyProvenance(turn.audioUrl); // SynthID check
  await db.calls.insert({
    callId: turn.callId,
    audioUrl: turn.audioUrl,          // never store audio without its text
    transcript: turn.transcript,      // GPT-Live-1 gives this to you
    watermark: verdict.status,        // "openai-synthid" | "none" | "unknown"
    generatedBy: "gpt-live-1",
    checkedAt: new Date().toISOString(),
  });
}

六、上线清单

五条规则。第一,把语音层和后端 Agent 的职责写进架构图,语音层不许直连生产数据库。第二,给会话设最长时长与静默阈值,成本和安全一起管。第三,所有工具调用走后端 Agent,语音层只拿到结果,不拿凭据。第四,音频与转写成对落库,附上水印校验结果。第五,先用真实用户语料做一轮打断测试——合成语音里的「嗯、对、等一下」比你想象的更常见,处理不好就会显得很蠢。全双工不是换了个模型,是换了一套约束条件;把约束写清楚,它才会显得自然。还有一个意想不到的指标值得记录:打断率。它突然升高,几乎总意味着提示词变长了、模型开始长篇独白,用户因为已经听到想要的答案而抢话。

"对话中的实时交互"

"打断是事件,不是异常"

"音频与数据记录"

"音频与转写成对落库,附出处校验"

📌 常见问题 FAQ

GPT-Live-1 和以前的语音模型到底差在哪?

差在架构。以前是 STT→LLM→TTS 三段串行,延迟相加,打断很难自然处理;GPT-Live-1 是全双工,同一时刻既能听也能说,能响应停顿、打断和简短附和,并且把深度推理委托给一个可选的后端 Agent。

每分钟 0.05 美元贵吗?

要看通话时长。6 分钟约 0.3 美元,1000 通约 300 美元,是可预测的线性成本;但如果后端 Agent 还会烧 token,真实成本要加上后端推理费,两笔账必须分开算。

我需要自己搭 STT 吗?

不需要。GPT-Live-1 自带语音转写与回复文本,可以省掉自建 STT 组件,日志、质检与合规都直接可用。

生成的音频能识别出处吗?

可以。通过 ChatGPT Voice 和 API 生成的音频带有 SynthID 水印,OpenAI 提供公开验证工具和 API 校验入口,方便把出处检查纳入你的流程。

最该先防的坑是什么?

把语音模型当成全能大脑、让它直连生产数据库。正确做法是语音层只管对话,所有工具调用与凭据留在后端 Agent。