前言
Hello 大家好我是 oil欧呦,最近在做小程序的过程中实现了一些 AI 相关的小功能,也有了自己的一些小小心得,这篇文章给大家分享一下。
最初,我预计实现 AI 学习功能会花费大量时间,但出乎意料的是,仅用了两三天就完成了。目前,我的小程序中提供了三种学习模式,如下图所示:
第一种模式是用户自行评估是否记住了卡片内容,而单选模式和复述模式则是通过 AI 实现的功能。接下来,我将详细讲解这两种模式的实现过程。
单选模式
单选模式实际上就是选择题。实现选择题的关键在于让 AI 生成一些与正确答案混淆的选项,并提供解析。我的小程序中,每张卡片分为正面和反面,正面通常是问题,反面则是答案:
在实现过程中,生成速度是一个关键因素,它主要由以下两个方面决定:
- 大模型的选择
- 上下文的长度
大模型的选择
不同的大模型在生成 token 的速度上存在差异。衡量这一速度的指标是 TPS(每秒输出 token 数) 。需要注意的是,TPS 与模型的推理能力并没有必然联系。
TPS
TPS(每秒输出 token 数) 是衡量大模型推理速度的重要指标,它直接反映了模型在单位时间内生成文本的速度。而 推理能力 则是一个更广泛的概念,它不仅包括生成速度,还涉及模型对语言的理解、生成文本的质量以及对不同任务的适应性。
高 TPS 并不一定意味着模型的推理能力全面优越。一个模型可能在生成文本时速度很快,但生成的文本质量较差,或者在处理复杂任务时表现不佳。
我之前使用的 qwen-plus
大模型的 TPS 大约为 20,这意味着每秒可以生成约二十几个字。如果选项较长,用户可能需要等待几秒钟。因此,我尝试切换到 TPS 更高且推理能力较强的模型。最近,我尝试将小程序的大模型替换为 Deepseek v3,生成速度比 qwen-plus
略快,TPS 约为 50,生成的文本质量与 qwen-plus
相差不大,可能因为我的场景相对简单。
最近,我又将模型更新为 Gemini 1.5 flash,生成速度非常快,openRouter 中介绍的 TPS 达到 211
,非常适合我这种需要快速生成的场景,生成的文本质量也相当不错。
以下是两个模型的对比图:
这里有一个可以查看和对比国内所有大模型 TPS 的网站:llmbenchmark.liduos.com/
注意点:Deepseek 的 JSON 输出模式在实际测试中无法直接生成 JSON 数组,最外层必须有一个
{key:value}
包裹,而千问的大模型则没有这个问题。大家在使用时可以注意这一点。
其他提升生成速度的优化项
-
- 减少 JSON 中 key 的长度:如果响应内容包含多个相同的
key:value
结构,可以将 key 设置为一个字符。例如,原本的 JSON 结构如下:
- 减少 JSON 中 key 的长度:如果响应内容包含多个相同的
[
{frontContent:"xxx",backContent:"xxx"},
{frontContent:"xxx",backContent:"xxx"}
]
可以简化为:
[
{f:"xxx",b:"xxx"},
{f:"xxx",b:"xxx"}
]
减少 key
的长度不会影响业务逻辑,同时减少了响应内容的长度,从而间接提升了生成速度。
- 优化 prompt,减少响应中的冗余内容:在 prompt 中明确告诉 AI 你希望生成的文本简洁明了,最好还能限制最大字数,以确保生成的文本长度适中。
- 只生成混淆选项,不生成已有选项:假设我们需要基于一个正确答案生成三个混淆选项,只需告诉 AI 正确答案并生成混淆选项即可。在业务逻辑中,我们可以将正确选项随机插入到生成的结果中,而不必让 AI 生成完整的选项列表,这样可以减少生成的内容量。
- 提前生成,优化等待效果:在用户回答当前问题时,我会预加载下一题的选项,但只加载一题,以避免 AI 调用次数过多。如果等待时间较长,可以设计一个好看的动画,让等待过程不那么枯燥。
复述题
复述模式的核心是让 AI 对比用户回答内容与正确答案的相似度,并进行评分:
用户可以通过手动输入或语音输入两种方式回答问题。我使用的是官方提供的同声传译插件,使用起来非常简单。如果你对实现语音输入功能感兴趣,可以参考我的这篇文章:🤔uniapp 小程序如何实现语音输入功能?
除了评分外,AI 还会给出评分的原因以及改进建议,语气比较亲和,让用户感觉像有一位小老师在指导。
总结
这是我第一次调用 AI 相关的 API 来实现答题相关逻辑。之前实现的生成卡片功能为我打下了一些基础,封装了大部分 AI 请求。在实现这个需求的过程中,我发现不同模型和 prompt 的效果差异非常大。期间,小程序的模型从千问切换到 DeepSeek,再到 Gemini。这还只是在小程序中实际接入的模型,实际体验过的模型还包括豆包、moonshot、文心等,但由于理解能力差、生成速度慢或调用成本高,最终都被我淘汰了。
其实体验 AI 也是挺好玩的,带着自己的需求,不断去发掘一些高性价比,更加契合自己使用场景的大模型,再实际结合到自己的产品中,实现一个优秀的体验效果,整个过程是蛮有成就感的。后续我也会在学习卡盒小程序中融入更多 AI 相关的功能,并且尝试把现有的 AI 功能体验再打磨打磨,也欢迎大家搜索小程序体验一下,后续有了新的想法再给大家发文介绍。
如果文章对你有帮助,欢迎点赞关注,respect~