[🛠] Keymory 开发日志 #6:ChatPage 优化,DiaryPage 整合
✨ GPT 的摘要
优化 ChatPage 的数据加载和 Action,追加 Title 与日期 CRUD 功能,并整合 DiaryPage 的 Create/Edit 结构的一天。解决多个问题的同时提升了系统稳定性。
💻 开发日志
⏰ 今天要做的事
- ✅ DiaryPage:Merge CreateDiary/EditDiary Page
- 使用 isEditMode page state
- 使用 conditional value/visibility/action 等
- ✅ ChatPage:On Page Load -> Read ChatDoc, CharacterDoc, MessageDocList and Update Page States
- ✅ ChatPage:整体优化并重组各种 Action
- ✅ ChatPage:Title CRUD
- ✅ ChatPage:日期 CRUD
- ✅ (问题)ChatPage:第一次开始对话时,会出现 default init message。
- ✅ (问题)ChatPage - ChatHistoryDrawer:UI 溢出
- ✅ (问题)ChatPage:即使用户消息为空也会发送
💯 已完成事项摘要
- ChatPage 功能优化
- 优化 On Page Load 时的数据加载(ChatDoc, CharacterDoc, MessageDocList)
- 整体优化并重组 ChatPage 的主要 Action
- 追加 Title 与日期 CRUD 功能
- 解决 ChatHistoryDrawer UI 溢出和用户空消息发送问题
- DiaryPage 改进
- 整合 CreateDiary/EditDiary Page(使用 isEditMode page state)
- 修正日记日期保存错误
🎯 以后要做的事
点击查看详情
- ❔ (问题)DiaryPage:日期总是保存为今天
- ❔ (问题)DiaryPage:使用 markdown viewer(防止溢出:Container Height)
- ❔ (问题)HomeFeedPage:On page load 时 Unexpected Null Value 短暂出现后消失。
- ❔ HomeFeedPage - FeedCardDiary:修正 AI Comment 角色图片
- ❔ DiaryPage - AI Comment:Save 时,也把撰写评论的角色 Ref 保存到 Diary。
- ❔ HomeFeedPage - FeedCardDiary - AI Image:用 Backend Query 加载角色 Doc,并指定 Image Path。
- ❔ DiaryPage - Create New Chat:基于日记内容创建 New Chat
- ❔ OpenAI API Call 实现:createDiaryComment
- Input:Diary Content, System Prompt(AI Comment)
- Output:AI Comment($.choices[0].message.content)
- ❔ OpenAI API Call 实现:createDiarySummary
- Input:Diary Content, AI Comment, System Prompt(Diary Summary)
- Output:Diary Summary($.choices[0].message.content)
- ❔ OpenAI API Call 实现:createChatFromDiary
- Input:Diary Summary, System Prompt(Chat From Diary)
- Output:New Chat Message by AI($.choices[0].message.content)
- Additional Actions:Create New Chat, Create New Message
- ❔ OpenAI API Call 实现:createDiaryComment
-
❔ ChatPage:Go to Linked Diary
- ❔ HomeFeedPage - import 后应用 flutter_slidable:4.0.0
-
❔ HomeFeedPage:在 FeedCardDiary 左右 slide 时聊天/编辑/删除
- ❔ ChatPage:用户对话输出内容右对齐
-
❔ Chat/Diary:GPT Streaming API
- ❔ ChatPage - 实现 AI 先开口(Alarm/Notification)
- 聊天系统 prompt 的核心是主动性。
- 想做得更真实的话,也可以传递 diary/chat 的 create_date,这样提到“昨天”之类的日期会更自然。
- Alarm 功能实现参考
- 聊天系统 prompt 的核心是主动性。
- ❔ 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:完成 CRUD
- ❔ 删除 tmp_ai_comment field,改用 doc_ref
- ❔ DiaryPage - AI Comment:角色设置
- ❔ 删除 tmp_ai_comment_by field,改用 doc_ref
- ❔ 用 profile_image field 值输出图片
-
❔ DiaryPage - Drawer - ChatHistoryListTile:order by updated_time
- ❔ ChatPage - Create New Diary:基于对话内容创建 New Diary
- ❔ OpenAI API Call 实现:createDiaryFromChat
- Input:Chat Summary, System Prompt(Diary From Chat)
- Output:New Diary(Title, Content, Mood score)
- ❔ OpenAI API Call 实现:createDiaryFromChat
-
❔ DiaryPage - import 后应用 Interactive Slider
-
❔ HomeFeedPage:实现 Search Diary 功能
- ❔ CalendarPage(上方)- Mood Calendar
- ❔ 可以确认按日期写成的帖子数量
- ❔ 点击日期后移动到对应日期
- ❔ CalendarPage(下方)- Mood stats
- ❔ 输出关于当前聚焦月份的统计资料
- ❔ 输出 AI 对所显示统计资料的评论
- ❔ 输出关于当前聚焦月份的统计资料
-
❔ AuthPage:实现 Google Login 功能
- ❔ 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)
- ❔ 到
2025.2.5 周三为止,提取并安装发表用最终版本 APK
💭 日记
晚上本来想睡 40 分钟,结果昏睡了超过 3 个小时。这样的话,还不如干脆好好休息,明天再冲。毕竟也不是站在公司存亡的岔路口上。
✨ GPT-4o 的评论(KPT)
✅ 做得好的地方(Keep)
- 🚀 ChatPage 功能优化: 改进数据加载方式、优化 Action、追加 Title 与日期 CRUD 等,整体性能得到提升,这一点很令人印象深刻。
- 🔄 DiaryPage 结构整理: 通过整合 Create/Edit 页面减少重复逻辑,让管理更容易,这一点很好。
- 🛠️ 解决多个问题: 修复 UI 溢出、空消息发送问题、日期保存错误等,提高了稳定性。
❌ 可惜的地方(Problem)
- ⏳ 疲劳累积: 本来计划短暂休息,最后却长时间昏睡,说明体力管理上有些吃力。
- 📋 功能扩展带来的维护负担: ChatPage 和 DiaryPage 的功能快速扩展,之后维护和优化可能会花更多时间。
🔄 可以尝试的地方(Try)
- 🕒 调整工作与休息的平衡: 为了避免短休息反复变成长时间断电,可以试着建立固定节奏。
- 🔍 为后续维护做整理: 将当前优化后的 ChatPage 和 DiaryPage 结构文档化,并积极使用代码注释,降低维护负担。
- 🛠️ 考虑后续扩展性: 思考如何让 API Call 与 Custom Function 结构更加模块化,减少以后追加功能和扩展时的负担。
结论
今天是全面优化 ChatPage 功能、改进 DiaryPage 结构,并解决多个问题的高产一天。不过疲劳累积可能会动摇工作日程,所以看起来需要适当休息并调整安排。希望之后也能在保持优化后的系统同时,继续考虑扩展性推进开发!💪😊
留下评论