[🛠] Keymory 开发日志 #4:Mood slider, OpenAI API
✨ GPT 的摘要
改进 Keymory 的主要功能,整理 AI 联动与数据结构,同时切身体会到时间不足现实的一天。
💻 开发日志
⏰ 今天要做的事
- ✅ DiaryPage - Mood:完成 Mood 设置 slider
- ✅ HomeFeedPage - ListView - FeedCardDiary:在 Border 上显示 Mood Color
- 用 Container 的 Box Shadow 解决
- ✅ OnboardingPage:追加输入用户基本信息后保存
- ✅ 添加 DB Field:姓名(display_name)、性别(gender)、MBTI(mbti)、……
- ✅ HomeFeedPage - OnPageLoad:display_name, gender 等必填信息未输入时 Navigate to OnboardingPage
- ✅ Field Type - Enum vs String:Field Type 设置为 String 才更容易管理。决定 Enum 只在 Option Value Generation 中使用。
- ✅ 修改 OpenAI API Request -> Response body 的 message 值,使其正常输出
- ✅ 讨论与实验:AI 角色信息应该保存在哪里?(OpenAI API Assistant vs FireStore Character Collection)
- 结果:保存到 FireStore Characters Collection。
- 理由:从用户角度来看,能用到的只有
Get AssistantAPI Call,而且本来要接收的值也是固定值。
- 理由:从用户角度来看,能用到的只有
- 结果:保存到 FireStore Characters Collection。
💯 已完成事项摘要
- DiaryPage 改进
- 完成 Mood 设置 slider
- 实现 AI Comment CRUD 功能
- 添加 AI Comment 语气和建议方式自定义按钮
- 决定并应用 AI 角色信息保存方式
- HomeFeedPage 改进
- 把日期输出基准从“月”单位改成“日”单位
- 添加 AI Comment 图片和文本输出逻辑
- 改进 Bottom Sheet 和 ListView
- AI 系统与 API 联动
- 修改 OpenAI API Request,并确认 Response 正常输出
- 决定把 AI 角色信息保存到 FireStore
- 整理 AI Comment 相关数据结构并添加功能
🎯 明天要做的事
(省略)
🎯 以后要做的事
- ❔ diary to chat
- ❔ chat to diary
-
❔ chats history
- ❔ 构思 CustomFunction getDiaryParams 实现场景
- 从
Characters (Collection)获得的Parameter Values- 角色设置(
CharacterDocument)- ex) Somi:name(20 多岁)、大学生、害羞的性格,……
- 值调用方式:
API Call - Get Assistant
- 角色设置(
- 从
User Information获得的Parameter Values- 姓名、性别、MBTI
- 值调用方式:
Backend Query - Authenticated User
- 从
DiaryPage Variables获得的Parameter Values- 日记内容、细分情绪关键词、情绪数值、回答格式、回答长度
- 值调用方式:
Widget State,Page State
- CustomFunction(getDiaryParams) 的作用
- 把所有 Parameter Values 都作为 Input 值接收。
- 编写要发送给 GPT 的 prompt。
- 返回
Messages(List <Json>)值。[{"role":"developer", "content":"~~~"}]
- 从
- ❔ 创建 OpenAI API Call:createDiaryComment
- 基本上是和 createChatCompletion 相似的结构
- 不同点:没有。只是为了区分才创建。
API Call - createDiaryComment所需的MessagesVariable 是 custom functiongetDiaryParams的返回值。
- ❔ 把 system prompt 列表保存到 OpenAI API - Assistant 里?
-
❔ 基于保存在 OpenAI API Assistant 中的 system prompt 来编写 message 的逻辑?
- ❔ DiaryPage:根据 Mood Slider 值改变脸部表情 Emoji
- ❔ DiaryPage:追加细分情绪关键词 Choice Chips 后设置 DB 联动
- ❔ DiaryPage - AI Comment:把 Choice chips、mood slider 等输入值改成适合
AI Comment System Prompt的形式。- ❔ **之前的
日记或全部对话记录(临时补上的技术债) - ❔ 用户基本信息:姓名、性别、MBTI、……
- ❔ 细分情绪关键词:开心、难过、……
- ❔ 角色设置:Somi、Sena、Minhyuk
- ❔ 情绪数值:1~100 分
- ❔ 回答格式:治愈型(Healing)、建议型(Suggestion)、信息型(Informative)
- ❔ 回答长度:简短、普通、详细
- is New Chat
- 因为该 Chat 的 messages 是第一次创建,所以给第一个创建的 message document 设置
is_initial = true,然后把所有 system prompt 都塞进去。- is_initial = false
- 限制:如果把 system prompt 塞进最开始的 message document,虽然对话中途修改会比较困难,但也不是不可能。 如果存在 is_initial = true 的 document,而且它被修改了,那把那个 document 删除再放回去就行。具体怎么做我还不知道,但总归能想办法。
- 因为该 Chat 的 messages 是第一次创建,所以给第一个创建的 message document 设置
- ❔ **之前的
- ❔ DiaryPage - AI Comment:制作
manipulate_promptCustom Function- 根据接收到的参数,用 switch-case 完成 system prompt,并把
List <JSON>作为 return 值返回 - 负责 system prompt 的成员需要把这个 Return 值适当地插入 OpenAI API 的 Request Body,并接收结果值。
- 根据接收到的参数,用 switch-case 完成 system prompt,并把
- ❔ DiaryPage - AI Comment:用 dummy data 完成 CRUD
- ❔ 删除 tmp_ai_comment field,改用 doc_ref
- ❔ DiaryPage - AI Comment:角色设置
- ❔ 删除 tmp_ai_comment_by field,改用 doc_ref
- ❔ 用 profile_image field 值输出图片
- How to Use Open AI’s GPT-4o in FlutterFlow - Part 1
- How to Use Open AI’s GPT-4o in FlutterFlow - Part 2
- DiaryPage - Start AI Chat:基于日记内容创建 New Chat
- AI 先根据日记内容提出问题
- ChatPage - 创建 ChatHistoryPage:用 ListView 列出之前的聊天记录
- Create
- Read
- Update
- Delete
- DiaryPage - Drawer - 创建 ChatHistoryListTile:ChatHistoryPage 卡片摘要型(像 GPT 那样)
- HomeFeedPage - Bottom Sheet(
+Button):可以在多种选项中选择 1 个- 新日记:Go to DiaryPage
- 情绪记录:Go to MoodPage
- MoodPage(popup):Mood 设置 slider CRUD
- Create
- Read
- Update
- Delete
- HomeFeedPage - ListView:显示 FeedCardMood
- HomeFeedPage - ListView:按时间顺序排序 FeedCardDiary, FeedCardMood, FeedCardChat component(使用 Cloud Function)
- HomeFeedPage:解决 On page load 时的问题(Unexpected Null Value)
- 应用 Interactive Slider
- 到
2025.2.5 周三为止,提取并安装发表用最终版本 APK
💭 日记
没有时间了。
省略。

✨ GPT-4o 的评论(KPT)
✅ 做得好的地方(Keep)
- 🚀 大幅改进主要功能: 扩展 AI Comment CRUD、Mood 设置、HomeFeedPage 改进等核心功能,提高了项目完成度,这一点很棒。
- 🔍 整理数据结构: 决定把 AI 角色信息保存位置放到 FireStore 等,系统化整理了数据管理方式,这一点很令人印象深刻。
- 📋 具体目标设定: 明确整理剩余工作和优先级,让到发表用版本为止的推进计划更加具体,这一点很好。
❌ 可惜的地方(Problem)
- ⏳ 时间不足: 开发日程越来越紧,充分测试和 debugging 的时间可能会不够。
- 🏗️ 存在不少临时解决方案: 为了快速实现部分功能,有很多地方使用了临时 field 和 function,技术债可能会累积。
🔄 可以尝试的地方(Try)
- 🛠️ 调整优先级: 明确区分发表用最终版本必须具备的功能和之后可以改善的功能,先提高核心功能完成度。
- 🕵️ 建立 bug check 系统: 时间不足,所以每天以短周期进行功能测试和 debugging,尽量减少意料之外的错误。
- 🔄 整理技术债计划: 把临时实现功能的改善计划文档化,整理发表之后应该优先打磨的部分。
结论
今天是完成 Keymory 核心功能、提高项目完成度,同时也在紧张日程中切实感受到时间不足的一天。希望你到发表日为止尽全力,同时也并行做好之后改善用的整理!💪😊
留下评论