提示驱动的无代码开发

基于我在Lovable构建超过30个项目的经验,我将指导你完成构建生产级应用的步骤,而不对过程进行粉饰。

提示驱动的无代码开发

独立黑客们获得了100倍的生产力提升。但相对于什么呢?

对抗由人们在几小时内构建完整应用而引发的FOMO(错失恐惧症)的解药是什么?知识的力量。

这是一份使用无代码工具创建AI SaaS的实际指南,这样你就可以自己制作一篇热门文章。我们希望实现的结果是一个自动将语音消息转录到Slack频道的机器人。(本文将介绍一个失败的项目,但在选择正确的问题时,2小时的应用程序是现实存在的。查看我的视频点击这里进行详细说明)

基于我在Lovable构建超过30个项目的经验,我将指导你完成构建生产级应用的步骤,而不对过程进行粉饰。

最终应用中的图像。这就是我们的目标
为什么2小时的应用程序是个错觉?

代码本身没有内在价值。真正有价值的是解决用户问题。理解用户问题可能需要与用户进行数月的讨论和应用规格迭代。

1、开发之前

项目中最重要的一部分发生在编写任何代码之前。

人们通常通过仅考虑编写代码所需的时间来衡量AI代码生成器带来的生产力提升。这很容易测量和展示(看我用N分钟构建了这个应用)。

但不要被那些文章误导。编码并不是应用开发中耗时的部分。除非问题、解决方案、用户流程和技术堆栈都定义得当,否则应用不太可能提供多大价值。

重构应用代码 所需的时间远多于在纸上重构功能。你应该始终对自己的技术堆栈选择和用户流程充满信心。你不一定需要知道代码级别的细节,但你应该知道是否应该为你的待办事项应用使用Kubernetes,即使LLM建议你这样做。

1.1 问题

我和联合创始人之间有一个问题(我经营一家AI代理公司)。我们在Slack频道上发送了大量的语音消息,但它们是芬兰语。Slack本身不支持芬兰语的即时转录,有时我希望看到文本形式的消息。

1.2 解决方案

一个Slack机器人,使用OpenAI Whisper自动转录音频消息,并通过回复提供转录内容。用户可以通过我们的Web应用将转录机器人添加到任何Slack频道。定价按每分钟计费,并通过Stripe处理。

1.3 用户流程

  1. 用户打开应用并通过Slack进行身份验证。
  2. 用户添加应自动转录音频消息的频道。
  3. 用户有10个免费积分(分钟),可以通过Stripe购买更多积分。
  4. 当用户用完积分时,转录将无法工作,直到用户购买更多积分。
  5. 用户可以通过应用取消注册频道,并删除他们的账户。

1.4 技术栈

Supabase: 处理Slack认证、用户元数据存储(剩余积分、Slack认证令牌)、边缘函数

Stripe: 订阅管理和积分购买

Slack: 用于Supabase OIDC认证的应用,另一个应用用于频道webhook注册。

2、开始开发

你可以阅读我Lovable项目的所有提示。你可以通过导航到要调查的提示并点击“预览”来查看每个应用版本。

Lovable界面允许预览中间应用版本

2.1 提示1:建立应用框架

第一个提示应该简洁,聚焦于大局。给出足够的上下文以做出认证和集成的架构决策,但不要深入细节。

我将在提示标题中始终分享Lovable响应的链接,‘RESPONSE’。

Lovable开始项目的第一个提示。RESPONSE

我们得到一个初始的登录页面,看起来很吸引人。

Lovable生成的初始登录页面。从美学角度看,非常棒!

2.2 提示2:连接到Supabase

我们需要处理Slack认证并将用户级别详情存储到数据库中。Lovable有一个很好的Supabase集成,所以让我们使用它。

单击页面顶部的“Supabase”图标,创建一个新的Supabase项目并连接到它。

Lovable直接集成Supabase

连接到项目后,Lovable会自动生成一个连接到Supabase的提示。

Lovable初始化Supabase项目后自动生成的提示。RESPONSE

2.3 提示3-6:使用Slack添加用户认证

我们的应用只有在用户经过认证后才能工作,所以我们应该首先开发它。

  1. 用户打开应用并通过Slack进行身份验证。

请注意,下面我们请求的是Slack OAuth。这可能是或不是错误

提示3:使用Slack OAuth创建用户认证。RESPONSE

为了获取API密钥,我们必须创建一个Slack应用。我不知道如何定义Slack应用清单,所以我与GPT o3-mini-high进行了聊天。

我们通过Lovable界面添加Slack API密钥,Lovable会自动生成一个提示。

提示4:从Slack仪表板添加API密钥。RESPONSE

Slack将处理我们的认证在其自己的网页应用中。Slack完成认证后,应将其重定向回我们的应用。因此,我们需要添加站点URL和重定向URL到Supabase和Slack应用注册。我们可以通过Supabase控制台找到这些URL,但我们向Lovable询问以简化操作。

提示5:澄清站点URL和重定向URL。RESPONSE

对于我们的初步项目规范,我们决定使用OAuth进行Supabase Slack认证。这是一个错误,现在我们遇到了问题。OAuth正在被弃用,而LLM并不知道这一点,我也一样。

我们向Lovable求助。

经验教训1:始终确保提出的项目计划在高层次上是可行的。
提示6:Slack推荐使用OIDC而不是OAuth,我们需要重构。RESPONSE

