指南

如何把 AI 原型做成可用于生产的应用

把 AI 原型推向生产,就是弥合“我试的时候它能用”和“很多人用的时候它依然能用”之间的差距。具体来说包括五件事:每次修改后都测试主要流程,严格控制谁能看到和修改什么,确保在用户告诉你之前就能及时发现错误,备份数据并证明自己能够恢复,以及让应用在手机上依然足够流畅。这些都不需要重写,它是一份检查清单,你可以和当初搭建原型的那个 AI 一起逐项完成。

原型与生产:究竟改变了什么

原型只有一个小心翼翼的用户:你自己。你知道该点哪些按钮,输入的内容也合理,出了问题你耸耸肩,然后让 AI 去修。生产环境则有许多粗心的用户、一些好奇的用户,偶尔还会有一个怀有恶意的用户。代码并不需要变得“企业级”,它只需要能应对原型从未遇到过的各种情况。

方面原型生产
数据样例数据,随时可以重置真实的客户数据,一条都不能丢
用户只有你,以管理员身份登录许多账户,权限各不相同
输入你自己输入的内容空字段、超大文件、奇怪的字符、脚本
错误你在预览中就能看到可能在你睡觉时发生
修改修改后看看效果修改时不能破坏用户依赖的功能
密钥测试密钥随便用泄露后会产生费用的正式密钥

本指南的其余部分会逐一讲解表中的每一项。

第一步:冻结范围,写下主要流程

在加固任何东西之前,先确定第一版要做什么。列出三到六个最重要的流程,例如“注册、创建项目、邀请团队成员、付款”。这些将成为你的测试脚本、监控对象,以及每次修改之后需要检查的内容。

清单之外的功能要么砍掉,要么明确标注为测试版。把四个流程做得稳定,远比做十四个容易得多。

第二步:像陌生人一样测试,然后让测试可重复

AI 搭建工具很擅长生成“顺利路径”上能跑通的代码。生产问题恰恰潜伏在“不顺利的路径”上。请针对每个主要流程,用以下方式测试:

  • 错误的输入:必填字段为空,输入 5000 个字符的名字,邮箱里没有 @,数量为负数,日期设在过去。
  • 刷新和后退按钮:在结账途中刷新页面;提交表单后按后退键。会不会重复创建数据?
  • 两个标签页,两个用户:用两个不同账户登录,尝试通过修改网址中的 ID 打开对方的页面。
  • 慢速和小屏幕:用手机尺寸的屏幕,并模拟较慢的网络(浏览器开发者工具可以模拟)。
  • 空状态:全新的账户,没有任何数据。原型通常基于样例数据构建,没有数据时就会显得坏掉。

然后让检查变得可重复。最低要求是保留一份书面清单,并在每次发布前运行。更好的做法是请 AI 为最重要的流程编写自动化测试:

为以下流程添加自动化端到端测试:用邮箱注册、创建项目、邀请第二个用户,并在 Stripe 测试模式下完成结账。另外添加测试,确认用户无法通过修改网址查看或编辑其他用户的项目。

证明用户“不能”做某件事的测试,恰恰是原型最常缺少的。

第三步:原型常常忽略的基础安全措施

AI 搭建的应用,大多数安全问题并不神秘,只是缺少检查。请逐项核对以下清单,更完整的内容参见AI 搭建应用安全检查清单:

  • 服务器端的授权。 隐藏按钮并不等于安全。每一个读取或修改数据的请求,都必须在服务器上检查登录用户是否有权限。如果你的应用使用带行级规则的数据库,请确认规则已开启并经过测试。
  • 密钥不要放在浏览器里。 支付、邮件或 AI 服务的 API 密钥,应存放在服务器端的环境变量中,绝不能出现在前端代码里。如果你不确定这意味着什么,请阅读什么是环境变量和密钥。
  • 服务器端校验。 浏览器端的检查可以被绕过,因此所有重要的校验都要在服务器上再做一遍。
  • 正确地处理登录。 使用经过充分测试的认证库或服务,而不是自己手写密码存储。我们关于为应用添加登录功能的指南介绍了各种选择。
  • 频率限制:用于登录、注册、重置密码,以及任何会发送邮件或调用付费 API 的功能。
  • 友好的错误提示。 用户只应看到“出错了”之类的提示,详细信息应记录在日志中,而不是显示在屏幕上。
  • 轮换已泄露的密钥。 如果正式密钥曾被粘贴到聊天、代码提交或截图中,请立即在服务商处更换。

一个可以一次覆盖大量内容的提示词:

检查这个应用是否具备生产级安全性。确认每个 API 路由都会验证登录用户是否拥有其读取或修改的记录,确认没有任何密钥被发送到浏览器,确认输入在服务器端经过校验,并确认登录和重置密码功能有频率限制。在修改任何内容之前,先列出你发现的问题。

先要求列出问题清单,你就能看清问题并决定处理顺序,而不是一下子收到一个巨大的改动。

第四步:及时发现问题:日志与监控

在预览中,你能看到错误发生的过程。在生产环境中,则需要应用主动告诉你。可以分为三层,从最便宜到最有用:

  1. 服务器日志。 确保错误被记录,并附带足够的上下文以便复现:哪个路由、哪个用户 ID(绝不记录密码或银行卡信息)、输入的结构。如果应用只是把信息打印到控制台,可以请 AI 添加结构化日志。
  2. 错误追踪。 Sentry 或类似的服务可以捕获前端和后端的异常,进行分组,并向你发送邮件。对于小型应用,这些服务的免费套餐通常已经够用;具体限额请查看各服务商的官网。
  3. 正常运行时间检查。 由外部服务每隔几分钟访问一次你的首页和一个关键 API 路由,失败时通知你。这能发现那些让应用甚至无法记录日志的问题。

再养成一个习惯:每次发布之后,在真实的线上网址(而不只是预览)上打开应用,并运行一遍主要流程清单。

第五步:备份与回滚方案

有两类不同的东西需要保护,它们很容易被混淆。

  • 代码。 把项目放在版本控制中,这样任何修改都可以撤销。许多 AI 搭建工具会为你的文件保存检查点;同步到 Git 仓库,还能在搭建工具之外保留一份副本。
  • 数据。 回滚代码并不会回滚数据库。一次有问题的数据迁移或一个有缺陷的删除按钮,可能会删除任何代码检查点都无法找回的数据。

对于数据,请设置定期备份,并存放在应用托管平台之外的地方。对于 Postgres 数据库,常见做法是定时运行 pg_dump 并保存到独立的存储中;许多托管数据库服务商也提供自动备份或时间点恢复功能。然后做大多数人会跳过的一步:把备份恢复到一个临时数据库中,检查数据是否完整。

另外,请 AI 让破坏性操作更安全:删除前增加确认步骤;对于用户可能想找回的内容,采用“软删除”(只把记录标记为已删除,而不是真正移除)。

第六步:在手机上也经得起考验的性能

原型之所以运行流畅,是因为只有你一个用户,数据量也很小。上线前请注意:

  • 用真实规模的数据测试。 请 AI 生成几千条数据,看看哪些页面会变慢。列表通常需要分页,而数据库通常需要为你筛选和排序所用的列建立索引。
  • 压缩图片。 图片过大是页面加载缓慢最常见的原因。请 AI 帮你调整尺寸、压缩图片,并对首屏以下的图片启用懒加载。
  • 实际测量。 在 Chrome 开发者工具中,以移动端模式对线上网址运行 Lighthouse。Google 的 Core Web Vitals 是一个合理的目标:最大内容绘制(LCP)在 2.5 秒以内,交互到下一次绘制(INP)为 200 毫秒或更短,累积布局偏移(CLS)为 0.1 或更低。
  • 留意“唤醒”延迟。 闲置时会休眠的托管服务可以节省费用,但长时间无人访问后的第一次打开会更慢。对于新应用,这通常是可以接受的取舍,但要知道它的存在。

当数据达到 5000 行时,项目列表页面会变慢。请添加服务器端分页(每页 25 条),为我们筛选和排序所用的列添加数据库索引,并在加载下一页时显示加载状态。

第七步:运营基础

