OpenRouter 新增音频转写 API,支持 Whisper 与 token 计价 STT 模型

来源:OpenRouter:Announcements(RSS) 2026年7月22日 08:00 AIHOT 评分:72 精选
摘要:OpenRouter 推出 POST /api/v1/audio/transcriptions 端点,用户可使用同一 API key 将 base64 编码音频发送至该端点,返回 JSON 格式文本与用量对象。
# OpenRouter 新增音频转写 API,支持 Whisper 与 token 计价 STT 模型 - 来源:OpenRouter:Announcements(RSS) - 作者:OpenRouter - 发布时间:2026-07-22 08:00 - AIHOT 分数:72 - AIHOT 标记:精选 - AIHOT 链接:https://aihot.virxact.com/items/cmrvo24p604bvbihbk4aexnv6 - 原文链接:https://openrouter.ai/blog/tutorials/transcription-on-openrouter ## 精选理由 OpenRouter 把语音转录集成进 API,一份 key 搞定聊天和转写,对已经在用的团队省心不少,这篇教程直接可跑。 ## AI 摘要 OpenRouter 推出 POST /api/v1/audio/transcriptions 端点,用户可使用同一 API key 将 base64 编码音频发送至该端点,返回 JSON 格式文本与用量对象。 ## 正文 你有一段40分钟的销售通话录音、一个文件夹的语音备忘录,或者有用户一直按着麦克风按钮,而你需要一份文字转录稿。通常的做法是搭建一个Whisper服务器,或者在你已有的聊天流量处理方案之上,再额外接入一个仅用于语音转文本的第三方提供商SDK。在OpenRouter上,你可以将音频发送到 `POST /api/v1/audio/transcriptions` 接口,然后获得包含转录文本和用量对象的JSON响应,使用的API密钥和认证方式与Chat Completions相同。 你不需要新的SDK或单独的服务。由于转录功能与你的聊天流量运行在同一平台上,由多个提供商托管的模型会在它们之间自动进行负载均衡,而不是固定绑定在单一供应商上。 摘要 通过将Base64编码的音频发送到 `POST /api/v1/audio/transcriptions`,并从响应中读取JSON文本和用量对象来进行转录。它使用与Chat Completions相同的Bearer密钥。 Whisper类模型在此可用(其标识符为 `openai/whisper-1`)。也存在更新的按token计费的语音转文本(STT)模型。可以通过 `?output_modalities=transcription` 参数来发现它们,而非默认的目录。 当一个转录模型由多个提供商托管时,我们会自动在它们之间进行负载均衡。你在聊天中使用的按请求路由控制(如排序顺序、allow_fallbacks、data_collection、sort)目前不适用于此端点;这里的provider块仅携带提供商特定的选项。自带密钥(BYOK)功能会路由到你自己的提供商密钥,仅收取平台费用。 设计时需要考虑的实际限制包括:60秒的上游超时、不支持音频URL(需发送Base64 JSON,或最大25MB的OpenAI风格多部分文件)、以及不支持SRT/VTT格式输出。在兼容OpenAI的提供商上,通过设置 `response_format: "verbose_json"` 可以获取单词和片段时间戳。 定价根据模型不同,采用基于时长或基于token的方式,且不附加提供商加价。`usage.cost` 字段返回每次请求的实际成本,方便你计量支出。 如何在OpenRouter上转录音频? 将 base64 编码的音频发送至 `POST /api/v1/audio/transcriptions`,然后从 JSON 响应中读取 `text` 字段。您需要像在聊天调用中一样,将 OpenRouter API 密钥作为 Bearer token 传递,设置一个模型,然后将音频数据交给它。 响应是一个 JSON 对象,其中包含一个保存转录文本的 `text` 字符串,以及一个报告音频时长(秒)、token 数量和请求美元成本的 `usage` 对象。您只需发起一次请求,转录结果就会在响应体中返回,因此无需轮询,也无需跟踪任务 ID。 请求体包含一个 `model` 字段和一个 `input_audio` 对象。在 `input_audio` 内部,您需要将文件作为 base64 数据和一个 `format` 字符串放入。您还可以选择性地添加语言提示(`language`)、温度参数(`temperature`)和一个 `provider` 块。以下是完整的端到端示例: # Encode the file to base64, then POST it. AUDIO_B64=$(base64 -i meeting.mp3 | tr -d '\n') curl https://openrouter.ai/api/v1/audio/transcriptions \ -H "Authorization: Bearer $OPENROUTER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "openai/whisper-1", "input_audio": { "data": "'"$AUDIO_B64"'", "format": "mp3" }, "language": "en" }' import base64 import os import requests with open("meeting.mp3", "rb") as f: audio_b64 = base64.b64encode(f.read()).decode("utf-8") api_key = os.environ["OPENROUTER_API_KEY"] response = requests.post( "https://openrouter.ai/api/v1/audio/transcriptions", headers={"Authorization": f"Bearer {api_key}"}, json={ "model": "openai/whisper-1", "input_audio": {"data": audio_b64, "format": "mp3"}, "language": "en", }, ) print(response.json()["text"]) import { OpenRouter } from '@openrouter/sdk'; import { readFileSync } from 'fs'; const openRouter = new OpenRouter({ apiKey: process.env.OPENROUTER_API_KEY }); const audioB64 = readFileSync('meeting.mp3').toString('base64'); const result = await openRouter.stt.createTranscription({ sttRequest: { model: 'openai/whisper-1', inputAudio: { data: audioB64, format: 'mp3' }, language: 'en', }, }); console.log(result.text); 有哪些可用的语音转文本模型? 您可以从两个模型系列中进行选择。像 `openai/whisper-1` 这样的 Whisper 类模型按音频时长(每秒)计费,而较新的语音转文本模型则按 token 计费。哪种模型适合您,取决于您的准确度要求、语言组合以及预算。 语音转文本(STT)模型的 ID 不会显示在默认的 `/api/v1/models` 目录中。这是正常的,因为转录是一种需要您主动筛选的输出模态。 curl "https://openrouter.ai/api/v1/models?output_modalities=transcription" \ -H "Authorization: Bearer $OPENROUTER_API_KEY" 这会返回语音转文本模型及其当前的按模型定价。如果您更愿意以页面形式阅读,相同的列表也存在于 [此处];模型目录中则包含实时的按模型费率。 如果您想在接入之前试用某个模型,可以在 OpenRouter Playground 中直接在浏览器内转录上传的文件。 逐字段的请求规范 整个流程分为三步。您将文件进行 base64 编码,将其与模型和格式一起通过 POST 提交,然后从响应中读取 `text` 和 `usage` 字段。`data` 字段接受原始的 base64 字节,而不是 `data:` URI,因此请不要为其添加 `data:audio/mp3;base64,` 前缀。`format` 字段是必需的,它告诉上游模型如何解码这些字节。 参数是否必需说明 model是语音转文本(STT)模型标识符,例如 `openai/whisper-1` input_audio.data是音频的 base64 编码(原始字节,非 `data:` URI) input_audio.format是可选值之一:`wav`、`mp3`、`flac`、`m4a`、`ogg`、`webm`、`aac` language否ISO-639-1 语言代码(如 `en`、`es` 等)。如果省略,将自动检测 temperature否采样温度,取值范围 0 到 1 response_format否json(默认)或 verbose_json,后者会额外返回任务、语言、时长和片段时间戳(仅限兼容 OpenAI 的提供商) timestamp_granularities否使用 verbose_json 时可选 ["segment"] 或 ["word"];选择 word 会在 words 数组中添加词级别的时间戳 provider否提供商特定参数的透传(例如 Groq 的 prompt)。该端点不应用按请求的路由控制 该端点也接受 OpenAI 风格的 multipart/form-data 上传(文件加模型),大小限制为 25 MB。如果你已有面向 OpenAI 的 `/v1/audio/transcriptions` 构建的客户端,只需将 base URL 指向 `https://openrouter.ai/api/v1` 即可直接使用,无需修改。超过 25 MB 的文件则通过 base64 JSON 路径处理。 语言提示为可选参数。如果省略,模型会自动检测语言;设置该参数可以消除短音频或嘈杂音频中的部分歧义。部分提供商通过 provider 字段接受自己的额外参数。例如,Groq 可通过 `provider.options.groq.prompt` 传入预期词汇的提示词,这有助于模型正确处理专有名词和术语,避免出错。 响应及其用量统计 响应为 JSON 格式,包含一个 text 字符串和一个 usage 对象。usage 对象让你能够按请求计量费用,而非仅靠估算。 { "text": "Thanks everyone for joining. Let's start with the Q3 numbers.", "usage": { "seconds": 9.2, "total_tokens": 113, "input_tokens": 83, "output_tokens": 30, "cost": 0.000508 } } 该费用值来自我们文档中的示例,并非实际报价;你的实际费用取决于所选模型和音频时长。usage 对象会报告秒数(音频时长)、token 数量以及以美元计的费用。响应中还包含一个 `X-Generation-Id` 标头,你可以记录该 ID 以便后续追踪或调试特定请求。 何时使用转录功能,而非音频输入或文本转语音? 当你需要将音频转换为文本时,使用 `/audio/transcriptions`;当你希望模型对音频内容进行推理时,则在聊天中使用音频输入。 转录端点适用于会议记录、语音指令、字幕生成,以及通话或播客的可搜索存档。如果你需要对客服通话进行情感分析、对音频内容进行问答,或将音频与其他模态混合在同一个提示词中,请使用 `/chat/completions` 中的 `input_audio` 内容类型。将文本转换为语音则是第三个独立的端点。 你想要…使用你将获得 音频转文本(转录稿)POST /api/v1/audio/transcriptionsJSON 文本加用量 一个能对音频进行推理(情感分析、问答、多模态)的模型/chat/completions 接口上的 input_audio 参数一次聊天补全 关于音频分析和文本转语音,请参阅音频 API 公告。 转写功能的提供商路由是如何工作的? 转写功能使用与聊天相同的路由层。当一个模型由多个提供商托管时,我们会根据价格进行负载均衡,将你的请求分发到这些提供商之间,这样你就不会被绑定到单一供应商。目前转写功能尚未开放按请求的路由控制。你在聊天调用中设置的 order、only、allow_fallbacks、data_collection 和 sort 字段,不会应用于 /api/v1/audio/transcriptions 接口。该端点上的 provider 块转而携带的是提供商特定的选项: { "model": "openai/whisper-large-v3", "input_audio": { "data": "", "format": "wav" }, "provider": { "options": { "groq": { "prompt": "Expected vocabulary: OpenRouter, API, transcription" } } } } 该请求向 Groq 传递了一个词汇提示,用于处理它原本可能会搞错的专有名词。这些选项以提供商标识符(slug)为键,只有匹配到的提供商的选项才会被转发。如果你需要固定使用某个特定提供商,或在转写请求上强制执行按请求的数据策略,该端点目前尚不支持这些控制。完整的 provider 对象在提供商路由文档中有详细说明。 OpenRouter 不会在提供商定价上加价,因此目录价格就是你的实际支付价格,而“零补全保险”意味着失败的转写不会被计费。如果你已有提供商协议,BYOK 功能允许你通过自己的提供商密钥进行路由,只需支付我们的平台费用,而无需支付按使用量计算的模型成本,并且按量付费模式下,每月前 100 万次请求的平台费用将被免除。 规划时需要考虑哪些限制? 有四个约束条件决定了你如何构建转写调用: 限制对你的影响 60 秒上游超时约 60 秒的处理时间,并非音频长度的硬性上限。体积大或未压缩的录音容易超时。请将长音频分割成片段,分别转写,再拼接文本。 不支持音频 URL该端点不支持通过 URL 传递音频。请发送 base64 JSON,或采用 OpenAI 风格的多部分文件,大小不超过 25 MB。压缩格式(mp3、aac)能生成更小、传输更快的负载。 不支持 SRT/VTT 格式输出srt、vtt 和 text 响应格式会被拒绝并返回 400 错误。时间戳可通过兼容 OpenAI 的提供商上的 verbose_json 获取;请自行根据这些时间戳构建字幕文件。 格式支持因提供商而异列表(wav/mp3/flac/m4a/ogg/webm/aac)是常见的,但特定模型或提供商可能不接受其中所有格式。wav 是最安全的默认选择。 由于超时限制的是处理时间而非音频长度,因此仅凭片段时长无法判断其是否可行。一段持续数小时的录音,例如通宵游戏会话,需要进行分块处理;单次调用无法覆盖。 对于字幕,默认响应是文本加使用情况,不包含时间信息。将 response_format 设置为 verbose_json,即可获得片段级别的时间戳,如果同时传入 timestamp_granularities: ["word"],还能获得单词级别的时间戳。这在兼容 OpenAI 的提供商(OpenAI、Groq、Together)上有效;其他提供商会拒绝并返回 400 错误。没有内置的 .srt/.vtt 输出,因此您需要自行根据时间戳构建字幕文件。 转录请求的费用是多少? 您按模型的目录费率付费,我们不加价,并且 usage.cost 字段会显示每次请求的确切费用。Whisper 类模型按音频秒数收费,较新的模型则按 token 收费。 费率会变化,因此我们将实时费率保留在目录中每个模型的页面上,而不是在此处列出。读取响应中的 usage.cost 可以告诉您每次请求的实际成本。STT 模型是付费的,因此 API 转录会消耗您的信用余额。 要开始使用,请在 Playground 中确认某个模型适合您的音频,配置好调用,并从第一天起通过读取每次请求的 usage.cost 来计量支出。 常见问题 如何使用 OpenRouter 转录音频文件? 将 base64 编码的音频发送到 POST /api/v1/audio/transcriptions,并附带一个模型和一个 input_audio 对象(包含数据和格式)。响应是 JSON 格式,包含一个 text 字符串(转录文本)和一个 usage 对象(秒数、token 数和费用)。它使用与 Chat Completions 相同的 Bearer API 密钥和身份验证。 OpenRouter 支持 Whisper 吗? 是的。Whisper 类模型可用于转录,使用的 slug 是 openai/whisper-1。STT 模型 ID 不在默认的 /api/v1/models 列表中,因此需要通过 `?output_modalities=transcription` 进行筛选,或浏览相关页面来发现它们。Whisper 按音频时长计费,即每秒音频的价格;较新的 STT 模型则按模型 token 计费。 OpenRouter 转录支持哪些音频格式? 常见的格式包括 wav、mp3、flac、m4a、ogg、webm 和 aac,需在必填的 input_audio.format 字段中指定。不同模型和提供商的支持情况各异,因此并非所有模型都接受每种格式。wav 是兼容性最广的安全默认选项;mp3 等压缩格式则能提供更小、更快的传输负载。 OpenRouter 能否返回时间戳或 SRT/VTT 字幕? 时间戳可以。将 response_format 设置为 verbose_json 即可获取片段级别的时间戳,并添加 timestamp_granularities: ["word"] 以在 words 数组中获取单词级别的时间戳。该功能适用于兼容 OpenAI 的提供商(OpenAI、Groq、Together);其他提供商会返回 400 错误拒绝该请求。不支持 SRT/VTT 输出,因此需要自行根据时间戳构建字幕文件。 音频时长可以有多长? 实际限制是上游约 60 秒的处理超时时间,而非固定的音频长度上限。短片段和中长片段可通过一次调用完成。对于长录音,需将音频分割成多个片段,分别转录后再拼接文本。 在 OpenRouter 上转录的费用是多少? 您只需按模型的目录价格付费,无任何加价。Whisper 类模型按音频秒数计费;较新的 STT 模型则按模型 token 计费。每个响应中的 usage.cost 字段会报告该次请求的确切美元费用。