当我们通过Slack进行认证时,我们的机器人必须请求权限(称为范围)以便在用户的Slack空间中执行某些操作。现在Lovable尝试通过OIDC认证请求这些范围。

然而,OIDC仅用于认证,而不是请求Slack应用的消息范围,所以我们需要创建两个应用。

2.4 注册两个Slack应用,并启用OIDC

创建Slack应用后,我需要将OIDC应用链接到Supabase用户认证。OIDC应用负责Slack用户认证,而OAuth Slack应用负责请求消息范围。

我从创建的Slack应用中获取了Client ID和密钥,并将其添加到提供商。

从Supabase认证中启用Slack OIDC提供者

2.5 提示7-11:使用Slack添加用户认证

尝试登录时,我们从Web应用收到一个通用的“invalid_scope”错误。我们需要更多信息。我们打开Chrome开发者工具以查找认证HTTP请求并复制完整的请求负载。

Chrome开发者工具视图显示Lovable发送的HTTP请求

也许Lovable在没有HTTP请求上下文的情况下也能调试错误。我决定在提示中包含请求以帮助LLM,因为我还不想陷入无休止的调试循环。

提示7:给Lovable错误信息和相关的HTTP请求。RESPONSE
提示8:认证状态组件卡住了。RESPONSE

Lovable调整了OIDC范围,我们已经完成了认证。太好了!

…但是,一旦Slack成功认证后重定向,我们的应用并没有将用户注册到Supabase。Lovable很可能不理解Slack是如何返回认证状态的,我们需要提供最新的Slack认证响应文档。

提示9:给LLM提供最新的文档。RESPONSE

文档不起作用,所以我们进一步提供Slack认证的HTTP响应。我们再次从Chrome开发者工具中找到请求。

提示10:提供HTTP请求并解释令牌是在URL中返回,而不是在负载中。RESPONSE

通过Slack的用户认证终于成功了,我们可以继续下一步。

2.6 提示11-N:添加webhook注册

我们已经实现了第一个功能,用户认证,并继续进行下一个用户流程步骤。

  1. 用户添加应自动转录音频消息的频道

在添加频道之前,我们需要处理前端的成功事件并更新UI。

最终应用中的图像。这就是我们的目标视图
提示11:处理成功的认证事件并更新UI。RESPONSE

UI更新了,但我们收到了“unsupported provider”的错误。Lovable试图将我们的webhook注册作为常规的Supabase认证。但是,我们已经告诉它我们有两个Slack应用,OIDC用于认证,OAuth用于webhook注册。

……

Lovable忘记了我们的指示关于认证流程。我们需要提醒它。

提示12:纠正Lovable仅使用Supabase认证进行初始OIDC认证。RESPONSE

Lovable根据提示进行了操作,但什么也没有发生。用户流程不起作用,我们没有任何Supabase表。要么是对话历史太复杂,LLM无法遵循冲突的指令,要么是Lovable没有使用足够的对话历史作为LLM的上下文。我们需要提醒它关于我们的应用。

提示13:提醒Lovable我们之前告诉它的内容。RESPONSE

这是使用LLMs开发时需要学习的第二个教训:

经验教训2:使用单一对话实现单一功能。

2.7 提示N:调试工作流

此时,LLM开始表现不稳定。我需要提醒它使用环境变量而不是凭空想象它们。LLM创建了一个边缘函数仅仅是为了从后端返回环境变量到前端。我深深地拍了一下额头,但决定假装我没有技术专长。也许LLM会自我修正。

提示N:真正的战斗开始了。RESPONSE

我通过12个更多的提示进行了调试,使用O3-mini实时访问文档并提供给Lovable建议,但为时已晚。上下文过于臃肿,每次提交都会使我们陷入代码的泥潭。

各位女士先生们,这就是我们使用无代码工具所能达到的极限,而没有理解底层代码。通常我会在遇到第一个错误提示时就放弃,但我想要表现出半非技术人的样子。

3、将仓库转移到Github并使用Cursor

我把仓库转移到了Github,并使用Cursor Composer来完成应用。

总共花费了大约8个小时:

我试图在不了解Slack事件API详细信息的情况下继续开发,但(不幸地)我不得不学习该API的高级使用细节。LLM无法找出正确的方法,我不得不引导它。O3-mini提供了实时网络访问,可以访问最新的文档,这帮助了很多,并将成为我工作流程的一个好补充。

4、学到的经验

  • 始终确保提出的项目计划在高层次上是可行的。
  • 使用单一对话实现单一功能。
  • LLM需要反馈——无论是通过UI交互测试还是直接访问日志/上下文。
  • 无代码平台在UI方面非常强大,但在后台方面缺乏可见性——给LLMs提供请求和日志可能会解决这个问题。
  • 生产应用和演示应用的区别在于基础设施。

无代码工具在正确使用时非常强大。虽然本教程没有展示最佳开发方式,但它展示了实际开发挑战。

5、结束语

再次强调,代码本身没有内在价值。我们没有进行市场研究,所以我们的应用不太可能获得关注。也许市场上缺少一个Slack音频转录器,但功能可能不是我们所构建的。


原文链接:How to build an application with AI in 2 hours — and why it’s an illusion

汇智网翻译整理,转载请标明出处