有几件小事能把一个业余应用和一个值得用户信赖的应用区分开来:

  • 自定义域名并启用 HTTPS。参见如何连接自定义域名。
  • 来自已验证域名的事务性邮件,用于注册确认和重置密码。详见如何从应用发送邮件。
  • 隐私政策和服务条款,描述你实际收集的信息。不要复制你并未真正做到的合规承诺。
  • 用户支持渠道,哪怕只是一个有人会查看的邮箱地址。
  • 测试密钥和正式密钥分开,支付和邮件服务都是如此,并清楚记录哪个环境使用哪个密钥。

第八步:规范的交接

迟早会有其他人接手这个应用:自由职业者、新的联合创始人,或者六个月后的你自己。让交接变得容易:

  • 一份 README,说明如何运行、需要哪些环境变量(只写名称,绝不写值),以及如何部署。
  • 主要流程检查清单和自动化测试。
  • 简短的架构说明:前端、后端、数据库、第三方服务,以及每一项部署在哪里。
  • 权限清单:谁拥有域名、托管、数据库、支付和邮件账户的管理员权限。这些账户应使用企业邮箱注册,而不是个人邮箱。
  • 代码放在 Git 中,最好同步到你自己拥有的代码仓库。如果以后可能更换托管平台,请阅读如何导出并自托管 AI 搭建的应用。

AI 可以帮你起草大部分内容:

为一位从未见过这个项目的开发者编写 README:应用做什么、技术栈、如何在本地运行、它读取的每个环境变量(只写名称和用途)、数据库结构如何组织,以及如何部署。

生产就绪检查清单

  • 主要流程已写下并经过测试,包括“无法访问他人的数据”
  • 每个数据路由都在服务器端做了授权和校验
  • 前端代码中没有密钥;已泄露的密钥已轮换
  • 对登录和任何会产生费用的功能设置了频率限制
  • 错误追踪和正常运行时间告警指向一个你会查看的收件箱
  • 数据库备份存放在应用托管平台之外,并成功测试过一次恢复
  • 已用真实规模的数据检查分页和索引
  • 自定义域名、已验证的发信域名、隐私政策
  • 为接手的人准备了 README 和权限清单

在 Mythex 中完成这些工作

如果你的原型是在 Mythex 中搭建的,那么这些步骤中的大多数,都可以在同一个项目中通过提示词完成。输入 /test,Mythex 会像用户一样在实时预览中点击操作,并报告出错的流程,参见应用测试。密钥应放入项目机密设置,而不是聊天框中;每次智能体成功完成一轮操作,都会为你的文件保存一个检查点,你可以随时回退。发布后会获得一个线上网址,托管和数据库的费用从同一个积分余额中扣除(托管限制说明了应用和数据库如何休眠与唤醒)。检查点只保存文件,不保存数据库中的记录,因此仍需规划数据备份。Pro 套餐下,你可以连接自定义域名,并导出代码或同步到自己的 GitHub 仓库,方便交接。

常见问题

原型和生产级应用有什么区别?

原型证明创意是可行的,前提是使用者小心操作。生产级应用则要在陌生人随意使用时依然正常运行:保护他们的数据,能应对错误的输入,出问题时及时告诉你,并且在发生故障时可以恢复。

AI 搭建的应用能用于生产环境吗?

可以,只要你像检查任何应用那样检查它。AI 写出来的代码就是普通代码;它常常会忽略、除非你特别要求才会做的,是那些不起眼却必不可少的工作:访问权限检查、输入校验、错误处理、日志记录和备份。

上线前需要自动化测试吗?

每次发布之前,至少需要对主要流程做一遍可重复的检查。对于小型应用,可以是一份书面的点击步骤清单;随着应用变大,可以请 AI 为那些直接影响收入的流程添加自动化测试。

如何备份应用的数据库?

定期导出数据库(对于 Postgres,可以使用 pg_dump),并把备份存放在应用托管平台之外的地方。然后至少测试一次恢复,因为没有经过测试的备份只是一种希望。

Mythex · Pricing · 用 AI 构建任何东西 · 网站和应用模板 · Mythex 对比 · AI 应用构建术语表 · 免费的 AI 应用构建工具 · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 繁體中文(香港) 繁體中文(台灣)