惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
C
Check Point Blog
博客园_首页
B
Blog
D
Docker
U
Unit 42
量子位
I
InfoQ
有赞技术团队
有赞技术团队
Martin Fowler
Martin Fowler
GbyAI
GbyAI
L
LangChain Blog
云风的 BLOG
云风的 BLOG
博客园 - Franky
美团技术团队
T
The Blog of Author Tim Ferriss
阮一峰的网络日志
阮一峰的网络日志
月光博客
月光博客
Vercel News
Vercel News
Recent Announcements
Recent Announcements
雷峰网
雷峰网
大猫的无限游戏
大猫的无限游戏
小众软件
小众软件
Google DeepMind News
Google DeepMind News

博客园 - 阿新

用 GPT-5.2 Vibe Coding,做了一个可以“玩”的人脸相似度应用 用AI开发AI翻译助手:初学者也能轻松做出第一个应用 数字产品护照 (DPP) 解决方案:利用 Blazor 和区块链实现产品全生命周期追踪 使用Blazor WebAssembly整合PocketBase的基础项目模板 Blazor Server完美实现Cookie Authorization and Authentication Blazor技术开发了一个访客管理系统 分享刚出炉的基于Blazor技术的Web应用开发框架 基于PaddleOCR实现AI发票识别的Asp.net Core应用 Clean Architecture For RazorPage 实现多语言和本地化 Workflow Core + asp.net core 5.0 实现简单审批工作流 GitHub自动化部署(CD) asp.net core 5.0 项目(免费空间) CleanArchitecture Application代码生成插件-让程序员告别CURD Ctrl+C Ctrl+V 一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目 分享我的CleanArchitecture for Razor Page项目模板 asp.net core 实现 face recognition 使用 tensorflowjs(源代码) fastreport-使用JSON做为数据源报表 分享我的第一个RPA练习 完美解决asp.net core 3.1 两个AuthenticationScheme(cookie,jwt)共存在一个项目中 基于领域驱动设计(DDD)超轻量级快速开发架构(二)动态linq查询的实现方式
用 AI Vibe Coding - word-cards 自部署 TTS + Vercel 部署实践
阿新 · 2025-12-24 · via 博客园 - 阿新

用 AI “Vibe Coding” 把 word-cards 做到可上线:自部署 TTS + Vercel 部署实践

这篇文章以我在 word-cards 项目中的真实开发节奏为主线:先把“体验”做出来,再把“工程化”补齐。重点讲三件事:

  1. AI vibe coding 的工作流怎么落地;2) 为什么要把 TTS 自己部署;3) 前端如何用 Vercel 稳定上线。

image

Demo: https://word-cards.blazorserver.com/

GitHub: https://github.com/neozhu/word-cards


0. 项目一句话介绍:word-cards 是什么?

word-cards 本质是一个“单词卡片”应用:给儿童/学习者展示单词、短句(phrase),并配合发音(TTS)提升记忆效率。

