我用AI编程开发产品(三):踩坑记录
← 返回我的实践

我用AI编程开发产品(三):踩坑记录

在上篇我用AI编程开发产品(二):产品是如何诞生的?提到,如何利用AI协助完成需求分析、产品分析、产品设计和产品落地这几个环节,这篇分享下自己的踩坑记录

第一个坑:书籍信息获取失败

当我完成所有的前期准备工作,让AI开始写代码完成书籍信息获取任务,兴奋的打开插件,结果发现一直报错,始终获取不到书籍信息。

我按照过去的经验,把浏览器的报错信息发给AI,让AI连续改了许多次,一测试依然报错。

正当我一筹莫展时,突然想到,是不是可以问AI排查错误它需要什么信息呢?

于是,它让我把网站的响应数据发给它,我直接在浏览器按下F12,把网站的响应数据发给它,没想到它这回一改就改对了。

之前它不知道网站的结构,也就不知道怎么正确获取书籍信息,所以之前的修改都是AI瞎猜的…

这时候,第一个单元任务顺利完成,接下来的任务是AI提问、用户回答、AI评价功能,有了第一个坑的教训,本以为又会有坑等着我,没想到出奇的顺利。

随后是注册登录以及会员模块,在此之前,需要对Supabase的数据库进行设计,我们需要把用户注册相关的信息、提问次数、flomo的api记录到数据库,方便用户在不同设备进行使用,当然用户填写的回答内容我们是不会记录的。

我让AI根据实际情况设计了相关的数据库,并在AI给出的方案上进行修改,出于安全考虑,这部分详细细节就不分享了。当我们把数据库设计好了之后,就可以正式开发注册登录模块了,于是第二个坑在等着我…

第二个坑:AI的幻觉

注册登录是倒数第二个模块,我以为很快就能开发完所有的功能上线了,AI写完代码后,我又兴冲冲的打开插件测试,结果不出意外的出意外了,又出了个大问题,书籍信息获取不上了。

按照正常的逻辑,新增功能模块是不会影响到原来的逻辑的,但它是AI,会有幻觉,它把以前的正常代码逻辑也一并修改了。

这就体现出备份的重要性,每当AI完成一个单元功能后要及时备份,以防AI后续改了无关逻辑后,我们无法回退。

于是又开始解决这个问题,回退了代码,花费了不少时间,吸取了一个重要教训,让AI修复bug或者增加新功能的时候,要在提示词限定任务范围,让它一次只处理一个任务,只针对这个任务进行修改,这样出现幻觉的机率会降低很多。

第三个坑:重新认识后端

随后我又开发完了会员模块,一切测完都没问题,正开心准备上线的时候,又发现一个重大问题,当时的心里真的是一万头xxx飘过…

我把调用AI的密钥硬编码在了前端代码中,这会导致任何一个人,都能通过前端代码看到我的密钥,使用我的密钥去请求AI服务,要知道调用AI服务是需要付费的,所以这里存在一个很大的安全隐患。

让我也深刻认识到了后端的作用,它是对我们的关键代码逻辑进行安全保护的重要措施,相当于我们的处理逻辑都在云端进行,对于其它人来说这就是个黑盒,可以有效保证代码安全。

这块我一点都不懂,于是求教AI,让它提出最小成本的改造方案。

它告诉我,在Supabase可以利用Edge Function完成轻量化后端代码部署,把与AI调用相关的逻辑放在后端,前端只发起调用请求以及接收返回的数据,于是我就把AI调用有关的处理逻辑分离出来,全部放在了后端。

第四个坑:后端请求超时

我花费了好几天时间,总算完成了后端的改造,兴冲冲的让AI编写自动化测试代码测试时,果不其然,又踩坑了。

后端请求直接提示超时,但这次多留了个心眼,没有完全相信AI的说法,因为之前已经把大模型的调用改成了流式调用,理论上不应该出现这个问题,所以猜测问题出在前端请求方式或者后端接收请求的方式上。

于是让AI部署了一个简单的前后端测试代码,验证连通性,结果发现还是超时,这时候问题好像陷入了一个困境,连AI都提示让我找supabase的客服去咨询了…

抱着一丝希望,打开了官网,浏览边缘函数调用的相关代码,发现其中有个快速开始的案例,于是开始了瞎试,在本地创建了一个hello函数进行测试,把这个代码发给AI参考,这时候居然出现了奇迹!

AI一看这个范例就发现问题了,官方示例用了deno.serve去处理,而原来的代码都是用export const handler处理,这与生产环境不一致,本质上是因为AI的知识过时了,没有及时更新最新的调用方法。

它就像一根救命稻草,抱着最后的希望,去改造了一下测试代码,果然跑通了,真是柳暗花明又一村,原来解决问题的方式竟然如此简单。

一个很深刻的教训就是,之后碰到超时这类问题,一定不要先去直接大动代码,而是要创建一个极简的测试函数,去验证调用方式等是否正确,如果有问题,才去进一步改代码,本质上来说,就是要通过控制变量法去小心验证。

至此,读问插件的开发总算告一段落,MVP版本正式搞定。

收获总结

1、官方的代码示例很重要,别以为AI啥都懂,在使用到其它工具时,要把这些工具的文档和示例代码都发给AI,只有这样它才能获取到最新的知识,减少踩坑的几率。

2、让AI完成任务的时候,一次只针对一个任务,限制任务的范围,这样可以降低AI的幻觉。

3、解决响应超时等相关请求问题,可以先用Hello函数尝试,确认请求方式没有问题。

4、让AI修改Bug的时候,需要让它帮我们增加日志代码,随后把日志告诉AI,这样修复的效率会更高。

5、在前期进行开发的时候,要让AI遵循Solid原则去开发,一个类只对应一个业务逻辑,因为我最早开发的时候没有增加这个提示,AI把很多逻辑写在了一套代码,后续维护会很困难。

6、让AI写出开发文档时,要在里面要体现出业务流程、每个类或者方法的作用、以及数据流向等,这可以让我们从逻辑上去判断AI的方案是否合理,因为我们看不懂代码,但我们懂得业务逻辑呀~

7、列出单位任务清单,每当开发完成一项任务后,就更新文档,这个非常重要,因为大模型的上下文token是有限的,所以需要及时更新文档,方便后续其它单元任务的开发

Chrome浏览器商店上架

所有开发完成之后,需要放在Chrome浏览器商店进行上架,这里的流程其实挺简单。

大概是在官网花费5美元,注册开发者账号,随后按照指引,把我们的文件包上传,填写必要的信息,在页面都会有引导提示,有个取巧的方法是把这个页面的填写表单截图下来,发给AI,让它们帮我们填写。

这就是我开发读问产品的所有流程,希望大家看完可以有所收获。我完成这个小产品之后,对AI编程有了个新认识。

AI编程并不是指我们这样的小白,真的可以从0到1去编程,而是我们先要了解编程的基础知识,比如前后端是什么?CSS代码是什么?数据库又是什么?

只有我们掌握这些编程基础知识,起点从0到了0.1,那么再从0.1到1的这个过程,就可以很好的用AI编程工具去完成。