关于 assemblyai
AssemblyAI 技能为使用其语音转文字 API、音频智能模型和 LLM Gateway 的开发者提供实现参考,重点说明认证方式、模型选择及 SDK 版本差异。
主要功能
- 01说明 API 密钥认证格式
- 02梳理服务端点与区域
- 03指导 SDK 版本及迁移
- 04比较转录模型的适用场景
适用场景
- 01为 AssemblyAI API 编写调用代码
- 02排查认证头或端点配置问题
- 03更新旧 SDK 集成
- 04选择预录或实时转录模型
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ assemblyai/ assemblyai-skill --skill assemblyai安装后在 Claude Code 中输入/assemblyai确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
evals/evals.jsonreferences/api-reference.mdaudio-intelligence.mddictation.mdjs-sdk.mdllm-gateway.mdpython-sdk.mdspeech-understanding.mdstreaming.mdvoice-agents.md详细介绍
AssemblyAI 语音转文本与语音 AI
AssemblyAI 提供语音转文本 API、音频智能模型,以及一个用于将语言模型应用于转录文本的 LLM Gateway。本技能会纠正常见错误,包括训练数据中的错误信息:已弃用的 API、已停止维护的 SDK,以及不明显的身份验证模式。
身份验证
所有端点使用相同的请求头:
Authorization: YOUR_API_KEY
不要使用 Authorization: Bearer ...——只需填写原始 API 密钥,不要添加 Bearer 前缀。这是最常见的错误。
基础 URL
| 服务 | 美国 | 欧盟 |
|---|---|---|
| REST API(异步) | https://api.assemblyai.com | https://api.eu.assemblyai.com |
| 同步 STT API(≤120s) | https://sync.assemblyai.com(默认全球入口,会路由到最近区域;如需数据驻留在美国,请使用 https://sync.us.assemblyai.com) | https://sync.eu.assemblyai.com |
| Dictation API(≤120s,转录文本 + 改写) | https://dictation.assemblyai.com(默认全球入口,会路由到最近区域;如需数据驻留在美国,请使用 https://dictation.us.assemblyai.com) | https://dictation.eu.assemblyai.com |
| LLM Gateway | https://llm-gateway.assemblyai.com/v1 | https://llm-gateway.eu.assemblyai.com/v1 |
| Streaming v3 | wss://streaming.assemblyai.com/v3/ws | wss://streaming.eu.assemblyai.com/v3/ws |
| Streaming v2(旧版) | wss://api.assemblyai.com/v2/realtime/ws | — |
| Voice Agent API | wss://agents.assemblyai.com/v1/ws | wss://agents.eu.assemblyai.com/v1/ws |
Streaming 数据区域:streaming.eu.assemblyai.com 会将音频和转录文本保留在欧盟境内,并在 AWS eu-central-1(法兰克福)、eu-north-1(斯德哥尔摩)、eu-south-1(米兰)、eu-south-2(西班牙)、eu-west-1(爱尔兰)和 eu-west-3(巴黎)处理。streaming.us.assemblyai.com 会将它们保留在美国境内(us-east-1/-2、us-west-1/-2)。默认的 streaming.assemblyai.com 会通过边缘路由,将请求发送到任一区域中最近的区域。
SDK
| 语言 | 安装 | 状态 |
|---|---|---|
| Python | pip install "assemblyai>=1.6.1" | 正在维护 |
| JavaScript/TypeScript | npm i assemblyai@^4.41.5 | 正在维护 |
| Ruby | assemblyai gem | 正在维护 |
| Java | assemblyai-java-sdk | 已于 2025 年 4 月停止维护 |
| Go | assemblyai-go-sdk | 已于 2025 年 4 月停止维护 |
| C# .NET | AssemblyAI NuGet | 已于 2025 年 4 月停止维护 |
仅维护 Python、JS/TS 和 Ruby SDK。 对于 Java、Go 或 C#,请直接使用 REST API。
SDK 版本
请分别安装最新版本:Python 1.6.1 和 Node 4.41.5(均于 2026 年 9 月 24 日发布)。 这是当前的发行版本。它们包含 Dictation API(DictationTranscriber / client.dictation,在 Python 1.5.2 和 Node 4.40.0 中添加)、流式同步上传(transcribe_live() / transcribeLive())、Node client.llmGateway 服务(4.38.0)、流式模型枚举中的 universal-3-6-pro(Python 1.1.0 / Node 4.37.1),以及通过 speaker_labels_revision_interval_ms 进行的会话中途说话人修订(Python 1.6.1 / Node 4.41.5)。两个 SDK 的版本号各自独立演进(JS/TS SDK 自 2023 年 12 月起就一直采用 4.x),因此没有可供匹配的统一版本号;请根据包含相同变更的发行版本进行匹配。
在现有项目中针对 DictationTranscriber 或 client.dictation 编写代码前,务必检查已安装的版本(pip show assemblyai / npm ls assemblyai)——低于上述版本的任何版本都不包含听写功能接口。
如果你在 2026 年 9 月之后很久才读到本文,请安装最新版本——pip install -U assemblyai 和 npm i assemblyai@latest——而不要固定使用上述版本。仍具备当前 API 接口的绝对最低版本是 Python 1.0.0(2026 年 8 月 14 日)和 Node 4.37.0(2026 年 8 月 28 日);这两个版本移除了 LeMUR;更早的版本都属于不同一代 SDK。
Python 1.0.0 破坏性变更——训练数据几乎总是展示 0.x 版本的用法:
| 0.x | 1.x |
|---|---|
aai.Lemur(...) 和所有 aai.Lemur* 名称 | 已移除。 将 transcript.text 传给 LLM Gateway |
pip install "assemblyai[extras]" | 已移除——现在 [extras] 选项会失败。请使用 pip install -U assemblyai |
from assemblyai.extras import MicrophoneStream | 已移除。 SDK 不再采集麦克风音频——请使用 pyaudio/sounddevice,并将 16 位 PCM 块传入 stream(...) |
StreamingClient、StreamingClientOptions、StreamingParameters | 已重命名为 RealTimeTranscriber、RealTimeTranscriberOptions、RealTimeParameters。旧名称仍绑定到相同对象(并未弃用),但请使用新名称 |
其他内容均不受影响:aai.settings.api_key、aai.Transcriber() 和扁平导入路径(assemblyai.transcriber、assemblyai.sync)仍可正常使用,且没有缩窄任何签名。1.x 中新增且值得采用的功能包括——所有转录器和客户端构造函数中的 api_key=、transcribe() 中的 poll_timeout=、async with AsyncTranscriber(...)、AsyncSyncTranscriber,以及版本化导入(assemblyai.prerecorded.v2、assemblyai.sync.v1、assemblyai.streaming.v3)。请参阅 references/python-sdk.md。
Node 4.37.0 破坏性变更:client.lemur、LemurService 以及所有 Lemur 请求/响应类型均已移除(LeMUR 端点会返回 404)。没有重命名,也没有签名变更——4.36.x 代码库的其余部分不受影响。
universal-3-6-pro(Universal-3.6 Pro Streaming,于 2026 年 9 月 29 日发布)可用于 Python 1.1.0(assemblyai.streaming.v3.SpeechModel)和 Node 4.37.1(StreamingSpeechModel)中的流式模型枚举;Python 1.0.0 会在客户端报错并返回 ValidationError。这两个枚举还都列出了一个名为 universal-3-6(没有 -pro)的值——它不是有文档说明的流式模型;请勿用它代替 universal-3-6-pro。
语音转文本模型
流式处理:使用 universal-3-6-pro。 Universal-3.6 Pro Streaming(于 2026 年 9 月 29 日发布)是流式处理旗舰模型、流式服务默认模型,也是 Voice Agent API 的默认 STT:支持 32 种语言,可直接替换 universal-3-5-pro,参数和功能保持一致。
预录音/异步和同步 STT:使用 universal-3-5-pro。 Universal-3.6 Pro 目前仅正式发布用于流式处理;异步 3.6 Pro 仍处于预览阶段。universal-3-6-pro 不在 POST /v2/transcript 的 speech_models 枚举值、同步 STT 的 X-AAI-Model 值或任一 SDK 的异步/同步模型类型中,因此不要在那里使用它。听写没有模型选择器(使用的是 Universal-3.5 Pro),所以无需设置。只有出于成本考虑或需要支持 Universal-3.5 Pro 支持的 18 种语言之外的语言时,才切换到 universal-2(异步)。universal-3-pro(异步)和 u3-rt-pro(流式处理)均已被取代,并已从各自的模型列表/枚举值中移除。
默认模型过渡(异步): 在 2026 年 7 月 7 日或之后创建的账户,如果省略 speech_models,默认值已为 ["universal-3-5-pro", "universal-2"](且无法请求 universal-3-pro/universal)。其余所有账户将在 2026 年 9 月 2 日切换——从该日起,省略/留空/单值的 speech_model,或 ["universal"],都会路由到 universal-3-5-pro;speech_models: ["universal-3-pro"] 会返回错误;而流式 u3-rt-pro 连接会被静默重定向到 universal-3-5-pro。如果需要确保过渡期间行为一致,请明确指定 speech_models。
预录音
| 模型 | 语言 | 最适合 |
|---|---|---|
| Universal-3.5 Pro(推荐默认模型) | 18(其余 99 种语言会自动回退到 Universal-2) | 旗舰模型:准确度最高、速度最快,在支持的 18 种语言间原生切换代码,支持上下文 prompt,keyterms 最多 1,000 个词 |
| Universal-2 | 99 | 成本效益高;语言覆盖范围最广;keyterms 最多 200 个词;适用于 Universal-3.5 Pro 不支持的 18 种语言之外的语言 |
在 POST /v2/transcript 中,speech_models 是带有回退机制的优先级列表——文档中注明的默认值为 ["universal-3-5-pro", "universal-2"](2026 年 7 月 7 日或之后创建的账户已启用;从 2026 年 9 月 2 日起适用于所有账户——见上方过渡说明)。Universal-3.5 Pro 处理其支持的 18 种语言,其余语言会自动回退到 Universal-2。异步 speech_models 枚举值现在仅接受 universal-3-5-pro 和 universal-2(universal-3-pro 已移除,并由 universal-3-5-pro 取代)。单值 speech_model 字段会对当前模型名称返回 400(旧名称 best/universal 仍会路由到默认模型;nano 已不再列入文档)。Universal-3.5 Pro 支持上下文 prompt(对音频的自然语言描述)和 keyterms_prompt(最多 1,000 个术语;模型内原生偏置——Universal-2 的 keyterms 是语音形式的后处理,仅支持英语,最多 200 个术语;少于 5 个或超过 50 个字符的术语会被忽略)。查看响应字段 speech_model_used,了解实际运行的模型。
流式处理
| 模型 | 语言 | 最适合 |
|---|---|---|
| universal-3-6-pro | 32 | 新实时/流式代码的推荐默认模型,也是未指定 speech_model 时的服务端默认模型。旗舰模型:原生代码切换、提示词、对话上下文、语音聚焦、流式说话人分离。于 2026 年 9 月 29 日推出 |
| universal-3-5-pro | 19 | 前代旗舰,仍受全面支持,功能与 3.6 Pro 相同(但支持的语言较少)。仅在集成明确固定使用该模型时保留 |
| universal-streaming-english | 1(英语) | 语音 Agent,延迟约 300 毫秒 |
| universal-streaming-multilingual | 6 | 按话语检测语言 |
| u3-rt-pro | 6 | 旧版——Universal-3 Pro Streaming,已于 2026 年 7 月从模型选择器和流式规范的 speech_model 枚举中移除。现已由 Universal-3.5/3.6 Pro 模型取代。仍可在旧代码中看到 |
| whisper-rt | 99+ | 旧版——已于 2026 年 6 月从公开模型选择器和流式规范枚举中移除,但仍可通过 speech_model: whisper-rt 使用,以覆盖最广泛的流式语言范围;仅支持自动检测 |
对于实时/流式 STT,默认使用 speech_model: "universal-3-6-pro"。原始 API 参数为可选项,默认值为 universal-3-6-pro,但请明确设置该参数:Pipecat 服务(pipecat-ai 1.12)和 Node LiveKit 插件(@livekit/agents-plugin-assemblyai 1.9)的默认值仍为 universal-3-5-pro(Python LiveKit 插件从 1.8.4 开始默认使用 universal-3-6-pro),并且拼写错误或未知的查询参数会被静默忽略,而不是被拒绝。请通过 Begin.configuration.model 确认实际使用的模型。流式规范的 speech_model 枚举列出了 universal-3-6-pro、universal-3-5-pro、universal-streaming-english 和 universal-streaming-multilingual。mode 连接参数(Universal-3.6/3.5 Pro)可权衡准确率与延迟:min_latency、balanced(默认值)、max_accuracy。
**定价(流式处理,每会话小时):**Universal-3.6 Pro 为 $0.45/小时,已包含关键词。附加项:提示词 $0.05/小时、说话人分离 $0.12/小时、Medical Mode $0.15/小时、Voice Focus $0.10/小时、PII 脱敏 $0.12/小时。对于 Universal-Streaming,关键词费用为 $0.04/小时,且不支持提示词/Voice Focus。
Medical Mode(附加项)
domain: "medical-v1" 可启用 Medical Mode——一项提升医学术语(药物、手术、病症、剂量)识别准确率的附加功能。预录制和流式模型均可使用。
- **预录制:**Universal-3.5 Pro(在请求正文中设置
domain: "medical-v1")、Universal-2 - **流式处理:**universal-3-6-pro、universal-3-5-pro、universal-streaming-english、universal-streaming-multilingual
- **支持的语言:**英语、西班牙语、德语、法语(仅 4 种语言)
- 单独计费。如果与不支持的语言搭配使用,API 会忽略
domain并返回警告——转录仍会完成,且不会向你收取 Medical Mode 费用。
提示词(Universal-3.6 Pro streaming / Universal-3.5 Pro)
prompt 和 keyterms_prompt 相辅相成——可单独使用,也可同时使用。两者都不会更改输出格式,且在流式处理和异步处理中(POST /v2/transcript)的工作方式相同。转录行为(逐字转录、标点、格式)已内置,由 AssemblyAI 管理。
prompt(字符串;长度上限因 API 而异——流式处理 ≤1750 个字符,异步处理最多约 1,500 个单词,Sync STT ≤4096 个字符):用通俗语言描述音频——其领域、场景或完整细节。它提供的是上下文,而不是指令——不支持格式或行为命令(标点规则、“逐字转录”、“不要……”),这些命令会被忽略。模型始终以音频内容为依据:无关或仅部分适用的上下文不会让模型插入未说出的词,因此可以在每个会话或片段中安全地发送相同描述。keyterms_prompt(字符串数组):要提高识别权重的名称、品牌或领域术语列表。流式处理:最多 100 个术语,每个 ≤50 个字符。异步处理:最多 1,000 个术语。
上下文提示词——三个具体程度层级(选择能够涵盖需求的最低具体程度):
| 层级 | 长度 | 包含内容 | 示例 |
|---|---|---|---|
| 领域 | 2–5 个词 | 仅说明领域 | Medical consultation call. |
| 场景 | 5–15 个词 | 通话内容 | Cardiology consultation about chest pain symptoms. |
| 详细 | 20–50 个词 | 名称、产品、标识符 | Cardiology consultation between Dr. Smith and a patient about recurring chest pain, ECG results, and hypertension medication. |
最佳实践:
- 先不要使用
prompt和keyterms_prompt——模型开箱即用,已针对任务优化。只有领域词汇识别有误时才添加上下文,并从最宽泛的层级开始。 - 使用通俗、完整的句子来描述录音;保持为一个简短段落,不要写成关键词列表(关键词列表应使用
keyterms_prompt)。 - 关键词术语:使用准确的拼写和大小写;避免常见词(包含过多术语会导致过度纠正或幻觉)。
- 通过
language_code指定语言(首选),或在提示词中注明语言(例如:“Spanish customer support call…”)。 - 流式处理:通过
UpdateConfiguration在会话中途更新两者;新的关键词术语数组会替换之前的集合,[]会将其清空。
同步 STT API(短音频,≤120s)
用于短音频片段的独立同步端点——通过一个 HTTP 请求发送音频,并在响应中获取转录文本。**无需轮询、无需转录 ID,也无需 upload 步骤。**该服务已于 2026 年 7 月 14 日全面推出(GA),价格为 $0.45/hr。适用于语音消息转录、较短的通话录音,或自行进行轮次检测并提交已完成话语的语音 Agent 工作流。
- 端点:
POST https://sync.assemblyai.com/v1/transcribe(截至 2026 年 7 月,路由已添加版本号——不带前缀的/transcribe仍兼容旧客户端,但新代码应使用/v1/)。全球主机将请求路由到最近的区域;如需数据驻留,请使用sync.us.assemblyai.com/sync.eu.assemblyai.com - 必需的请求头:
X-AAI-Model: universal-3-5-pro(SDK 中唯一可用于同步调用的模型;u3-sync-pro是仍受支持的旧值) - 身份验证:
Authorization: YOUR_API_KEY(此处可省略 Bearer 前缀,与异步 REST API 不同;也可以传入?token=YOUR_API_KEY) - 请求体:
multipart/form-data,包含一个audio部分(Content-Type: audio/wav或audio/pcm)以及可选的configJSON 部分 config字段:prompt(≤4096 个字符)、keyterms_prompt(string[]——于 2026 年 7 月从word_boost更名;仍接受别名word_boost和keyterms)、conversation_context(string 或 string[]——按时间从早到晚排列的先前对话轮次,用于保持多轮对话的连贯性;超出上下文预算时会从最早的轮次开始丢弃)、language_codes(ISO 639-1 列表;也接受单数形式language_code,默认值为en——引导默认提示词使用指定语言;设置自定义prompt时会忽略此字段)、timestamps(bool,默认值为false——通过强制对齐选择启用逐词start/end时间戳,单位为 ms;如果对齐器不可用,响应中会省略该字段,不会估算时间戳),对于audio/pcm,还需提供sample_rate和channels(原始 PCM 必填;WAV 会从其标头中读取这两个值)。不支持的config字段会被拒绝并返回 400——不要在此处传入异步 API 参数- 音频限制: 80ms–120s、≤40MB、仅限 16 位、单声道/立体声(立体声会下混),采样率为 8000/16000/22050/24000/32000/44100/48000 Hz
- 响应:
{ text, words[{text, start?, end?, confidence}], confidence, audio_duration_ms, session_id, request_time_ms }——仅当设置timestamps: true时才会返回词级start/end(整数,单位为毫秒);只有音频片段级时长使用_ms后缀 - 预热:
GET https://sync.assemblyai.com/v1/warm可在首次请求前建立连接(返回200 {"warm":"toasty"})。Python SDK:使用SyncTranscriber.warm()和aai.settings.keepalive_expiry保持连接;Node SDK 也提供SyncTranscriber - 每个请求的截止时间为 30s(504
inference_timeout)。音频超过 120s 时请使用异步 REST API;实时麦克风音频请使用 Streaming。如果需要在逐字转录文本之外,整理或改写话语内容(删除填充词、整理成笔记),请改用下方的 Dictation API。
curl -X POST https://sync.assemblyai.com/v1/transcribe \
-H 'Authorization: YOUR_API_KEY' \
-H 'X-AAI-Model: universal-3-5-pro' \
-F '[email protected];type=audio/wav'
听写 API(短时听写,≤120s,转录文本 + LLM 改写)
独立服务(拥有自己的主机名和请求格式;不是 Sync、Pre-recorded 或 Streaming),可通过单次 HTTP 调用将一段口述内容转换为可直接发送的文本和逐字转录文本。默认会进行清理:去除填充词、处理自我更正,并添加标点和大小写。设置 llm_instruction 可指定其他格式(项目符号列出的待办事项、临床病历、预约确认)。该服务使用 Universal-3.5 Pro,支持 32 种语言。适用于听写应用、语音备忘录、记录员,以及“口述消息并发送”工作流;如果只需要逐字转录文本,请使用 Sync STT。
- 端点:
POST https://dictation.assemblyai.com/v1/transcribe/live(仅限/v1,没有不带版本号的别名;/v1/transcribe/stream是旧路径)。使用dictation.us./dictation.eu.设置数据驻留区域 - 身份验证:
Authorization: YOUR_API_KEY(原始密钥,不带 Bearer) - 请求体:
multipart/form-data,先发送config部分(必填,JSON;使用{}表示采用默认值),再发送audio(audio/wav或audio/pcm,≤120s,16 位)。服务器会在收到字节时开始转录,且必须先收到 config 才能开始,因此先发送音频或缺少 config 都会返回400。压缩格式(MP3/M4A/FLAC/OGG/WebM)→415;请先解码 config字段(仅限以下字段;未知字段 →400):sample_rate+channels(原始 PCM 必填,WAV 会忽略)、language_codes(列表,默认为["en"],支持 32 种代码)、stt_prompt(≤6000 个字符,用于描述音频背景;别名为prompt,请二选一,不要同时发送)、keyterms_prompt(≤100 个术语 / 8000 个字符;接受别名keyterms/word_boost,请只发送一个)、llm_instruction(≤2048 个字符,用通俗英文描述改写任务,替换默认清理方式;省略或设为null则保留默认方式)。不支持model、timestamps、conversation_context、speaker_labels、redact_pii- 响应:
{ text, words[{text, confidence}], confidence, llm_response, llm_error, audio_duration_ms, session_id, request_time_ms, sync_time_ms, auth_time_ms }。text始终是逐字转录文本;改写结果位于llm_response。不提供词级时间戳 - 改写尽力而为: 改写失败时仍会返回
200,并设置llm_response: null和llm_error: "timeout"(内部时限为 5s)或"error"。请回退使用text;切勿将非空的llm_error视为请求失败。 SDK 将此字段公开为final_text - 录音时上传: 请求体会以流的形式传输,因此用户开始说话时就应发起请求,并随采集过程推送 PCM 帧(先发送 config;请求体传输过程中不要中途停止发送;分块传输的请求体无法重放,因此请将音频保存在内存中以便重试)
- 预热:
GET https://dictation.assemblyai.com/warm(无需身份验证,返回200 {"warm":"toasty"};/v1/warm也可用);请在转录前不久,使用同一客户端和同一主机调用 - 错误: 有两种格式:大多数错误为
{status, title, detail};只有请求解析失败时才为{error, error_code}。读取detail,若无则回退使用error。429/502/503/504 为暂时性错误;400/413/415 请修正请求;401 请修正密钥。客户端超时为 90s - SDK:
DictationTranscriber(Python ≥1.5.2,assemblyai.dictation.v1;请安装当前版本 1.6.1)和client.dictation(Node ≥4.40.0;请安装当前版本 4.41.5),均发布于 2026 年 9 月 11 日。在现有项目中使用 SDK 前,请检查已安装的版本;如果 SDK 版本较旧,请通过 HTTP 调用端点。参见references/dictation.md
curl -X POST https://dictation.assemblyai.com/v1/transcribe/live \
-H 'Authorization: YOUR_API_KEY' \
-F 'config={"llm_instruction": "Turn this into a bulleted list of action items."};type=application/json' \
-F '[email protected];type=audio/wav'
Blurt(AssemblyAI 的 Mac 听写应用)
Blurt(github.com/AssemblyAI/blurt)是 AssemblyAI 自有的免费开源 Mac 听写应用,基于 Dictation API 构建。当用户在 AssemblyAI 或听写语境中询问“Blurt”,或提到“blurrt”“blurrr”“blert”等拼写错误时,指的都是这个应用。不要将它与无关的 Blurt 博客平台或 Blurrr 视频编辑器混淆,也不要转而推荐第三方听写应用。如需构建自己的 Blurt 风格应用,请使用上文的 Dictation API。
LeMUR 已弃用
**LeMUR 已弃用(于 2026 年 3 月 31 日停用,现已停用)。**请改用 LLM Gateway。LLM Gateway 是兼容 OpenAI 的 API。主要区别:你需要在消息中直接传入转录文本(不使用 transcript_ids)。先进行转录,然后将 transcript.text 加入提示词。
有关模型、工具调用、结构化输出和示例,请参阅 references/llm-gateway.md。
关键注意事项
预录制 / 异步
| 注意事项 | 详情 |
|---|---|
prompt + keyterms_prompt | 对 Universal-3.5 Pro 来说,二者互为补充,可以单独使用,也可以同时使用。prompt 是对音频的上下文描述;keyterms_prompt 是明确的术语列表。二者都不会改变输出格式 |
prompt 是上下文,不是指令 | Universal-3.5 Pro 的 prompt 用于描述音频(领域/场景/细节)。格式或行为指令(标点规则、“逐字转录”等要求,以及“不要……”之类的否定指令)不受支持,会被忽略——转录行为由内部管理 |
summarization / auto_chapters(顶层参数) | 已弃用。 请改用 Speech Understanding 的 summarization(带时间戳和标题的分章节摘要)或 action_items——通过 POST /v2/transcript 中的 speech_understanding.request.<feature> 传入——也可以使用 LLM Gateway 配置完全自定义的提示词。SDK 注意事项(Python 1.6.1 / Node 4.41.5): 两个 SDK 对 speech_understanding.request 的类型定义都只包含 speaker_identification/translation/custom_formatting。Python 会静默丢弃 summarization/action_items(随后 API 会返回 400 错误,提示 speech_understanding.request is empty),因此请通过原始 REST 请求发送这些参数。Node 运行时会透传这些参数,但 TypeScript 需要使用 as any 类型转换。必须提供 summary_type(bullets/paragraph) |
| PII 脱敏范围 | 只会对 text 中的词语进行脱敏——其他功能的输出(实体、摘要)仍可能暴露敏感数据 |
| PII 位置策略 | redact_pii_policies 现在支持细粒度的位置类型(2026 年 7 月):location_address、location_address_street、location_city、location_state、location_country、location_zip、location_coordinate。完整且连续的地址会作为一个 location_address 片段处理;独立片段则使用各自的子类型 |
| PII 音频脱敏方式 | override_audio_redaction_method: "silence" 会以静音替代 PII,默认方式则是蜂鸣声 |
| 上传密钥的作用范围 | 使用某个 API 密钥项目上传的文件,不能使用其他项目的密钥进行转录 |
| 语言检测 | 要获得可靠结果,需要至少 15 秒的语音音频 |
| 英语本地化 | language_detection_options.localization 仅接受 en_au 和 en_uk(否则返回 400;每种基础语言最多指定一种),并应用对应地区的拼写规则;随后响应中的 language_code 会显示所应用的区域设置(例如 en_au) |
| 情感分析仅支持英语 | 对于非英语音频,转录会正常完成,但 sentiment_analysis_results 为 null——不会返回错误 |
| 语音不流畅现象 | 设置 disfluencies: true,即可在转录文本中保留 “um”/“uh” |
| 医疗模式不支持的语言 | API 会静默跳过医疗模式,且不会对此收费——请检查响应中的警告 |
Transcript metadata.warnings | Transcript 响应现在包含一个可选的 metadata 对象。若存在,metadata.warnings 是一个 {message} 对象数组,用于说明转录过程中处理的问题(例如,因语言不受支持而跳过医疗模式)。没有需要报告的内容时,会完全省略 metadata 对象 |
流式
| 注意事项 | 详细信息 |
|---|---|
| Universal-3.6/3.5 Pro 轮次检测 | universal-3-6-pro 和 universal-3-5-pro 会在 min_turn_silence 之后检查当前转录内容(句末标点)来结束轮次,而不是使用置信度阈值。end_of_turn_confidence_threshold 和 format_turns 不起作用(它们仅适用于 Universal Streaming English/Multilingual);最终结果始终会格式化。默认值由 mode 决定:min_latency 为 128/640ms,balanced 为 128/1280ms,max_accuracy 为 512/2560ms(轮次静默时长的最小值/最大值)。max_accuracy 会让轮次保持打开更长时间,因此实体内部的停顿(电话号码、地址、卡号)不会拆分轮次:最适合速记和通话后的准确性,但会增加延迟 |
speaker_labels 会覆盖 mode | 在 Universal-3.6/3.5 Pro 上启用 speaker_labels: true 时,会用专用的说话人分离轮次检测配置替换 mode 预设——min_latency/balanced/max_accuracy 均不起作用,且不会返回警告。此配置会将轮次上限设为 10s(强制结束;轮次边界不代表说话人发生变化),将部分结果间隔放慢至约 3s(continuous_partials: true 可恢复为约 1s),并将静默时长默认值设为 640/768ms。显式设置的 min_turn_silence/max_turn_silence/vad_threshold/interruption_delay 仍会在此基础上生效 |
format_turns 的数字呈现 | format_turns=true 会启用标点、大小写和逆文本规范化(日期、时间、电话号码)——它不控制数字呈现。像“22”这样的数字形式属于模型行为,流式传输不支持输出词汇形式的数字(“twenty-two”) |
| 语言选择 | 连接参数为 language_codes(复数,列表,每个会话最多 10 个代码,例如 ["en","es"])。Universal-3.6 Pro 接受 32 个代码:af ar yue ca da nl en et fi fr gl de he hi it ja ko zh mr no nn fa pt ro ru es sv tr ur vi xh zu(yue = 粤语,zh = 普通话,nn = 挪威语尼诺斯克)。Universal-3.5 Pro 的文档列出了其中 19 个代码(不包括 af yue et gl ko mr nn fa ro ru ur xh zu)。两个 SDK 都不会在客户端验证代码。可在流式传输过程中更新,方法是使用 UpdateConfiguration(从下一轮开始生效;[] 会清除引导设置,恢复为原生代码切换)。单数形式的 language_code 连接参数已弃用,但仍可接受(会被视为只含一个元素的列表)。引导设置只会影响偏向,不会锁定语言;模型仍会在所列语言之间切换代码。仅适用于 Universal-3.6/3.5 Pro |
| 上下文延续 | 默认启用——模型会将之前已结束的轮次作为上下文传递(每个会话最多保留 previous_context_n_turns 条,服务器默认值为 5,范围为 0–100)。通过 agent_context 传入 Agent 的口头回复(可在连接时通过查询参数预置开场问候语,也可在流式传输过程中通过 UpdateConfiguration 传入;每个值不超过 1750 个字符),让模型知道用户正在回答什么问题。previous_context_n_turns 只能在连接时设置,且Python 和 Node SDK 均未公开此参数(Python 会静默丢弃该参数);请使用原始 WebSocket 或 LiveKit/Pipecat 设置。仅适用于 Universal-3.6/3.5 Pro |
| 修订后的说话人标签 | 启用 speaker_labels 后,如果标签发生变化,服务器会在你发送 Terminate 后、Termination 之前发出一条最终的 SpeakerRevision 消息(会话结束时最多一条),其中包含 revisions 数组,仅列出说话人标签发生变化的轮次(通过 turn_order 匹配)。设置 speaker_labels_revision_interval_ms(建议值为 300000;音频时长至少需达到 120000ms;根据 Node SDK 更新日志,超过 300000 的值会被限制为该值;首条修订约在 2 分钟后发出),还可在会话中途获取修订(Python SDK ≥1.6.1 / Node ≥4.41.5)。每条消息都是增量;按到达顺序应用,同一 turn_order 以最后一条为准。文本和词语时间戳不会改变——只会更新说话人归属。最终处理会使会话关闭时增加约 400ms |
| 压缩音频输入 | 除 pcm_s16le/pcm_mulaw 外,encoding 还接受 opus(原始数据包——每条二进制 WS 消息一个)、ogg_opus(Ogg 流——任意分块;ffmpeg/gstreamer/MediaRecorder 输出)和 aac(ADTS AAC,2026 年 7 月新增)。对于这些压缩编码,sample_rate 可选/会被忽略(流本身包含采样率信息)——但 PCM 仍必须提供该参数(较新的 SDK 在缺少参数时会于构造阶段抛出异常) |
| 会话心跳 | 可选择启用连接参数 session_heartbeat=true(2026 年 7 月新增;也可在流式传输过程中通过 UpdateConfiguration 切换),使服务器每 5s 的实际时间发送一条 Heartbeat,其中包含 total_audio_received_ms、total_duration_ms、realtime_factor(1.0 = 实时接收)和 max_speech_probability——可用于检测传输节奏问题和失效会话。Python SDK ≥0.64.32 / Node ≥4.36.4 |
检查 Begin.configuration | Begin 消息会回显服务器实际应用的配置:configuration.{model, mode, api_version, speaker_labels, redact_pii, filter_profanity, domain, voice_focus}。未知或拼写错误的查询参数会被忽略,而非拒绝,因此请断言 configuration.model 等于你请求的 speech_model。可选的 AssemblyAI-Version 标头可固定 API 版本(默认为最新版本,并通过 api_version 回显) |
| 通过 SDK 进行流式更新 | Python:transcriber.set_params(RealTimeSessionParameters(min_turn_silence=1000, keyterms_prompt=[...]))。没有 update_configuration() 方法,且 RealTimeSessionParameters 没有 mode 字段。Node:transcriber.updateConfiguration({ min_turn_silence: 1000 }) 使用 snake_case 键,且其类型没有 mode,但该对象会原样转发,因此 { mode: "balanced" } as any 在运行时可用。文档中展示的 client.update_configuration(mode=...) 或 updateConfiguration({ minTurnSilence }) 示例与 SDK 不符。要从 Python 在流式传输过程中切换 mode,需要使用原始 UpdateConfiguration JSON |
新增的 Turn 字段 | utterance(end_of_turn 消息中的最终文本,部分结果中为 "");启用 speaker_labels 时,还会包含实验性的轮次及每个最终词语的 speaker_confidence(未经校准,因此仅用于相对比较;不可用时会省略;SpeakerRevision 中不会出现)。两个 SDK 都未为这些字段定义类型:Python 的 TurnEvent 会丢弃它们,Node 则会以无类型形式传递它们。如需使用这些字段,请读取原始 JSON |
| 没有 Error 帧的关闭代码 | 1000/1006 会关闭套接字,但不会发送 Error 消息,因此不会触发 on_error——请在 on_close 中处理清理。1009 表示单条 WebSocket 消息超过服务器 128 KB 的读取限制 |
| 数据驻留 | 默认的 streaming.assemblyai.com 会将请求路由到最近的美国或欧盟区域。若需确保数据驻留,请明确连接到 streaming.us.assemblyai.com 或 streaming.eu.assemblyai.com(欧盟区域现已覆盖六个 AWS 欧盟区域,不再仅限斯德哥尔摩) |
Voice Agent API
| 易错点 | 详情 |
|---|---|
| API URL | Voice Agent 端点为 wss://agents.assemblyai.com/v1/ws,而不是 /v1/voice(2026 年 4 月更名)、/v1/realtime(旧版)或 speech-to-speech.us.assemblyai.com(非常旧) |
tool.call 字段 | 参数字典名为 arguments,而不是 args(2026 年 4 月更名) |
| 底层 STT | Voice Agent API 默认使用 Universal-3.6 Pro 进行转录。文档中的会话配置没有 STT 模型字段;可使用下方的 session.input 字段调整识别 |
| 电话集成 | Twilio 是 Voice Agent API 的电话集成:将 Twilio SIP 中继指向 sip:sip.assemblyai.com,或运行一台服务器,通过 audio/pcmu 双向桥接 Twilio Media Streams 与 Voice Agent WebSocket。Telnyx 不是 Voice Agent API 的集成。 对于 Telnyx 号码,请在 LiveKit 中使用 AssemblyAI 流式 STT(将 Telnyx SIP 中继接入 LiveKit 房间),或使用 Pipecat(TelnyxFrameSerializer,8 kHz)。参见 references/voice-agents.md → 电话集成 |
已存储的 Agent(agent_id) | 第一个 session.update 可以通过 {"agent_id":"<id>"} 绑定可复用的已存储 Agent,也可以发送内联配置(system_prompt/greeting/tools/input/output)。截至 2026 年 7 月,两者不再严格互斥:已存储 Agent 的会话接受针对可变字段(system_prompt、tools、input)的 session.update 覆盖;旧的 agent_id_no_overrides 错误已移除。以下字段仍只能在初始化时设置:greeting、output.voice/format、llm 和 HTTP 工具密钥。使用 POST https://agents.assemblyai.com/v1/agents 创建已存储的 Agent |
| 轮次检测字段 | 在 session.input.turn_detection 下使用 min_silence(默认值为 1000ms)和 max_silence(默认值为 3000ms);min_turn_silence/max_turn_silence 是流式 STT/LiveKit/Pipecat 使用的字段名,不适用于 Voice Agent API。两者都必须在 [50, 10000] ms 范围内,且 min_silence < max_silence。显式设置其中任一项后,本次会话剩余时间内的自适应端点检测都会被禁用。自 2026 年 8 月起,这些已存储的 Agent 设置也会应用于电话呼叫(此前在电话呼叫中会被忽略) |
| 会话级 STT 调优 | session.input(类型为 audio)现在还接受 transcription_mode(balanced/min_latency/max_accuracy)、continuous_partials(布尔值)、transcription_prompt(≤1750 个字符——STT 词汇上下文,与 system_prompt 不同)、language_codes、voice_focus/voice_focus_threshold(噪声抑制)以及 turn_detection.interruption_delay(均于 2026 年 7 月添加;可在通话期间通过 session.update 更新) |
| 不可变字段 | session.ready 之后,以下字段不可变:greeting、output.voice、output.format——更改这些字段会返回 immutable_field。以下字段可变:system_prompt、input.turn_detection、input.keyterms(最多 100 个字符串)、input.transcription_mode/continuous_partials/transcription_prompt/language_codes、output.volume(0–100)、tools、input.format |
| 问候语 | greeting 会直接发送给 TTS 引擎,不会经过 LLM。你设置的字符串是什么,用户就会逐字听到什么。不要写“热情地问候用户”这类元问候语——TTS 会照字面念出来 |
| 转录增量事件 | transcript.user.delta 携带当前用户轮次中累积更新的部分转录结果——显示最新一条,不要拼接。transcript.agent.delta(2026 年 7 月添加)会流式传输 Agent 自己说的话,便于实时显示字幕 |
| 保持模式下的转录 | 当 execution_mode: "hold" 工具正在执行时,不会实时发出 transcript.user.delta/transcript.user;保持结束时(收到 tool.result 或 reply.create)才会发送 |
| 工具结果 | tool.result 接受 is_error 布尔值(默认值为 false),以便 Agent 知道调用失败;工具可以定义 response_instructions({success, error} 字符串),用于引导 Agent 如何用语音表达不同结果 |
| 内置工具 | GET https://agents.assemblyai.com/v1/builtin-tools 会列出平台工具(目前为 aai_credit_card_luhn_check);在 tools[] 中传入工具的 name 即可添加。aai_ 名称前缀已保留,自定义工具不能使用 |
| 音频传输速率 | 音频传输速率不要快于实时速度——超出的帧会在服务端丢弃 |
| 会话结束与计费 | 仅关闭 WebSocket 会使会话保留 30s(可通过 session.resume 恢复),且该宽限时段会计费。通话结束时发送 session.end({"type":"session.end"}),即可立即关闭会话并停止计费——服务器会在关闭套接字前回复最终的 session.ended(包含 session_duration_seconds、audio_duration_seconds) |
HTTP 工具的 headers | 服务端 HTTP 工具将 headers 作为 {name, value} 条目的列表接收(自 2026 年 6 月起),而不是 {name: value} 字典。读取时只会返回 {name, last_set_at}——值为只写,且永远不会返回(不会以 "***" 掩码显示)。工具 URL 必须使用 https;timeout_seconds 的范围为 1–300(默认值为 120) |
自带 LLM(llm) | 在已存储的 Agent 上设置 llm(通过 REST 创建/更新,而非 session.update),即可使用你自己的 OpenAI 兼容端点运行:[{base_url, model, api_key}]——只能有一个条目,且必须支持流式传输;api_key 为只写字段。"llm": [] 会恢复使用托管模型。将 base_url 指向 LLM Gateway,即可在你的 AssemblyAI 账户上使用前沿模型 |
| 会话历史与 Webhook | Sessions API(GET /v1/sessions,可按 ID 获取/删除——包含录音和对话时间线;可按 status/agent_id 筛选,使用游标分页,limit 为 1–200)是文档中规定的检索过往会话的方式。也可以订阅 Webhook:POST https://agents.assemblyai.com/v1/webhook-subscriptions(事件:session.started/session.completed/call.connected/call.ended/call.failed;可通过 agent_id 限定范围,也可省略以覆盖整个账户)。参见 references/api-reference.md |
LiveKit / Pipecat(语音 Agent 框架中的流式 STT)
| 易踩问题 | 详情 |
|---|---|
| LiveKit 模型和版本 | assemblyai.STT(model="universal-3-6-pro", ...):参数是 model,而不是 speech_model。需要 livekit-agents/livekit-plugins-assemblyai 1.8.0+;Python 插件从 1.8.4 起默认使用 universal-3-6-pro。LiveKit Inference(stt="assemblyai/universal-3-6-pro")需要 1.8.3+ |
| LiveKit 回合静音 | 除非设置 mode,否则插件会发送 min_turn_silence=100;如果未设置 max_turn_silence,则会将其设为与 min_turn_silence 相同(即 100ms/100ms)。在 STT 回合检测模式下,传入 mode="balanced" 或显式设置两个静音时长。使用 turn_handling=TurnHandlingOptions(turn_detection="stt", endpointing={"min_delay": 0}),并将 Silero 的 activation_threshold 与 AssemblyAI 的 vad_threshold(0.3)设为一致 |
| Pipecat 模型和版本 | AssemblyAISTTService(settings=AssemblyAISTTService.Settings(model="universal-3-6-pro", ...))。需要 pipecat-ai 1.9.0+,且该服务仍默认使用 universal-3-5-pro。connection_params=AssemblyAIConnectionParams(...) 已弃用,且无法携带 mode、voice_focus、language_codes 或 agent_context |
| Pipecat 回合控制 | vad_force_turn_endpoint=True(默认值)允许 Pipecat 的 VAD 结束回合,并强制将 max_turn_silence 设为与 min_turn_silence 相同。设为 False 则将回合检测交给 AssemblyAI;此时请设置 mode 或静音时长。U3 Pro 模型可以同时使用 prompt 和 keyterms_prompt |
完整的设置代码请参阅 references/voice-agents.md。
LLM 网关
| 易踩问题 | 详情 |
|---|---|
| 结构化输出 | OpenAI(GPT-4.1/5.x)、Gemini、Claude 4.5+ 和 Qwen 均支持。不支持:Claude 3.x、gpt-oss 模型,以及发布时的 claude-sonnet-5(2026 年 7 月)——请改用工具调用或提示词。可选的 post_processing_steps: [{"type": "json-repair"}] 可修复格式略有偏差的 JSON |
tool_calls 的位置 | tool_calls 位于 choices[i].message.tool_calls(message 下),而不是 choices[i].tool_calls(choice 下)。仅存在 tool_calls 时,content 为 null |
finish_reason 由提供商决定 | 不要基于 finish_reason == "tool_calls" 来分支处理工具调用循环——网关会原样传递提供商的值,因此 Claude 返回 tool_use/end_turn(OpenAI 返回 tool_calls/stop)。请根据**是否存在 message.tool_calls**来检测工具调用,而不是查看 finish_reason |
model_region: "global" | 可选请求字段(唯一接受的值为 "global"),用于将请求路由到提供商的全球非区域端点,按提供商的标价计费——目前已支持 Claude、Gemini 和 OpenAI 模型。省略此字段则使用默认的区域内处理;美国/欧盟数据驻留层级的费用比全球层级高约 10%(自 2026 年 7 月 1 日起由提供商直接收取,AssemblyAI 不加价) |
| 欧盟区域 | 仅提供 Anthropic Claude 和 Google Gemini 模型——欧盟区域不支持 OpenAI 模型 |
常见错误
| 错误用法 | 修正方式 |
|---|---|
Authorization: Bearer KEY | Authorization: KEY(不带 Bearer 前缀)——但 Voice Agent API(agents.assemblyai.com)使用 Authorization: Bearer KEY |
| 使用 LeMUR API | **已弃用。**改用 LLM Gateway |
使用顶层 summarization 或 auto_chapters | **已弃用。**改用 Speech Understanding summarization/action_items(speech_understanding.request.<feature>)或 LLM Gateway |
在 LLM Gateway 中使用 LeMUR transcript_ids | 在消息中传递转录文本,而不是 ID |
anthropic/claude-... 模型 ID | 不带提供商前缀:使用 claude-sonnet-4-5-20250929,而不是 anthropic/claude-sonnet-4-5-20250929 |
在 LLM Gateway 上使用 claude-opus-4-20250514 / claude-sonnet-4-20250514 | **已于 2026 年 6 月移除。**改用 Claude Opus 4.5/4.6/4.7、Claude Sonnet 4.5/4.6,或 Claude Sonnet 5(claude-sonnet-5,于 2026 年 7 月添加) |
在 LLM Gateway 上使用 kimi-k2.5 | 已于 2026 年 8 月移除——Moonshot AI Kimi 模型不再通过 Gateway 提供 |
在 LLM Gateway 上使用 gemini-3-flash-preview / gemini-3.1-flash-lite-preview | **已于 2026 年 7 月移除。**改用 gemini-3.5-flash、gemini-3.6-flash 或 gemini-3.5-flash-lite |
使用 -d/--data 或 JSON 请求体上传到 /v2/upload | 使用 --data-binary @file(原始字节)。使用 -d/JSON 会返回有效的 upload_url,但之后转录会失败,并显示 Transcoding failed. File type application/json |
| 使用 Java/Go/C# SDK | **已停止支持。**改用 Python、JS/TS、Ruby 或原始 API |
在任何位置使用 word_boost | 改用 keyterms_prompt——适用于异步 REST API,也适用于 Sync STT API;后者于 2026 年 7 月将配置参数 word_boost 更名为 keyterms_prompt(Sync 和 Dictation 仍接受旧别名 word_boost/keyterms,但只能发送三者之一,否则 Dictation 会返回 400) |
| 使用 Sync STT 或异步 API 清理口述内容 | Dictation API(dictation.assemblyai.com/v1/transcribe/live)一次调用即可返回逐字转录文本和经过 LLM 清理的改写文本——对于 ≤120 秒的语音,不要先用 Sync STT 转录,再额外调用 LLM Gateway 去除填充词或重新排版 |
Dictation 的 audio 部分位于 config 之前,或没有 config 部分 | config(JSON,默认值为 {})必须是 multipart 的第一个部分;没有它,服务器无法启动 → 400 bad_request |
| 向 Dictation 发送 MP3/M4A/FLAC/OGG/WebM | 返回 415——Dictation 采用增量解码,只接受 audio/wav 或 audio/pcm(16 位)。请先解码 |
将 Dictation 的 llm_error 视为请求失败 | 改写仅尽力提供——即使返回 200,且 llm_response: null、llm_error: "timeout"/"error",仍会携带逐字文本 text。回退使用 text(SDK:final_text) |
Dictation 的 language_codes: "es"(字符串)或 language_code | 它始终是一个列表:language_codes: ["es"] |
在 Dictation config 中传入 model、timestamps、conversation_context、speaker_labels 或 redact_pii | 未知字段 → 400。Dictation 的配置字段仅限 sample_rate、channels、language_codes、stt_prompt、keyterms_prompt、llm_instruction |
在旧版 SDK 中使用 aai.DictationTranscriber / client.dictation | 仅 Python ≥1.5.2 / Node ≥4.40.0(2026 年 9 月 11 日)支持——请安装当前版本 1.6.1 / 4.41.5。确认已安装的版本;否则请使用原始 HTTP |
| 将 v2 流式传输 URL 硬编码 | 当前版本为 v3(/v3/ws);v2 仍可用,但已是旧版 |
流式传输时使用 speech_model=u3-rt-pro | 已于 2026 年 7 月从模型选择器和流式传输规范枚举中移除——改用 universal-3-6-pro(自 2026 年 9 月 29 日起的流式传输默认模型)。从2026 年 9 月 2 日起,u3-rt-pro 连接会被静默重定向到 universal-3-5-pro。仅在需要权衡成本时设置其他模型(universal-streaming-english/-multilingual) |
新的流式传输代码使用 universal-3-5-pro | 改用 universal-3-6-pro:参数相同,支持 32 种语言,而非 19 种。3.5 Pro 仍受全面支持,因此只有在项目明确固定使用该版本时才保留 |
在预录音或 Sync STT 中使用 universal-3-6-pro | 3.6 Pro 仅对流式传输正式发布(异步支持仍为预览版)。在异步 speech_models 和 Sync X-AAI-Model 标头中使用 universal-3-5-pro。Dictation 不需要任何模型 |
speech_model="universal-3-6" | 这不是有文档记录的模型,尽管两个 SDK 枚举中都列有它。请使用 universal-3-6-pro |
Python SDK 拒绝 universal-3-6-pro / universal-3-5-pro | SDK 会根据枚举在本地验证流式传输 speech_model:早于 1.1.0 的版本未包含 universal-3-6-pro(1.0.0 会引发 ValidationError),早于 0.64.21 的版本未包含 universal-3-5-pro。请安装当前版本——pip install "assemblyai>=1.6.1"(或 pip install -U assemblyai)。Node 不会在运行时检查,但在 4.37.1 之前,TypeScript 会拒绝 "universal-3-6-pro" |
在 Python SDK 中使用 aai.SpeechModel.universal_3_5_pro | 顶层(异步)aai.SpeechModel 没有此成员——请在 speech_models 中使用原始字符串:"universal-3-5-pro"、"universal-2"。流式传输枚举是另一个类(assemblyai.streaming.v3.SpeechModel,其中包含 universal_3_6_pro);在那里也可以使用原始字符串 "universal-3-6-pro" |
在 SDK 中使用 aai.Lemur(...) / client.lemur | 已移除——Python 1.0.0 和 Node 4.37.0 已彻底删除 LeMUR 功能(相关端点会返回 404)。完成转录后,将 transcript.text 发送到 LLM Gateway |
pip install "assemblyai[extras]" | 已在 Python 1.0.0 中移除——[extras] 选项会直接失败。请使用 pip install -U assemblyai |
from assemblyai.extras import MicrophoneStream | **已在 Python 1.0.0 中移除。**SDK 不会采集麦克风音频;请使用 pyaudio/sounddevice,并将 16 位 PCM 数据块传递给 RealTimeTranscriber.stream(...) |
在 Python 中使用 StreamingClient / StreamingClientOptions / StreamingParameters | 这些名称已在 1.0.0 中分别更名为 RealTimeTranscriber / RealTimeTranscriberOptions / RealTimeParameters。旧名称仍指向相同对象,因此这只是风格上的调整,并非不兼容;但新代码请使用 RealTime* 名称 |
S2S session.update 不包含 "session" 键 | 必须将配置封装在其中:{"type":"session.update","session":{...}} |
S2S 工具架构使用 {"function":{...}} 嵌套结构 | S2S 工具采用扁平结构:{"type":"function","name":"...","description":"...","parameters":{...}} |
| Voice Agent S2S URL | 正确的 URL:wss://agents.assemblyai.com/v1/ws——不是 /v1/voice(于 2026 年 4 月更名)、/v1/realtime(更早的版本),或 speech-to-speech.us.assemblyai.com(更早以前的版本) |
Voice Agent tool.call 的 args 字段 | 已更名为 arguments——event["arguments"] 是参数字典 |
| 将 Telnyx 与 Voice Agent API 搭配使用 | 不支持。Twilio(SIP 中继或 Media Streams)是 Voice Agent API 的电话集成方案;Telnyx 可通过 LiveKit 或 Pipecat 与流式 STT 搭配使用 |
Pipecat TelnyxTransport(...) | pipecat-ai 中不存在此类。请使用 FastAPIWebsocketTransport,并设置 serializer=TelnyxFrameSerializer(...) 和 8 kHz 的输入/输出采样率 |
Pipecat connection_params=AssemblyAIConnectionParams(speech_model=...) | **已弃用。**请使用 settings=AssemblyAISTTService.Settings(model="universal-3-6-pro", ...) |
Medical Mode domain: "medical" | 正确值为 domain: "medical-v1" |
LLM Gateway 工具结果的 role: "function_call_output" | 正确的角色是 "tool"——请使用 {"role": "tool", "tool_call_id": "...", "content": "..."} |
LLM Gateway 响应的 choices[i].tool_calls | 工具调用位于 message 下:choices[i].message.tool_calls,而不在 choice 层级 |
在 tool.call 时立即发送 tool.result | 请等到收到的最新事件为 reply.done 后再发送——在此之前发送(过渡语句期间)或之后发送(新回合开始后)都会破坏轮流对话 |
使用 Speech Understanding 时不带 request 包装层 | 功能嵌套在 speech_understanding.request.<feature> 下——speech_understanding.translation(没有 .request)无效。结果会返回在 speech_understanding.response.<feature> 下 |
| 将 Custom Formatting 参数设为布尔值 | date/phone_number/email 是格式模式字符串(例如 "mm/dd/yyyy"),而不是 true/false。只有 format_utterances 是布尔值 |
参考文件
根据用户的需求阅读相应的参考文件:
| 文件 | 阅读时机 |
|---|---|
references/python-sdk.md | Python SDK 模式和示例 |
references/js-sdk.md | JavaScript/TypeScript SDK 模式 |
references/streaming.md | 实时/流式 STT:Universal-3.6 Pro(32 种语言、mode 预设、轮次检测)、v3 协议和消息、UpdateConfiguration、说话人分离和 SpeakerRevision、上下文延续、语音聚焦、临时令牌、错误代码 |
references/dictation.md | Dictation API:一次调用即可完成转录 + LLM 改写、llm_instruction、stt_prompt/keyterms_prompt、录音时分块上传、预热、错误格式、Python/Node SDK 接口 |
references/voice-agents.md | Voice Agent API、LiveKit、Pipecat、Twilio/Telnyx 电话服务、轮次检测、延迟优化 |
references/llm-gateway.md | 将 LLM 应用于转录文本、工具调用、可用模型 |
references/speech-understanding.md | 翻译、说话人识别、自定义格式、摘要、行动项(现在文档将大多数转录分析功能归于此处) |
references/audio-intelligence.md | PII 编辑、说话人分离、情感分析、实体检测、主题——文档已将这些功能移至 Speech Understanding & Guardrails,但顶层请求参数保持不变 |
references/api-reference.md | 完整参数列表、导出端点、webhook、上传、PII 策略、Sync STT API、Dictation API、Voice Agents REST API(已存储的 Agent、会话、内置工具、HTTP 工具请求头、自带 LLM、webhook 订阅) |