最近,我花了一些时间使用Claude Code来开发一款教育应用的原型。这款开源移动应用旨在帮助教育工作者分享、发现并开展低成本的创新学习活动。

该应用的核心功能之一是人工智能辅助的活动创建。活动创建一直是这个项目的重要环节,在早期的桌面版本中,这一功能是通过手动填写长表格来实现的。

鉴于当前的人工智能技术发展现状,探索利用人工智能简化活动创建流程、减少用户所需的手动操作显得十分重要。

我从零开始进行开发,让Claude指导我选择适合该应用的技术。最终,这款应用是用React Native(Expo)和Firebase构建的,其基础还包含了目前处于测试阶段的网页版本。

在原型开发过程中,速度是我最关注的因素:移动应用的开发从构思到完成仅用了大约一个月的时间,而最初的网页版本则耗时了近一年。

近年来我并没有大量从事编程工作,如今我的主要职责是管理技术社区。但由于我具备技术背景,并且有软件开发方面的经验,因此借助Claude以及相关的参考指南和文档,我能够相对轻松地快速开发出一款功能完备的应用程序。

我认为,这些经验帮助我在做出技术决策时能够权衡各种因素,评估架构设计的合理性,并对生成代码进行批判性分析,而不会盲目依赖大型语言模型。

在这篇文章中,我会分享一些我在开发过程中所做出的技术设计决策。

应用截图 - 活动界面、指导步骤界面及用户资料页面
URL1

目录

先决条件

我在这里讨论的各项技术决策,都是基于我的实际实验得出的结论。这些内容主要针对那些在教育与技术领域从事工作的人,尤其是开发者、社区实践者,或是那些对技术充满兴趣、希望利用人工智能工具快速进行原型开发与项目构建的人。

你需要具备对React Native框架的基本了解,同时也要清楚数据库和Firebase的工作原理,此外还需要掌握如何使用Claude工具、命令行工具以及API接口。

在决策过程中,能够灵活权衡各种因素也是非常重要的。例如,在选择基础设施时,就需要根据成本、地理位置、多语言支持能力、可扩展性或易用性等因素来做出决定。

选择哪种模型

在挑选用于构建应用程序本身的模型时,这个选择其实相当直接。我选择了Opus 4.7,因为它具备先进的功能,而我确实需要这样一个模型来帮助我从零开始设计整个应用程序。

但当涉及到在应用程序内部使用哪种模型时,这个决定就需要更加慎重地考虑了。

在具体说明选择该模型的原因之前,我们先来了解一下应用程序的整体功能。这款应用包含许多功能,比如利用人工智能帮助创建和整理教学计划、将内容翻译成10种语言、提供指导教师完成各项教学活动的建议、支持教师个人资料的管理等等。

如果仔细分析这些功能,就会发现所选模型需要具备以下几个关键能力:能够生成遵循严格结构的JSON数据、具备进行教学活动设计的逻辑推理能力、能够生成多语言内容,同时还必须能够根据时间安排、所需材料以及适用年龄等因素来调整生成内容。此外,该模型还需要能够将用户的输入信息准确映射到预定义的活动类别中,并确保输出结果的结构始终保持一致。

在应用程序中,活动生成功能才是最核心的人工智能技术。由于这一功能是异步的、一次性生成的,因此在可选的Claude模型中,我选择了Sonnet模型,因为它能够生成质量较高且具有针对性的教育内容。

根据地理位置和成本进行选择

延迟和时间网络的稳定性也是需要考虑的重要因素。这款应用程序的设计初衷就是为那些在资源匮乏或网络环境较差的环境中工作的教师提供帮助。虽然Claude的Haiku模型能够降低延迟,但在网络速度较慢的情况下,它的稳定性可能不如其他模型。

同时,我计划将这款应用程序保持免费和开源的状态,目前也没有打算大力推广它。因此,如果使用Opus模型来为最终用户生成内容,成本会相当高,尽管它可能会产生质量更高的结果。

对于这种需要结构化生成的任务而言,Sonnet在质量、成本和响应时间方面似乎达到了理想的平衡。如果使用Opus进行生成,较长的生成时间可能会对用户体验产生负面影响。 在配置API设置中的`maxTokens`时,我也是基于成本和生成内容的长度来做出决策的。 为该平台生成的典型内容长度最好控制在1,500到2,000字左右,这样对应的输出token数量约为2,500个,生成时间也大约在30到45秒之间。 基于这些考虑,我将`maxTokens`的值设定在这个范围内,这样既能有效控制token的成本,同时又足以生成有意义的结构化教育内容。 /**
* Claude AI配置信息。
*
* 注意:在生产环境中,应将API密钥放置在服务器端代理中,以避免将其暴露在客户端代码中。`baseUrl`可以替换为你自己的后端接口地址,该接口会将请求转发给Anthropic。
*/
export const aiConfig = {
apiKey: process.env.EXPO_PUBLIC_CLAUDE_API_KEY ?? '',
model: 'claude-sonnet-4-6',
maxTokens: 2500,
baseUrl: 'https://api.anthropic.com/v1 messages',
anthropicVersion: '2023-06-01',
};

