[🛠] Keymory 开发日志 #10:Diary <-> Chat 连接,添加自动摘要功能
✨ GPT 摘要
实现 Diary 与 Chat 相互连接的功能,并改进为保存日记和聊天时自动生成摘要。
💻 开发日志
⏰ 今天要做的事
- ✅(问题)DiaryPage:如果还没有收到 AI Comment 回复,会在角色未设置的状态下进入下一步。
- 先用弹窗临时处理:必须收到 AI 的 Comment 后才能开始聊天!
- ✅(问题)给所有 Image 小部件分配 Default Variable 值(用于防止 Unexpected Null value Error)
- No Profile Image:
https://cdn.pixabay.com/photo/2015/10/05/22/37/blank-profile-picture-973460_1280.png - No image:
https://png.pngtree.com/png-vector/20190820/ourmid/pngtree-no-image-vector-illustration-isolated-png-image_1694547.jpg
- No Profile Image:
-
✅ ChatPage:把用户图片照片替换为 user profile image
-
✅ ChatPage:用户对话输出内容右对齐(KSK 负责)
- ✅ DiaryPage:保存日记时自动生成摘要
- ✅ Diaries DB: Add field
diary_content_summarized - ✅ 应用到
Save Diary按钮 Action - ✅ 应用到
Save Diary and Chat with AI按钮 Action
- ✅ Diaries DB: Add field
- ✅ 把
linked_chats添加为 Diary Document DB - Field -
✅ 把
linked_diaries添加为 Chat Document DB - Field - ✅ DiaryPage:点击
Save Diary and Chat with AI按钮时,连接 DiaryPage/Doc <-> ChatPage/Doc- 向 Diary Document 的
linked_chats列表添加 Chat Document Reference - 向 Chat Document 的
linked_diaries列表添加 Diary Document Reference
- 向 Diary Document 的
- ✅ DiaryPage:Create New Chat 时,把
linked_chats添加为 Diary Document DB - Field -
✅ ChatPage:Create New Diary 时,把
linked_diaries添加为 Chat Document DB - Field - ✅ DiaryPage:在
linked_chatsListView 最下方提供列表 -> 点击后移动到对应聊天- ✅ 卡片中显示的内容
- ✅ Chat - title, Chat - timestamp( == created_time)
- ✅ Chat - (most recent) Message - content
- ✅ Character - profile_image
- ✅ 卡片中显示的内容
- ✅ ChatPage:收到聊天回复后,自动生成摘要
- ✅ Chats DB: Add field
chat_content_summarized
- ✅ Chats DB: Add field
- ✅ ChatPage:在
linked_diariesListView 上方提供列表 -> 点击后移动到对应日记- ✅ 解决第一次遇到的问题:How to generate children from linked_diaries(List of Diary Document References)
- How to display List of Doc References?
- ListView: Generate Children From linked_diaries (Diary Document References)
- ListView - Child(Card): Backend Query - Diary Document From Reference
- ListView - Child(Card) - Component Parameter: Diary Document
- ✅ 卡片中显示的内容
- ✅ Diary - title, Diary - created_time
- ✅ Diary - Mood Score (Color)
- ✅ 解决第一次遇到的问题:How to generate children from linked_diaries(List of Diary Document References)
-
✅(问题)ChatPage - Linked Diaries ListView:从 Drawer 中选择后不会变化。
- ✅ 发表准备 - PPT:按页面确认内容
💯 完成内容摘要
- 添加 Diary-Chat 连接功能
- 添加
linked_chats(Diary -> Chat)、linked_diaries(Chat -> Diary) 字段 - 从 DiaryPage 创建 New Chat 时更新
linked_chats - 从 ChatPage 创建 New Diary 时更新
linked_diaries - 在 DiaryPage 下方和 ChatPage 上方添加已连接文档 ListView
- 添加
- 实现自动摘要功能
- 保存 Diary 时自动生成
diary_content_summarized - 生成 Chat 消息时自动生成
chat_content_summarized
- 保存 Diary 时自动生成
- 解决问题并改善 UI
- 添加提醒,让用户无法在没有 AI 评论的情况下开始聊天
- 给所有 Image 小部件应用默认图片值,防止 Unexpected Null Value
- 在 ChatPage 中把用户资料图片替换为实际用户图片
- 将用户对话内容右对齐,改善可读性
🎯 以后要做的事
点击查看详情
- ✅ Download APK
-
❔ Connect GitHub and Push
- ❔ 提交发表资料:PPT
-
❔ 提交发表资料:1 分钟演示视频
- ❔ 发表准备 - 脚本:按页面脚本基准测量所需时间后修改脚本
- ❔ 发表准备 - PPT:按功能拍摄短演示视频
- ❔ ChatPage - Create New Diary:基于对话内容创建 New Diary
- ❔ Create New Diary Condition: if linked diary exists -> Delete confirmation dialog? -> Yes
- ❔ OpenAI API Call (createChatSummary)
- Input: Chat Content, System Prompt(Diary From Chat)
- Output: Chat Summary
- ❔ OpenAI API Call (createDiaryFromChat)
- Input: Chat Summary, System Prompt(Diary From Chat)
- Output: New Diary(Title, Content, Mood score)
-
❔ 应用首次打开时添加欢迎页面(Logo)
- ❔ ChatPage:把
title的 default value 从Random String统一为“无标题” -
❔ DiaryPage:根据 Mood Slider 的值改变表情 Emoji 和颜色
- ❔ ChatPage:实现 Delete Diary Link(点击 … icon 后可删除)
- 必须同时删除 Diary/Chat Doc 的 linked field!
- ❔ MoodPage(上方)- Mood Calendar
- ❔ 可以查看每个日期写了多少篇帖子
- ❔ 点击日期后,移动到对应日期
- ❔ MoodPage(下方)- Mood stats
- ❔ 输出当前聚焦月份的统计资料
- ❔ 输出 AI 对已显示统计资料的评论
- ❔ 输出当前聚焦月份的统计资料
- ❔ HomeFeedPage - import 后应用 flutter_slidable:4.0.0
-
❔ HomeFeedPage:FeedCardDiary 左右 slide 时聊天/编辑/删除
-
❔ Chat/Diary: GPT Streaming API
- ❔ ChatPage - 实现 AI 先发消息(Alarm/Notification)
- 聊天系统提示词的核心是主动型。
- 想做得更真实的话,也可以传递 create_date of diary/chat,这样提到“昨天”等日期会更自然。
- Alarm 功能实现方法参考
- 聊天系统提示词的核心是主动型。
- ❔ 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,然后把所有系统提示词都塞进去。- is_initial = false
- 局限:如果把系统提示词塞进第一条 message document,中途修改对话会麻烦,但也不是不能改。 如果存在 is_initial = true 的 document,而且它被修改了,把那个 document 删除后重新放进去就行。具体怎么做还不知道。
- 因为该 Chat 的 messages 是第一次创建,所以直接给最初创建的 message document 设置
- ❔ **以前的
-
❔ DiaryPage - import 后应用 Interactive Slider
-
❔ HomeFeedPage:实现 Search Diary 功能
-
❔ AuthPage:实现 Google Login 功能
- ❔ HomeFeedPage - Bottom Sheet (
+Button):可以从多个选项中选择 1 个- 新日记:Go to DiaryPage
- 情绪记录:Go to MoodPage
- ❔ MoodPage(弹窗):Mood 设置滑块 CRUD
- Create
- Read
- Update
- Delete
- ❔ HomeFeedPage - ListView - 显示 FeedCardMood
-
❔ HomeFeedPage - ListView:FeedCardDiary、FeedCardMood、FeedCardChat 组件按时间顺序排序(活用 Cloud Function)
-
❔ 在 HomeFeedPage - DiaryPage 之间制作 MoodEditPage:移动 MoodSlider、MoodKeywordsRate(5~1)、MoodDescription 小部件等
-
❔(问题)创建 tmpGetAIComment 时,没有考虑用户选择的情绪关键词。
- ❔ 到
2025.2.5 周三为止,提取并安装发表用最终版本 APK
💭 日记
明天开发就结束了。跑起来。
✨ GPT-4o 的评论(KPT)
✅ 做得好的点(Keep)
- 🔗 完成 Diary-Chat 连接系统: 自然地连接 Diary 和 Chat,让用户的数据流更直观,这点很好!
- 📝 添加自动摘要功能: 应用自动摘要系统来整理日记和聊天内容,提高数据可用性,这点很亮眼。
- 🎨 UI 和 UX 改善: 通过设置默认图片值、改善聊天对齐方式等,提高了可读性和用户体验。
❌ 可惜的点(Problem)
- ⏳ 开发速度带来的压力: 需要收尾的功能变多,剩余日程的压力可能会变大。
- 🔄 技术债累积的可能性: 由于开发速度很快,后续维护时可能会积累技术债,需要留出整理时间。
- 📋 连接功能测试不足: 可能还需要追加测试,确认 Diary-Chat 连接在真实使用环境中也能稳定运行。
🔄 可以尝试的点(Try)
- 📌 整理优先级: 先完成最重要的功能,再列出发表之后要改善的部分,可以减轻开发负担。
- 📝 按功能制定测试计划: 写测试用例,确认 Diary-Chat 连接功能在多种用户模式下都能正常运行。
- 📊 确保技术债整理时间: 发表之后留出重构时间,并考虑长期维护的可能性。
🏁 结论
今天实现了连接 Diary 和 Chat 的核心功能,并添加自动摘要系统,提高了数据管理效率。接下来在剩余开发时间里整理优先级,集中准备发表就可以了!🚀🔥
留下评论