项目数据有非常直观的结构(例如 content.json):

  • Key:卡片 id(如 doglion_face
  • Value:word + phrase

这种结构非常适合:

  • 快速迭代内容(只改 JSON 就能新增卡片)
  • 用 AI 辅助批量生成/润色 phrase
  • 与 TTS 天然对接:wordphrase 都可以直接读出来

1. 我怎么用 AI “Vibe Coding” 推进开发?

所谓 vibe coding,不是“全交给 AI”,而是把 AI 当成高频的结对搭档
用最短路径把“可运行的体验”堆出来,再迭代到可维护、可部署。

我常用的节奏是 4 步循环:

1.1 先问“我想要什么感觉?”

不要一上来写架构文档,先定义体验目标,比如:

  • 打开页面:立刻看到卡片
  • 点击:立刻切下一张
  • 点喇叭:立即播报(最好有缓存,不要每次生成)
  • 手机上也顺畅(延迟、带宽都要考虑)

1.2 让 AI 给出“最小可行路径”(MVP)

典型产物是:

  • 页面组件怎么组织
  • 数据怎么读(content.json
  • TTS 是走浏览器 Web Speech 还是后端生成音频

这一步的关键是:先能跑。哪怕方案不完美,但能验证“用户体验”是不是对的。

1.3 我负责约束:边界、成本、风险

AI 很容易“建议上全家桶”。我会明确约束:

  • Vercel Serverless 不适合重推理/长时任务
  • TTS 音频要缓存,否则成本和延迟爆炸
  • 接口必须加限流/鉴权(至少防刷)

1.4 最后再让 AI 帮我补工程化

当体验跑通后,再补:

  • 目录结构整理
  • 环境变量与部署文档
  • API 错误处理
  • 缓存策略(本地/对象存储/CDN)

2. 为什么我要“自部署 TTS”?(而不是全放在 Vercel)

2.1 纯浏览器 TTS(Web Speech)的问题

优点:零后端、最快上线。
缺点也很明显:

  • 不同浏览器/系统音色差异巨大
  • 有的环境不可用或权限麻烦
  • 不能稳定复现“同一句话”的音频(不利于缓存、分享、离线)

2.2 让 Vercel 来跑 TTS?通常不划算

即便你用 Serverless Function 调第三方 TTS,仍可能遇到:

  • 冷启动 + 生成耗时 → 体验抖动
  • 生成音频属于“重任务”,并发上来容易被限
  • 成本不可控(按量计费的 TTS + 频繁请求)

2.3 自部署 TTS:把“重活”从前端平台拆出去

我更倾向的落地方式:

  • Vercel:只负责前端与轻量 API(业务编排)
  • 自建 TTS 服务:负责生成音频(CPU/GPU 都可)
  • 缓存层:存储音频文件,尽量走 CDN

这样做的收益是:

  • 延迟更稳定(尤其是命中缓存时)
  • 费用结构清晰(算力/带宽自己掌控)
  • 可定制音色、采样率、语速、发音规则

3. 一个可落地的整体架构(适配 word-cards 这类应用)

3.1 核心路径:从卡片到声音

  1. 前端展示 content.jsonword/phrase
  2. 用户点击“播放”
  3. 前端请求:/api/tts?text=...(或直接请求你的 TTS 服务)
  4. 后端逻辑:
    • 计算文本 hash(例如 sha1(text + voice + speed)
    • 查缓存(对象存储/本地磁盘/Redis)
    • 未命中则调用 TTS 引擎生成音频
    • 存储并返回音频 URL(或直接返回音频流)

3.2 缓存策略建议(决定体验上限)

  • 强烈建议做“可重复命中”的缓存:同一句 phrase 每次生成应该得到同一份缓存文件
  • 文件命名使用 hash,避免中文路径和特殊字符问题
  • 返回时尽量给可缓存响应头(Cache-Control),让浏览器/CDN 吃满缓存

4. 自部署 TTS:我会怎么做(Docker + 独立服务)

这里不绑定某一种引擎,你可以选:

  • Piper:轻量、CPU 友好、部署简单
  • Coqui TTS:可玩性高,但资源占用更大
  • 系统/云厂商 TTS:省维护,但成本与依赖更强

一个实用的“工程形态”是:

  • 用 Docker 跑一个 HTTP 服务(/synthesize
  • 输入:text, voice, speed, format
  • 输出:音频文件或音频流(wav/mp3)

Windows 本地开发常用命令(示意):

# 1) 本地启动前端(示意)
npm run dev

# 2) 启动自部署 TTS(示意,按你的实现调整)
docker compose up -d

生产部署建议:

  • 把 TTS 放到 VPS(Linux)或家用小主机(注意上行带宽)
  • 用 Nginx/Caddy 做反代 + HTTPS
  • 给 TTS 接口做最小保护(token 或仅允许你的前端域名访问)

5. Vercel 部署:我踩过的“现实问题”

5.1 Vercel 擅长什么?

  • 静态资源/CDN 分发
  • Next.js 前端与轻量 API
  • 快速预览环境(PR Preview)

5.2 Vercel 不擅长什么?

  • 长时间运行任务(TTS/转码/大文件处理)
  • 高 CPU 推理(成本和限制都不友好)
  • 需要本地磁盘持久化的缓存(Serverless 天生不稳定)

所以我的原则是:
Vercel 用来“接住用户与页面”,TTS 用独立服务“把重活做完”。

5.3 环境变量与跨域

你通常需要这些变量(示意):

TTS_BASE_URL=https://tts.example.com
TTS_TOKEN=********

前端调用方式两种:

  • 前端直接请求 TTS(要处理 CORS、token 暴露风险)
  • 前端请求 Vercel API,再由 API 转发到 TTS(更安全、可加限流与缓存策略)

一般更建议第二种:把 token 留在服务端


6. “AI + 内容”在 word-cards 的增益点

content.json 这种结构非常适合 AI 参与:

  • 批量生成 phrase(控制难度、长度、词汇覆盖)
  • 统一风格(例如都用现在时、句子长度 6~10 个词)
  • 纠错与去重(避免 phrase 重复、语法问题)
  • 生成多语言版本(后续做中英双语卡片也很自然)

人工底线建议保留两条:

  • 可读性与年龄段适配(AI 容易写得太“成人化”)
  • TTS 可读性(缩写、数字、特殊符号要规范化)

7. 结语:vibe coding 的正确打开方式

  • vibe coding 最强的地方是把“从 0 到 1 的阻力”打穿
  • 真正上线、可维护、可扩展,还是要回到工程常识:分层、缓存、限流、部署边界

word-cards 这类项目尤其适合:
内容驱动 + 体验优先 + TTS 拆分部署 + Vercel 前端加速,快速做出“像产品”的效果。