一个包含极简的记账、幸运转盘随机菜品,和简单的 AI 对话、文生图、图像理解等功能的 flutter 应用。
-
2024-06-27
v0.1.0-beta.1
- 基本完成了极简记账的核心功能;
- 基本完成了极简 AI 文本对话的核心功能;
- “文本对话-官方免费”部分整合了百度、腾讯、阿里几个免费使用的大模型 API;
- “文本对话-单个配置”需要自行配置百度、腾讯、阿里的应用 ID 和 KEY,使用自己的付费 API;
- “文本生图-通义万相”需要自行配置阿里云百炼平台的应用 ID 和 KEY;
- “图像理解-Fuyu8B”使用百度千帆平台的 Fuyu-8B 在线服务,需要自行配置百度千帆平台的应用 ID 和 KEY;
- 添加幸运转盘获取随机菜品的功能;
- 用户设置页面中可将应用内部数据完全的备份还原。
- 一开始只是单纯想开发一个极其简单的自用本地记账的 app。
- 但 2024 年 5 月底国内大模型开启价格战,有了一大批免费使用的 API,就临时继续在该项目上测试一下效果。
- 后来发现经常问答有点帮助,就修改了项目定位,改为生活助手类,并整合了之前写好的随机菜品的功能。
- 随机菜品功能,可以随机生成一个菜品,并给出菜品的详细介绍。为了解决整天不知道吃什么的问题。
- 后续可能会再添加一些自己需要的小功能,逐步形成一个完整的可能带有 AI 功能的生活助手应用。
仅仅简单调用百度、腾讯、阿里平台的部分大模型 API,具体功能还在思考当中。
- 图 1:目前有考虑文本对话、文生图、图生文的试用;
- 图 2:“文本对话-官方免费”部分整合了百度、腾讯、阿里几个免费使用的大模型 API;
- 3 个平台五六个模型可切换使用;
- 图 3:右上角“最近”会保留最近的对话记录,存入本地的 sqlite 中;
- 图 4:“文本对话-单个配置”需要自行配置百度、腾讯、阿里的应用 ID 和 KEY(见图 8),使用自己的付费 API;
- 就算使用自己付费的模型,模型 API 目前我还没有兼容几个;
- 图 5:“文本生图-通义万相”使用阿里云的通用万相绘制图片,也会留存最近的文生图记录;
- 文本生图需要自行配置阿里云百炼平台的应用 ID 和 KEY;
- 图 6:可以点击进行预览,长按进行保存;
- 生成的图片默认放在阿里云的 OSS,过期时间为 1 天;
- 图 7:“图像理解-Fuyu8B”可以对传入的图片进行理解,并回复相关问题,英文更佳;
- 使用百度千帆平台的 Fuyu-8B 在线服务,需要自行配置百度千帆平台的应用 ID 和 KEY;
- 图 8:在“智能助手”首页右上角可以一次性配置某个平台的应用 ID 和 KEY,需要相关平台的功能才能使用。
极度简单的支出流水账记录,虽然名字是记账,但实际上就是一些流水账,然后简单的统计图表。
- 图 1:每天的支出收入信息。
- 默认是显示当前月份的数据,上下滚动会切换月份。
- 右上角“搜索”按钮,可以对所有的记录进行关键字搜索,可以看到相关关键字条目的记录,但不会进行相关统计。
- 长按 主页的收支记录项次,可以对其进行删除。
- 双击 主页的收支记录项次,可以对其进行修改。
- 图 2:点击右上角“加号”按钮,可以添加一条新的支出记录。
- 图 3 和图 4:点击右上角“条状图”按钮,可以进入统计图表页面。
- 目前仅支持简单的按月和按年的柱状图和分类饼图显示。
- 点击月份和年份下拉按钮,可以切换月份和年份。
这个其实是之前(2024-04-09)就单独开发好的 app 了,功能融合,就直接复制到这里来。
给不知道每天吃什么的选择困难症患者,指一条参考选项:随机选择一道菜。
如果你关于吃什么,已经习惯了:随便、不知道、好麻烦、你做主、看运气 等说法,不妨试一试。
当然,最后是点外卖还是自己做甚至选了依旧不吃,还是看自己的决定。
如下图:
- 主体是一个转盘,可以选择餐次和重新生成随机菜品。
- 点击转盘即可开始旋转,3 秒后停止,显示结果,旋转时按钮都不可点击。
- 点击选中结果可以跳转到该菜品详情页。
- 如果菜品详情有视频地址,可以打开对应 url;如果菜谱有上传图片(仅支持单张本地图片和使用相机拍照),可以缩放查看。
- 当然核心还是菜品的数量,默认是文字列表显示,仅仅为了节约流量。
- 点击上方“grid”图标(第一个)可以切换到有预览图的卡片列表,如果图片大注意流量消耗。
- 在列表中点击某一个可以进入详情页(如上),长按可以删除指定菜品。
- 点击上方“upload”图标(第二个)可以导入菜品 json 文件(格式见下面相关内容,其中图片时本地图片的地址则暂未考虑)。
- 当然,也可以自行一个个手动添加菜品。
[
{
"dish_name": "回锅肉",
"description": "此菜色味俱佳,肉鲜而香,是四川省家喻户晓的传统菜,地方风味很强。",
"tags": "川菜,家常菜,肉菜,麻辣鲜香",
"meal_categories": "午餐,晚餐,夜宵",
"images": [
"http://www.djy.gov.cn/dyjgb_rmzfwz/uploads/20191014154045sde1q1ajz3d.jpg",
"https://i3.meishichina.com/atta/recipe/2019/04/18/20190418155556766674398811368081.jpg?x-oss-process=style/p800"
],
"videos": ["https://www.bilibili.com/video/BV1eA4m1L7QY/"],
"recipe": [
"原料:\n猪肉500克,蒜苗150克,化猪油40克,盐1克,郫县豆瓣50克,甜酱25克,红白酱油25克,生姜15克,葱20克,花椒10余粒。",
"作法:\n1. 把带皮的肥瘦相连的猪肉洗干净。",
"2. 锅内放开水置旺火上,下猪肉和葱、姜、花椒;将熟肉煮熟不煮𤆵;在煮肉过程中撇去汤面浮沫。蒜苗洗净切2.6厘米(约八分)长节。豆瓣剁细。",
"3. 将捞起的猪肉敞干水汽,在还有余热时切成约0.3厘米(约一分)厚的连皮肉片。",
"4. 炒锅置中火上,放入猪肉,油烧至五成热时下肉片,同事放微量盐炒均匀;炒至肉片出油时铲在锅边,相继放豆瓣、甜酱在油中炒出香味即与肉共同炒匀,然后放蒜苗合炒;蒜苗炒熟但不要炒蔫,再放酱油炒匀起锅即成。",
"附 注:\n1.在肉汤中加适量新鲜蔬菜同煮,可增加一样汤菜。",
"2.根据爱好,菜内可加豆豉炒。",
"3.如无红酱油可用白糖代替。"
],
"recipe_picture": "https://demo.image.com" // 菜谱只支持单张图片
},
{ …… }
]
后续我也会分享一下自用的菜品列表 json 文件,可以一起试用完善。
目前其实没有用户这个概念,除了调用 API 和一些网络图片,都没有需要联网的东西。
这个模块目前仅有一个"备份恢复"功能。
因为智能助手的对话记录、极简记账的账单条目、随机菜品的菜品列表,都是本地 sqlite 存储的,所以备份就是把 db 中的数据导出成压缩包,恢复就是把压缩包的 json 存入数据库中。
哦,那个更换头像纯粹自娱自乐。
注意,项目中应该有一个lib/apis/_self_keys.dart
文件,如果要自己运行项目的话注意补上。
内容如下,为 BAT 平台的应用 ID 和 KEY:
// ignore_for_file: constant_identifier_names
/// 百度的相关
const BAIDU_API_KEY = "xxx";
const BAIDU_SECRET_KEY = "xxx";
/// 腾讯的相关
const TENCENT_SECRET_ID = "xxx";
const TENCENT_SECRET_KEY = "xxx";
/// 阿里云的相关
const ALIYUN_API_KEY = "xxx";
const ALIYUN_APP_ID = "xxx";
在一个 Windows7 中使用 Visual Box 7 安装的 Ubuntu20.04 LTS 虚拟机中使用 VSCode 进行开发。
2024-05-27 使用最新 flutter 版本:
$ flutter --version
Flutter 3.22.1 • channel stable • https://github.com/flutter/flutter.git
Framework • revision a14f74ff3a (4 天前) • 2024-05-22 11:08:21 -0500
Engine • revision 55eae6864b
Tools • Dart 3.4.1 • DevTools 2.34.3
手里没有 IOS 等其他设备,所以相关内容为 0。
虽然我日常主力机为努比亚 Z60 Ultra(Android 14),但它和我之前的 Z50 Ultra 一样,无法实机开发调试,所以只有最后打包成 app 后进行使用测试。
而第二主力机是小米 6(Android 9),是 16:9 的 1080P 完整屏幕,和目前主流手记的分辨率和长 K 宽比都不一样,几乎肯定在其他的设备有一些显示上的差距,可以反馈或自行修改。
根据模型设计的思想,可以看随手记的 开发记录 文档。
- 因为自用,事前没有完整的项目规划,所以代码质量比较差。
- 许多同样逻辑的代码但写得五花八门,很多没用的组件代码块还保留,注释的代码还保留,甚至 print 都还保留。
- 智能对话
- 通义千问-VL 调用 API 未符合预期
- 一开始就只是想试一下百度的两个免费的模型 API,没有对平台和模型进行兼容性设计。
- 目前提供免费 token 的大模型和云平台有很多,这一块会继续完善。
- 其实目前大模型 token 都很便宜,但是具体能用来做什么,真的不知道。