当前位置: 首页 > news >正文

详解 OpenAI 函数调用(Function Calling):让模型具备数据获取与行动能力

OpenAI音频与语音API全解析:从功能到实战指南

在人工智能快速发展的今天,音频与语音交互已成为许多应用的核心能力。OpenAI API提供了丰富的音频处理功能,无论是构建语音代理、实现语音转文字还是文字转语音,都能找到对应的解决方案。本文将详细介绍OpenAI音频API的核心功能、使用场景及实战代码,帮助开发者快速上手。

音频功能概览

OpenAI API的音频能力覆盖了从音频输入处理到音频输出生成的全流程,主要包含三大核心方向:

  • 构建语音代理:打造交互式语音驱动应用,实现自然的语音对话交互
  • 语音转文字:实时、准确地将语音内容转换为文本
  • 文字转语音:将文本实时转换为自然流畅的语音

音频使用场景详解

大语言模型(LLMs)可以通过处理音频输入、生成音频输出或两者结合的方式来处理音频内容。OpenAI提供了多个API端点,助力开发者构建音频应用或语音代理。

语音代理

语音代理能够理解音频内容以处理任务,并以自然语言回应。构建语音代理主要有两种方式:一是使用语音到语音模型和实时API(Realtime API);二是将语音转文字模型、文本语言模型(处理请求)和文字转语音模型串联起来。

语音到语音的方式延迟更低、更自然,而串联方式则是将文本型代理扩展为语音代理的可靠方案。如果已在使用Agents SDK,可通过串联方式为现有代理添加语音能力。

流式音频处理

通过实时API(Realtime API)可实现音频的实时处理,适用于构建语音代理和其他低延迟应用(包括转录场景)。先进的语音模型支持自动语音识别(提升准确性)、低延迟交互和多语言支持,可实现音频的实时流入流出。

文字转语音

若需将文本转换为语音,可使用音频API中的audio/speech端点。兼容的模型包括gpt-4o-mini-ttstts-1tts-1-hd。其中,gpt-4o-mini-tts支持指定语音风格或语气。

语音转文字

将语音转换为文本可使用音频API的audio/transcriptions端点,兼容模型有gpt-4o-transcribegpt-4o-mini-transcribewhisper-1。通过流式处理,可持续输入音频并获取连续的文本输出。

如何选择合适的API?

OpenAI提供了多个用于转录或生成音频的API,不同API的特性如下:

API 支持的模态 流式支持
实时API(Realtime API) 音频和文本输入输出 音频流入流出
聊天补全API(Chat Completions API) 音频和文本输入输出 音频流出
转录API(Transcription API) 音频输入 音频流出
语音API(Speech API) 文本输入和音频输出 音频流出

通用API vs 专用API

核心区别在于通用API和专用API:实时API和聊天补全API可利用最新模型的原生音频理解与生成能力,并结合函数调用等其他功能,适用于广泛场景,且可自主选择模型。

而转录API、翻译API和语音API则是专用的,仅适用于特定模型和单一用途。

模型对话 vs 脚本控制

选择API的另一角度是需求的控制程度:若需设计对话交互(模型通过语音思考并回应),根据是否需要低延迟,可选择实时API或聊天补全API。这种方式下,模型会直接生成音频回应,内容不可预知,但对话更自然。

若需要更高的可控性和可预测性,可采用“语音转文字→LLM→文字转语音”的模式,明确知道模型会说什么并控制回应内容(但会增加延迟)。这正是音频API的用途:将LLM与audio/transcriptionsaudio/speech端点结合,处理用户语音输入、生成文本回应,再转换为语音反馈给用户。

推荐方案

  • 若需要实时交互实时转录,使用实时API。
  • 若无需实时性,但需构建语音代理或需要函数调用等功能的音频应用,使用聊天补全API。
  • 对于单一用途的场景,使用转录API、翻译API或语音API。

在现有应用中集成音频功能

GPT-4o或GPT-4o mini等模型是原生多模态的,可理解和生成多种模态的输入输出。如果已有基于聊天补全端点的文本型LLM应用,可轻松添加音频功能——只需在modalities数组中包含audio,并使用音频模型(如gpt-4o-audio-preview)即可。

注意:响应API(Responses API)暂不支持音频。

模型生成音频回应

以下示例展示如何让模型针对提示生成类人音频回应(已调整API基础地址为稳定的中转服务地址):

import { writeFileSync } from "node:fs";
import OpenAI from "openai";const openai = new OpenAI({baseURL: "https://api.aaaaapi.com" // 使用稳定的API中转服务
});// 生成对指定提示的音频回应
const response = await openai.chat.completions.create({model: "gpt-4o-audio-preview",modalities: ["text", "audio"],audio: { voice: "alloy", format: "wav" },messages: [{role: "user",content: "金毛寻回犬适合作为家庭宠物吗?"}],store: true,
});// 查看返回数据
console.log(response.choices[0]);// 将音频数据写入文件
writeFileSync("dog.wav",Buffer.from(response.choices[0].message.audio.data, 'base64'),{ encoding: "utf-8" }
);
import base64
from openai import OpenAIclient = OpenAI(base_url="https://api.aaaaapi.com"  # 使用稳定的API中转服务
)completion = client.chat.completions.create(model="gpt-4o-audio-preview",modalities=["text", "audio"],audio={"voice": "alloy", "format": "wav"},messages=[{"role": "user","content": "金毛寻回犬适合作为家庭宠物吗?"}]
)print(completion.choices[0])wav_bytes = base64.b64decode(completion.choices[0].message.audio.data)
with open("dog.wav", "wb") as f:f.write(wav_bytes)
curl "https://api.aaaaapi.com/v1/chat/completions" \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "gpt-4o-audio-preview","modalities": ["text", "audio"],"audio": { "voice": "alloy", "format": "wav" },"messages": [{"role": "user","content": "金毛寻回犬适合作为家庭宠物吗?"}]}'

