Flutter + AI 大模型实战经验分享:一个可调用多个平台多种模型的 AI 工具应用当看到大家沐浴在 AI 大模型
探索 AI 大模型的 API 使用
自从 AI 大模型风靡全球以来,我一直因为没有乘上这辆快车而有些沮丧。不仅仅是因为工作中的业务上没能强行靠上去,平日闲暇生活,也不知道错过了多少时机。有一种别人都是热火朝天、吃饱喝足、乐在其中,而我只能围观看戏,还看不明白的感觉。
不过,终于还是花了不少时间和精力,也亲自体验了一下,使用 flutter 开发了一个挂名“智能生活助手”的应用。虽然只是支持选择调用各个云平台上部署的大模型的 API来进行对话、绘图等功能,但依旧感觉把自己累到了。
不管效果如何,还是分享一下,也算是自己的一个阶段性总结,避免重蹈覆辙。
开发初衷
- 五月底各个厂商第一批次大模型接口降价时,就发现价格大都很美丽,但我始终不知道能拿来做什么。
- 平时有用到几个平台的网页版本,切来切去不是很方便。
- 我的老农父亲好像对这个话题也很感兴趣。
- 父辈老年人手机用得比我都勤,而我暂时只会初级的 flutter。
- BAT 都算是大平台,之前也有账号。
- 永久免费的 API 逐渐多了起来。
其实最主要的就是有免费的 API,我就想试试看效果怎么样,高级一点的功能因为模型级别有限,但如果当个翻译器、问个菜谱、查一下历史名人、讲两个笑话、写个文档摘要什么的,也不是不行。
艰难历程
总结起来就是:操之过急、盲目从事、瞎忙一气、收效甚微。
-
一开始就想着单纯试试百度免费的 API 就好,那个时候甚至连 AIGC 具体是啥都闹不明白,只是想着,有 API,那就发起请求、得到响应、处理响应、显示数据,done and done。
-
然后又发现好像腾讯的混元 lite 也免费了,然后又发起请求得到响应、处理响应数据、显示数据……
-
既然 BT 都有了,那 A 也要加上。千问虽然没有免费的,但那个时候“通义法睿”是免费的,一些第三方模型有限时限量免费的额度,然后又发起请求……
-
都写好了,发现好像都是聊天对话,是不是都可以放在一起?页面放在一起、请求方法放在一起、参数响应类放在一起……那不就是全都重构了?
- 那个时候,BAT 的接口参数都是各有特点,都不完全兼容现在的 open ai 的参数形式:阿里有自己的输入响应结构,腾讯的请求响应栏位是帕斯卡命名,百度的 system 参数在最外层而不是指定 message 的 role……而我在 flutter 直接调用,基本属于是前端调用,也算是用不了 SDK。大费周章之后,所谓的兼容所有 3 个平台的所有参数,其实就是把栏位全部铺满了而已。
-
当时我甚至还不知道流式响应是怎么回事,我还以为每次推送的 token 都要累加,那就是非流式可能几十个 token,流式的得几百几千了,那我肯定不舍得。
……
就这样,在基础概念都没搞明白的情况,本着 “发起请求、得到响应、处理响应、显示数据”的前端老流程,6 月底我就写出了第一个版本。那个时候到还简单,就想着这个“AI 聊天和记账”,给我老爸用用看,没想到他问的第一个问题就是“人为什么要活着?”没想到他这么有深度。紧接着又问“泡面怎么吃?”……
别的不说,他给我反馈的两个问题,一个就是字太小了不好看,还一个就是不太会打字,手写也好慢。我算是听进去了:这玩意儿说不定老爸能用上。
后来,我偶尔有用到各个平台大模型的网页版,发现除了对话,还有什么文档处理,图片处理,文本绘图,文生视频什么的,我就觉得现在大模型能做的事情,大概也就这些了,别的先不管,我先实现这些 API 的调用,能跑个结果出来,以后能做什么,谁知道呢?
就这样,由于这时想的就是支持多个平台上的多个模型随意调用,那就按照功能划分,按照平台分组,按照模型分类,在“每天都觉得昨天的代码需要重构”的指导下,终于开发了一个大概原型的 app。
应用简介
更多详情,请访问 Github 上 Sanotsu/swmate 了解。
1. 智能助手工具
总体上来讲,非常简陋,主体思想是尽可能多地支持可调用 API。
- 目前(2024-09-06)是兼容了百度、腾讯、阿里、智谱 AI、零一万物、SiliconFlow、讯飞 7 个平台的 92 个大模型(含重复) 的 API 调用
- 但打包好的 apk 直接可用的是 5 个平台(除了阿里、零一万物)的 21 个免费的大模型,用的我的密钥。
- 如果想使用全部模型,可自行去各个平台充值、获取密钥,在“平台密钥”页面添加指定栏位
- 密钥只缓存在本地,事实上,除了调用 API 和加载图片、视频,都没有联网操作
- 仓库代码是开源的,不必害怕如果用自己的密钥,会泄露了被别人蹭
- 目前根据模型的种类分为了一下 8 个模块
- 虽然有的多模态模型功能不是单一了,但为了兼顾其他仅单一的模型,可能会重复出现在不同的功能页面中
- 支持自定义管理系统角色,用于语言模型、文生图提示词等
- 点击项次可以查看详细、修改,右上角也可以新增、导入 json 文件。
- system prompt 写得好,在智能对话中可能有更好的效率。
- 模型列表可只保留想用的模型,没有充值的平台或者觉得效果差、费用高的模型可以移除,避免误选
- 聊天类的页面支持语音(转文字)输入
- 其实是调用讯飞的语音听写 API,先将语音转为文字,再把文字作为参数调用大模型 API
- 也会保留语音原文件在设备本地缓存,所以可以在聊天对话框中播放
- 目前也是我的讯飞平台有 50000 次试用到明年 8 月份,好像本身每天有 500 次免费额度。
- “智能聊天”就是最简单的聊天对话,一问一答,选定使用的平台和模型
- “智能多聊”就是可以选择多个模型来回答问题,一问多答,可以比较不同模型的回答效果
- “文档解读”和“图片解读”是可以上传指定格式的文档/图片,对文档/图片进行解读
- 解析上传的文档和大模型无关,是我找到工具库,把文档提取了“纯文本”,再把提取出的文本喂给了语言对话模型,效果可能一般。
- 图片解读就是直接调用的“vision”类视觉模型的 API,比较直接。
- “文本生图”就是最常规的,根据输入文字绘制图片。
- 目前有阿里的通义万相、智谱的 CogView、讯飞的图片生成、SiliconFlow 中的几个限免模型
- “创意文字”实际只有阿里云平台的“锦书”,支持“文字纹理”、“文字变形”、“百家姓氏生成”
- “图片生图”就跟根据参考图结合文本描述,绘制图片。
- 目前只有 SiliconFlow 中的几个限免模型
- “文生视频”就是根据文本生成无声视频。
- 目前只有智谱的 CogVideoX,时长 6 秒。
为什么不加上 GPT、Claude 等国际模型
- 不能直接访问,网络受限,普通使用者还有翻墙的成本
- 就算找到中转,也不敢保证不会跑路
- 本土化不够好(英文水平不行可能发挥不了最佳效果)
- 羊驼够便宜,效果也还行
- 主要还是贵
2. 生活日常工具
日常工具目前有“极简记账”和“随机菜品”。
极简记账:
- 图 1:每天的支出收入信息。
- 默认是显示当前月份的数据,上下滚动会切换月份。
- 右上角“搜索”按钮,可以对所有的记录进行关键字搜索,可以看到相关关键字条目的记录,但不会进行相关统计。
- 长按 主页的收支记录项次,可以对其进行删除。
- 双击 主页的收支记录项次,可以对其进行修改。
- 图 2:点击右上角“加号”按钮,可以添加一条新的支出记录。
- 图 3: 点击右上角“条状图”按钮,可以进入统计图表页面。
- 目前仅支持简单的按月和按年的柱状图和分类饼图显示。
- 点击月份和年份下拉按钮,可以切换月份和年份。
- 图 4:支持指定结构的账单 json 文件导入,但会覆盖掉已经存在的数据
随机菜品:
给不知道每天吃什么的选择困难症患者,指一条参考选项:随机选择一道菜。
如果你关于吃什么,已经习惯了:随便、不知道、好麻烦、你做主、看运气 等说法,不妨试一试。
当然,最后是点外卖还是自己做甚至选了依旧不吃,还是看自己的决定。
- 主体是一个转盘,可以选择餐次和重新生成随机菜品。
- 点击转盘即可开始旋转,3 秒后停止,显示结果,旋转时按钮都不可点击。
- 点击选中结果可以跳转到该菜品详情页。
- 如果菜品详情有视频地址,可以打开对应 url;
- 如果菜谱有上传图片(仅支持单张本地图片和使用相机拍照),可以缩放查看。
- 核心还是菜品的数量,点击上方 "menu" 图标进入菜品列表。
- 点击上方“upload”图标可以导入指定格式的菜品 json 文件
- 当然,也可以自行一个个手动添加菜品
模型效果的主观对比
虽然一开始只想用免费的 API,但为了兼容性,且各个平台也有新注册试用的额度,可以非常主观地说一下各个模型的效果
语言模型
- 同样是轻量级模型(Lite/Tiny/Spark/Flash……)
- 智谱 AI 的 GLM-4-Flash 有后发优势,可以开启联网搜索
- yi-spark、hunyuan-lite、ernie-lite/tiny 会承认不知道的问题,并提供一些其他获取答案的渠道
- 讯飞星火 Lite 虽然也有联网的功能(auto),但可能会胡说八道。
- 同样中量级的模型(Standard/Plus/Medium/部分 pro、3.5、turbo 等)
- 结合价格,个人比较常接受 Qwen 和 Ernie3.5 的内容
- 最顶最贵的模型(Max/Large/部分 Pro、4.0)
- 结合价格,个人比较能接受 yi-large-rag 和 GLM-4 的内容
当然,单纯是免费的模型来调的话,GLM-4-Flash
、Qwen2-开源版7B-Instruct
、Llama3.1-8B-Instruct
用的比较多
文本生图
目前有
- 阿里云上的通义万相、Flux.1-dev、Flux.1-schnell、Flux.1-merge,
- siliconFlow 的 Flux.1-schnell、SD3、SD2.1、SDXL、SDXL Turbo、SD XL lighting、SD Turbo
- 智谱 AI 的 CogView-3-plus、CogView-3
- 讯飞的图片生成
个人觉得效果最好的还是 Flux,效果可能比智谱的CogView还要好些。其中阿里云的 Flux 支持中文,比 siliconFlow 要方便些。
CogVideoX生成视频的话,感觉还是他们的预览作品更好看一点。
经验教训
磨刀不误砍柴工
AI大模型到底是个啥都没分清楚,虽然说到底只是调用个API
一开始我连那个流式输出都没细看,还以为每次追加的都算一次 token 的累计,害得我只想直出
都几乎忘记了 flutter 的语法,直接就新开一个项目就边做边学,看看 AI 帮忙,走了不少弯路
要做什么、做成什么样子、怎么去做,根本都没有考虑清楚,浪费了不少时间。
合理的规划,知道自己要干什么
大体的心路历程是这样的:
- -> 单纯想试一下百度免费轻量级的 API 调用输出效果
- -> 支持多个平台的多个对话模型
- -> 每个 API 请求响应都写个类,写了很多类,最后又还是想着复用,浪费了很多时间
- -> 不止对话,还想看 vison 的、tti、ttv 等
- -> 觉得需要保留对话的记录,不同的记录一开始规划不对,实现方式不一样,想复用就很难,存入本地数据库
- -> 开始尝试付费的平台和模型,对比不同的模型效果
- -> 每天都觉得昨天的代码不太好,每天都觉得昨天的代码可以重构、需要重构,然后真的在重构,也不见得好
- -> 到最后,我都不知道是想要做个啥,最后的最后,还是变成了一个问答对话聊天结构
没有规划,没有设计,没有原型图,不知道要做什么,所以到最后感觉自己废了好多力气,历经千辛万苦,成品效果也就那样,不美观也不很实用。
虽然去年的 Free-Fitness 也是说干就干,但还知道自己要做个啥,一步一步走。这个却是走一步看一步,体验完全不一样。
接受自己的作品平庸,也接受自己的平庸
- 好在是自己写的,所以就算烂也没法转接给别人,还可以安慰自己用其实还行
- 但看了看别人的成品之后,相形见绌,更觉得自己浪费了很多时间
- 开始思考这几个月的时间是不是白白浪费了
- 走过的弯路,那也是路,这次很草率地开始,很狼狈地结束,也是一次良好的经验教训
- 虽然相比之下没达到预期,但也可以不是结束,以后想要什么,还可以自己添加
- 没有半途而废,就算在过程中或者结果出来之后,觉得它不够好,但这都比半途而废强
不过说起来,日常使用确实也是在桌面端用得更多一点,像这样单独弄个 App,还没有什么亮点,也确实没有吸引力。
但花费了几个月就这样结束了还是有点不甘心,还是希望诸君好心人,能够不吝提出一些宝贵建议: Github Sanotsu/swmate,十分感谢。
最后,感谢垂阅。
转载自:https://juejin.cn/post/7411099504026058752