选择编程框架和后端架构

我想要使用一个能够在Android和iOS设备上无缝运行的框架来开发这款应用。React Native显然是一个合适的选择,因为它既符合这一要求,而且其简单易用、在开发生态系统中也备受青睐。 对于数据库和后端系统,我希望能选择一个在数据隐私和安全方面都值得信赖的方案。 在开发过程中,当我与Claude Code讨论架构选择时,它推荐了一些常用的开发者平台,比如Supabase。起初,我认为这是个合理的默认选项。 但关键在于不能仅仅盲目跟随这些推荐,而应该仔细核实这些服务在目标用户地区是否真的能够稳定使用。经过进一步调查后,我发现印度已经限制了对Supabase的访问,这很可能与网络安全问题有关。 这一发现立刻改变了我的决定。尽管Claude最初推荐的架构是基于Supabase设计的,但我最终还是改用了Firebase,并在Firebase控制台中直接创建了一个新项目。 这个经历提醒我们:不能仅仅表面地接受AI的建议,主动了解最新的情况是非常重要的,尤其是在涉及基础设施和平台可用性时更是如此。

Firebase的设置过程本身看起来相当简单:

  • Firebase控制台创建一个项目。

  • 启用身份验证功能(邮箱/密码登录)。

  • 创建一个Firestore数据库。

  • 启用存储功能。

  • 添加一个Web应用并复制相应的配置信息。

我注意到的另一个现象是,AI在开发过程中会很快推荐一些有趣或“现代”的基础设施解决方案,比如用于视频上传或媒体处理的方案。

但实际上,明智的权衡决策才更为重要。尤其是在项目初期,当我还在与一小群教育工作者一起验证应用理念时,我其实并不需要一套完备的视频处理基础设施。这样的设计可以使系统保持轻量级,降低实现难度,并有助于在产品方向和用户需求得到最终确认之前避免过度设计。

我所使用的表述方式正是体现了这种思考:

目前这个应用还处于初期验证阶段,主要依赖一小群教育工作者的意见进行测试。因此,我们暂时不需要可扩展且功能强大的视频处理基础设施。我们可以选择一些更简单的方案,比如让用户将视频上传到YouTube,然后只需将获取到的URL复制到活动页面中即可实现内容展示。

机器翻译与多语言支持

由于该应用早期版本的主要目标用户是使用多种印度语言的人群,因此对于一个小型项目来说,要为所有语言提供翻译服务确实是一项非常艰巨的任务。不过借助AI技术,至少对于那些有训练数据集的常用语言来说,实现机器翻译是完全可行的。

在原型开发阶段,我在语言选择选项中提供了5种全球最常用的语言以及5种印度常用语言。至少对于这些语言而言,机器翻译的质量相当不错,AI技术的可靠性也还算可靠。

如果没有这样的技术支持,在应用开发的初期阶段,维护翻译内容的更新工作将会非常繁琐,同时也需要花费大量精力去招募人员来手动进行内容翻译。

该项目采用了双层翻译机制:一层是用于界面文本的静态翻译资源,这些资源保存在src/i18n文件夹中;另一层则是用于活动内容的动态翻译功能。

对于动态部分,AI会利用Google Translate API为活动内容生成翻译结果。这个API与Google Translate网页插件使用的接口是相同的,它是免费的,也无需使用API密钥。

不过需要注意的是,这个API并非官方提供的服务,其请求速率限制也不受保障。因此,在正式生产环境中,我们最终会转向更成熟、更可靠的商业解决方案,比如Cloud Translation API

“利用AI进行开发”,同时人类也会参与其中

这款应用的核心理念是帮助教育工作者记录并分享他们的创意项目。因此,利用人工智能简化文档制作流程,同时确保教育工作者能够对最终发布的内容保持掌控权,这一设计思路显得至关重要。

