零代码基础,6 个月上线 App Store:我如何用 AI 做出图书洞察应用 Book Scout
简单介绍一下
大家好,我是 Brett Thurston,一个喜欢前端开发和设计的开发者兼 Maker。我做了一款 App,想回顾一下到目前为止旅程中的亮点和教训。我也希望以后能更频繁地更新 Book Scout 的开发进展。
希望这篇文章能引起你的兴趣,也鼓励你分享自己的创造旅程。这不是一篇教程,更多是在聊过程和经验。
我到底买了什么?
不久前,我和 15 岁的女儿在一家书店。她拿起一本书,说这是她朋友在读的,推荐给她。我看了看封面,读了读封底的简介。过了一小会儿我说,行,买吧。我付款后把书送给了她。但在回家的路上,我和妻子隐隐觉得这本书可能需要再调查一下。花了三四十分钟研究亚马逊评论、Goodreads 和 Common Sense Media 后,我们确定这次买书是个失误。这本书的内容对女儿的年龄来说太”辣”(也太暗黑)了。退书让我很心疼,但跟她解释之后她也同意,这确实不是她该看的书。
那一刻我想到了几件事:
为什么书不能像电影一样有个分级系统?贴个 PG-13 的标签,我们就心里有数了。标了 R 级?那可能需要了解一下为什么是 R 级。
为什么消费者不能更轻松地判断一本书适不适合自己?我自己就是个爱读书的人,这么多年来花了无数时间在 Goodreads、亚马逊评论和 Reddit 上,想弄明白一本书能不能对我的胃口。比如,我是奇幻小说的大粉丝,但暗黑奇幻不是我的菜。给我 90 年代那种奇幻作品比如《龙枪》,我随时都愿意选它而不是《冰与火之歌》。
如果有一个无穷尽的信息源,只给我关于书中主题的要点呢?我想知道书中有哪些积极/有趣的主题,以及值得警惕的主题(比如创伤、暗黑内容等)。另外,如果一本书大量使用我想回避的常见套路,能提前知道就好了。提前知道一本书里有什么会让我把它放进”没读完清单”,不好吗?尤其是别等我看了一半才发现。
灵光一现
这就是我产生 Book Scout 想法的地方。我想做一个能回答这些问题的工具,给我自己和家人用。如果其他人也能从中受益,那太棒了!如果不行,至少我自己有个项目可以做,也能找到一些成就感。
所以现在你正在读我人生中的这一刻。我觉得这对我们双方都有帮助,可以互相学习这款 App 是怎么做出来的、过程是什么样的、路上遇到了哪些挑战。你大概可以称之为”公开构建”类型的文章,但 App 已经做完了,你可以下载来试试。现在就可以在 Apple App Store 下载。我很想听听你对 App 的反馈。它不完美,但能用。这是个开始。
所以如果你对过程、犯过的错和最终的胜利感兴趣,继续读吧朋友!
你做过什么解决自己、家人或朋友问题的东西吗?请在评论区告诉我。:D
首先:核心功能能行吗?
在我写任何代码或做任何设计之前,我必须弄清楚一件事:能不能让 AI 做我需要它做的事——给我一本书的正反面洞察。我下了几天班后熬夜用 ChatGPT 打磨提示词。我也试了 Bard,但对比结果后,我对 ChatGPT 的体验更满意。更别提我根本没拿到 Bard API 的访问权限。
拿到提示词结果后,我有了钩子——它行得通。我对 ChatGPT 返回的数据印象深刻。这个钩子就是让用户一次次回来的东西。
作为一个爱读书的人,我拿了很多我读过的书来测试它给出的洞察有多可靠。结果发现非常可靠。它标注的主题确实在我读过的书里。哇,所以这事真能做。
概念验证
简单插一句关于 React Native Expo 的话:我之前做过 React Native 应用,但从没用过 Expo。Expo 从 2019 年初我第一次接触 React Native 以来已经进步了很多。查过 Expo 的资料后,我发现它仍然处理了大量与移动开发相关的原生二进制工作。2019/2020 年”退出 Expo”是个大话题,但现在你不需要退出了,因为它有了 prebuild 功能。这基本上能把项目的其余部分构建得像一个完整的 React Native 项目。Expo 并非没有限制,但我喜欢它可以让我更专注于 App 本身而不是脚手架。到目前为止它在这个项目上没有带来太多限制。Expo 有大量可用的库来帮助调用设备的原生功能。
严重依赖原生设备功能并与原生代码打交道的项目,在 Expo 上会遇到更多困难。
于是我启动了一个 React Native Expo 项目。我开始给 ChatGPT 发 API 调用,看看能不能给它一个书名和作者,然后得到我想要的洞察。一切开始流向为 App 构思原型 UI 的阶段。我选择了 React Native Paper,因为它是一个基于 MUI 组件库的 React Native 组件库(这是我最喜欢的)。现在可以开始构建 Book Scout 的核心版本了。
API
我想为搜索到的书展示元数据。我开始同时使用 Google Books API 和我在亚马逊产品页面上用 Cheerio 和 Axios 做的网页抓取方法。你可以在 FreeCodeCamp 读到更多关于网页抓取的内容。
不得不说,向那些经常做网页抓取的人致敬,因为这有时候就像大海捞针,找到正确的 DOM 元素类选择器——而且还要保证它能稳定命中。我开始在我的 React Native 应用中起草这个书籍详情和洞察页面。它是 ChatGPT、网页抓取和 Google Books API 调用的组合。很乱。网页抓取的因素导致了非常不一致的结果。
在试了几天让这套方案跑通之后,我决定专注于 Google Books API 和 ChatGPT API 调用。亚马逊提供了很酷的数据,比如相关书籍、热门标注(Kindle 应用中人们经常标注的引用)、作者简介、推荐书籍等……回头看,从小处着手、打牢基础是个正确的决定。App 应该每次用户使用时都能很好地完成它宣传的功能。如果做不到,信任就会流失,使用量就会受损。
利用移动设备的特性
在打磨好一个能展示书籍洞察和元数据的页面之后,我开始思考:什么让这个 App 有资格成为一个 App?自然地在移动设备上可用是一个优势。但当时我只有这个。这让我想到,好吧,这其实可以就是个网站。确实可以。但我想起了和女儿在书店的那一天。如果我能用设备快速捕捉我想了解的书呢?当然,我们可以在 App 里用条形码扫描。幸运的是,Expo 刚好有这个库。
现在我可以在 App 里做一个模态框,扫描条形码,用 ISBN 去 Google Books API 搜索元数据。太好了!我能扫到新出版的书,但随后我意识到,扫老书时从 Google Books API 收到了两种错误。第一种错误是给定的 ISBN 返回了另一本书。第二种错误是 API 根本什么都没返回。
研究之后我意识到,ISBN 和 UPC 并不总是匹配的。很多新书两者一致,但老书尤其是,ISBN 和 UPC 是不同的。所以我以为我在给 Google Books API 发 ISBN,实际上发的是 UPC。哎。
所以我现在必须在条形码扫描功能中捕获这个使用场景。否则用户不会有无缝的体验。所以我想,好吧,我们可以弹出一个模态框,说明 ISBN 没有验证通过(意味着扫到的是 UPC)。这个模态框可以让用户选择手动输入 ISBN,或者引导到搜索功能。这效果不错我想,而且现在就在 App 里。
这是一个很好的练习,让我学会在 App 设计中超越”快乐路径”。因为对你成立的东西,不一定对每个用户和每个使用场景都成立。我对 Book Scout v1 的目标是确保不管搜索还是扫描书籍的各种场景,至少有一个一致的体验。我肯定还有更多的使用场景需要捕获,但对我来说,那些感觉是非常边缘的场景,不会影响普通用户。
这就是为什么应该先发布再迭代。让你的用户帮你发现问题,这样你才能解决和修复它们。而且你不会把大量时间和资源浪费在那些对用户来说根本不是问题的问题上。
缓存就是钱
说到超越快乐路径,我也在基础阶段就考虑如何扩展这个 App。这就是我选择用 Firebase 来缓存 API 调用产生的数据并返回给用户,而不是每次请求都调 ChatGPT 或 Google Books API。缓存数据不仅给用户返回得更快,还能节省项目运营成本。
所以用 Axios,我为每种类型的供应商创建了实例,设置了初始 header。然后我创建了方法,在真正调用供应商之前先检查 Firebase 里有没有数据。这在一开始证明是很有成效的。
我唯一遇到的坑是:如果你改了数据的结构,你需要清空旧缓存或者调整它以适应你最终确定的结构。清空数据库缓存数据对用户影响不大,但在规模大了之后可能会很贵。
你有关于缓存数据的建议或故事要分享吗?请在评论区告诉我!
书架
回顾一下,我有了一个能搜索或扫描书籍并渲染书籍洞察和元数据的 App。我认为这是一个可以接受的概念验证。我想把重点放在交付版本 1 上。我想让你看一下,觉得这是一个完整的产品而不仅仅是一个概念验证。我需要一个最小可行产品。
但这个 App 感觉稍纵即逝。就像你扫了一本书,就这样了。如果用户想跟踪他们搜索/扫描过的书,甚至把这些书分类到传统的阅读分类里,比如”在读”和”没读完”呢?
在整个项目中,我一直想研究书籍类 App。我想确保我不是在重复造轮子,或者解决那些如果我稍微调整一下方法就不需要解决的问题。Goodreads 让你可以把书放到书架上。为什么 Book Scout 用户不能也这样做?
所以我创建了一个已浏览书籍的历史记录和书架系统。书架系统有 4 个分类:
-
在读 -
已读完 -
想读 -
没读完
未来,我会让用户可以与他人分享他们的书架、备份到他们的云账户中,以及创建自定义书架。
客户评论
我想添加的另一个功能是抓取亚马逊客户评论并在 App 中展示。但做完之后,我觉得这个功能不够特别、不够独特。当然,它可以帮助用户了解其他人对这本书的看法——除了洞察之外——但我想要做的是在客户评论中创建可追踪的关键词。如果评论中包含了我追踪的关键词,就帮我高亮出来。
比如,如果我设置了以下关键词:
-
暴力 -
血腥 -
谋杀
那么任何包含这些词的客户评论在 App 中都能很容易被识别。App 本身并不关心你对这些关键词的态度。我觉得这对那些在生活中经历过某种创伤、可能不想在书中读到相关内容的人来说,是一项不错的服务。
内容审核
测试阶段冒出来的一件事是用户生成内容。作为一个独立的创始人兼开发者,我不想负责审核用户创建的评论——至少现在不想。我很乐意把这个任务交给亚马逊和他们的团队来审核客户评论。
我一直在关注评论,确保没有出现不适合公开 App 的内容。
你是一个有用户生成内容的 App 的独立开发者吗?如果是,你是怎么管理的?请在评论区告诉我。
主题与呈现
很多视觉素材是用 MidJourney 创作的。我之前没怎么接触过生成式 AI,但用 MidJourney 挺有意思的。我学会了怎么写提示词、调整图片用于 App 中。我想营造一种第一次发现新事物的氛围。对我来说,吉卜力工作室的作品和奇幻文学能唤起那种感觉。我希望这能成为用户体验的一部分:找到自己想要的新东西的感觉。
测试阶段
于是我现在有了一个可用的 App,准备好从别人那里获取反馈了。我首先专注于 iOS 平台,因为我认识的很多人都在用。讽刺的是,我自己是 Android 用户,但我拥有并且更喜欢用 MacBook。大概世界上也就几十个这样的人吧。
所以我在苹果那里设置了 App Store Connect。你可以在这了解更多。然后用 Expo 的 ‘eas build’ 帮我打包 App。之后我用 Transporter 把打包好的文件(.ipa)发送到 App Store Connect。再之后,我建了一个测试组,邀请了很多亲朋好友在他们的 iPhone 上测试 App。我从中得到了很好的反馈,加入了很多必要的打磨,比如加载状态和对 API 调用的进一步优化。
最终,一个扎实的 v1 版本到位了。经过两个月的大量熬夜,我准备好提交给苹果审批了。
然后我首次提交被拒了,哈哈。
事情是这样的:书籍页面上有一个按钮,可以直接在亚马逊上找到这本书,并在 URL 中带了与我的亚马逊联盟账号相关的标签。苹果不太乐意让用户在 App 内购买系统之外完成购买。所以我去掉了直接跳转按钮,然后就被批准了!万岁!
社交推广
我不是一个重度社交媒体用户。我以前试过,但我觉得,像我这一代人中的许多人一样,我想存在于一个小型、可信的利基社区里。我没有 TikTok,以前在 Twitter 上发过很多内容,但那是 Tech Twitter,只是想要学习、积累声望和建立社区。我大概五年前删了 Facebook,之后也没想念过。Facebook 群组倒是挺不错的。扯远了。
所以一个不怎么用社交媒体的人怎么告诉别人自己的产品?我正在经历这个过程,但我打算现在专注于 Instagram。Bookstagram 在那里是个大圈子。我还没有机会全力发内容,但上面确实有一些帖子。你可以在这里看到 Book Scout 的 Instagram。喜欢的话可以关注一下!
我的社交内容计划有几件事:
-
发布 App 中的洞察示例 -
发布关于 App 的内容 -
发布与书有关的东西(还没开始做) -
发布关于虚构短故事的生成式艺术(填充内容)
关于这部分我没有太多可说的,除了”坚持发内容很重要,而且一个人做很难”,哈哈。最终我会想通,考虑找人来帮 Book Scout 做宣传,但目前我还在凑合着来。
但我确实觉得,如果你不说出来,没人会知道你的产品。所以我现在正在摸索那是什么样子。关于这个主题,未来肯定还会有帖子,我确信。
总结
感谢你阅读我从 Day 1 到 Day 62 关于 Book Scout v1 的回顾。我有很多有趣的优化和功能在做,希望它能成为那些对下一本书好奇的读者的一个服务。
下一步是开始理解目标受众,帮助 App 成长。目标受众不仅能帮助打磨 App,还能告诉我下一步该去哪里、做什么(除了我的行程表之外)。
我希望分享我的旅程到目前为止能激励或鼓励你去构建那个你一直想做的东西。我们做出来的项目不会被所有人喜欢,可能也成不了超级明星,但在做 Book Scout 的过程中,我获得了一种作为连续创业者在其他地方没找到的成就感和满足感。
说到创业,取决于这款 App 的市场契合度,我需要思考如何在移动广告之外让它盈利。但那是明天的问题,我改天再谈。
如果我能重做一遍,我会先专注于核心功能,并且尽可能少地接入 API 供应商。有一阵子我不知道自己想从 API 调用中得到什么。我觉得当你限制自己的时候,更容易验证一个概念,而不是同时抛接很多球来确立愿景。
再次感谢你的阅读,我期待未来分享更多开发过程。
(来源)
DEV Community: How I built my AI powered book insights app
https://dev.to/brettthurs10/how-i-built-my-ai-powered-book-insights-app-be7
推荐阅读:

夜雨聆风