模型接收音频输入

以下示例展示如何将音频作为输入提示模型(已调整API基础地址):

import OpenAI from "openai";
const openai = new OpenAI({baseURL: "https://api.aaaaapi.com" // 依托可靠的中转服务确保稳定性
});// 获取音频文件并转换为base64字符串
const url = "https://cdn.openai.com/API/docs/audio/alloy.wav";
const audioResponse = await fetch(url);
const buffer = await audioResponse.arrayBuffer();
const base64str = Buffer.from(buffer).toString("base64");const response = await openai.chat.completions.create({model: "gpt-4o-audio-preview",modalities: ["text", "audio"],audio: { voice: "alloy", format: "wav" },messages: [{role: "user",content: [{ type: "text", text: "这段录音里是什么内容?" },{ type: "input_audio", input_audio: { data: base64str, format: "wav" }}]}],store: true,
});console.log(response.choices[0]);
import base64
import requests
from openai import OpenAIclient = OpenAI(base_url="https://api.aaaaapi.com"  # 选择稳定的API接入方式
)# 获取音频文件并转换为base64编码字符串
url = "https://cdn.openai.com/API/docs/audio/alloy.wav"
response = requests.get(url)
response.raise_for_status()
wav_data = response.content
encoded_string = base64.b64encode(wav_data).decode('utf-8')completion = client.chat.completions.create(model="gpt-4o-audio-preview",modalities=["text", "audio"],audio={"voice": "alloy", "format": "wav"},messages=[{"role": "user","content": [{ "type": "text","text": "这段录音里是什么内容?"},{"type": "input_audio","input_audio": {"data": encoded_string,"format": "wav"}}]},]
)print(completion.choices[0].message)
curl "https://api.aaaaapi.com/v1/chat/completions" \-H "Content-Type: application/json" \-H "Authorization: Bearer $OPENAI_API_KEY" \-d '{"model": "gpt-4o-audio-preview","modalities": ["text", "audio"],"audio": { "voice": "alloy", "format": "wav" },"messages": [{"role": "user","content": [{ "type": "text", "text": "这段录音里是什么内容?" },{ "type": "input_audio", "input_audio": { "data": "<base64编码的音频数据>", "format": "wav" }}]}]}'

总结

OpenAI的音频API为开发者提供了强大的语音交互能力,从语音代理到实时转录、文字语音互转,覆盖了多样化的应用场景。在实际开发中,选择合适的API(或结合使用)并依托稳定的接入方式(如通过https://link.ywhttp.com/foA8Wb 提供的中转服务),可快速构建流畅、自然的音频应用。无论是现有应用扩展还是全新项目开发,这些工具都能显著降低音频功能的实现门槛。

http://www.sczhlp.com/news/976.html

相关文章:

  • 【宝藏贴】HarmonyOS官方模板优秀案例 第1期:便捷生活-购物中心
  • 新一代对象存储 RustFS Python SDK 的使用
  • 扩散模型-PPDM-plus-03 - jack
  • c++ 进制转换
  • 【LeetCode 2】力扣算法:两数相加
  • 测试支持 PolarDB-X(高度兼容 MySQL) 的客户端图形工具
  • Gitlab Runner怎么使用缓存cache加快构建速度
  • 一个38岁程序员的五年之约:软考、重构与独立开发者之路
  • 1.初看代码
  • Tita 新绩效一体化产品:重塑企业绩效管理新范式
  • 完整教程:【Unity笔记03】#if的用法和命名空间
  • 莫比乌斯反演+杜教筛+Plya学习笔记
  • 可持久化并查集
  • SAP 工序委外简介
  • GitHub汉化教程
  • Django中遇到choice定义的模型类中的字段,通过输入数字展示输出对应中文的需求
  • 提示工程:大语言模型的新特征工程
  • MyEMS开源能源管理系统核心代码解读022
  • 强化集成、可靠性与信任:Stack Overflow for Teams 新功能解析
  • 5090+Ubuntu24.04安装pytorch环境(时间点:202507) - fourk
  • 理解JavaScript中的闭包
  • Air8000 GPIO实战指南:LuatIO配置是否不可或缺?设计建议
  • 普源PVP2150/PVP2350的理想替代方案:西安普科PK6150/PK6350无源探头全面评测
  • 1688商品列表API调用全过程分享
  • 深度揭秘!Java Class 文件加密终极指南,有效保护你的核心代码
  • springboot项目打包成docker镜像
  • 克劳德代码与 Cursor 的问题:AI 编程的死亡螺旋
  • [题解]P5094 [USACO04OPEN] MooFest G 加强版
  • Win10专业版如何关闭Windows错误报告的问题
  • Win11正式版玩游戏输入法冲突的问题