每日AI简报

AssemblyAI + Modal:把几千小时录音变成能对账的文本库

6 个部分约 13 分钟本文 5190 字
PART 01

今天这两个工具能接成一条线。AssemblyAI 把音频变成带说话人和时间戳的结构化文本,Modal 给这批文本一个按秒计费的批处理场地。

选它们是因为两边账单都算得出来:一个按音频时长,一个按计算秒数。本期两个主角均未在你的账号部署,未做性能与并发实测。

PART 02

主角一 · AssemblyAI:按时长计价的转写,账单卡在并发和轮询上

段 1 · 是什么

它替你把「一批录音变成可检索文本」做成 API 调用。返回的不是纯文本,是带说话人、词级时间戳、置信度的结构化 JSON。

省掉的动作很具体:不用自己部署 ASR、不用转码、不用切分说话人。异步走 POST 提交加 webhook 回收,实时走 WebSocket。

段 2 · 多少钱

美元标价,官方定价页口径,核验日期 2026-10-09。按量付费,无订阅、无最低消费,页面写的是「Start free, pay-as-you-go after that」。

| 异步转写模型 | 单价 ||---|---|| Universal-3.5 Pro(18 种语言,原生 code switching) | $0.21 每小时 || Universal-2(99 种语言) | $0.15 每小时 |

换算成任务量级:1 小时音频 $0.15(Universal-2),1,000 小时 $150,换 Pro 是 $210。

要注意的坑逐条写:

  1. 免费档的小时数官方定价页没写。页面只写「Start free」,文档口径是免费账户并发 5 路。旧博客那句「终生 100 小时」带的是过期价格,按未核实处理。
  2. 计价基数是音频时长,不是处理时间。一小时音频它 45 秒就能跑完,账单仍按一小时算,跑得快不省钱。
  3. 实时档按会话时长计费。WebSocket 开着就计数,没主动发 Terminate 的会话 3 小时后自动关闭,整段照收。它的每小时单价未在定价页正文读到,按待确认处理。
  4. 加购项价格没核到。音频智能、LLM Gateway 在定价页是分页签,正文读不到数字。
  5. 余额跌破零,并发会被降到 1。不是停用,是掉到一次只能跑一个作业。

段 3 · 适合谁

只转一两段十分钟的语音,用本地 Whisper 更省事。

段 4 · 局限

  1. 并发是账户级硬顶,且不按 key 隔离。免费 5 路、付费 200 以上,同一账户下每个 key 都照搬总量。超了不报错,是排进先进先出队列,另发一封限流邮件,这类邮件每天只发一封。
  2. HTTP 额度是所有端点合算的。5 分钟内 20,000 请求,提交的 POST 和查询的 GET 一起算,超了返回 403。密轮询会先把额度烧在没用的查询上。
  3. 文件有硬上限。单请求 5GB、时长 10 小时,本地上传通道只有 2.2GB,更长的音频要自己先切。
  4. 说话人分离不回答「这是谁」。它只给说话人编号,要具体人名得自己做声纹映射或人工标注。
  5. 专有名词会稳定写错。人名地名错一次就错一整篇。官方能力里有 keyterms prompting 和 custom spelling,这两个就是给人名地名预热的,不用等于让它猜。
  6. 依赖两条。要有 API key;实时档还要自己管 WebSocket 的连接与终止,漏了终止按满 3 小时计费。

段 5 · 上手路径

  1. 提交时参数一次给齐:audio_url 用自己对象存储的直链,绕开本地上传 2.2GB 的上限;开 speaker_labels,开语言检测,长音频把语言固定死,别让它逐段猜。
  2. 用 webhook 回收,不要轮询。轮询的 GET 和提交的 POST 共用那 20,000 请求的额度,批量任务下先撞墙的一定是轮询。批次并发压到账户上限以下,留一路给补跑。
  3. 先算账再开批。Universal-2 是每音频小时 $0.15,Pro 是 $0.21。先跑 10 小时核对账单,再决定要不要整套上 Pro。
  4. 落盘按句存,不要只存全文。返回结果里带说话人和起止时间,拆成「文件、说话人、起止、文本」四列,后面检索统计都不用重跑。

段 6 · 来源

02 / 配图
PART 03

主角二 · Modal:按秒计费的 serverless 算力,账单藏在空闲窗口里

段 1 · 是什么

它替你把「临时要一批 CPU 或一张 GPU 跑批」变成一条命令。代码推到它的容器里执行,跑完容器缩到零。

省掉的是租机器、配环境、跑完记得关这三步。官方原话是不为闲置资源付费。

段 2 · 多少钱

美元标价,核验日期 2026-10-09。计价单位是秒,网页能直接切到每秒价目。

| 项目 | 每秒单价(官方) | 折合每小时(按官方单价换算) ||---|---|---|| CPU 物理核(约 2 vCPU) | $0.0000131 | 约 $0.0472 || 内存 | $0.00000222 每 GiB | 约 $0.008 || H100 SXM5 | $0.001097 | 约 $3.95 || A100 80GB | $0.000694 | 约 $2.50 || RTX PRO 6000 | $0.000842 | 约 $3.03 || L4 | $0.000222 | 约 $0.80 || T4 | $0.000164 | 约 $0.59 |

Volume 存储 $0.09 每 GiB 每月,每月含 1 TiB 出网免费,超出 $0.04 每 GiB。档位三档:

| 档位 | 月费 | 关键上限 ||---|---|---|| Starter | $0 加计算费,每月赠 $30 额度 | 3 席位,100 容器,10 GPU 并发,日志留 1 天 || Team | $250 加计算费,每月赠 $100 额度 | 席位不限,5000 容器,50 GPU 并发,日志留 30 天 || Enterprise | 定制 | 更高并发,审计日志与 SSO |

要注意的坑逐条写:

  1. Sandbox 和 Notebooks 是另一套价,正好是标准价的 3 倍。同一张定价页下半栏写的是 CPU $0.00003942 每核每秒、内存 $0.00000667 每 GiB 每秒。跑长驻沙箱按这一组算。
  2. 换区域要加价。官方写区域选择按基准价的 1.15 到 1.75 倍。
  3. 非抢占执行是 3 倍价。要稳定不被回收就付这个系数。
  4. 空闲不等于免费。缩容窗口里容器还在,GPU 预留和残余内存照常计费,官方文档原话是空闲期间占用的资源仍会收。
  5. 赠额不是上限。$30 是每月赠额,超了照扣,不存在用超就停。

段 3 · 适合谁

不需要 GPU、也不想脱离本机环境,直接用本地脚本就够。

段 4 · 局限

  1. 冷启动是两段,不只启动时间。一段是输入在队列里等热容器,一段是新容器的首次初始化。官方文档自己说,容器变热的时间可以从几秒到几分钟,取决于你全局作用域和初始化方法里干了什么。
  2. 压冷启动的每个开关都在加钱。scaledown_window 默认空闲 60 秒才缩容,可设 2 秒到 20 分钟,窗口越长空闲计费越多;min_containers 是常驻保底,函数闲着也在烧钱。
  3. Starter 的运维能力被砍过。日志只留 1 天,不带部署回滚,不带自定义域名。要做线上排查得升 Team,那是每月 $250 的固定支出。
  4. 容器不是长期宿主。函数之间不共享本地状态,跨调用留数据要挂 Volume,而 Volume 从第一 GiB 就按月计时。
  5. 依赖本机工具链。官方流程是本地装客户端、登录后把代码推上去,它不是给个 URL 就能调的纯接口服务。

段 5 · 上手路径

  1. 先把成本算到秒:(物理核数 × 0.0000131 + GiB × 0.00000222) × 运行秒数。4 核加 8 GiB 跑 100 小时约 $25.3,这是按官方单价的算术换算,不是实测账单。要 GPU 就替换成上表对应那一行。
  2. 冷启动按两段分别排查。整批都慢、大量输入停在 pending,是热容器不够,先加 min_containers 或 buffer_containers;只有每个新容器的第一个调用慢,就把载权重、建连接挪到全局作用域或初始化方法里,权重预下载进镜像或 Volume。
  3. 批任务先用小并发试跑再放开。Starter 的天花板是 100 容器加 10 路 GPU 并发,一次拉起太多容器会撞上限,沙箱那套 3 倍价目也会让账单超出预期。

段 6 · 来源

03 / 配图
PART 04

实战流程:一条从录音到可对账文本库的最小链路

  1. 素材归集。录音切成单文件 10 小时、5GB 以内,走本地上传通道就控制在 2.2GB 以内,存进自己的对象存储拿直链。输出:一批 audio_url。
  2. 提交转写。每个直链提交一个异步作业,参数带说话人分离与语言检测,长音频固定语言,人名地名先用 keyterms 预热。输出:一批作业 id。
  3. 过并发闸门。同时在跑的作业压到账户上限以下,免费 5 路、付费 200 路以上,超出的自然排队。完成事件走 webhook,避开 5 分钟 20,000 请求那道坎。
  4. 落库。结果按句拆开,写成「文件、说话人、起止时间、文本」四列。输出:一张可全文检索的段落表。
  5. 批量打标。用 Modal 把这批段落并行跑一遍开源模型做摘要或分类,结果写回 Volume 或数据库。输出:带标签的段落表。
  6. 对账。转写侧按音频小时乘单价,算力侧按秒公式算,两边记进同一张成本表。全链路只有这两处支出。
04 / 配图
PART 05

可复制提示词

你是转写稿的校对与结构化处理器。输入是转写接口返回的 utterances 数组,每条带 speaker、start、end、text。 规则: 1. 只做整理,不改写内容,不许补原文没有的信息。 2. 输出 JSON 数组,字段固定为 speaker、start_ms、end_ms、text、topic、actionable、confidence。 3. topic 只能从给定主题列表里选,选不出填 other,不要自造新主题。 4. actionable 只在原句出现明确待办、承诺或截止时间时填 true,并附 evidence 原文片段。 5. 专有名词与给定 keyterms 列表不一致时,标进 needs_review,不要自行替换。 6. confidence 低于 0.7 的条目单独成组,不要混进主输出。 7. 不要寒暄,不要总结,不要解释你的做法。

验证标准:随机抽 3 条,对着原始音频时间点听一遍,确认说话人没串线;检查 actionable 为 true 的条目都能在原句里找到依据;确认 keyterms 里的人名地名没被改写成别的写法;核对输出条数等于输入的 utterances 条数,做了拆分或合并要说明原因。

PART 06

边界声明

本期两个主角均未在你的账号部署,未做性能、并发与账单实测。价格取自官方公开页,核验日期 2026-10-09,美元口径,不含税费。AssemblyAI 的实时档单价与加购项价格未在定价页正文读到,按待确认处理;免费档小时数未核到,只有并发 5 路这一条文档口径。Modal 表里的每小时折算价与算例是我按官方每秒单价换算的算术值,不是实测账单,区域与非抢占系数尚未代入验算。