最初,我尝试使用Claude作为辅助工具,通过与用户进行对话来协助活动策划。我的设想是,人工智能可以通过一系列追问引导教育工作者逐步完善活动计划。但在原型测试阶段,我发现这种方式往往会给用户带来过多的操作麻烦——用户需要回答太多问题,而且最终生成的活动计划往往会出现结构混乱或在不同活动中重复使用相同内容的情况。

为了使整个流程更加快捷简便,现在这款应用主要依赖单一输入来进行工作。用户可以用自然语言简要描述他们的活动构思,然后选择性地上传相关媒体文件,之后人工智能就会自动生成一份结构完整的活动计划。与应用开放式对话方式不同,这款应用采用带有具体指导原则和格式要求的提示语来引导用户输入信息;生成的内容都是符合预设结构的有效JSON格式数据(例如:包含3到6个活动步骤、4到5个指导性建议,会根据内容难度自动选择合适的图片等)。这样一来,生成的内容可以直接被应用使用,无需再进行任何解析或转换操作。

如果用户上传了多张图片,人工智能还能自动判断哪些图片对应哪些活动步骤。这一功能与Facebook的“使用Meta AI创建商品列表”功能有些类似——用户可以上传各种类型的媒体文件,之后系统会自动生成标题、材料清单、学习目标、活动步骤以及指导建议等内容。

最重要的是,在内容发布之前,所有信息都是可编辑的。因此教育工作者可以在与社区分享之前仔细审核、修改和完善最终版本的内容。

针对低带宽环境进行优化

在初期开发阶段,我就考虑到这款应用是为那些使用低带宽网络的用户设计的,因此我确保向Claude提供了这些限制条件,也让原型版本包含了支持慢速连接用户所需的最基本功能。

该应用可以同时加载10个界面,并使用Expo模块中的expo-image-manipulator来处理一些简单的图像操作,比如将照片大小调整到1200像素,然后将其重新编码为JPEG格式再上传。这样一来,一张通常大小为3–5MB的图片,其文件大小就可以被压缩到大约200KB。

此外,AI模型生成的输出内容也仅以文本形式存在。虽然这些图像会被上传并存储在Firebase中,但它们从未被发送给模型本身,这样一来,即使在网络连接速度较慢的情况下,请求的响应速度也能保持较快。

制作演示视频

最后,这个过程或许也是最有趣的部分。在我与第一位教育工作者进行演示会议之前,我成功地将一段4分钟的屏幕录制视频剪辑成了大约1分钟的演示视频。我使用Claude来识别并提取其中最相关的片段,然后通过ffmpeg命令行工具将最终结果转换成合适的格式。

在尝试了许多会很快耗尽我的API调用次数的AI视频生成工具之后,我最终还是决定再次使用Claude来完成这个工作流程,结果发现它的效果出奇地好。 🙂

总结

一年多前,我就开始尝试开发这款应用的类似版本,但当时始终未能完成功能完备的原型。当时的开发工具还在不断发展中,我经常会在各种错误中陷入循环,花费大量时间来调试AI工作流程本身,而实际上用于构建产品的时间却很少。随着AI辅助开发工具的不断发展,现在我确实觉得能够更快地实现各种创意并将其转化为原型了。

同时,这次经历也让我明白了一个重要的道理:不能盲目地使用AI工具来开发应用程序。你不能让AI模型来完成所有的工作并做出所有决策,而自己却去散步或者做其他事情——不过也许在AI工具给出提示的间隙,你可以洗洗碗之类的。

每一步开发过程都需要仔细评估。AI模型生成的推理结果、建议以及讨论内容,都需要我们阅读、理解,并通过后续的提示和人工干预来进行进一步完善。

开发工作的很大一部分其实都涉及在过程中做出明智的决策:应该选择哪种模型以及为什么选择它;对于你的具体应用场景来说,哪些因素最为重要(比如成本、地理位置、延迟时间、推理能力、多语言支持等);什么样的基础设施配置才适合产品的托管和扩展需求;哪些API集成是合适的;以及在应用的初期阶段应该优化哪些方面,而哪些方面则可以留到后续发展阶段再处理。

同样,设计决策也应当基于用户的实际需求和具体环境来制定,而不能仅仅遵循AI工具的默认建议。

归根结底,这就是我试图通过这篇文章记录的内容:不仅仅是这款教育应用程序的开发过程,还包括在整个开发过程中所做出的各种技术决策和设计选择背后的思考与权衡。

希望这些反思能对那些正在尝试利用人工智能辅助进行软件开发的人有所帮助,尤其是在教育或以社区为中心的应用场景中。

如果你对进一步改进这款应用有任何想法,欢迎在GitHub上贡献代码或留下评论哦 :)

资源

Comments are closed.