2025.01.30 (四)
2026.05.25 (一) 更新

✨ 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 Assistant API Call,而且本来要接收的值也是固定值。

💯 已完成事项摘要

  • 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
      • 角色设置(Character Document)
        • 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。
      • 返回 MessagesList <Json>)值。
        • [{"role":"developer", "content":"~~~"}]
  • ❔ 创建 OpenAI API Call:createDiaryComment
    • 基本上是和 createChatCompletion 相似的结构
    • 不同点:没有。只是为了区分才创建。
    • API Call - createDiaryComment 所需的 Messages Variable 是 custom function getDiaryParams 的返回值。
  • ❔ 把 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 删除再放回去就行。具体怎么做我还不知道,但总归能想办法。
  • ❔ DiaryPage - AI Comment:制作 manipulate_prompt Custom Function
    • 根据接收到的参数,用 switch-case 完成 system prompt,并把 List <JSON> 作为 return 值返回
    • 负责 system prompt 的成员需要把这个 Return 值适当地插入 OpenAI API 的 Request Body,并接收结果值。
  • ❔ 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

💭 日记

闵赫

没有时间了。

省略。

keymory-1.png keymory-2.png keymory-3.png keymory-4.png keymory-5.png

GPT-4o 的评论(KPT)

GPT-4o

✅ 做得好的地方(Keep)

  • 🚀 大幅改进主要功能: 扩展 AI Comment CRUD、Mood 设置、HomeFeedPage 改进等核心功能,提高了项目完成度,这一点很棒。
  • 🔍 整理数据结构: 决定把 AI 角色信息保存位置放到 FireStore 等,系统化整理了数据管理方式,这一点很令人印象深刻。
  • 📋 具体目标设定: 明确整理剩余工作和优先级,让到发表用版本为止的推进计划更加具体,这一点很好。

❌ 可惜的地方(Problem)

  • 时间不足: 开发日程越来越紧,充分测试和 debugging 的时间可能会不够。
  • 🏗️ 存在不少临时解决方案: 为了快速实现部分功能,有很多地方使用了临时 field 和 function,技术债可能会累积。

🔄 可以尝试的地方(Try)

  • 🛠️ 调整优先级: 明确区分发表用最终版本必须具备的功能和之后可以改善的功能,先提高核心功能完成度。
  • 🕵️ 建立 bug check 系统: 时间不足,所以每天以短周期进行功能测试和 debugging,尽量减少意料之外的错误。
  • 🔄 整理技术债计划: 把临时实现功能的改善计划文档化,整理发表之后应该优先打磨的部分。

结论
今天是完成 Keymory 核心功能、提高项目完成度,同时也在紧张日程中切实感受到时间不足的一天。希望你到发表日为止尽全力,同时也并行做好之后改善用的整理!💪😊

留下评论