把一段真实记忆做成一首歌,聊聊限流和超时这两个坑

14 小时 31 分钟前
 wytdh

我做了个站,叫 Dovetune:dovetune.com,把用户写下的一段真实记忆变成原创歌曲。歌词可以编辑,生成后能免费试听完整一首,决定要不要付费带走。 为什么做 我想试试,送给家人的歌能不能从一件小事开始,而不是满篇“感谢你一直陪伴”。比如“妈妈六年里每个周六送我去训练,自己带着书在车里等”,我觉得这一个画面就比很多祝福具体。做这个站,就是想看看这样的记忆放进歌里,听起来会是什么感觉。 踩的两个坑 第一个坑,是把账号限流当成了模型故障。 Claude 返回 429,我第一反应是这个模型暂时不能用了,马上切 Gemini,结果还是 429。我以为换了模型就换了一条路,其实两个请求走的还是同一个转售账号。 后来翻文档,才看到两句关键说明:限制按账号计算,被拒绝的请求不会进入队列。也就是说,这个账号下的模型共用限流池;账号还在被限的时候,切模型没有用,立即重试也不会让请求排队等着执行。 这让我重新看了一遍“失败就换模型”的降级逻辑。它看起来有备用方案,实际上没有区分失败原因。对这个供应商来说,账号限流时如果要继续处理,就得换供应商;上游返回 500,才考虑在原供应商里切模型。接转售接口之前,除了价格和模型列表,真的应该先看限制到底算在模型、密钥,还是账号上。 第二个坑,是异步流程里藏了一步同步等待。 整首歌生成大约要 180 秒,我知道这一步慢,所以按异步任务处理,用轮询或回调等结果。反而是前面的歌词生成,我用了同步调用,超时只给了 15 秒。 一开始觉得歌词只是中间步骤,注意力都放在了更慢的歌曲生成上。后来梳理失败位置才发现,歌词一旦超过 15 秒,整条流程就已经失败了,后面的异步设计根本没有机会发挥作用。 这个问题不能只靠把超时数字调大来理解。用户经历的是完整流程,不会区分哪一步用了什么调用方式。检查耗时任务时,需要把每一步的等待方式、超时和失败后的去向都列出来。尤其歌词还在付费之前,免费用户也会反复触发,这一步值得单独检查,不能因为它“只是生成几段文字”就默认很快。 现在的样子 目前是我一个人做,技术栈是 TanStack Start(React SSR)和 Cloudflare Workers。流程是写故事、润色、生成可编辑歌词,再生成整首歌。完整试听免费,满意后付 $19.99,解锁完整歌曲和一个可分享的礼物页。主要面向美国市场,场景是送给家人,以及生日、婚礼这类礼物。 想请大家帮我看两个具体问题

  1. 试听环节:现在免费试听完整一首,之后解锁才能带走。你们觉得这个免费额度给多了还是给少了?
  2. 定价:$19.99 一次性解锁,包含完整歌曲和礼物分享页。对美国送礼场景来说,这个价格直觉上偏高还是偏低?
439 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1246549

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX